47. 課題4: JNLIタスクに挑戦#

今回は実験結果まで準備してあります。各自でコードを確認して実行したい場合にはreport4_tipsを参照してください。

47.1. 背景#

LLMの開発が進むことで「システムに対してテキストで指示する」形式でのやりとりが増えてきました。しかしながらLLMは万能というわけではなく、「全く根拠のない回答文を生成する」「一部の条件を見落とす」「関係ない情報を勝手に追加する」等のような想定外の挙動をしてしまうことも少なくありません。このような問題へ体系的に取り組むために「対象としているシステムが苦手なタスクは何か」といったことを理解しやすくするために様々なベンチマークを構築し改善に結びつける試みが行われています。

その一例として、今回の課題では日本語言語理解ベンチマーク(Japanese General Language Understanding Evaluation, JGLUE)を取り上げます。


47.2. JNLIタスク#

JGLUEには複数のタスクがあります。今回はその中から JNLI (Japanese Natural Language Inference, 自然言語推論)タスクに取り組んで貰います。

NLIとは、前提文(premise sentence)と仮説文(hypothesis sentence)の文ペアが与えられたときに、前提文が仮説文に対して持つ推論関係を「含意(entailment)」「矛盾(contradiction)」「中立(neutral)」の3値で識別する分類タスクです。GitHubで公開されているタスクガイドラインから例を取り上げると、以下のようなタスクです。

JNLIタスクのイメージ

2つの文A, Bが与えられますので、 文Aの光景を想像してください。

想像した文Aの光景において、文Bの内容が成立し得るかを 以下の3つの選択肢から選んで回答してください。

・「Aである」ならば確実に「Bである」 ・「Aである」ならば「Bであるかもしれない」 ・「Aである」ならば確実に「Bではない」

以下の例をよく読んで回答してください。

例1 A:黒い犬が鳴いています。 B:犬が鳴いています。 答え:「Aである」ならば確実に「Bである」 理由:Aの内容から確実に犬が鳴いていると判断できるため。

以下ではAを前提文、Bを仮説文と呼称します。NLIタスクにおける入出力は以下の通りです。

  • 入力1: 前提文

  • 入力2: 仮説文

  • 出力: 「含意(entailment)」「矛盾(contradiction)」「中立(neutral)」の3ラベルで回答


47.3. 3手法概要#

NLIタスクに向けて3手法(BoW, word2vec, BERT)による分類モデルを構築します。

47.3.1. BoW(TF-IDF)方式#

  • (1) 前提文と仮説文をそれぞれ分かち書きする。

  • (2) 前提文と仮説文を「前提文[SEP]仮説文」として1つの文に結合する。ここまでの処理は preprocessing.ipynb で実行済み。

    • [SEP] は前提文と仮説文とを区別するために追加した separation (分割) を表すトークンです。

  • (3) 結合した文集合をTfidfVectorizerでベクトル化。

  • (4) シンプルな分類モデルLogisticRegressionで学習。

47.3.2. word2vec方式#

  • (1) 前提文、仮説文をトークンに分け、それぞれの分散ベクトルを取得。

  • (2) 前提文の平均ベクトル、仮説文の平均ベクトルを求め、これらを結合したベクトルを構築する。これを特徴ベクトルとする。ここまでの処理は preprocessing.ipynb で実行済み。

  • (3) MLPClassifierで学習。

47.3.3. BERT方式#

  • (1) 前提文と仮説文を「前提文[SEP]仮説文」として1つの文に結合する。

  • (2) 結合した文をトークン系列に分割し、paddingして長さを揃える。

  • (3) PyTorch tensor 形式に変換。

    • トークンID系列(input_ids)

    • アテンションマスク(attention_mask)

    • 教師ラベル(labels)

  • (4) BERTでファインチューニング(微調整)。


47.4. Level 1: 検討課題1: JNLIタスクへの理解を深めよう (約30分想定)#

次の文ペア①〜③を読み、仮説文が前提文から 必ず 言える(entailmentに該当する)かどうかをあなた自身で判断しなさい。

文①(前提文)

文②(仮説文)

「男の子が水たまりで遊んでいる。」

「子どもが遊んでいる。」

「女性が赤い傘をさして歩いている。」

「雨が降っている。」

「列車が駅に到着した。」

「列車が完全に停止した。」

レポートには以下の事項について報告しなさい。

  • (1) ①〜③のうち、2文目が“必ず”言えるのはどれか?

  • (2) (1)でそう考えた理由を、以下に示すヒントを参考に述べよ。(50字以上〜200字以内)

<(2)へのヒント>

手がかりのイメージ

具体的に見るポイント

誤判定につながる例

言いかえ・同じ意味の単語

「男の子」⇔「子ども」、「車」⇔「自動車」

同じ単語が無いと“別物”と思って neutral にしやすい

反対の意味

「ある」⇔「ない」、「開く」⇔「閉じる」

反対語を知らないと entailment と contradiction を取り違える

否定を示す語

「ない」「しない」「〜ではない」

否定語を無視すると真逆に分類する

数量・範囲の言い方

「すべて」「ひとつも」「いくつか」

「いくつか」を「すべて」と誤解 → 誤判定

言い切り/推測

「到着した」(完了) と「止まった」(別の状態)

状態変化を誤解すると neutral か contradiction


47.5. Level 2: 検討課題2: アプローチ毎の特性を把握しよう (約1.5時間想定)#

本課題では前述した JNLIタスク に取り組む。データは自然言語で入力されることを踏まえ、分類モデルを (a) Bag-of-Words方式、(b) word2vec方式、(c) BERT方式の3つのアプローチで構築することを考える。それぞれのアプローチ概要は 3手法概要 で述べたとおりである。

これらを踏まえ、3つのアプローチそれぞれについて (1) 手法上の特徴を説明し、(2)その特徴がモデルの予測性能に与える影響について考察せよ。

  • 備考

    • (1)の説明は、それぞれ50字以上200字以内とする。

    • (2)の考察は、それぞれ100字以上500字以内とする。

  • ヒント

    • 説明はアプローチ概要および専門用語が持つ特性を踏まえて記述すると良い。

    • 考察は、この時点では実験結果を観察する必要はない。あくまでも「このアプローチだからこうなるだろう」ということを論理立てて説明することを求めている。 そのアプローチを取ることでどういうケースだとうまくいきそうか、もしくは失敗しそうなケースは何か、、といった成否を踏まえて検討すると良いだろう。


47.6. Level 3: 3手法の比較 (約2時間想定)#

3手法の実行結果を見比べ、(1)〜(4)に取り組め。

  • 実行結果

  • (1) 分類タスクという観点からはaccuracy(精度)だけで評価しても十分良さそうである。しかし本コードでは詳細分類レポート(accuracy, precision, recall, f1-score)、更には混同行列等の結果も示している。このように accuracy 以外の評価項目を列挙している理由は何だろうか。100字以上400字以内で述べよ。

  • (2) BoWモデルで最も誤分類した割合が多かったラベルはどれか?

    • レポートには以下を報告せよ。

      • (a) 誤分類が多かったラベル名

      • (b) 該当ラベルにおける失敗事例1件(複数でも良い)

      • (c) 提示した失敗事例を誤分類した要因(50字以上200字以内)

    • ヒント

      • (c)の要因は level 1 と重複する部分が多くても構いません。ただしできるだけ事例に基づいた考察をしてください。

  • (3) BERTで最も誤分類した割合が多かったラベルとその要因は何か?

    • レポートには以下を報告せよ。

      • (a) ラベル名

      • (b) 当該ラベルにおける失敗事例1件(複数でも良い)

      • (c) 提示した失敗事例を誤分類した要因(50字以上200字以内)

  • (4) 全体として、どのモデルが最も性能が高いといえるだろうか?

    • レポートには以下を報告せよ。

      • (a) モデル名

      • (b) 判断した根拠