nikkie-ftnextの日記

イベントレポートや読書メモを発信

論文「Is Information Extraction Solved by ChatGPT? (arXiv:2305.14450)」を論文紹介という巨人の肩に乗って追いかける

はじめに

解かれたのかい?解かれないのかい?どっちなんだい? nikkieです。

Twitterのタイムラインで見かけた論文紹介から興味を持ち、論文を少し追ってみました。
記事にして、セーブポイントを作ります

目次

Is Information Extraction Solved by ChatGPT? (arXiv:2305.14450)

[2305.14450] Is Information Extraction Solved by ChatGPT? An Analysis of Performance, Evaluation Criteria, Robustness and Errors

「ChatGPTによって、情報抽出(Information Extraction)タスクは解かれたのか?」というタイトル1
続く4点(Performance、Evaluation Criteria、Robustness、Errors)について分析されます2

実装はこちらにあります。

リポジトリに記載がありますが、実験に使ったデータはGoogleドライブで配布されています。

論文紹介の力を借りて追いかける

Is Information Extraction Solved by ChatGPT? への答えはNo3

  • Information Extractionのタスク4つについて検証4
    • 各タスクにはサブタスクがあり、合計サブタスクは14
    • 17のデータセット5を用意し、プロンプトエンジニアリングでChatGPTに解かせる
  • 3つの手法を検証6(Micro F1=Accuracyを算出し、SOTAと比較)
    • zero shot
    • few shot + In-context learning (ICL)
      • SOTAとは開きがあるが、最もよかった7
    • few shot + Chain of Thought (COT)
  • 各データセットのテストセット全数8を使用9
    • OpenAIのAPIに送る
    • zero shotではプロンプトを5種類用意10
      • 5種類について、Micro F1の平均・標準偏差と最大を算出
    • Micro F1最大のプロンプトをfew shotに使う
      • few shotは5例で、5パターン用意(ICLでもCOTでも共通)11
        • trainセットから選ばれる(全部は使わず、ごく一部だけ
      • 5パターンについて、Micro F1の平均・標準偏差を算出

興味のあるNERについてデータセットを1つ確認(conll2003)

私の興味があるNER(固有表現認識)のデータセットには、フラットな(=固有表現に階層構造のない)NERのデータセットとしてconll2003がありました。

train / validation / testと分かれますが、このうちtestについてChatGPTに解かせて、手元のラベルと比較して性能を求めるわけですね。
今回の検証方法が興味深かったので、再現できるか試みています。

conll2003はhuggingface/datasetsで扱えるデータが存在します。

ところが、Googleドライブで共有されたデータと、huggingface/datasetsのデータはtestは完全に一致したんですが、trainとvalidationの数が一致しないんですね。
(エントリ執筆を機に見てみたらPaper with Codeとhuggingface/datasetsも数が一致してないぞ... なんだこれ)

huggingface/datasetsのほうが取り回しやすいので、ここの確認に時間を使ったのですが、揃わないものは仕方ないので若干の気持ち悪さを残しつつもtestセットでの検証に進もうと思います。
ライブラリopenai(async/awaitでリクエスト)とかLangChainとか使ったらいい感じにスクリプトが組めそうな気がする〜(またの機会をお楽しみに)

雑感:テストセット全数で最良のプロンプトを決めていいのかな?

再現の途中なので、理解度はまだまだ低いと思いますが、気になった点が1つ。
zero shotのプロンプトを5種類用意して、テストセット全数をChatGPTに固有表現抽出させ、Micro F1を算出して、最良のプロンプトを決めています。
最良のプロンプトを決める上でテストセット全数を使っているわけですが、そうすると汎化性能(未知のデータに対するモデルの予測性能)が分からないのではないか(Micro F1の値にバイアスがかかっている)と思うのです。

ハイパーパラメタを決めるのにテストセットを使ってしまったのと同じように汎化性能がわからないよねと懸念を持っています(プロンプトもデータから決めるならハイパーパラメタと言えるのではと考えています)。
最良のプロンプトを決めるのはvalidationセットになるんじゃないでしょうか。
手元で実装できたらこのあたりも考えたい事項です。

気になった背景としては、過去に論文を読むくらい興味を持った観点だからなのでした。

終わりに

論文「Is Information Extraction Solved by ChatGPT?」を読み始めました。

  • ChatGPTに解かれたのか? ー答えはNo
  • テストセット全数を使い、3種類のプロンプトを試して、性能検証する方法が興味深く、手元で再現実装に着手しました
    • conll2003、データセットによって一致しないぞという深淵...

巨人の肩に乗れたので(実力以上に)サクサク読めるぞ!という感覚でした。
ありがとうございます、@st_ktuさん

手を動かしていくぞ〜!


  1. #NLP2023 緊急パネル #ChatGPTで自然言語処理は終わるのか のログ - Togetter を彷彿とさせますね
  2. AbstractやIntroductionでざっと掴めました
  3. これを示すのがTable 1です
  4. 3.1 Tasks
  5. 3.2 Datasets
  6. 3.3 Prompts
  7. Using few-shot ICL prompts generally leads to significant improvements, but still obviously lags behind SOTA results. (1 Introduction)
  8. テストセットを最大3000にしたと記述がありますが(3.4)、conll2003は全数(3000を少し上回る)送っていそうでした
  9. 3.4 Setup
  10. Appendix Cに詳しいです。またソースコードでは、NERのzero shotのプロンプト(5種類)がこちら:https://github.com/FreedomIntelligence/Evaluation-of-ChatGPT-on-Information-Extraction/blob/bda6894cffd041ff629ba1c2c9473e757ba217eb/1_NER/ner_test_with_api.py#L18-L37
  11. Googleドライブで配布されているdata.zipの中にありました