ZhuiyiTechnology/roformer
ZhuiyiTechnology/roformer has 1,166 GitHub stars and 66 forks. GitHot measured -1 stars in 24 hours and +1 in 7 days. Last checked 2026-11-12 05:45 UTC. Last push 2022-03-21.
Comment ces chiffres sont mesurés
Rotary Transformer
Progression mesurée des étoiles
- in 24h
- -1
- in 7 days
- +1
- in 15 days
- Historique en cours
- in 1 month
- Historique en cours
Variations nettes sur des périodes qui se chevauchent, pas des totaux quotidiens. Les mesures absentes restent vides. Les étoiles indiquent l’intérêt, pas la qualité.
README.md
OriginalRotary Transformer
Rotary Transformer is an MLM pre-trained language model with rotary position embedding (RoPE). The RoPE is a relative position encoding method with promise theoretical properties. The main idea is to multiply the context embeddings (q,k in the Transformer) by rotation matrices depending on the absolute position. One can prove that the inner product of the context embeddings will become only depending on the relative position. EleutherAI also posted a blog that contains an intuitive explanation and experiments about RoPE.
To the best of our knowledge, RoPE is the only relative position embeddings that can be used in linear attentions. For more details, please refer to our paper or the original Blog (Chinese). EleutherAI also posted a blog that contains an intuitive explanation and experiments of using RoPE in various models.
Dependency
bert4keras 0.10.4
Implementation
You can implement the RoPE with a few lines of changes in the self-attention layer. Here we provide the pseudo code for instruction.
sinusoidal_pos.shape = [1, seq_len, hidden_size] # Sinusoidal position embeddings
qw.shape = [batch_size, seq_len, num_heads, hidden_size] # query hiddens
kw.shape = [batch_size, seq_len, num_heads, hidden_size] # key hiddens
cos_pos = repeat_elements(sinusoidal_pos[..., None, 1::2], rep=2, axis=-1)
sin_pos = repeat_elements(sinusoidal_pos[..., None, ::2], rep=2, axis=-1)
qw2 = stack([-qw[..., 1::2], qw[..., ::2]], 4)
qw2 = reshape(qw2, shape(qw))
qw = qw * cos_pos + qw2 * sin_pos
kw2 = K.stack([-kw[..., 1::2], kw[..., ::2]], 4)
kw2 = K.reshape(kw2, K.shape(kw))
kw = kw * cos_pos + kw2 * sin_pos
# Attention
a = tf.einsum('bjhd,bkhd->bhjk', qw, kw)
Or you can find the implementation in source code of bert4keras.
Download
- chinese_roformer_L-12_H-768_A-12.zip
- chinese_roformer_L-6_H-384_A-6.zip
- chinese_roformer-char_L-12_H-768_A-12.zip
- chinese_roformer-char_L-6_H-384_A-6.zip
- chinese_roformer-gpt-char_L-12_H-768_A-12.zip
- chinese_roformer-sim-char_L-12_H-768_A-12.zip
- chinese_roformer-sim-char_L-6_H-384_A-6.zip
- chinese_roformer-sim-char-ft_L-12_H-768_A-12.zip
- chinese_roformer-sim-char-ft_L-6_H-384_A-6.zip
Other Implementations
A pytorch implementation can be found here
x-transformer, GPT-Neo, GPT-NeoX and mesh-transformer-jax by EleutherAI
Citation
Bibtex:
@misc{su2021roformer,
title={RoFormer: Enhanced Transformer with Rotary Position Embedding},
author={Jianlin Su and Yu Lu and Shengfeng Pan and Bo Wen and Yunfeng Liu},
year={2021},
eprint={2104.09864},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
Explorer des projets similaires
codecrafters-io/build-your-own-x
Maîtrisez la programmation en recréant de zéro vos technologies préférées.
561,972 étoilespublic-apis/public-apis
Une liste collective d'API gratuites
498,367 étoilesmorluto/rea
Rétro-ingénierie de n'importe quoi avec des agents, du comportement des applications jusqu'aux binaires natifs.
453,692 étoilesopenclaw/openclaw
L'IA qui fait vraiment les choses. Tout système d'exploitation, toute plateforme. À la manière du homard. 🦞
394,377 étoiles