| --- |
| 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 โ ๊ฐ ์ฝํผ์ค์ ์ ๋ผ์ด์ ์ค๋ฅผ |
| ๋ฐ๋ฆ
๋๋ค. |
| |