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 ์ €์žฅ์†Œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค:

git clone https://github.com/wndaasa/ko-en-translator
cd ko-en-translator && pip install torch tokenizers huggingface_hub
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)์˜ ใ€Œํ•œ๊ตญ์–ด-์˜์–ด ๋ฒˆ์—ญ ๋ง๋ญ‰์น˜(๊ธฐ์ˆ ๊ณผํ•™)ใ€ ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ•™์Šต๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น AI๋ฐ์ดํ„ฐ๋Š” ํ•œ๊ตญ์ง€๋Šฅ์ •๋ณด์‚ฌํšŒ์ง„ํฅ์›(NIA)์˜ ์‚ฌ์—…๊ฒฐ๊ณผ์ด๋ฉฐ, ์ด ๋ชจ๋ธ(2์ฐจ์  ์ €์ž‘๋ฌผ)์—๋„ ๋™์ผํ•˜๊ฒŒ ์ด๋ฅผ ๋ฐํž™๋‹ˆ๋‹ค. AIํ—ˆ๋ธŒ ๋ฐ์ดํ„ฐ ์ด์šฉ์ •์ฑ…์— ๋”ฐ๋ผ ์› ๋ฐ์ดํ„ฐ๋Š” ์žฌ๋ฐฐํฌํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ด ์ €์žฅ์†Œ๋Š” ํ•™์Šต๋œ ๊ฐ€์ค‘์น˜๋งŒ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.
  • OPUS ๊ณต๊ฐœ ๋ณ‘๋ ฌ ์ฝ”ํผ์Šค: NLLB, CCMatrix, OpenSubtitles, ParaCrawl โ€” ๊ฐ ์ฝ”ํผ์Šค์˜ ์› ๋ผ์ด์„ ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support