JGLUE Hands-on: 日本語言語理解ベンチマークを用いたTransformersモデルの性能評価

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の発展がさらに加速されることを、とても楽しみにしています。

(筆者: 寺田 凛太郎 + 松田 寛 / Megagon Labs Tokyo)

Share:

Share on facebook
Share on twitter
Share on linkedin
Share on reddit
Share on email

More Blog Posts: