Weblab-10B, Qwen-7Bの機械翻訳性能

最近、日英対応大規模言語モデルや日本語が扱える多言語な大規模言語モデルが複数の会社・研究機関から公開された。

今までと同様、上記の機械翻訳性能を検証してみた。性能評価に使用したデータは以前(DAMO PolyLM-13Bの機械翻訳性能 | ぷるーふおぶこんせぷと (staka.jp))と同じ。検証環境は環境はColab Pro+を用いfloat16で読み込んだ。Promptも以前と近いものを使っているが日本語が主体のLLMと思われるrinna、StableLM Alpha、Weblabについては指示を日本語にしたプロンプトも試している[1]。

上記4種類のモデルを検証してみたがJapanese StableLM Alphaシリーズの「Japanese-StableLM-Base-Alpha-7B」[2]「Japanese-StableLM-Instruct-Alpha-7B」[3]、rinna社の日英バイリンガル大規模言語モデル「bilingual-gpt-neox-4b-instruction-sft」[4]は十分な品質が達成できなかったため表には入れていない。

本件の検証ではLLMの出力から手動で回答を抽出することは行っていない。多くの場合ルールベースで十分だった事と手動抽出が必要な場合はそもそもの翻訳品質が悪く回答抽出に意味がなかった。

モデル・条件zero shot1 shot [5]
GPT-3.5 [6]26.737.0
Qwen-7B-Chat [7]14.523.3
Weblab-10B
weblab-10b-instruction-sft [8]
11.529.6
Qwen-7B, Weblab-10B, GPT-3.5-TURBO-16KのBLEU

結果

以前の検証でほぼ同条件&1 shotの性能はLlama-2-7b-chat-hf: 20.1、Llama-2-13b-chat-hf: 33.1、PolyLM-13B: 21.5だった[9]。パラメータ数を考えるとQwen-7B、Weblab-10Bともに相応の機械翻訳性能を持っていそうである。

目検してみるとQwen-7Bは日本語の語彙が不足している印象、Weblab-10Bはhallucinationが多めの印象を受けた。機械翻訳はパラメータサイズで性能が大きく変わるので13B程度のサイズに合わせた検証を行ってみたいなと思わなくはない。

ライセンスはQwen-7BがLlama 2に近い独自ライセンス(Qwen-7B/LICENSE at main · QwenLM/Qwen-7B · GitHub)、Weblab-10BはCC BY-NCと研究用には問題なく使えるものとなっている[10]。

様々な研究機関がモデルを公開してくれるとその差異から分かることもあり非常にありがたい。Qwen-7BはMMLUはじめ様々なベンチマークの結果、Weblab-10BはGitHub – Stability-AI/lm-evaluation-harness: A framework for few-shot evaluation of autoregressive language models.を用いたJGLUEでの評価結果を載せてくれているのがうれしい。様々なタスクにおける性能はパラメータサイズや最大シーケンス長より重要な情報で可能な限り公開してもらえるとありがたいなと思う[11]。

脚注

[1] 正直、大幅な性能向上という効果は見られなかった。1 shotではほぼ効果が無く、zero shotでは日本語で指示を与えた方が良いようにも見えたがそもそものBLEUが低いため参考にはならない印象。なお、Weblab-10Bについてはfew shot部分を公式の「\n\n### 指示:\n{} \n\n### 応答:\n{}」に合わせるのは効果がありそうだった。
[2] stabilityai/stablelm-base-alpha-7b · Hugging Face
[3] stabilityai/japanese-stablelm-instruct-alpha-7b · Hugging Face
[4] rinna/bilingual-gpt-neox-4b-instruction-sft · Hugging Face
[5] 以前と同じでOpenICL、TopkRetrieverにより取得
[6] gpt-3.5-turbo-16k-0613
[7] Qwen/Qwen-7B-Chat · Hugging Face
[8] matsuo-lab/weblab-10b-instruction-sft · Hugging Face
[9] 回答を手動抽出した場合の性能はLlama-2-7b-chat-hf: 23.9、Llama-2-13b-chat-hf: 35.1、PolyLM-13B: 25.8
[10] Qwenは商用利用可能そうだが「If you are commercially using the Materials, and your product or service has more than 100 million monthly active users」や「You can not use the Materials or any output therefrom to improve any other large language model (excluding Tongyi Qianwen or derivative works thereof).」との記載がある。また、HuggingFaceのページには「If you have requirements for commercial use, please fill out the form to apply.」というフォームが用意されている。Weblab-10BはCC BY-NCなので商用利用不可
[11] モデルが公開されていれば検証はできるが正しく検証できているかは謎な部分がある。特に「それぞれのモデルで最適なプロンプト」「Few shot事例の与え方」は使ったデータにも依存するわけで開発元の公式な情報があると良いなとは思う。

Llama 2(7B, 13B chat)の機械翻訳性能

Llama 2が発表された(公式サイトはLlama 2 – Meta AI huggingfaceへはmeta-llama (Meta Llama 2) (huggingface.co))ので機械翻訳性能を検証してみた。論文によると日本語データは0.1%程度しか含まれていない[1]とのことだが機械翻訳性能はかなり高い。

性能評価に使用したデータは前回(DAMO PolyLM-13Bの機械翻訳性能 | ぷるーふおぶこんせぷと (staka.jp))と同じ。同様の条件でサンプリングして使っている。他のフリーなモデルに比べて回答部分の抽出は容易になっているがそれでも失敗することがある[2]。そのためルールベースで回答部分を抽出した結果と手動抽出した結果の2通りでBLEUを算出している。

環境はColab Pro+を用いfloat16で読み込んだ。A100 VRAM 40GBではメモリ制約が厳しいのも前回同様。結果は下表の通り。13Bモデルの性能は高く(特に最大の構成70Bであれば)ChatGPT(GPT-3.5)相当という評価は過大というわけではなさそう。

モデル・条件zero shot1 shot [3]
GPT-3.5 [4]26.737.0
Llama-2-7b-chat-hf11.620.1
Llama-2-7b-chat-hf
※手で回答抽出
13.423.9
Llama-2-13b-chat-hf19.133.1
Llama-2-13b-chat-hf
※手で回答抽出
19.135.1
Llama 2 7B/13B, GPT-3.5-TURBO-16KのBLEU

結果

話題のLlama 2を試してみた。13Bかつ1 shot設定でうまく回答が抽出できればChatGPT(GPT-3.5)に迫るレベル。プロンプトを工夫すればもう少しスコアを出せそうとも感じる。

Llama 2の事前学習トークン量は2Tとされていて日本語データはそのうち0.1%とのこと。日本語データの割合が少なくても一定の性能が出せることに驚き。絶対量としても2TB×0.1%=2G tokensであり多いと言えば多いが大量というほどでもない。7Bと13Bで大きな性能差がある事も興味深い。MPTの検証でも感じたが機械翻訳を行う場合7Bでは厳しいのかもしれない。70Bでどうなるか、特にzero shotでの性能が改善するか非常に気になるところ[5]。

Llama 2を用いた派生モデルは今後出てくるはずで日本語能力の強化バージョンも開発されるはず。すでにMeet FreeWilly, Our Large And Mighty Instruction Fine-Tuned Models — Stability AIが発表されている。(前回の感想と同じだが)フリーのLLMに期待したい。

脚注

[1] Llama 2: Open Foundation and Fine-Tuned Chat Models | Meta AI Research 論文の22ページ目
[2] 特にICL利用時に意図しない出力が続くことが多かった。公式にも書かれている通りllama/llama/generation.py at main · facebookresearch/llama · GitHubを参考にプロンプトを組み立てると改善するものと思われる。(時間が無いこともあってプロンプトチューニングは十分ではない…)
[3] OpenICL、TopkRetrieverにより取得
[4] gpt-3.5-turbo-16k-0613
[5] 4bit量子化してもA100(40GB)だと推論時にOut of Memoryになる…

DAMO PolyLM-13Bの機械翻訳性能

Alibaba、DAMO ACADEMYよりApache-2ライセンスでマルチリンガルなLLM、[2307.06018v1] PolyLM: An Open Source Polyglot Large Language Model (arxiv.org)が出ており、機械翻訳性能を評価してみた。

HuggingFaceから利用可能でDAMO-NLP-MT/polylm-13b · Hugging Faceの他、DAMO-NLP-MT/polylm-multialpaca-13b · Hugging Faceも提供されている。

論文にデータセットや構築方法の詳細な情報があるのが非常にありがたい。13Bモデル構築に要した計算リソースは32 A100 GPU (8×80G) serversで29 daysとのこと。今後の拡張として下記が予定されているとのことで非常に楽しみである。

We are continuously enhancing the capabilities of PolyLM by focusing on the following aspects:

  1. Replacement of absolute position embeddings with RoPE, as outlined in the research paper here.
  2. Expansion of window size to more than 10,000.
  3. Verification of lightweight techniques to quickly enhance multilingual quality, especially for low-resource languages.
https://huggingface.co/DAMO-NLP-MT/polylm-13b

論文ではpolylm-multialpaca-13bの方が機械翻訳性能が高そうであったが制御が難しく[1]本件試行はpolylm-13bで行っている。環境はColab Pro+を用いた。bfloat16で読み込むこととGPU側で計算[2]させないとエラーになる点に注意が必要。また、A100 VRAM 40GBではメモリ制約が厳しいため特に長いコンテキストではエラーが発生する事がある[3]。本件でもOut of memory発生時はnum_beamsなどのパラメータを調整している。

性能評価に使用したデータは前回(MPT-30B-Chat + In-Context Learningの性能 | ぷるーふおぶこんせぷと (staka.jp))と同じであり50件をサンプリングして使っている。MPT-30B同様、回答部分の抽出が難しいことがありルールベースで回答部分を抽出した結果と手動抽出した結果の2通りでBLEUを算出している。

結果は下表の通り。OSSなマルチリンガルモデルとしてはかなり性能が高い。

モデル・条件zero shot1 shot [4]
GPT-3.5 [5]26.737.0
PolyLM-13B10.621.5
PolyLM-13B
※回答部を手動抽出
14.125.8
PolyLM-13B, GPT-3.5-TURBO-16KのBLEU

BLEU的には1 shotで回答をうまく抽出できればGPT-3.5のゼロショットと同レベルの品質となっている。目検すると重要部分での訳ミスが多くGPT-3.5と比較してもBLEU以上に差が大きい印象。

パラメータ数13Bと1 GPUで動作可能&マルチリンガル&日本語対応のモデルがApache-2で利用可能というのはとてもありがたい。LLaMA v2の噂も出ていてオープンなLLM開発は盛り上がっている。この状況が続き良いものが出てほしいと強く思う。

脚注

[1] プロンプトをうまく調整できれば良いのかもだが、中国語の出力がされる、hallucinationが凄いなど正しい翻訳への誘導が難しいことが多かった。。
[2] 本件ではset_default_tensor_typeを使用したが、to.(‘cuda’)みたく明示的に飛ばしてもよいはず。
[3] torch.cuda.empty_cache()も呼びまくっている。
[4] OpenICL、TopkRetrieverにより取得
[5] gpt-3.5-turbo-16k-0613

MPT-30B-Chat + In-Context Learningの性能

MPT-30Bの性能が高いと聞いてそのChat版であるmosaicml/mpt-30b-chat · Hugging Faceの性能を検証してみた。過去の事例通り機械翻訳(英文和訳)でGPT-3.5、GPT-4と性能を比較した。結果、パラメータ数の割に高い性能を持っていることが分かった[1]。

MPT-30B-ChatのライセンスはCC-By-NC-SA-4.0 (non-commercial use only)であることに注意が必要である。Apache-2.0のMPT-30BやCC-By-SA-3.0のMPT-30B-Instructとはライセンスが異なる。

モデル / shot数 / 備考BLEU
MPT-30B-Chat / 0 shot / モデル出力のまま7.7
MPT-30B-Chat / 0 shot / ルールで回答抽出13.0
MPT-30B-Chat / 0 shot / 手で回答抽出13.8
MPT-30B-Chat / 3 shot / モデル出力のまま16.1
MPT-30B-Chat / 3 shot / ルールで回答抽出29.2
MPT-30B-Chat / 3 shot / 手で回答抽出30.9
gpt-3.5-turbo-16k-0613 / 3 shot35.3
gpt-4-0613 / 3 shot32.1
gpt-4-0314 / 3 shot36.5
MPT-30B-Chat, GPT-3.5, GPT-4+OpenICL利用時のBLEU

性能評価の方法

性能評価に使用したデータは以前(GPT-4を用いた翻訳の検証(vs GPT-3.5 vs FuguMT) | ぷるーふおぶこんせぷと (staka.jp))と同様であるが、処理時間の関係上[2]、50件をサンプリングした。

  • 英語文を日本語文に翻訳し、その性能を評価した。評価指標はBLEUで、使用したツールやtokenizerは前回と同じ(sacrebleu –tokenize ja-mecab)である。
  • データセットは外務省WEBサイトのプレスリリース(CC BY互換で利用可)のうち日本語、英語が対応しているページを利用した。評価に使用した対訳ペアは前回と同じ。2020年1月~2023年3月で月ごとに5件のプレスリリースを選択し全195件を取得、その上でさらに50件サンプリングした[3]。
  • OpenICLを用いて事例部分を取得した。RetrieverにはTopkRetriever[2101.06804] What Makes Good In-Context Examples for GPT-$3$? (arxiv.org)」を用いた。3 shotと書かれた行については全く同じデータを使っている。
  • 入力データは前回GPT-3.5/4の比較で使用したものと可能な限り合わせて作成した。プロンプトの作成はMPT-30B-Chat – a Hugging Face Space by mosaicmlを参考にしている[4]。
  • 処理時間削減のためMPT-30B-Chatは「load_in_8bit=True」で読み込んでいる。
  • MPT-30B-Chatの出力は回答部分の特定が一筋縄ではいかないことがある。複数の方法で回答部分の特定を行った。[4][5]
    • モデル出力のまま:出力をそのまま利用
    • ルールで回答抽出:正規表現を用い<|im_start|>や<|im_end|>をいくつかのパターンで指定して回答部分を取得
    • 手で回答抽出:目で見て回答部分を特定

結果とまとめ

MPT-30B-Chatは長いコンテキストに対応していることからIn-Context Learningが有効に機能する。出力から回答部分を特定することは簡単ではないが、うまくルール化することでGPT-3.5に近い性能を出すことができる。これらの処理はライブラリが対応すればよく、単純なルールでも比較的良いスコアが出せる[4]。

スコア上はMPT-30B-Chat+3 shotのICLでzero shotのGPT-3.5以上の性能が出せている。日本語に対応していてローカル環境で動くLLMとしては非常に優秀である[6]。オープンなライセンスのLLMであることから日本語能力の強化も有望そうで今後が非常に楽しみ。

脚注

[1] (最近色々言われている)GPT-3.5やGPT-4のサイズと比べるとかなり小規模。
[2] 「その他」にも書いている通り、検証するのも結構な計算リソースが必要。ICLを使ってコンテキストが長いのでしょうがない面はあるが…(3 shotではなくzero shotだとかなり速い)
[3] 一定期間ごとにサンプリングしている。
[4] 簡単に使えるライブラリが欲しい。誰か作っていそうではあるし既存の何かのライブラリでサポートされそうな気もする。
[5] ルールを追加するなどして自動化したかったが時間の関係上断念した。これらの処理は回答の特定を目的としており回答中のおかしな出力を除去したりはしていない。「手で回答抽出」は頑張ってルール化したときの最善の結果として記載している。
[6] これは本当にそう思う。
[7] 中国語など他の言語が混ざることがある、日本語としておかしな表現が出力されることがある、など印象の悪い出力が混ざることがある。これらが悪い方向に目立つのは事実。

その他

MPT-30B-Chatを検証したところGPT-4や3.5にかなり迫っている感じがあり驚いた。とはいえ、目検証をしてみるとBLEU以上の差は感じなくもなく日本語能力は十分とは言い難い[7]。機械翻訳能力だけでなく総合的なベンチマークもしてみたいところ。

検証はCloab Pro+のA100 GPU、load_in_8bit=Trueで実施した。この環境でもコンテキストが長い(7000文字)場合は5-10分の処理時間が必要だった。公式の説明通りbfloat16+triton構成では20-30分かかる。高速化手法は色々あるとはいえ実利用で安定動作させるのはかなり大変そうではある。

OpenAI APIのアップデート(gpt-3.5-turbo-16k, gpt-4-0613)と機械翻訳

OpenAI APIがアップデート(Function calling and other API updates (openai.com))されたため機械翻訳を対象に性能を評価してみた。GPT-3.5 16Kは性能向上に有効、GPT-4 0613は機械翻訳においては性能が落ちているように見える結果となった[1]。

プロンプトの条件GPT-3.5 16K[2]GPT-4 0613[3]GPT-4 0314[4]
OpenICL / RandomRetriever / 3 shot29.029.4
OpenICL / TopkRetriever / 3 shot34.933.334.9
OpenICL / TopkRetriever / 3 shot(日本語のみ)
※ 訳文のみを例示
31.3
OpenICL / TopkRetriever / 5 shot(日本語のみ)
※ 上記同様
31.6
GPT-3.5 16K、GPT-4 0613、GPT-4-0314のBLEU

※ 前回結果は「GPT-3.5で1-2 shotの場合、BLEU=34.7」「GPT-4で3shotの場合、BLEU=35.3」だった。ランダム性があるため前回結果と厳密には一致はしない。

性能評価の方法

性能評価に使用したデータは以前(GPT-4を用いた翻訳の検証(vs GPT-3.5 vs FuguMT) | ぷるーふおぶこんせぷと (staka.jp))と同様である。繰り返しになるがランダム性があるため前回結果とは完全一致はしない。

  • OpenAI APIでの比較。英語文を日本語文に翻訳し、その性能を評価した。評価指標はBLEUで、評価指標はBLEUで、使用したツールやtokenizerは前回と同じ(sacrebleu –tokenize ja-mecab)である。
  • データセットは外務省WEBサイトのプレスリリース(CC BY互換で利用可)のうち日本語、英語が対応しているページを利用した。評価に使用した対訳ペアは前回と同じ。2020年1月~2023年3月で月ごとに5件のプレスリリースを選択し全195件。
  • ベースのプロンプトも前回と同じでOpenICLを用いて事例部分を変更した。各Retrieverが用いる対訳ペアは評価データとは分けている。
    • RandomRetriever / 3 shot: 対訳事例を3件ランダムに選択。
    • TopkRetriever / 3 shot: 対訳事例を3件 TopK「[2101.06804] What Makes Good In-Context Examples for GPT-$3$? (arxiv.org)[6]」に沿って選択。
    • TopkRetriever / 3 shot(日本語のみ): 対訳事例の選択は上記同様。プロンプトとして英語-日本語の対訳ペアではなく日本語文章のみを与えたもの。対訳事例が無く文体のみを参照可能な状況に相当する。
    • TopkRetriever / 5 shot(日本語のみ): 条件は上記同様で事例を5件選択したもの。
  • 表中、同じ行であれば全く同じデータがプロンプトとして与えられている。

結果とまとめ

以前の検証の通りTopkRetrieverは高い性能を示す。本件ではコンテキストが広がったGPT-3.5 16Kを検証し、トークン数の増加がIn-Context Learningを活用するため有効そうという結果が得られた[5]。

類似する日本語の翻訳文章のみを与える手法にも効果がみられ(同一ドメイン内で)ランダムな対訳事例を与えるより性能が高かった。ビジネスで何らかの翻訳を行っている場合、対訳データを整備している事例は多くない[6]。翻訳結果のみが残っている状況でもそのデータで性能向上が目指せる事は興味深いと言える[7][8]。

データ数に限りがありBLEUというイマイチな指標で評価している事もあり確定したことは言えないが、GPT-4の6/13版は3/14版より性能が落ちているように見える。API性能を正しく把握するため日本語や日本語を含むマルチリンガルな評価用データ・ベンチマークが必要である[9]。

脚注

[1] 評価指標が微妙ではあるがスコアはGPT-4-0314 > GPT-4-0613
[2] gpt-3.5-turbo-16k-0613
[3] gpt-4-0613
[4] gpt-4-0314
[5] 評価の揺れも大きいので断言は難しいが。。
[6] ビジネスでは単語単位で訳し方を決めている例は結構ある。単語単位の対訳がある場合、Fugu-MT 論文翻訳(概要): Dictionary-based Phrase-level Prompting of Large Language Models for Machine Translation (fugumt.com)Fugu-MT 論文翻訳(概要): Chain-of-Dictionary Prompting Elicits Translation in Large Language Models (fugumt.com)のような形でLLMに情報を入れる手法が提案されている。
[7] Fugu-MT 論文翻訳(概要): WangLab at MEDIQA-Chat 2023: Clinical Note Generation from Doctor-Patient Conversations using Large Language Models (fugumt.com)をみると入力/出力のペアを与えなくてもICLが有効っぽいので試してみたが、翻訳においては対訳データを与えた方が効果的であった。。
[8] モノリンガルデータでのドメインフィッティングのような動きかなーという気はしないでもない。なお、訳文のみでは微妙に商用APIのスコアに及ばないのでゼロショット設定では特化型の翻訳モデル、文体を変えたい場合はLLM+訳文のみのICLと使い分けるのが良いのではないかと思う。
[9] と思っている人はとても多いと思うが、作るのは大変。。。
[10] 問題が無いとは言っていない

その他

OpenAI APIがアップデートされたので性能を評価してみた。GPT-4について性能が落ちていそうに見えるのはとても意外だった(検証に色々雑な部分があり詳細検討は必須、結論ではない)

翻訳結果のみの参照でも機械翻訳性能が向上したことも興味深かった。文体の参照が効いているのではないかと思っているが詳細を分析してみたいところ。ビジネスの場では重要な性質のように思える[8]。

色々見ていて思うが機械翻訳以外を含めて標準的な日本語ベンチマークが欲しい。英語・中国語ではデータセットやベンチマークの整備が進んでいて多様な評価軸でオープンなLLMを含め様々なモデルを評価できるようになっている[10]。完璧でなかったとしても性能評価は重要で日本語(とクロスリンガルで日本語を含むもの)についてもベンチマークの整備が必要だと思う[9]。