ALMA-Jaの日英・英日翻訳性能をGoogleやMetaの最新多言語機械翻訳モデルと比較する

アプリケーション

1.ALMA-Jaの日英・英日翻訳性能をGoogleやMetaの最新多言語機械翻訳モデルと比較するまとめ

・最近リリースされた超多言語翻訳モデルであるMADLAD 400、SeamlessM4T V2、Gemini proと自作の機械翻訳モデルALMA-Ja-V2と比較してみた
・タスク/分野/サイズを限定すれば小規模開発モデルであってもGAFAのモデルとも十分互角に戦う事が出来るという事実を確かめる事ができた
・更にMadlad 400とSeamless m4tの解説、使い方、注意点、サンプルコード、サンプルColab、翻訳可能な言語、音声翻訳出力例などをご紹介

2.MADLAD 400、SeamlessM4T V2、Gemini proとALMA-Jaの日英・英日翻訳性能を比較

本投稿はあるふ(@alfredplpl)さん主催の生成AI Advent Calendar 2023の企画に参加させて頂いており、その21日目です。

当初、本記事では最近、様々な日本語と英語の両方に対応した高性能な大規模言語モデルが公開されているので、それらのモデル間で翻訳性能を比較し、私がリリースしたモデルであるALMA-Jaの今後の開発方針の際の参考にさせて頂こうと思っていました。

しかし、出力形式を守ってくれない問題が解決できず、スコアの計測が困難なので断念しました。

具体的にはプロンプトで「以下の英文を日本語に翻訳してください。翻訳結果のみを出力してください」と指示しても「承知しました。英語から日本語への翻訳結果は以下の通りです。~」等、前後に余分な文章が含まれてしまう割合が多く、想定以上に出力結果を手で見直して整形する必要が出てきたのです。

かなりプロンプトエンジニアリングを頑張っても以下のような余計なお世話出力を完全に抑制する事はできなかったです。

承知しました。日本語から英語への翻訳結果は以下の通りです
ただし、ローマという地名は、日本人にとってあまり馴染みのない場所であるため、ここでは「イタリア」と置き換えて回答しました。

なお、この出力フォーマットを守ってくれない問題は、翻訳タスクに限った事ではなく、あらゆるベンチマークで問題になっています。

例えば「妥当な選択肢は1か2のどちらかを選びなさい。回答は1か2いずれかです。数字のみを出力しなさい」と指示した時に「1」のみを正解とするか「1です」も正解とするか否かでスコアが全く変わってきてしまうのです。

まぁ、ほとんどのモデルはそもそも翻訳をタスクとして学習していないのと、私の方でも各モデル毎にパラメータやプロンプトを最適化する事もできなかったので、この状態で翻訳能力を比較しても実体に近い性能比較とは言い難いでしょう。

翻訳特化モデルであれば翻訳特化モデルと競うべきでしょう。

という事で、胸を借りるつもりで直近発表された超大企業群の最先端の機械翻訳特化モデルと戦ってみようぜ!というのが今回の企画趣旨となりました。

・・・

アナウンサー:「まずは2023年9月に発表されたGoogleの200言語以上に対応した超多言語機械翻訳モデルMADLAD 400の登場だ!」

アナウンサー:「次はMeta(Facebook)の100言語以上に対応し、文章間だけではなく音声間、文章→音声、音声→文章の翻訳にも対応したSeamlessM4T、しかも2023年12月に発表されたばかりの第二世代のV2だ!」

アナウンサー:「更に更に! chatGPTの対抗馬として満を持して登場したGoogleの新AI、これからの時代はGemini!Gemini Era!という事でGemini pro apiさんにも現在年内までのお試し無料期間中という事で特別ゲスト枠で来ていただきました!」

アナウンサー:「まさにSotA(State-of-the-Art)、最先端のオープンウェイトな機械翻訳モデル、そうそうたるメンバーです。」

アナウンサー:「さぁ、解説のdahara1さん、今日は注目のGoogleのMADLAD 400が登場しましたね。200言語以上の翻訳に対応しているとは驚異的です!」

dahara1: 「本当にその通りですね。発表当初から注目度は高かったのですが、最近、使いやすい形式に移植してくれた方がいたので徐々にユーザーも増えてきており、性能の高さを褒めるコメントをみかけるようになってきています。しかし、競合モデルも負けてはいませんよ。」

アナウンサー: 「そうですね、MetaのSeamlessM4T V2も注目されています。特に文書だけでなく音声翻訳も出来るとか。」

dahara1: 「はい、Metaは元々NLLB-200というこれも200言語以上に対応した超多言語対応機械翻訳モデルをGoogleに先んじて公開しており、オープンウェイトな多言語対応機械翻訳モデルとして有名でした。そのノウハウを元に構築されたSeamlessM4T、しかもV2はV1より更に性能が向上しているという事で期待大です。今日のバトルは非常にハイレベルですね。」

アナウンサー: 「そして、GoogleのGemini pro apiも無料期間中という事で特別ゲストとして参加ですね。これもまた楽しみです!」

dahara1: 「はい、Geminiは論文の共同執筆者として記載されている人数を数えると1000人近いという事でも話題になっていましたが、まさに王者Googleの威信をかけた一大プロジェクトです。翻訳特化型モデルではないとはいえ、相当な性能が期待できます。」

アナウンサー: 「そして挑戦者の立場であるALMA-Jaシリーズは如何でしょうか?」

dahara1: 「そうですね、小規模開発の場合、予算の制約が非常に大きいですからね。大規模な組織であればAとBとCでどの手法が一番良いのか、何故、その手法を選ぶべきなのかをしっかりと見極めた上で開発する事ができますが、ALMA-Jaシリーズは不動産業界などで伝統的に良く使われるKKD(経験と勘と度胸)メソッドに頼らざるを得ない部分が大きかったですね。そんな状況の中、どこまで上位に食い込めるかといったところでしょう」

アナウンサー: 「今日はまさにオープンウェイトな機械翻訳の未来がかかったバトルです。どのモデルも最高のパフォーマンスを見せてくれるでしょう。」

・・・

そして結果発表!

The FLORES-200 Evaluation Benchmark結果

英日翻訳 日英翻訳
BLEU chrF2++ comet BLEU chrF2++ comet
ALMA-Ja-V2 23.71 33.9 0.8820 37.41 63.1 0.8873
C3LT(開発中の次期ALMA-Ja) 28.13 37.0 0.8953 30.24 58.8 0.8776
Gemini pro 29.08 38.3 0.9009 26.00 57.1 0.8725
Seamless m4t v2 large 18.03 28.4 0.8238 19.74 44.8 0.7069
Madlad400 3b 24.55 36.0 0.8939 27.81 58.4 0.8764

英日翻訳においてはgemini proがトップです。
そして日英翻訳においては我が目を疑ったのですが、なんとWebbigdataがリリースしたALMA-Ja-V2がトップ!

えぇ~、これ本当!?

今回の投稿にリリースが間に合わなかったC3LT(手法を少し変えたのとALMA-Jaは私が特に断りなくALMAから名前を借りてる状態なので念のため次期ALMA-Jaはリブランド予定)では英日翻訳性能と日英翻訳性能をバランスよく向上させる事が出来ず、日英翻訳スコアがALMA-Ja-V2より下がってしまう現象に難航しているのですが、やっぱりALMA-Ja-V2の日英翻訳性能は他モデルと比べても高い事が裏付けられました。

意外な結果になりましたが、小規模開発でもタスク/分野/サイズを限定すればGAFAと、世界と、十分互角に戦う事が出来るという事実には勇気づけられるのではないでしょうか?

ALMA-Ja-V2はTwitter上ではイイネ、リツイートなどで応援してくださった方が多いのですが、日本国内からはほぼ反響無しです。しかし、北欧や南アジアなど海外から問い合わせはあったので、日英翻訳ニーズや機械翻訳モデルニーズは意外に高いのかもしれません。

自己所有のパソコンで動く軽量安価な翻訳モデルが実現出来たら日本産のコンテンツが世界進出する際の障壁を大きく下げる事が出来るので、コンテンツ作成者に対して多少は貢献するAIになれるのかな、とも考えているのですが、果たしてどこまで行けますかね。

話は戻りますが、madlad400もseamless m4t v2も対応言語が桁違いに多い多言語翻訳モデルで、日英翻訳/英日翻訳だけで判断するのは少しもったいないので以下で改めてご紹介。

MADLAD 400とは?

実はMADLAD-400自体はクリーンにした400言語以上を含む多言語のデータセットの名称であって機械翻訳モデルではありません。

MADLAD-400を使って学習させたらより大規模なモデルとも競合可能な性能を持つ200言語以上に対応した高性能機械翻訳モデルが出来たのでオープンソースとして利用できるように無料公開しましたよ!というお話です。

Googleが公開してくれたのは2023年9月なのですが、私の知る限り、私も含めてこのモデルを誰も動かす事が出来なかったと思われます。

動かすためのコードも公開されたのですが特にセットアップ方法に関する説明はなくGoogle内製ライブラリを使っているようにみえる箇所などもあり、興味を持っている人は沢山いたようなのですが、動かす事が出来なかったのです。

しかし先月、jbochiさんという方がモデルをhuggingfaceのTransformers形式に変換してくれたので、ようやく沢山の人が動かせるようになったという経緯です。

madlad 400を使った機械翻訳モデルは5モデルあります。今回評価したモデルは一番小さい3B(30億パラメーター)版なのですが、3Bでもファイルサイズが11.8 GBあります。

11.8 GBとはllama2ベースのモデルであれば7Bクラスでしょうか。なお、madlad 400 7Bは33.2GBなのでllama2 13B(26GB)より大きいのです。8Bは34.5GB、10Bは42.86GBです。7Bは逆翻訳を取り入れて改良した版も出ています。

残念な事に、直近のアップデートでColab無料版はハイメモリ版のランタイムが選択できなくなりました。システムメモリ12.7GBの標準ランタイムしか選択できず、その結果、3Bモデルであってもモデルを読みこむ際にシステムメモリ不足でクラッシュするので無料版Colabでは動かす事ができません。

前述のjbochiさんがサイズを圧縮した量子化版も何点か作ってくれているので、それを使えば、無料版Colabでも動かす事が出来るかもしれませんが、この量子化版は広く使われているllama.cppではなくてCandleというRustで書かれたML frameworkで動かす事が前提のモデルであり、まだ試せていません。

MADLAD 400をローカルPCで動かすためのサンプルコード、MADLAD 400が翻訳に対応している言語とその言語コード一覧、jbochiさんが作成したColabを末尾と関連リンク先に記載しておきます。

SeamlessM4T v2とは?

Metaは元々、多言語翻訳モデルに力を入れており、NLLB-200という超多言語対応機械翻訳モデルをリリースしていました。このNLLB-200で培った技術を元に文章だけではなく音声の翻訳にも対応して無料で公開してくれたのがSeamlessM4Tです。

出来る事
・音声から音声へ直接翻訳(S2ST:Speech-to-speech translation)
・音声から文章へ直接翻訳(S2TT:Speech-to-text translation)
・文章から音声へ直接翻訳(T2ST:Text-to-speech translation)
・文章から文章へ直接翻訳(T2TT:Text-to-text translation)
・自動音声認識(ASR:Automatic speech recognition)

対応言語
・音声入力としては101言語
・文章入出力としては96言語
・音声出力としては35言語

最新版はseamless-m4t-v2-large。一世代前のv1にはSeamlessM4T-LargeとSeamlessM4T-Mediumがありましたがv2にはLargeしかないようです。HuggingFaceのTransformers library対応モデルも出ているので比較的動かしやすいです。

サイズはパラメータとしては2.3Bですが、ファイルサイズは9.24GBとやや大き目です。しかし、必要な機能だけ部分的にモデルをロードする事も出来るので省力化が可能です。文章から文章への翻訳のみだとGPUのメモリ使用量は5,596MiBくらいでした。

これだけの機能がこんな小さいモデルで出来ちゃうの!?と驚かざるを得ない凄まじい高機能モデルです。しかし、文章から文章へ直接翻訳をベンチマークしてみて気づいたのですが、大規模言語モデルで良く発生する「同じ言葉を繰り返し出力しちゃう病」にかかっています。

流暢な翻訳が出来るケースもあるのですが例えば日英翻訳だと「I’m going to put a little bit of salt in it.」という謎のフレーズがやたらめったら出力されます。そのため、総合的な翻訳ベンチマークスコアは大きく下がってしまいます。

とは言え、このサイズのモデルでの文章から音声へ直接翻訳機能はやっぱり感動的ではあります。以下で上手く翻訳できたケースを何点かご紹介しておきます。

1)日本語文章 → 英語音声出力 その1
翻訳対象文「土に根をおろし、風とともに生きよう。種とともに冬を越え、鳥とともに春を歌おう(天空の城ラピュタより)」
seamless-m4tの翻訳文章「I’m going to put my roots in the ground, and I’m going to live with the wind, and I’m going to spend the winter with the seeds, and I’m going to sing the spring with the birds.」
seamless-m4tの機械翻訳音声

2)日本語文章 → 英語音声出力 その2
翻訳対象文「その者青き衣を纏いて金色の野に降り立つべし(風の谷のナウシカより)」
seamless-m4tの翻訳文章「He’s wearing a blue robe and he’s going down to the golden field.」
seamless-m4tの機械翻訳音声

3)英語文章 → 日本語音声出力 その1
翻訳対象文「Space, the final frontier.(スタートレックより)」
seamless-m4tの翻訳文章「宇宙最後の境界線」
seamless-m4tの機械翻訳音声

4)英語文章 → 日本語音声出力 その2
翻訳対象文「R2, you take good care of Master Luke now, understand? And… do take good care of yourself. Oh dear dear…(スターウォーズより)」
seamless-m4tの翻訳文章「R2 マスター・ルークの世話をして自分を大切にして」
seamless-m4tの機械翻訳音声

これ、本当に凄いモデルと思いますが、こちらも残念ながら現在のColab無料版仕様ではすべての機能を動かす事は出来ません。
seamless m4tをローカルPCで動かすためのサンプルコード、seamless m4tが文章翻訳/音声翻訳に対応している言語とその言語コード一覧、途中までは動く公式Colabとサンプルコードを付録と関連リンク先に記載しておきます。

付録)MADLAD 400とSeamlessM4T v2のサンプルコード

MADLAD 400のサンプルコード、翻訳対象言語とその言語コード一覧


import torch

from transformers import T5ForConditionalGeneration, T5Tokenizer, GenerationConfig
model = T5ForConditionalGeneration.from_pretrained('jbochi/madlad400-3b-mt')
tokenizer = T5Tokenizer.from_pretrained('jbochi/madlad400-3b-mt')

device = 'cuda' if torch.cuda.is_available() else 'cpu'
model = model.to(device)

def trans(my_str):
    input_ids = tokenizer(my_str, return_tensors="pt").input_ids
    input_ids = input_ids.to(device)
    outputs = model.generate(input_ids=input_ids, max_new_tokens=400)
    ret = tokenizer.decode(outputs[0], skip_special_tokens=True)

return ret

my_str = trans("<2en>英語に翻訳してください")
print(my_str)

my_str = trans("<2ja>This is English.")
print(my_str)

翻訳対象文字列の前に<2xxx>というタグをつけて翻訳先言語を指示します。翻訳に対応した言語とxxxの部分(BCP-47 code)のコード一覧は下記です。200言語以上の翻訳に対応とはなっていますが、下位の言語はデータがかなり少ないので翻訳性能はそんなに期待できないのではないかなと思います。

no BCP-47 code English Name 日本語名称 chars amount(clean)
1 en English 英語 9216GB
2 ru Russian ロシア語 1843GB
3 es Spanish スペイン語 1126GB
4 fr French フランス語 1024GB
5 de German ドイツ語 1024GB
6 it Italian イタリア語 553.1GB
7 pt Portuguese ポルトガル語 499.8GB
8 pl Polish ポーランド語 356.4GB
9 nl Dutch オランダ語 334.5GB
10 vi Vietnamese ベトナム語 228.8GB
11 tr Turkish トルコ語 198.9GB
12 sv Swedish スウェーデン語 153.7GB
13 id Indonesian インドネシア語 148.3GB
14 ro Romanian ルーマニア語 148.2GB
15 cs Czech チェコ語 147.9GB
16 zh Mandarin 中国語 142.3GB
17 hu Hungarian ハンガリー語 134.9GB
18 ja Japanese 日本語 132.2GB
19 th Thai タイ語 117.6GB
20 fi Finnish フィンランド語 101.1GB
21 fa Persian ペルシャ語 96.7GB
22 uk Ukrainian ウクライナ語 95.2GB
23 da Danish デンマーク語 83.1GB
24 el Greek ギリシャ語 80.9GB
25 no Norwegian ノルウェー語 74.8GB
26 bg Bulgarian ブルガリア語 57.8GB
27 sk Slovak スロバキア語 45.7GB
28 ko Korean 韓国語 43.8GB
29 ar Arabic アラビア語 43.2GB
30 lt Lithuanian リトアニア語 41.3GB
31 ca Catalan カタロニア語 34.6GB
32 sl Slovenian スロベニア語 30.5GB
33 he Hebrew ヘブライ語 30.5GB
34 et Estonian エストニア語 28.7GB
35 lv Latvian ラトビア語 23.9GB
36 hi Hindi ヒンディー語 20.1GB
37 sq Albanian アルバニア語 12.7GB
38 ms Malay マレー語 12.5GB
39 az Azerbaijani アゼルバイジャン語 11.9GB
40 sr Serbian セルビア語 11GB
41 ta Tamil タミル語 10.6GB
42 hr Croatian クロアチア語 9.6GB
43 kk Kazakh カザフ語 8.6GB
44 is Icelandic アイスランド語 6.4GB
45 ml Malayalam マラヤーラム語 6.3GB
46 mr Marathi マラーティー語 5.5GB
47 te Telugu テルグ語 5.1GB
48 af Afrikaans アフリカーンス語 4.8GB
49 gl Galician ガリシア語 4.8GB
50 fil Filipino フィリピノ語 4.7GB
51 be Belarusian ベラルーシ語 4.6GB
52 mk Macedonian マケドニア語 4.5GB
53 eu Basque バスク語 4.3GB
54 bn Bengali ベンガル語 4.3GB
55 ka Georgian ジョージア語 3.8GB
56 mn Mongolian モンゴル語 3.5GB
57 bs Bosnian ボスニア語 3.3GB
58 uz Uzbek ウズベク語 3.3GB
59 ur Urdu ウルドゥ語 2.7GB
60 sw Swahili スワヒリ語 2.4GB
61 yue Cantonese 広東語 2.3GB
62 ne Nepali ネパール語 2.2GB
63 kn Kannada カンナダ語 2.2GB
64 kaa Kara-Kalpak カラカルパク語 2.2GB
65 gu Gujarati グジャラート語 2.1GB
66 si Sinhala シンハラ語 1.9GB
67 cy Welsh ウェールズ語 1.7GB
68 eo Esperanto エスペラント 1.7GB
69 la Latin ラテン語 1.5GB
70 hy Armenian アルメニア語 1.5GB
71 ky Kyrghyz キルギス語 1.4GB
72 tg Tajik タジク語 1.4GB
73 ga Irish アイルランド語 1.4GB
74 mt Maltese マルタ語 1.3GB
75 my Myanmar ミャンマー語 1.3GB
76 km Khmer クメール語 1.1GB
77 tt Tatar タタール語 1GB
78 so Somali ソマリ語 992.4MB
79 ku Kurdish(Kurmanji) クルド語(クルマンジ) 849.9MB
80 ps Pashto パシュトゥ語 848.9MB
81 pa Punjabi パンジャブ語 797.1MB
82 rw Kinyarwanda キニヤルワンダ語 749.1MB
83 lo Lao ラオ語 697.6MB
84 ha Hausa ハウサ語 630.2MB
85 dv Dhivehi ディベヒ語 603.1MB
86 fy W.Frisian 西フリジア語 592.3MB
87 lb Luxembourgish ルクセンブルク語 575.5MB
88 ckb Kurdish(Sorani) クルド語(ソラニ) 572.7MB
89 mg Malagasy マダガスカル語 548.5MB
90 gd Scottish Gaelic スコットランド ゲール語 526MB
91 am Amharic アムハラ語 509MB
92 ug Uyghur ウイグル語 504.6MB
93 ht Haitian Creole ハイチ クレオール語 461.5MB
94 grc Ancient Greek 古代ギリシャ語 417.8MB
95 hmn Hmong モン語 408.8MB
96 sd Sindhi シンド語 380.4MB
97 jv Javanese ジャワ語 376.1MB
98 mi Maori マオリ語 371.9MB
99 tk Turkmen トルクメン語 369MB
100 ceb Cebuano セブアノ語 357.7MB
101 yi Yiddish イディッシュ語 352.6MB
102 ba Bashkir バシキール語 320.7MB
103 fo Faroese フェロー語 314.9MB
104 or Odia(Oriya) オリヤ語 309.5MB
105 xh Xhosa コーサ語 287.3MB
106 su Sundanese スンダ語 286.7MB
107 kl Kalaallisut グリーンランド語 279.1MB
108 ny Chichewa チェワ語 277.5MB
109 sm Samoan サモア語 276.3MB
110 sn Shona ショナ語 266MB
111 co Corsican コルシカ語 265.5MB
112 zu Zulu ズールー語 257.4MB
113 ig Igbo イボ語 251.4MB
114 yo Yoruba ヨルバ語 239MB
115 pap Papiamento パピアメント語 229.9MB
116 st Sesotho ソト語 226.9MB
117 haw Hawaiian ハワイ語 214.2MB
118 as Assamese アッサム語 182.1MB
119 oc Occitan オック語 177.6MB
120 cv Chuvash チュヴァッシュ語 168.9MB
121 lus Mizo ミゾ語 167.3MB
122 tet Tetum テトゥン語 152.3MB
123 gsw Swiss German スイス ドイツ語 149.2MB
124 sah Yakut ヤクート語 148.2MB
125 br Breton ブルトン語 125.4MB
126 rm Romansh ロマンシュ語 100.2MB
127 sa Sanskrit サンスクリット語 88.8MB
128 bo Tibetan チベット語 88.7MB
129 om Oromo オロモ語 88.5MB
130 se N.Sami 北サーミ語 84.6MB
131 ce Chechen チェチェン語 67.8MB
132 cnh Hakha Chin ハカ チン語 63MB
133 ilo Ilocano イロカノ語 59.4MB
134 hil Hiligaynon ヒリガイノン語 57.2MB
135 udm Udmurt ウドムルト語 55.5MB
136 os Ossetian オセット語 50.1MB
137 lg Luganda ルガンダ語 48MB
138 ti Tigrinya ティグリニャ語 44.6MB
139 vec Venetian ヴェネツィア語 43.8MB
140 ts Tsonga ツォンガ語 38.8MB
141 tyv Tuvinian トゥヴァ語 38.5MB
142 kbd Kabardian カバルド語 36.8MB
143 ee Ewe エウェ語 32.8MB
144 iba Iban イバン語 30.5MB
145 av Avar アヴァル語 30.2MB
146 kha Khasi カシ語 30.2MB
147 to Tonga トンガ語 29.9MB
148 tn Tswana ツワナ語 29.2MB
149 nso Sepedi セペディ語 28.2MB
150 fj Fijian フィジー語 28MB
151 zza Zaza ザザ語 26.3MB
152 ak Twi ツィ語 24.8MB
153 ada Adangme アダングメ語 24.2MB
154 otq Querétaro Otomi ケレタロ・オトミ語 23.4MB
155 dz Dzongkha ゾンカ語 22.7MB
156 bua Buryat ブリヤート語 21.7MB
157 cfm Falam Chin ファラム チン語 21.5MB
158 ln Lingala リンガラ語 21.5MB
159 chm Meadow Mari メドウ・マリ語 21.3MB
160 gn Guarani グアラニ語 20.8MB
161 krc Karachay-Balkar カラチャイ・バルカール語 20.7MB
162 wa Walloon ワロン語 20.4MB
163 hif Fiji Hindi フィジー・ヒンディ語 19.1MB
164 yua Yucateco ユカテコ語 17.2MB
165 srn Sranan Tongo スラナン・トンゴ語 17MB
166 war Waray ワライ語 16.1MB
167 rom Romani ロマーニ語 15.9MB
168 bik Central Bikol 中央ビコール語 15.7MB
169 pam Pampanga パンパンガ語 15.5MB
170 sg Sango サンゴ語 15.5MB
171 lu Luba-Katanga ルバ・カタンガ語 15.4MB
172 ady Adyghe アディゲ語 14.8MB
173 kbp Kabiyè カビエ語 14.6MB
174 syr Syriac シリア語 14MB
175 ltg Latgalian ラトガリア語 13.9MB
176 myv Erzya エルザ語 13.8MB
177 iso Isoko イソコ語 13.7MB
178 kac Kachin カチン語 13.6MB
179 bho Bhojpuri ボージュプリ語 13.4MB
180 ay Aymara アイマラ語 13.1MB
181 kum Kumyk クミク語 12.4MB
182 qu Quechua ケチュア語 12.2MB
183 za Zhuang ジュアン語 12.1MB
184 pag Pangasinan パンガシナン語 12MB
185 ngu Guerrero Nahuatl ゲレーロ・ナワトル語 11.8MB
186 ve Venda ヴェンダ語 11.7MB
187 pck Paite Chin パイテ チン語 11.5MB
188 zap Zapotec サポテク語 11.4MB
189 tyz Tày タイ語 11.3MB
190 hui Huli フリ語 10.9MB
191 bbc Batak Toba バタク・トバ語 10.6MB
192 tzo Tzotzil ツォツィル語 10.6MB
193 tiv Tiv ティブ語 10.2MB
194 ksd Kuanua クアヌア語 10MB
195 gom Goan Konkani ゴア・コンカニ語 10MB
196 min Minangkabau ミナンカバウ語 9.9MB
197 ang Old English 古英語 9.8MB
198 nhe E.Huasteca Nahuatl 東ワステカ・ナワトル語 9.8MB
199 bgp E.Baluchi 東バルーチ語 9.8MB
200 nzi Nzima ナジマ語 9.4MB
201 nnb Nande ナンデ語 9.1MB
202 nv Navajo ナバホ語 9.1MB

 

SeamlessM4T v2のインストール方法とサンプルコード

pip install git+https://github.com/huggingface/transformers.git sentencepiece

現時点ではソースからコンパイルしたtransformersでなければ「cannot import name ‘SeamlessM4Tv2ForTextToText’ from ‘transformers’」とエラーになるはずなので、上記コマンドでソースからコンパイルしてインストールしましょう。transformers-4.34.0でもエラーになります。

SeamlessM4Tを使った文章→文章翻訳のサンプルコード

import torch

from transformers import AutoProcessor, SeamlessM4Tv2ForTextToText
processor = AutoProcessor.from_pretrained("facebook/seamless-m4t-v2-large")
model = SeamlessM4Tv2ForTextToText.from_pretrained("facebook/seamless-m4t-v2-large")

device = 'cuda' if torch.cuda.is_available() else 'cpu'
model = model.to(device)

def trans(my_str, src_lang, tgt_lang):
    text_inputs = processor(text=my_str, src_lang=src_lang, return_tensors="pt")
    text_inputs = {k: v.to(device) for k, v in text_inputs.items()}

    decoder_input_ids = model.generate(**text_inputs, tgt_lang=tgt_lang)[0].tolist()
    translated_text = processor.decode(decoder_input_ids, skip_special_tokens=True)
    return translated_text

my_str = trans("英語にしてください", "jpn", "eng")

SeamlessM4Tの文章→音声翻訳のサンプルコード。cudaを使うとコアダンプしてしまう事があったので避けています。

import numpy as np
import torch
import scipy

from transformers import AutoProcessor, SeamlessM4Tv2ForTextToText
processor = AutoProcessor.from_pretrained("facebook/seamless-m4t-v2-large")
model = SeamlessM4Tv2ForTextToText.from_pretrained("facebook/seamless-m4t-v2-large")

def trans(my_str, file_name, src_lang, tgt_lang):
    text_inputs = processor(text = my_str, src_lang=src_lang, return_tensors="pt")

    audio_array_from_text = model.generate(**text_inputs, tgt_lang=tgt_lang)[0].cpu().squeeze()
    audio_np = audio_array_from_text.numpy()
    audio_np = np.int16(audio_np / np.max(np.abs(audio_np)) * 32767)
    scipy.io.wavfile.write(file_name, model.config.sampling_rate, audio_np)

my_str = trans("その者青き衣を纏いて金色の野に降り立つべし", "seamless_m4t_out_1.wav", "jpn", "eng")

以下はSeamlessM4Tv2が翻訳対象とする言語の一覧です。Spはスピーチ(音声)、Txはテキスト(文章)です。SourceにSpと書かれていたら音声データを翻訳元として利用可能、TargetにTxと書かれていたらその言語に翻訳して文章として出力可能という事です。言語はcode列の文字列で指定します。

no code language script Source Target
1 afr Afrikaans Latn Sp, Tx Tx
2 amh Amharic Ethi Sp, Tx Tx
3 arb Modern Standard Arabic Arab Sp, Tx Sp, Tx
4 ary Moroccan Arabic Arab Sp, Tx Tx
5 arz Egyptian Arabic Arab Sp, Tx Tx
6 asm Assamese Beng Sp, Tx Tx
7 ast Asturian Latn Sp
8 azj North Azerbaijani Latn Sp, Tx Tx
9 bel Belarusian Cyrl Sp, Tx Tx
10 ben Bengali Beng Sp, Tx Sp, Tx
11 bos Bosnian Latn Sp, Tx Tx
12 bul Bulgarian Cyrl Sp, Tx Tx
13 cat Catalan Latn Sp, Tx Sp, Tx
14 ceb Cebuano Latn Sp, Tx Tx
15 ces Czech Latn Sp, Tx Sp, Tx
16 ckb Central Kurdish Arab Sp, Tx Tx
17 cmn Mandarin Chinese Hans Sp, Tx Sp, Tx
18 cmn_Hant Mandarin Chinese Hant Sp, Tx Sp, Tx
19 cym Welsh Latn Sp, Tx Sp, Tx
20 dan Danish Latn Sp, Tx Sp, Tx
21 deu German Latn Sp, Tx Sp, Tx
22 ell Greek Grek Sp, Tx Tx
23 eng English Latn Sp, Tx Sp, Tx
24 est Estonian Latn Sp, Tx Sp, Tx
25 eus Basque Latn Sp, Tx Tx
26 fin Finnish Latn Sp, Tx Sp, Tx
27 fra French Latn Sp, Tx Sp, Tx
28 fuv Nigerian Fulfulde Latn Sp, Tx Tx
29 gaz West Central Oromo Latn Sp, Tx Tx
30 gle Irish Latn Sp, Tx Tx
31 glg Galician Latn Sp, Tx Tx
32 guj Gujarati Gujr Sp, Tx Tx
33 heb Hebrew Hebr Sp, Tx Tx
34 hin Hindi Deva Sp, Tx Sp, Tx
35 hrv Croatian Latn Sp, Tx Tx
36 hun Hungarian Latn Sp, Tx Tx
37 hye Armenian Armn Sp, Tx Tx
38 ibo Igbo Latn Sp, Tx Tx
39 ind Indonesian Latn Sp, Tx Sp, Tx
40 isl Icelandic Latn Sp, Tx Tx
41 ita Italian Latn Sp, Tx Sp, Tx
42 jav Javanese Latn Sp, Tx Tx
43 jpn Japanese Jpan Sp, Tx Sp, Tx
44 kam Kamba Latn Sp
45 kan Kannada Knda Sp, Tx Tx
46 kat Georgian Geor Sp, Tx Tx
47 kaz Kazakh Cyrl Sp, Tx Tx
48 kea Kabuverdianu Latn Sp
49 khk Halh Mongolian Cyrl Sp, Tx Tx
50 khm Khmer Khmr Sp, Tx Tx
51 kir Kyrgyz Cyrl Sp, Tx Tx
52 kor Korean Kore Sp, Tx Sp, Tx
53 lao Lao Laoo Sp, Tx Tx
54 lit Lithuanian Latn Sp, Tx Tx
55 ltz Luxembourgish Latn Sp
56 lug Ganda Latn Sp, Tx Tx
57 luo Luo Latn Sp, Tx Tx
58 lvs Standard Latvian Latn Sp, Tx Tx
59 mai Maithili Deva Sp, Tx Tx
60 mal Malayalam Mlym Sp, Tx Tx
61 mar Marathi Deva Sp, Tx Tx
62 mkd Macedonian Cyrl Sp, Tx Tx
63 mlt Maltese Latn Sp, Tx Sp, Tx
64 mni Meitei Beng Sp, Tx Tx
65 mya Burmese Mymr Sp, Tx Tx
66 nld Dutch Latn Sp, Tx Sp, Tx
67 nno Norwegian Nynorsk Latn Sp, Tx Tx
68 nob Norwegian Bokmål Latn Sp, Tx Tx
69 npi Nepali Deva Sp, Tx Tx
70 nya Nyanja Latn Sp, Tx Tx
71 oci Occitan Latn Sp
72 ory Odia Orya Sp, Tx Tx
73 pan Punjabi Guru Sp, Tx Tx
74 pbt Southern Pashto Arab Sp, Tx Tx
75 pes Western Persian Arab Sp, Tx Sp, Tx
76 pol Polish Latn Sp, Tx Sp, Tx
77 por Portuguese Latn Sp, Tx Sp, Tx
78 ron Romanian Latn Sp, Tx Sp, Tx
79 rus Russian Cyrl Sp, Tx Sp, Tx
80 slk Slovak Latn Sp, Tx Sp, Tx
81 slv Slovenian Latn Sp, Tx Tx
82 sna Shona Latn Sp, Tx Tx
83 snd Sindhi Arab Sp, Tx Tx
84 som Somali Latn Sp, Tx Tx
85 spa Spanish Latn Sp, Tx Sp, Tx
86 srp Serbian Cyrl Sp, Tx Tx
87 swe Swedish Latn Sp, Tx Sp, Tx
88 swh Swahili Latn Sp, Tx Sp, Tx
89 tam Tamil Taml Sp, Tx Tx
90 tel Telugu Telu Sp, Tx Sp, Tx
91 tgk Tajik Cyrl Sp, Tx Tx
92 tgl Tagalog Latn Sp, Tx Sp, Tx
93 tha Thai Thai Sp, Tx Sp, Tx
94 tur Turkish Latn Sp, Tx Sp, Tx
95 ukr Ukrainian Cyrl Sp, Tx Sp, Tx
96 urd Urdu Arab Sp, Tx Sp, Tx
97 uzn Northern Uzbek Latn Sp, Tx Sp, Tx
98 vie Vietnamese Latn Sp, Tx Sp, Tx
99 xho Xhosa Latn Sp
100 yor Yoruba Latn Sp, Tx Tx
101 yue Cantonese Hant Sp, Tx Tx
102 zlm Colloquial Malay Latn Sp
103 zsm Standard Malay Latn Tx Tx
104 zul Zulu Latn Sp, Tx Tx

3.ALMA-Jaの多言語翻訳性能をGoogleやMetaの最新機械翻訳モデルと比較する関連リンク

1)arxiv.org
SeamlessM4T: Massively Multilingual & Multimodal Machine Translation
MADLAD-400: A Multilingual And Document-Level Large Audited Dataset

2)github.com
google-research / madlad_400
seamless_communication/m4t
facebookresearch / flores (The FLORES-200 Evaluation Benchmark for Low-Resource and Multilingual Machine Translation)
huggingface / candle (Rust用の機械学習フレームワーク madlad400の量子化モデルを動かすために使う)
SeamlessM4T-v2用のドキュメント

3)huggingface.co
jbochi/madlad400-3b-mt
facebook/seamless-m4t-v2-large

4)colab.research.google.com
v2_seamless_m4t_hugging_face.ipynb (seamless_m4t用 Colab 無料版では動かない)
madlad-3b-mt safetensors.ipynb (MADLAD 400用のColab 無料版では動かない)

5)adventar.org
生成AI Advent Calendar 2023

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