ko-en-translator / README.md
Imsbee's picture
clone ๋””๋ ‰ํ„ฐ๋ฆฌ๋ช… ์ˆ˜์ •
202a772 verified
|
Raw
History Blame Contribute Delete
5.69 kB
---
language:
- ko
- en
pipeline_tag: translation
library_name: pytorch
tags:
- translation
- korean
- seq2seq
- minrnn
- mingru
- document-translation
- from-scratch
license: apache-2.0
---
# minRNN Koโ†”En Translator (268M) โ€” ๋ฌธ์„œ/๋ฌธ๋งฅ ๋‹จ์œ„ ๋ฒˆ์—ญ
PyTorch๋กœ **๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ์ง์ ‘ ๊ตฌํ˜„**ํ•œ ํ•œ๊ตญ์–ดโ†”์˜์–ด ๋ฒˆ์—ญ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. ์–ดํ…์…˜ ๋Œ€์‹  **minGRU ์„ ํ˜•
์ˆœํ™˜(minRNN)**์„ ์“ฐ๋Š” ์ธ์ฝ”๋”-๋””์ฝ”๋” seq2seq๋กœ, ํ•™์Šต์€ ๋ณ‘๋ ฌ ์Šค์บ”์œผ๋กœ ๋ณ‘๋ ฌํ™”๋˜๊ณ  ๋””์ฝ”๋”ฉ์€ ์Šคํ…๋‹น
O(1)ยท๋ฉ”๋ชจ๋ฆฌ O(L)์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๋ฌธ์žฅ์„ ๋ฌธ๋งฅ ์œˆ๋„์šฐ๋กœ ๋ฌถ์–ด ํ†ต์งธ๋กœ ๋ฒˆ์—ญํ•˜๋Š” **๋ฌธ์„œ ๋ชจ๋“œ**๋ฅผ
์ง€์›ํ•ฉ๋‹ˆ๋‹ค โ€” ๋ฌธ์žฅ๋ณ„ ๋ฒˆ์—ญ์—์„œ ํ”๋“ค๋ฆฌ๋Š” ์šฉ์–ดยท๋Œ€๋ช…์‚ฌยท๋ฌธ์ฒด ์ผ๊ด€์„ฑ์„ ๋ฌธ๋งฅ์œผ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
*A 268M-parameter Koreanโ†”English translation model implemented from scratch in PyTorch.
Encoder-decoder seq2seq using minGRU linear recurrence (minRNN) instead of attention โ€”
parallel-scan training, O(1)/step decoding. Supports document-level translation by encoding
a window of sentences jointly (k-to-k decoding), keeping terminology and style consistent
across sentences.*
- **์ฝ”๋“œ/๊ตฌํ˜„**: https://github.com/wndaasa/ko-en-translator
- **์•„ํ‚คํ…์ฒ˜**: minRNN seq2seq โ€” d_model 1024, enc/dec ๊ฐ 8์ธต, d_ff 4096, heads 16, vocab 32K (๊ณต์šฉ BPE)
- **positional embedding ์—†์Œ**(์ˆœํ™˜์ด ์œ„์น˜๋ฅผ ๋‹ด๋‹น) โ†’ max_len์„ ๋ฐ”๊ฟ”๋„ ๊ฐ€์ค‘์น˜ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ
## ํฌํ•จ ๋ชจ๋ธ
| ๊ฒฝ๋กœ | ์šฉ๋„ | ํ•™์Šต | ์ง€ํ‘œ |
|---|---|---|---|
| `doc-paper/best.pt` | **๋…ผ๋ฌธ/๊ธฐ์ˆ ๋ฌธ์„œ ๋ฌธ์„œ๋ชจ๋“œ koโ†’en (๊ถŒ์žฅ)** | ๋ฌธ์žฅ ์‚ฌ์ „ํ•™์Šต โ†’ AI Hub ๊ธฐ์ˆ ๊ณผํ•™ 60,483ํŽธ(179K ๋ฌธ๋งฅ ์œˆ๋„์šฐ) ํŒŒ์ธํŠœ๋‹ | val ppl **2.5**, ๋ฌธ์„œ๋ชจ๋“œ BLEU **35.46** |
| `sentence-base/best.pt` | ๋ฒ”์šฉ ๋ฌธ์žฅ ๋‹จ์œ„ koโ†”en (์–‘๋ฐฉํ–ฅ) | OPUS(NLLBยทCCMatrixยทOpenSubtitlesยทParaCrawl) 17M์Œ | val ppl 12.6, koโ†’en BLEU ~26 |
| `tokenizer.json` | ๊ณต์šฉ ByteLevel BPE (32K, ๋ฐฉํ–ฅ ํƒœ๊ทธ ํฌํ•จ) | โ€” | โ€” |
## ์‚ฌ์šฉ๋ฒ•
๊ฐ€์ค‘์น˜๋Š” ์ž๊ธฐ์™„๊ฒฐํ˜• ์ฒดํฌํฌ์ธํŠธ(`model`/`config`/`arch`)์ด๋ฉฐ, ๋ชจ๋ธ ์ฝ”๋“œ๋Š” GitHub ์ €์žฅ์†Œ์—์„œ
๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค:
```bash
git clone https://github.com/wndaasa/ko-en-translator
cd ko-en-translator && pip install torch tokenizers huggingface_hub
```
```python
import torch
from huggingface_hub import hf_hub_download
from src.minrnn import MinRNNConfig, MinRNNSeq2Seq
from src.tokenizer import load_tokenizer
from src.data import CONTEXT_SEP
from src.translate import greedy_translate, greedy_translate_context
REPO = "Imsbee/ko-en-translator"
device = "cuda" if torch.cuda.is_available() else "cpu"
ckpt = torch.load(hf_hub_download(REPO, "doc-paper/best.pt"), map_location=device)
model = MinRNNSeq2Seq(MinRNNConfig(**ckpt["config"])).to(device).eval()
model.load_state_dict(ckpt["model"])
tok = load_tokenizer(hf_hub_download(REPO, "tokenizer.json"))
# ๋ฌธ์„œ ๋ชจ๋“œ: ๋ฌธ์žฅ๋“ค์„ CONTEXT_SEP("\x1f")๋กœ ์ด์–ด ๋ถ™์—ฌ ์ž…๋ ฅ, k๋ฌธ์žฅ โ†’ k๋ฌธ์žฅ ๋ฒˆ์—ญ
doc = CONTEXT_SEP.join([
"๋ณธ ์—ฐ๊ตฌ์—์„œ๋Š” ํ™”ํ•™ ์žฌํ™œ์šฉ ๊ธฐ์ˆ ์˜ ๊ณต์ •์„ ๋ถ„์„ํ•˜์˜€๋‹ค.",
"์ด ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.",
])
print(greedy_translate_context(model, tok, doc, device, target_lang="en"))
# ๋‹จ์ผ ๋ฌธ์žฅ ๋ชจ๋“œ (sentence-base/best.pt ๋Š” ์–‘๋ฐฉํ–ฅ: target_lang="ko"๋„ ๊ฐ€๋Šฅ)
print(greedy_translate(model, tok, "ํ•œ ๋ช…์˜ ํ™˜์ž๊ฐ€ ๋ถ€๋ถ„ ๋ฐ˜์‘์„ ๋ณด์˜€๋‹ค", device, target_lang="en"))
```
## ํ•™์Šต ๋ฐ์ดํ„ฐยท๊ณผ์ •
1. **๋ฌธ์žฅ ์‚ฌ์ „ํ•™์Šต**: OPUS moses(NLLB, CCMatrix, OpenSubtitles, ParaCrawl) ์ •์ œยท์ „์—ญ ์ค‘๋ณต์ œ๊ฑฐ
16.99M์Œ, ์–‘๋ฐฉํ–ฅ(koโ†”en), max_len 128.
2. **๋ฌธ๋งฅ ํŒŒ์ธํŠœ๋‹**: ๋ฌธ์„œ ๊ฒฝ๊ณ„๋ฅผ ๋ณด์กดํ•œ ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ๋กœ ์—ฐ์† ๋ฌธ์žฅ์„ `<eos>` ๊ตฌ๋ถ„์ž๋กœ ๊ฒฐํ•ฉ
(vocab ๋ฌด๋ณ€๊ฒฝ), AI Hub '๊ธฐ์ˆ ๊ณผํ•™' ํ•œ์˜ ๋…ผ๋ฌธ 60,483ํŽธ โ†’ 179,136 ๋ฌธ๋งฅ ์œˆ๋„์šฐ, koโ†’en ๋‹จ๋ฐฉํ–ฅ,
max_len 640. RTX 4090 24GB ํ•œ ์žฅ์œผ๋กœ ํ•™์Šต.
์ •์„ฑ ์ƒ˜ํ”Œ (doc-paper):
| ํ•œ๊ตญ์–ด | ๋ชจ๋ธ ์ถœ๋ ฅ |
|---|---|
| ํ•œ ๋ช…์˜ ํ™˜์ž๊ฐ€ ๋ถ€๋ถ„ ๋ฐ˜์‘์„ ๋ณด์˜€๋‹ค | one patient showed a partial response |
| ์ด ํ™”ํ•™ ์žฌํ™œ์šฉ ๊ธฐ์ˆ ์˜ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค | The process of this chemical recycling technology is as follows |
| ๊พธ์ค€ํ•œ ๊ตฌ๊ฐ• ๊ฑด๊ฐ• ๊ด€๋ฆฌ ์Šต๊ด€ ํ˜•์„ฑ์ด ์ค‘์š”ํ•˜๋‹ค | It is important to form a steady oral health management habit |
## ์™œ minRNN์ธ๊ฐ€
268M ๋™์ผ ๋ชจ๋ธ ํฌ๊ธฐ์—์„œ ๋””์ฝ”๋” forward๋ฅผ ๊ธธ์ด๋ณ„๋กœ ์ธก์ •ํ•˜๋ฉด(batch 1), ๊ธด ์‹œํ€€์Šค์ผ์ˆ˜๋ก
ํŠธ๋žœ์Šคํฌ๋จธ(O(Lยฒ)) ๋Œ€๋น„ ๊ฒฉ์ฐจ๊ฐ€ ๋ฒŒ์–ด์ง‘๋‹ˆ๋‹ค:
| L | Transformer | minRNN |
|---|---|---|
| 128 | 1054 MB / 2.7 ms | 1038 MB / 2.4 ms |
| 1024 | 1212 MB / 12.1 ms | 1083 MB / 9.5 ms |
| 4096 | 3288 MB / 114 ms | 1239 MB / **39 ms** (๋ฉ”๋ชจ๋ฆฌ 2.65ร—, ์†๋„ 2.9ร—) |
## ํ•œ๊ณ„
- ๋ฌธ์„œ๋ชจ๋“œ BLEU๋Š” ์งง์€ ๋ฌธ์„œ ํ‘œ๋ณธ(20๊ฐœ) ๊ธฐ์ค€ ์ฐธ๊ณ ์น˜์ž…๋‹ˆ๋‹ค(๊ธด ๋ฌธ์„œ ์ „์ˆ˜ ํ‰๊ฐ€ ๋ฏธ์‹คํ–‰).
- `doc-paper`๋Š” ๋…ผ๋ฌธ/๊ธฐ์ˆ  ๋ฌธ์–ด์ฒด์— ํŠนํ™” โ€” ๊ตฌ์–ดยท์ผ์ƒ ๋„๋ฉ”์ธ์€ `sentence-base` ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
- greedy ๋””์ฝ”๋”ฉ๋งŒ ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค(beam search ์—†์Œ).
## ํ•™์Šต ๋ฐ์ดํ„ฐ ์ถœ์ฒ˜ (Attribution)
- **๋ณธ ๋ชจ๋ธ์€ [AIํ—ˆ๋ธŒ(aihub.or.kr)](https://www.aihub.or.kr)์˜ ใ€Œํ•œ๊ตญ์–ด-์˜์–ด ๋ฒˆ์—ญ ๋ง๋ญ‰์น˜(๊ธฐ์ˆ ๊ณผํ•™)ใ€
๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ•™์Šต๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น AI๋ฐ์ดํ„ฐ๋Š” ํ•œ๊ตญ์ง€๋Šฅ์ •๋ณด์‚ฌํšŒ์ง„ํฅ์›(NIA)์˜ ์‚ฌ์—…๊ฒฐ๊ณผ์ด๋ฉฐ,
์ด ๋ชจ๋ธ(2์ฐจ์  ์ €์ž‘๋ฌผ)์—๋„ ๋™์ผํ•˜๊ฒŒ ์ด๋ฅผ ๋ฐํž™๋‹ˆ๋‹ค.** AIํ—ˆ๋ธŒ ๋ฐ์ดํ„ฐ ์ด์šฉ์ •์ฑ…์— ๋”ฐ๋ผ ์› ๋ฐ์ดํ„ฐ๋Š”
์žฌ๋ฐฐํฌํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ด ์ €์žฅ์†Œ๋Š” ํ•™์Šต๋œ ๊ฐ€์ค‘์น˜๋งŒ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.
- OPUS ๊ณต๊ฐœ ๋ณ‘๋ ฌ ์ฝ”ํผ์Šค: NLLB, CCMatrix, OpenSubtitles, ParaCrawl โ€” ๊ฐ ์ฝ”ํผ์Šค์˜ ์› ๋ผ์ด์„ ์Šค๋ฅผ
๋”ฐ๋ฆ…๋‹ˆ๋‹ค.