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