日英・英日機械翻訳モデルALMA-7B-Ja-V2の公開

モデル

1.日英・英日機械翻訳モデルALMA-7B-Ja-V2の公開まとめ

・先日公開した日英・英日機械翻訳モデルALMA-7B-Jaの性能を更に向上したV2を公開
・70億パラメーターモデルだがMETA社の540億パラメーターモデルに近い性能を達成
・量子化を行いサイズを縮小したGPTQ版の性能もかなり向上し、より扱いやすくなった

2.日英・英日機械翻訳モデルALMA-7B-Ja-V2とは?

2023年12月追記 GoogleのGemini proが公開され、現在はAPIが無料利用可能なためベンチマークを更新しました

ALMA-7B-Jaは最近話題のchatGPTが使っているAIテクノロジー(LLM:大規模言語モデル)を使って学習させた日英・英日機械翻訳用のAIモデルです。chatGPTのように多様な機能を学習させるのではなく、翻訳機能に特化させる事で専門性を高める事を狙っています。

先日、前バージョンである日英・英日機械翻訳AIモデルALMA-7B-Jaを公開したのですがまだまだ改善できる点が沢山ある事がわかっており、どうしても更に性能を改善してみたくなりました。そのため、短期間で実現可能な改善とデータセットの整備を行って性能を底上げした版がALMA-7B-Ja-V2です。本モデルはllama2ライセンスでの公開となるため、自由に商用利用可能です。

ALMA-7B-Ja-V2は性能が一段階底上げされていますが、ファイルサイズは前回モデルと同程度(3.9GB~13.5GB)に留めているため、一般消費者向けのGPU付きパソコンで実用的な速度で動かせる事が特徴です。

ALMA-7B-Ja-V2のベンチマーク結果

ALMA-7B-Ja-V2ではベンチマークをしっかり行い、モデルの現在の性能を明確化する事を試みました。

主観評価ですと、日英・英日に限るとMeta社の超多言語翻訳モデルであるNLLB-200や多言語で且つ音声とテキスト間の翻訳を同時に扱えるSeamlessM4Tと同等程度の性能を達成していると感じています。NLLB-200の540億モデルはデータセンター用の最先端GPUであるA100が6台以上なければ実用的な速度で動かす事は出来ない程の巨大なモデルであるため、一般消費者向けのミドルスペックパソコンで実用的且つ同程度の性能が出せた事は大きな成果と思います。

しかし、現在の最高峰AIモデルやLLMベースではない一線級の機械翻訳モデル群とはまだ1歩~2歩くらいの差がある事も感じており、今回、そこを数値で明確化しています。

今回は3種類のベンチマーク結果を元に比較していますが、まずは各ベンチマークの説明から。

(1)BLEU(Bilingual Evaluation Understudy)
翻訳テキストが元のテキストにどれだけ似ているかを評価する指標です。翻訳モデルの性能を評価する際に一番使われている指標と思います。しかし、単語の出現頻度だけを見ているため、語順の正確さや文の流暢さを十分に評価できないという弱点があります。

(2)chrF++/chrF2++(character n-gram F-score)
文字の組み合わせの一致度と語順に基づいて、翻訳の正確さを評価する指標です。主にアジア系言語の翻訳評価に有効と言われています。弱点としては、長い文章の評価にはやや不向きであることが挙げられます。F2は訳漏れに対してより多くペナルティを課す版です。

(3)comet(Cross-lingual Optimized Metric for Evaluation of Translation)
機械学習モデルを使って翻訳の品質を自動的に評価するツールです。人間の主観的評価に近いと言われていますが、機械学習ベースであるため、元々のモデルが学習に使ったデータに評価が大きく依存するという弱点があります。

ALMA-7B-Ja-V2のFLORES200ベンチマークスコア

Model Name file size 英日 chrf++/F2 英日 comet 日英 chrf++/F2 日英 comet
ALMA-7B-Ja-V2-GPTQ-Ja-En 3.9GB -/33.0 0.8818 -/62.0 0.8774
ALMA-Ja-V2 13.48GB -/33.9 0.8820 -/63.1 0.8873
ALMA-Ja-V2-Lora 13.48GB -/33.7 0.8843 -/61.1 0.8775

META社の200言語以上に対応した多言語機械翻訳モデル NLLB 200のFLORES200ベンチマークスコア

Model Name file size 英日 chrf++/F2 英日 comet 日英 chrf++/F2 日英 comet
NLLB-200-Distilled 600M 2.46GB 23.6/- 50.2/-
NLLB-200-Distilled 1.3B 5.48GB 25.4/- 54.2/-
NLLB-200 1.3B 5.48GB 24.2/- 53.6/-
NLLB-200 3.3B 17.58GB 25.2/- 55.1/-
NLLB-200 54B 220.18GB 27.9/33.2 0.8908 55.8/59.8 0.8792

※NLLB-200 54Bは翻訳文を公開してくれているのでchrF2++/cometで再計測して掲載。その他のモデルは公開情報を転載。cspBLEU(spm-200)はベンチマーク環境を再現できなかったため未掲載

参考)前回モデル(ALMA-7B-Ja)FLORES200ベンチマークスコア

Model Name file size 英日chrf++/F2 英日comet 日英chrf++/F2 日英comet
webbigdata-ALMA-7B-Ja-q4_K_S 3.6GB -/24.2 0.8210 -/54.2 0.8559
ALMA-7B-Ja-GPTQ-Ja-En 3.9GB -/30.8 0.8743 -/60.9 0.8743
ALMA-Ja 13.48GB -/31.8 0.8811 -/61.6 0.8773

参考)Gemini pro APIのFLORES200ベンチマークスコア

Model Name file size 英日chrf++/F2 英日comet 日英chrf++/F2 日英comet
Gemini Pro -/38.3 0.9009 -/57.1 0.8725

 

ALMA-7B-Ja-V2を様々なジャンルの文章で現在のトップレベル翻訳ツールと比較した結果は以下です。

政府の公式文書

英日chrF2++ 英日BLEU 英日comet 日英chrF2++ 日英BLEU 日英comet
ALMA-7B-Ja-V2-GPTQ-Ja-En 25.3 15.00 0.8848 60.3 26.82 0.6189
ALMA-Ja-V2 27.2 15.60 0.8868 58.5 29.27 0.6155
ALMA-7B-Ja-V2-Lora 24.5 13.58 0.8670 50.7 21.85 0.6196
SeamlessM4T 27.3 16.76 0.9070 54.2 25.76 0.5656
gpt-3.5 34.6 28.33 0.8895 74.5 49.20 0.6382
Gemini Pro 38.9 31.46 0.9210 59.8 23.96 0.6221
gpt-4.0 36.5 28.07 0.9255 62.5 33.63 0.6320
google-translate 43.5 35.37 0.9181 62.7 29.22 0.6446
deepl 43.5 35.74 0.9301 60.1 27.40 0.6389

二次創作文

英日 chrF2++ 英日 BLEU 英日 comet 日英 chrF2++ 日英 BLEU 日英 comet
ALMA-7B-Ja-V2-GPTQ-Ja-En 27.6 18.28 0.8643 52.1 24.58 0.6106
ALMA-Ja-V2 20.4 8.45 0.7870 48.7 23.06 0.6050
ALMA-7B-Ja-V2-Lora 23.9 18.55 0.8634 55.6 29.91 0.6093
SeamlessM4T 25.5 19.97 0.8657 42.2 14.39 0.5554
gpt-3.5 31.2 23.37 0.9001 0.5948
Gemini Pro 28.6 22.89 0.8789 51.0 24.58 0.6102
gpt-4.0 30.7 24.31 0.8848 53.9 24.89 0.6163
google-translate 32.4 25.36 0.8968 58.5 29.88 0.6022
deepl 33.5 28.38 0.9094 60.0 31.14 0.6124

テクニカルインタビュー

英日 chrF2++ 英日 BLEU 英日 comet 日英 chrF2++ 日英 BLEU 日英 comet
ALMA-7B-Ja-V2-GPTQ-Ja-En 33.6 21.86 0.8207 59.3 23.11 0.6250
ALMA-Ja-V2 34.8 23.15 0.8481 56.0 20.96 0.6364
ALMA-7B-Ja-V2-Lora 34.3 25.59 0.8119 57.1 24.31 0.6388
gpt-3.5 48.3 39.26 0.8793 81.4 60.95 0.6440
Gemini Pro 53.0 43.80 0.8956 67.3 33.38 0.6400
gpt-4.0 45.5 34.89 0.8822 67.2 36.26 0.6515
deepl 54.9 52.65 0.8917 73.2 43.33 0.6292
google-translate 57.7 50.80 0.8890 71.3 40.18 0.6454

法的文書

英日 chrF++ 英日 BLEU 英日 comet 日英 chrF++ 日英 BLEU 日英 comet
ALMA-7B-Ja-V2-GPTQ-Ja-En 15.8 9.53 0.8453 40.3 16.44 0.5686
ALMA-Ja-V2 18.3 9.27 0.8691 44.4 16.30 0.5801
ALMA-7B-Ja-V2-Lora 19.5 13.04 0.8554 41.6 12.87 0.5752
gpt-3.5 0.7437 0.6102
Gemini Pro 48.6 37.14 0.9044 51.4 21.23 0.5941
gpt-4.0 33.8 22.91 0.8813 49.5 21.83 0.6030
deepl 77.0 66.54 0.9481 65.7 40.25 0.6203
google-translate 13.5 8.57 0.7432 31.7 7.94 0.5856

古典文学

英日 chrF2++ 英日 BLEU 英日 comet 日英 chrF2++ 日英 BLEU 日英 comet
ALMA-7B-Ja-V2-GPTQ-Ja-En 11.8 7.24 0.6943 31.9 9.71 0.5617
ALMA-Ja-V2 10.7 4.93 0.7202 32.9 10.52 0.5638
ALMA-7B-Ja-V2-Lora 12.3 7.25 0.7076 32.5 11.14 0.5441
gpt-3.5 0.6367 69.3 46.34 0.4922
Gemini Pro 13.5 8.86 0.7340 37.2 17.88 0.5567
gpt-4.0 13.3 8.33 0.7074 44.3 23.75 0.5518
deepl 14.4 9.18 0.7149 34.6 10.68 0.5787
google-translate 13.5 8.57 0.7432 31.7 7.94 0.5856

llama.cpp(gguf)版のFLORES200ベンチマークスコア

mmngaさんが作成してくれたllama.cpp(gguf)版の全12モデルのFLORES200ベンチマーク結果です。llama.cpp版のモデルを使うと時間はかかりますがGPUがないMac等でも動かす事ができます。1タスクに絞る事で性能と量子化ビット数の関係が明確になりますね。

前回モデル

ビット数 英日 chrF2++ 英日 BLEU 英日 comet 日英 chrF2++ 日英 BLEU 日英 comet サイズ
q2_K 21.9 11.34 0.7776 51.1 21.87 0.8391 2.7GB
q3_K_S 21.8 10.99 0.7856 51.6 22.40 0.8431 2.8GB
q3_K_M 24.1 12.76 0.8166 53.7 24.12 0.8541 3.1GB
q3_K_L 23.4 12.47 0.8106 53.8 24.21 0.8532 3.4GB
q4_0 23.2 11.94 0.8161 53.7 24.48 0.8548 3.6GB
q4_K_S 24.2 12.56 0.8210 54.2 24.71 0.8559 3.6GB
q4_K_M 24.1 12.55 0.8203 54.1 24.54 0.8548 3.9GB
q5_0 23.9 12.55 0.8255 54.5 25.17 0.8562 4.4GB
q5_K_S 24.3 12.94 0.8271 54.5 25.21 0.8555 4.4GB
q5_K_M 24.4 12.95 0.8252 54.6 25.41 0.8582 4.5GB
q6_K 24.0 12.64 0.8262 54.7 25.67 0.8568 5.2GB
q8_0 24.5 13.04 0.8296 55.2 26.09 0.8584 6.7GB

今回モデル(前回比で平均7%スコアが向上しています)

chrF2++ BLEU comet chrF2++ BLEU comet サイズ
q2_K 23.2 13.12 0.8123 53.4 23.66 0.8494 2.7GB
q3_K_S 23.5 13.43 0.8198 54.2 24.87 0.8540 2.8GB
q3_K_M 25.7 14.94 0.8466 56.0 27.00 0.8631 3.1GB
q3_K_L 25.7 15.07 0.8479 55.8 26.68 0.8624 3.4GB
q4_0 25.8 15.42 0.8463 55.6 26.65 0.8613 3.6GB
q4_K_S 26.3 15.53 0.8501 56.2 27.18 0.8643 3.6GB
q4_K_M 27.0 16.08 0.8553 57.1 28.42 0.8662 3.9GB
q5_0 26.8 16.06 0.8570 56.8 28.12 0.8656 4.4GB
q5_K_S 26.7 15.69 0.8559 57.0 28.40 0.8667 4.4GB
q5_K_M 27.1 16.42 0.8567 57.3 28.76 0.8661 4.5GB
q6_K 26.7 16.05 0.8568 56.8 27.64 0.8664 5.2GB
q8_0 27.3 16.70 0.8595 57.4 28.30 0.8674 6.7GB

 

ライセンス

Llama 2ライセンス(商用利用可)とします。

オリジナルのALMAモデルはMITライセンスなのですが、微調整元のLlama2に合わせておいた方が良いであろうという判断からです。

使い方/サンプルコード

GoogleのWebサービスであるColabを使うと無料で動かす事ができます。

通常版Colabサンプル(高品質だがGPTQ版に比べると遅い)
ALMA_7B_Ja_V2_Free_Colab_sample.ipynb

GPTQ版Colabサンプル(少し品質が落ちるが高速かつ扱いやすい小さいサイズ)
ALMA_7B_Ja_V2_GPTQ_Ja_En_Free_Colab_sample.ipynb

GPTQ版を使ったテキストファイル一括翻訳のサンプル
ALMA_7B_Ja_GPTQ_Ja_En_batch_translation_sample.ipynb

前述のllama.cpp(gguf)版の比較用サンプル(CPUで実行可能)
ALMA_7B_Ja_gguf_Free_Colab_sample.ipynb

GPTQ版のサンプルコード

pip install auto-gptq==0.4.2
import torch
from transformers import AutoTokenizer
from auto_gptq import AutoGPTQForCausalLM

quantized_model_dir = "webbigdata/ALMA-7B-Ja-V2-GPTQ-Ja-En"
model_basename = "model"

tokenizer = AutoTokenizer.from_pretrained(quantized_model_dir)

model = AutoGPTQForCausalLM.from_quantized(
        quantized_model_dir,
        model_basename=model_basename,
        use_safetensors=True,
        device="cuda:0")

prompt1="Translate this from Japanese to English:\nJapanese: ファイト・クラブのルールその1。ファイト・クラブについて口にするな\nEnglish:"
input_ids = tokenizer(prompt1, return_tensors="pt", padding=True, max_length=200, truncation=True).input_ids.cuda()

# Translation
with torch.no_grad():
    generated_ids = model.generate(input_ids=input_ids, num_beams=5, max_new_tokens=200, do_sample=True, temperature=0.6, top_p=0.9)
outputs = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)
print(outputs)

prompt2="Translate this from English to Japanese:\nEnglish: - I can bring you in warm or I can bring you in cold. – Mandalorian.\nJapanese:"
input_ids = tokenizer(prompt2, return_tensors="pt", padding=True, max_length=200, truncation=True).input_ids.cuda()
with torch.no_grad():
    generated_ids = model.generate(input_ids=input_ids, num_beams=5, max_new_tokens=200, do_sample=True, temperature=0.6, top_p=0.9)
outputs = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)
print(outputs)

V2では実現出来なかった事

・ALMA-Ja-V2に追加学習(LoRA)を行って更に日英・英日翻訳性能だけを底上げする試み(ALMA-7B-Ja-V2-Lora)は思ったような性能向上に繋がらず不完全燃焼でした。
・量子化版であるALMA-7B-Ja-V2-GPTQ-Ja-Enに更に追加学習(LoRA)を行って特定のジャンルの翻訳の流暢さを向上させる試みは出力が異常になり完全に失敗しました。

LoRAは有望な解決策になり得ると考えているため今後、これの失敗原因を追究して改善に努める予定です。

今後の開発予定

ALMA-7B-Ja-V2にも伸びしろはまだまだ沢山あるので、第一線級の翻訳モデルとの差は手の届かないレベルではないと確信しています。

しかし、直近のGPU確保の難しさから、更にモデルを改良するためには何らかの形(クラウドファンディング、補助金申請、法人ユーザーへの保守・カスタマイズサービスの販売、ベストモデルの販売など)で収益基盤を作らないと資金的に息切れしてしまう可能性が高いので、V2の反響を見極めてからもう一歩作業を進めるかを検討する予定です。

3.日英・英日機械翻訳モデルALMA-7B-Ja-V2の公開関連リンク

1)arxiv.org
A Paradigm Shift in Machine Translation: Boosting Translation Performance of Large Language Models

2)huggingface.co
webbigdata/ALMA-7B-Ja-V2
webbigdata/ALMA-7B-Ja-V2-GPTQ-Ja-En
mmnga/webbigdata-ALMA-7B-Ja-V2-gguf

3)github.com
ALMA_7B_Ja_V2_Free_Colab_sample.ipynb (通常版のColabサンプル)
ALMA_7B_Ja_V2_GPTQ_Ja_En_Free_Colab_sample.ipynb (量子化版のColabサンプル)
ALMA_7B_Ja_V2_GPTQ_Ja_En_batch_translation_sample.ipynb (量子化版を使った一括翻訳サンプル)

タイトルとURLをコピーしました