JGLUE fine-tuning
自然言語処理技術の標準的な評価用データセットである GLUE に相当する日本語の評価用データセットである JGLUE が、2022年6月にGiHubリポジトリから公開されました。
本稿では、JGLUEを用いたhuggingface/transformers系のモデルの評価方法について解説し、最後にGiNZA*で使用しているELECTRAモデルのJGLUEによる評価を行います。
*GiNZAはオープンソースの日本語自然言語処理ライブラリです。ワンステップでの導入、高速かつ高精度な日本語の解析処理、依存構造(係り受け)解析や固有表現抽出などの高度なNLP技術を国際化されたフレームワーク上で利用可能などの特徴を備えています。詳細はGiNZAページをご覧ください。
JGLUE
JGLUEは2022年7月現在、以下の5つのデータセットで構成されています。
- 文書分類
- MARC-ja
- (JCoLA, not released yet)
- 文書対分類
- JSTS
- JNLI
- 質問応答
- JSQuAD
- JCommonsenseQA
MARC-ja
MARC-ja は Amazon Review のテキストから評価が positive か negative かを分類するタスクです。
Multilingual Amazon Reviews Corpus(MARC) から日本語のデータを抜き出し、評価が (1,2) のものを negative, (4,5) のものを positive として変換し、同一のレビュー文章で評価が異なっているものについてはクラウドソーシングによってラベルを統一してあります。
JSTS
JSTS は二つの文章の意味的類似度(Semantic Similarity)を当てるタスクです。
サンプル
{"sentence_pair_id": "691",
"yjcaptions_id": "127202-129817-129818",
"sentence1": "街中の道路を大きなバスが走っています。",
"sentence2": "道路を大きなバスが走っています。",
"label": "4.4"}
JNLI
JNLI は二つの文章の関係が (entailment, contradiction, neutral) のどれかを推論するタスクです。
サンプル
{"sentence_pair_id": "1157",
"yjcaptions_id": "127202-129817-129818",
"sentence1": "街中の道路を大きなバスが走っています。",
"sentence2": "道路を大きなバスが走っています。",
"label": "entailment"}
JSQuAD
JSQuAD は文脈をと質問を与えられた上で回答を文脈から抜き出す質問応答タスクです。
サンプル
{
"title": "東海道新幹線 (Tokaido Shinkansen)",
"paragraphs": [
{
"qas": [
{
"question": "2020年(令和2年)3月現在、東京駅 - 新大阪駅間の最高速度はどのくらいか。 (What is the maximum speed between Tokyo Station and Shin-Osaka Station as of March 2020?)",
"id": "a1531320p0q0",
"answers": [
{
"text": "285 km/h",
"answer_start": 182
}
],
"is_impossible": false
},
{
..
}
],
"context": "東海道新幹線 [SEP] 1987年(昭和62年)4月1日の国鉄分割民営化により、JR東海が運営を継承した。西日本旅客鉄道(JR西日本)が継承した山陽新幹線とは相互乗り入れが行われており、東海道新幹線区間のみで運転される列車にもJR西日本所有の車両が使用されることがある。2020年(令和2年)3月現在、東京駅 - 新大阪駅間の所要時間は最速2時間21分、最高速度285 km/hで運行されている。"
}
]
}
JCommonsenseQA
JCommonsenseQA は質問と選択肢を与えられ、どの選択肢が正しいのかを選択する質問応答タスクです。文脈が与えられないため、回答するためには常識(Commonsense)が必要とされています。
サンプル
{"q_id": 3016,
"question": "会社の最高責任者を何というか? (What do you call the chief executive officer of a company?)",
"choice0": "社長 (president)",
"choice1": "教師 (teacher)",
"choice2": "部長 (manager)",
"choice3": "バイト (part-time worker)",
"choice4": "部下 (subordinate)",
"label": 0}
fine-tuning
パッチ
transformersモデルの学習・評価では、transformersで提供されているスクリプトに次のパッチを当てる必要があります。
https://github.com/yahoojapan/JGLUE/blob/main/fine-tuning/patch/transformers-4.9.2_jglue-1.0.0.patch
このパッチの差分は主にJSQuAD周りで、英語版のSQuADから以下のような変更加えられます。
- f1 scoreの計算がtoken baseではなくcharacter base
- 冠詞・句読点周りの処理の削除
- pre-tokenizeされていない場合(※)には正規化などの影響をなくし原文に予測をあわせる
get_final_text
が呼ばれない
※ pre-tokenizeを行わない自前のモデルで実験する場合には、こちらの分岐に追記する必要があることに注意が必要です。
https://github.com/yahoojapan/JGLUE/blob/53e5ecd9dfa7bbe6d84f818d599bfb4393dd639d/fine-tuning/patch/transformers-4.9.2_jglue-1.0.0.patch#L294-L303
megagonlabs/electra-base-japanese-discriminatorでの評価
megagonlabsがhuggingface hubで公開している ELECTRA事前学習モデル でJGLUEの各タスクをfine-tuningした結果の精度は以下のようになりました。
※ ハイパーパラメータや、ElectraSudachipyTokenizerを使うための追加パッチなどはmegagonlabsのGitHubリポジトリで公開しています。なお、transformersで提供されるスクリプトはearly-stoppingを行わないため、今回は手動でdev scoreを見て収束したepochでの結果を使用しています。
Model | MARC_ja | JSTS | JNLI | JSQuAD | JCommonsenseQA |
---|---|---|---|---|---|
metric | acc. | Pearson/Spearman | acc. | EM/F1 | acc. |
nlp-waseda/roberta-large-japanese | 0.954 | 0.923/0.891 | 0.924 | 0.884/0.940 | 0.901 |
nlp-waseda/roberta-base-japanese | 0.962 | 0.901/0.865 | 0.895 | 0.864/0.927 | 0.840 |
megagonlabs/transformers-ud-japanese-electra-base-discriminator | 0.963 | 0.913/0.877 | 0.921 | 0.813/0.903 | 0.856 |
JSQuADのスコアだけは少し低めですが、その他のタスクについてはbaseサイズのモデルの中ではトップレベルのスコアとなりました。
おわりに
今回はJGLUEに含まれるデータセットの簡単な説明と、transformersでfine-tuningを行う上での注意点について解説しました。
JGLUEの公開により、日本語NLPの発展がさらに加速されることを、とても楽しみにしています。