ru-en-transformer / README.md
prplguyy's picture
From-scratch RU-EN Transformer: weights + code + card
476c25f verified
|
Raw
History Blame Contribute Delete
2.34 kB
---
license: mit
language:
- ru
- en
tags:
- translation
- transformer
- from-scratch
- pytorch
- russian
- english
datasets:
- Helsinki-NLP/opus-100
metrics:
- bleu
- chrf
library_name: pytorch
inference: false
---
# Russian → English Transformer (from scratch)
A compact **encoder–decoder Transformer trained from scratch** (no pretrained weights)
for Russian→English translation. Built as a learning project — the tokenizer, model,
training loop, and beam-search decoding are all hand-written.
- **Parameters:** ~11.5M
- **Architecture:** 4 encoder + 4 decoder layers, `d_model=256`, 8 heads, `d_ff=1024`,
sinusoidal positional encoding, tied input/output embeddings
- **Tokenizer:** byte-level BPE, vocab 16,000 (shared RU/EN), included as `tokenizer.json`
- **Data:** 200,000 [opus-100](https://huggingface.co/datasets/Helsinki-NLP/opus-100) RU–EN pairs
- **Training:** 60 epochs max, early-stopped ~epoch 40 (patience 5), Adam + Noam LR schedule,
label smoothing 0.1, batch size 64
## Results (held-out test split, 1,951 sentences)
| Decoding | BLEU | chrF |
|----------|:----:|:----:|
| Greedy | 25.04 | 47.07 |
| Beam-5 | **25.91** | **47.85** |
Validation BLEU was 26.96. Note that opus-100 (subtitle-derived) contains some
misaligned reference pairs, so these BLEU numbers slightly **underestimate** true quality.
## Usage
```python
# pip install torch tokenizers huggingface_hub
from huggingface_hub import snapshot_download
import sys
path = snapshot_download("prplguyy/ru-en-transformer")
sys.path.insert(0, path)
from translator import translate
print(translate("Привет, как у тебя дела сегодня?", method="beam"))
# -> "Hey, how are you doing today?"
```
The repo bundles everything needed to run inference on CPU: `model.pt` (weights),
`tokenizer.json`, and the model/decoding code (`config.py`, `model.py`, `decoding.py`,
`translator.py`).
## Limitations
Small from-scratch model: strong on everyday conversational sentences, but expect rough
edges on rare proper names, idioms, and long or technical text. English→Russian is not
supported (trained one direction only).
## Links
- 🕹️ **Live demo:** https://transformertranslaterussian2english.streamlit.app/
- 💻 **Source / training code:** https://github.com/prplguyy/transformerTranslateRussianEnglish