Author Archives: staka - Page 2

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]。

The Pileの構成(なぜCerebras-GPTで日本語が使えるのか?)

ChatGPTが盛り上がる中、オープンライセンスなLLM(大規模言語モデル)開発も行われている。その中でCerebras-GPT(Cerebras Systems Releases Seven New GPT Models Trained on CS-2 Wafer-Scale Systems – Cerebras)が日本語を使えると聞いて試してみた。

Colab Pro +でA100 GPUを使うと、cerebras/Cerebras-GPT-6.7B · Hugging Faceにそって6.7Bのモデルを動作させることができる[1]。

import torch
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')

from transformers import AutoTokenizer, AutoModelForCausalLM
from transformers import pipeline

tokenizer = AutoTokenizer.from_pretrained("cerebras/Cerebras-GPT-6.7B")
model = AutoModelForCausalLM.from_pretrained("cerebras/Cerebras-GPT-6.7B")

pipe = pipeline("text-generation", model=model, tokenizer=tokenizer, device=device)

text = "猫と暮らして10年になる人に聞いた、猫と一緒に暮らすときに必要なもの第1位は"
generated_text = pipe(text, max_length=500, do_sample=False, no_repeat_ngram_size=2)[0]
print(generated_text['generated_text'])

上記の出力は「猫と暮らして10年になる人に聞いた、猫と一緒に暮らすときに必要なもの第1位は「笑顔」。続いて「恋愛」、「自分のことを知っている」という結果に。」[2]、なお、2.7Bパラメータの場合は「猫と暮らして10年になる人に聞いた、猫と一緒に暮らすときに必要なもの第1位は、それぞれの人間が笑っているということです。」[2]だった。

model = AutoModelForCausalLM.from_pretrained("cerebras/Cerebras-GPT-13B", torch_dtype=torch.float16)

としてCerebras-GPT-13Bを使った時の結果は「猫と暮らして10年になる人に聞いた、猫と一緒に暮らすときに必要なもの第1位は、「笑顔」。結果、それは私の言葉ではなく、自分のものである。」[2]だった。

日本語を使えると言っても性能はかなり微妙な感じ。
※以降、理由を探っていくが本来使えないはずの日本語っぽい文字列が表示されるのは結構すごいというのが全体的な感想。

The Pile

Cerebras-GPTシリーズはデータセットとしてThe Pile[3]を用いている。論文に書かれている通りThe Pileは英語のデータセットである。そのため基本的には日本語を使えないはずなのだが、The Pileを用いて学習されたLLMは日本語をある程度解釈しているのでは?と思う動作をする。これはThe Pile構築で使われたデータセットに意図せず日本語が含まれているためと言われている。前置きが長くなったが、本記事ではこれが本当なのか検証する。

検証方法

The Pileをダウンロードし含まれる文字を文字別にカウントし、下記条件の文字を日本語と考えて日本語の構成比率を算出した。CJKの名の通り日本語ではない用例の漢字を含めて数えており明らかに日本語分を多くカウントしているという問題があるのだが、ここではいったん無視することにする[4]。

  • UnicodeのBlock=Hiragana
  • UnicodeのBlock=Katakana
  • UnicodeのBlock=CJK Unified Ideographs

The Pileのデータを展開しながら文字別カウントし、その後、上記条件をregexでチェックし日本語と全体の文字数を集計した。Pythonで適当に書いた感じc6a.xlargeで1プロセス辺り9Mバイト/秒程度の速度で処理ができた。2プロセス並列させると1日以内に処理が終わるイメージである。

検証結果

検証結果は次表の通り。The Pileにおける日本語の構成比率はわずか0.07%(約900 M文字)だった。日本語に貢献しているデータセットは「OpenWebText2」「Github」が大きく、続いて「YoutubeSubtitles」だった。

データ名全体の文字数うち日本語日本語構成比率
■全体1,297,182,716,948889,523,7340.07%
Pile-CC230,770,471,68714,799,6330.01%
PubMed Central181,751,973,64018,441,2010.01%
Books3153,023,754,59930,846,0520.02%
OpenWebText2124,271,071,981390,955,6250.31%
ArXiv113,558,856,961307,7740.00%
Github96,487,741,975314,200,4230.33%
FreeLaw79,956,003,3662,8320.00%
StackExchange64,805,917,11319,770,0980.03%
Wikipedia (en)50,611,222,0865,979,9760.01%
USPTO Backgrounds47,025,652,53400.00%
PubMed Abstracts39,086,727,4677300.00%
Gutenberg (PG-19)26,723,093,69917,8450.00%
OpenSubtitles19,750,201,47835,0700.00%
DM Mathematics15,719,095,09600.00%
Ubuntu IRC11,184,940,47100.00%
BookCorpus29,378,252,620833,3340.01%
EuroParl8,516,900,087200.00%
HackerNews7,872,312,50577,7930.00%
YoutubeSubtitles6,431,579,29193,060,4371.45%
PhilPapers4,745,004,923194,8910.00%
NIH ExPorter3,814,590,93000.00%
Enron Emails1,697,352,43900.00%
The Pileの日本語構成比率

なお、日本語として含まれる文字のトップ5は次の通りだった[5]。ひらがなの出現頻度が通常と同じなのかは疑問ではある。

  1. 「の」約20M文字
  2. 「い」約14M文字
  3. 「的」約13M文字
  4. 「に」約13M文字
  5. 「る」約12M文字

結果とまとめ

オープンなLLM開発でよく使われるデータセット、The Pileの構成文字から日本語の比率を考えてみた。結果、多めに見積もって900M文字、構成比率0.07%と非常に少ない。この程度しか入っていないにもかかわらず日本語文として一定程度成立した文が返ってくるCerebras-GPT-6.7Bは凄い。

脚注

[1] GPUで動作させる部分だけ若干コードを追加している。cerebras/Cerebras-GPT-13B · Hugging Faceは書かれた手順ではメモリ不足になる。float16にすれば動作する。
[2] この後改行して「私は、それぞれの言葉についちゃった。「お父さん、こんなに美しい犬がいますか?」「この人、あなたのほうが素敵ですよ」」・・・と謎の文字列が続く。
[3] Gao, L., Biderman, S., Black, S., Golding, L., Hoppe, T., Foster, C., Phang, J., He, H., Thite, A., Nabeshima, N., Presser, S., and Leahy, C. 2020. The Pile: An 800GB Dataset of Diverse Text for Language Modeling. arXiv preprint arXiv:2101.00027.
[4]とても雑なことは承知しつつ、日本語判定は結構難しく判定に凝ると処理時間の問題が出るため今回はこの条件で検証した。日本語分を多めにカウントしていて出た結果で結論には影響しない。
[5] 「的」が入っているのは中国語も入っているからかな?と思う。

その他

The Pileを使って構築した大規模言語モデルで何故か日本語が使えるのは知られていた。その理由としてGithubデータセットの日本語コメントによるものなどの理由を聞いたこともあったが、本当か確証がなかったので調べてみた。結果当たらずも遠からずという感じだった(構成要素としてはそれなりに多いが半分は超えていない)。

個人的には1G文字いかないレベルのデータで日本語能力を学習していることに驚きだった。疑問に思ったことは調べてみると面白い。The Pileにwikipedia-jaのデータを混ぜるだけでも日本語能力はかなり上がるんじゃないだろうか。BlinkDL/rwkv-4-raven · Hugging Faceのように1%程度でも日本語が入っていると結構な効果がありそうに思う。

機械翻訳でのIn-Context Learning(GPT-4 + OpenICL)

GPT-4とGPT-3.5 + OpenICL[1]を用いて機械翻訳におけるICL(In-Context Learning)を検証してみた。結果は下表の通りでプロンプトの動的生成には大きな効果があった。

プロンプトの条件GPT-3.5[2]GPT-4[3]FuguMT[4]
ゼロショット、事例無し27.230.231.3
対応するページのタイトル(英語・日本語の両方)29.631.8
OpenICL / RandomRetriever
※ gpt-3.5のトークン数に沿って1-2 shot
※ 翻訳例をランダムに参照しているイメージ
28.030.6
OpenICL / TopkRetriever①
※ gpt-3.5のトークン数に沿って1-2 shot
※ 翻訳例から対象に近い事例を参照しているイメージ
34.734.5
OpenICL / TopkRetriever②
※ 全ての試行で3-shot
※ 翻訳例から対象に近い事例を参照しているイメージ
35.3
GPT-3.5, GPT-4でプロンプトを変えた場合及びOpenICL利用時のBLEU

性能評価の方法

性能評価に使用したデータは前回(GPT-4を用いた翻訳の検証(vs GPT-3.5 vs FuguMT) | ぷるーふおぶこんせぷと (staka.jp))と同様としOpenICLの効果を検証した。

  • ChatGPT API(gpt-3.5-turbo-0301)、GPT-4 API(gpt-4-0314)、FuguMT(staka/fugumt-en-ja · Hugging Face)を比較。英語文を日本語文に翻訳し、その性能を評価した。評価指標はBLEUで、使用したツールやtokenizerは前回と同じ(sacrebleu –tokenize ja-mecab)である。
  • データセットは外務省WEBサイトのプレスリリース(CC BY互換で利用可)のうち日本語、英語が対応しているページを利用した。評価に使用した対訳ペアは前回と全く同じ。2020年1月~2023年3月で月ごとに5件のプレスリリースを選択し全195件。
  • ベースのプロンプトも前回と同じだがOpenICLを用いて事例部分を変更した。各Retrieverが用いる対訳ペアは評価データとは分けている。
    • RandomRetriever: 対訳事例をランダムに選択、gpt-3.5-turboの最大トークン数に合わせて事例数を変更、結果1-2shot設定となっている。(0-shotにはなっていない)
      直感的には過去の翻訳例をランダムに選んで参考にしている状況に相当する。
    • TopkRetriever①: 対訳事例をTopK「[2101.06804] What Makes Good In-Context Examples for GPT-$3$? (arxiv.org)[6]」に沿って選択。gpt-3.5-turboの最大トークン数に合わせて事例数を変更、結果1-2shot設定となっている。(0-shotにはなっていない)
      直感的には過去の翻訳例から今翻訳しようとしている内容に近いものを選び参考にしている状況に相当する。
    • TopkRetriever②: TopkRetriever①を3-shotに固定して実行。GPT-4で最大トークン数が拡張されているから可能[5]。

結果とまとめ

結果はページ最初の表の通りでTopkRetrieverは高い効果を示した。近い内容の翻訳結果を参照することで単語の対訳や文章スタイルなどを合わせることができBLEUが高くなったものと思われる。

某有償APIを用いた時はBLEU=32.6であった。GPT-3.5 + TopkRetrieverとGPT-4 + TopkRetrieverはこのスコアを超えておりOpenICLの有効性が伺える。有償APIによっては単語登録が可能なものもあり一概には言えないものの、うまくICLを行ったときの翻訳性能は非常に高いと言える。

GPT-3.5の最大トークン数(約4K)に比べGPT-4の最大トークン数は32Kと大幅に拡張されている。本件では最大3-shotの設定[7]で試行しshot数が増えたことによる性能向上も確認できた。

翻訳時に過去の翻訳結果を参照することは一般的に行われており、本検証の設定は無理なものではない(厳密には微妙な部分はあるけど)。LLMを利用した機械翻訳では辞書を参照することが有効という報告もある[8]。プロンプトの工夫や自動作成によってLLMを用いた機械翻訳性能は向上し使い勝手の良いシステムになる事が見込まれる。

脚注

[1] GitHub – Shark-NLP/OpenICL: OpenICL is an open-source framework to facilitate research, development, and prototyping of in-context learning. Zhenyu Wu, Yaoxiang Wang, Jiacheng Ye, Jiangtao Feng, Jingjing Xu, Yu Qiao, and Zhiyong Wu 2023. OpenICL: An Open-Source Framework for In-context Learning. arXiv preprint arXiv:2303.02913.
※sentence_transformerのモデル名を与えることができ日本語も使用可能(例えば↓)
TopkRetriever(data, ice_num=5, sentence_transformers_model_name='paraphrase-multilingual-mpnet-base-v2')
[2] gpt-3.5-turbo-0301
[3] gpt-4-0314
[4] GitHub – nipunsadvilkar/pySBDにより行に分割し、FuguMT(staka/fugumt-en-ja · Hugging Face)で翻訳
[5] GPT-3.5では実行不可の設定
[6] Jiachang Liu, Dinghan Shen, Yizhe Zhang, Bill Dolan, Lawrence Carin, and Weizhu Chen. (2021). What Makes Good In-Context Examples for GPT-$3$?. arXiv preprint arXiv:2101.06804.
[7] 4Kだと1 shotしか無理な場合もあったので、3 shotでも大きな拡張
[8] [2302.07856v1] Dictionary-based Phrase-level Prompting of Large Language Models for Machine Translation (arxiv.org)、Marjan Ghazvininejad, Hila Gonen, Luke Zettlemoyer. Dictionary-based Phrase-level Prompting of Large Language Models for Machine Translation. arXiv preprint arXiv:2302.07856.
[9] 正直、ベンチマークデータの品質がイマイチだったりする…。

その他

OpenICLを試してみたいと思って機械翻訳を題材に検証してみた。結果として商用の機械翻訳システムを超える性能となってびっくり。過去の訳を参照できる条件だと翻訳が容易になるのは当たり前ではあるが、それを自然に自動化できるのはすごい。

LLMの流行やGPT-4の登場によってNLP界隈は激変している。LLMをうまく使う上でICLは一つのキーワードであると思う。なかなか検証が難しい[9]分野であるが今後も定量的評価を行いたい。本件だとICLは「英語→日本語での単語選択への貢献」「日本語のスタイル(常体・敬体など)への貢献」など様々な側面があるはずでその辺りも分けて検証したいところ。

GPT-4を用いた翻訳の検証(vs GPT-3.5 vs FuguMT)

GPT-4の翻訳性能を外務省WEBサイトのテキスト(日本語/英語)を用いて定量的[1]に測ってみた。

検証結果からGPT-4の翻訳性能はGPT-3.5より優れていると言えそう(FuguMTより若干上)。期間別の比較(後述)も行っているが発表されているGPT-4の学習データ期間前後では大きな性能変化はなかった。一方で詳細検討が必要な気がしている[2]。

モデル概要BLEU
GPT-4gpt-4-0314を利用(ゼロショット)30.19
GPT-4 + タイトルgpt-4-0314を利用し対応するページのタイトル(英語・日本語の両方)を与えたもの31.82
GPT-3.5gpt-3.5-turbo-0301を利用(ゼロショット)27.16
GPT-3.5 + タイトルgpt-3.5-turbo-0301を利用し対応するページのタイトル(英語・日本語の両方)を与えたもの29.58
FuguMT英語文書をGitHub – nipunsadvilkar/pySBDにより行に分割し、FuguMTで翻訳31.30
GPT-4、GPT-3.5、FuguMTの性能(概要)、データの詳細は後述

性能評価の方法

性能評価は下記の条件で実施した。

  • ChatGPT API(gpt-3.5-turbo-0301)、GPT-4 API(gpt-4-0314)、FuguMT(staka/fugumt-en-ja · Hugging Face)を比較。英語文を日本語文に翻訳し、その性能を評価した。
    • 評価指標はBLEUで、使用したツールやtokenizerは前回と同じ(sacrebleu –tokenize ja-mecab)である
  • データセットは外務省WEBサイトのプレスリリースのうち日本語、英語が対応しているページを利用した。詳細はデータセットの作成に記載する。
    • 期間は2020年1月~2023年3月、月ごとに5件のプレスリリースを選択[3]、全195件
    • 既存のデータセットはGPT-4、GPT-3.5の学習データとして使われている可能性があり利用を避けた。(加えて性能評価のために適した品質と言えないものも少なくない。)
  • プロンプトは前回のもの(機械翻訳でのChatGPT vs GPT-3.5 vs FuguMT | ぷるーふおぶこんせぷと (staka.jp))を使用、プレスリリースのタイトル(日・英)の対応を参照用として与えたパターンも比較対象とした
    • タイトルを与えることで、参考訳として使用する事及び訳のスタイルを官公庁っぽくすることを狙っている [4]
    • 学習データに外務省のサイトが入っている場合(おそらく入っていると思うが)そのデータを色濃く反映する効果も狙っている
  • 性能評価は全体、2021年9月[2]前後での検証、月別(ある月以降3ヶ月間分のプレスリリースを使用)で評価した。月別の評価と言いつつ3ヶ月移動平均のような処理になっている。(データが少ないことによる苦肉の策)

データセットの作成

データセットは外務省ホームページのPress Releases | Ministry of Foreign Affairs of Japan (mofa.go.jp)を用いて下記手順で作成した。使用したデータは整理後に公開予定[5]。

  1. プレスリリースのうち、日本語と英語の対応が取れるものを取得
  2. 日本語のページと英語のページから本文とタイトルを抽出
  3. 英語のページから日付を抽出
  4. 日本語のページと英語のページを目で比較し、どちらか一方のみにある部分を削除
    • 日本語だけに補足や経緯がある、参考リンクが日本語と英語のページで異なるなど微妙な差異があるため、その部分は対応が必要である。[6]
  5. 2020年1月~2023年3月の記事について長さがちょうどよいものを5件/月を選択した
    • 月内の全記事の中から一定期間ごとになるように5件選択
    • 300文字~1600文字の記事を選択

検証結果

検証結果は下表・下図の通り。 

モデル期間BLEU
GPT-4全期間30.19
GPT-42021/09/01以前29.66
GPT-42021/10/01以降30.82
GPT-4 + タイトル全期間31.82
GPT-4 + タイトル2021/09/01以前31.30
GPT-4 + タイトル2021/10/01以降32.15
GPT-3.5全期間27.16
GPT-3.52021/09/01以前27.04
GPT-3.52021/10/01以降26.87
GPT-3.5 + タイトル全期間29.58
GPT-3.5 + タイトル2021/09/01以前29.34
GPT-3.5 + タイトル2021/10/01以降29.59
FuguMT全期間31.30
FuguMT2021/09/01以前31.65
FuguMT2021/10/01以降30.70
2021年9月を境にした性能変化
BLEUの時系列変化
BLEUの時系列変化、BLEU≧20のエリアを拡大表示

まとめ

GPT-4の翻訳性能を外務省WEBサイトの日本語-英語対応を使って検証した。結果としてGPT-4は翻訳性能においてGPT-3.5よりも大幅に優れていた。タイトルを参考訳として使用可能な状況ではFuguMTのような翻訳特化モデルを超える性能を発揮している[7]。

GPT-4の学習データ期間は2021年9月までとのことだが、翻訳性能の変化からはその時期を境にした性能変化は見られなかった。2022年3月~4月ごろに性能の変化がみられるが、FuguMTでも同傾向であり単純に訳が難しいデータになっているだけの可能性がある[8]。

BLEUの経年変化はタイトル行を入れてもFuguMTと概ね同じである。(おそらく学習データに含まれているであろう)ページの日本語訳のコピーを出している場合はFuguMTと動きが異なるはずで、そのような不適切な動作はしていないものと思われる。BLEUの変化のブレが激しくデータを増やす、比較するモデルを変えるなどしての再検証が必要と思われる[9]。

現在のGPT-4 APIでは画像入力ができないが、できるようになったらそれを含めて検証を行いたい。官公庁のサイトでは画像付きの記事も多く、画像+機械翻訳の性能検証は可能だと考えている。

脚注

[1] といってもデータ数は微妙で評価指標はBLEU。。。sacrebleu.corpus_bleu( sys, [ref], tokenize=’ja-mecab’)を使用。
[2] GPT-4 (openai.com)によると「GPT-4 generally lacks knowledge of events that have occurred after the vast majority of its data cuts off (September 2021)」とのこと。データ数も少ないので何とも言えないというところではあるが、特に「Webページの内容を記憶しているだけ」な場合はタイトルをプロンプトに入れることで2021/9を境に大幅な性能変化があるかと期待していたが、そのような結果とはなっていない。
[3] 過負荷のためかOpenAI APIのエラー(’openai.error.RateLimitError’)が多発、検証に用いたデータは少なめである。負荷が落ち着いたら全データを使って検証したいと思っている。
[4] 本当はURLを与えるなどより学習データを濃く反映できそうなパターンも実施したかったが時間の関係上断念した
[5] 2017年1月~現在までで2700件程度のデータが取得可能、本件に使ったもの以外を含め1/3くらいは目検証済みで残りを検証した後に公開する予定である。翻訳の品質が高く、オープンなライセンスで、検証しやすい長さのドキュメント単位、発表日が明確に記載されている貴重なデータである。機械翻訳モデルの時系列での性能劣化を測るために有用だと思っている。
[6] 自分で目検した。結構大変だが何とかなる量ではある。
[7] FuguMTと僅差だと商用の翻訳サービスの性能よりは低めな気がする。ただ、プロンプトで改善できる、訳のスタイル変更が可能、間違いを指摘してくれるなど単純な性能以外の利点は多くあり、それがチャット形式で可能なのは大きな利点。
[8] 実はFuguMTのクローリングデータはちょうどこの時期に追加したのが最後になっている(OCR用翻訳モデルとVR対応論文翻訳 | ぷるーふおぶこんせぷと (staka.jp))。翻訳が難しいデータなのか、たまたまGPTのデータ期間とFuguMTのデータ期間が近いのか、結論を出すのがとても難しい。Google翻訳やDeepLなどの他のエンジンで試すか、FuguMTの過去バージョンで検証する必要がありそうに思っている。
[9] データはあるが、APIの動作が重く検証できる気がしない…参考までに本検証にかかったコストは15USD程度であった。

その他

色々なところで指摘されている事でもあるが、試行しているとGPT-3.5までと比べてGPT-4は日本語性能が大きく向上している。機械翻訳でのBLEUの向上はそれを裏付けている。GPT-3.5までであれば特化型モデル > GPT(LLM+prompt)だったがGPT-4ではそうでもなさそう。おそらく数か月すれば検証結果がそろうはずで興味津々。

本件の検証の目的の一つは2021年9月を境に性能が劣化するか?だったが残念ながら裏付けが取れなかった…全データを使っているわけではなく変化点っぽいものも見えなくはないのでより詳細な検討を行いたいところ。メンバシップ攻撃のようなことをやっている人達もいるかもだが、個人的にはデータの期間をはっきりさせるというよりはleakっぽい理由で性能が高く見えるのかそうでないのか?をはっきりさせたいと思っている。Home | RealTime QAのような取り組みも参考になりそう。

日本語性能の向上やプロンプトの探索などを見るに結構な社会的インパクトを与えるのは間違いなく、どう使っていくか?を考えていく必要がある。初期のインターネットと同じワクワク感がありとても楽しいと思う一方でディスラプトの怖さもある。OpenAIは結構な影響を予測しているFugu-MT 論文翻訳(概要): GPTs are GPTs: An Early Look at the Labor Market Impact Potential of Large Language Models (fugumt.com)が、実際どうなるかはここ数ヶ月で決まるんだろうなーと思う。

社会的なインパクトにも興味があるが、LLMの内部動作の理解、特にマルチリンガルな能力の獲得やIn-Context Learningが可能な理由にも興味がある。マルチモーダルさが入った時の動きも知りたいところ。この手の検証はAPIだととてもやりにくいのでオープンなChatGPT likeモデルに期待大。色々理由はあるのだろうが詳細が非公開というのはやはり辛い。