Beanslabo
Tech Blog

技術ブログ

ChatGPTを使った内部文書問い合わせ検証 3.ChatGPTが間違えた問題

2024.8.20

こんにちは。平良です。

シリーズ3つ目となる本記事では、ChatGPT(gpt-3.5-turbo)が沖縄県立図書館データセットで間違えた問題を見ていきます。[前記事:https://beanslabo.co.jp/techblog/7168/]

目次

はじめに

RAG(retriever-Argumented-generator)の機構は、質問に答えるために必要な情報を取得する「retriever」と、retrieverで取得した関連資料をもとに回答生成を担う「generator」(本検証ではChatGPTが担当)の、大きく2つの部位に分けることができます。

この記事では回答に失敗した問題を見て、その失敗した原因を推測してみたいと思います。

ただし、retrieverに関する失敗の原因(つまり検索に適切な記事が引っかからなかった原因)は比較的推測しやすい場合もありますが、generatorの失敗の原因を掴むのは容易でないことが少なくありません。ChatGPT等のLLM自身が持つ知識に影響されたり、入力した記事全体の長さや回答の根拠となる位置によっても精度が変わる等、様々な要因が関係している可能性があるためです。本記事では「これが回答失敗に影響しているのではないか?」と疑われる要素が見つかれば理由推測可能としています。

失敗例

それでは、さっそくそれぞれの失敗パターンを見ていきます。

retrieverについて

  1. 類似度の高い情報が多く見つかり、回答に必要な記事がgeneratorに与えられるtop8(*)までに入りきれなかったと思われるパターン
  2. 固有名詞がベクトル検索でうまく拾えていないと思われるパターン
  3. 質問文の表現と記事内の表現を関連づけられなかったと思われるパターン(例:質問文の「誰の家か名前が書かれてある地図」を記事中の「住宅地図」と結び付けるのが難しかった)

retrieverで目的の記事は取得できた上でgeneratorについて

  1. 説明なしに一般的でない言葉(「しまくとぅば」)が使われており理解できなかったと思われるパターン
    ※「しまくとぅば」は沖縄方言群のこと
  2. 取得データがキレイでなかったため難易度があがったと思われるパターン
    記事の単純な全文選択→コピー&ペーストでサイトから情報を取得したため表構造が分かりづらくなり列関係の把握の難易度があがるものがあった
  3. モデルが持っている知識から推測し回答したと思われるパターン
    ChatGPTは「学校基本調査報告書」に犯罪に関する情報が載っていると判断したが、対象記事にそのような記載はなくタイトルからも明らかでないため今回はNGとした)
  4. 記事内の特定の文字列にが原因で誤答に誘導されたと思われるパターン
    新しい本の紹介動画が欲しいという質問に、新しく動画があがったことを示す「←NEW」マークがついた関係のない動画を出力)
  5. 回答の根拠を含む記事が存在しない場合に勝手な回答をするパターン
    ※本記事では目検で明らかに質問応答タスクに失敗しているものはgenerator起因の失敗としています

5.に関して、どの記事にも回答の根拠が存在せず本来「回答できない」と答えるべき質問を全部で16問用意していましたが、うち6問が誤答となっており(表のグレー部)、ChatGPTが苦手なパターンであるとわかります。

その他、generatorの失敗には誤った理由を想像するのが難しいものが少なくありませんでした。
意外な失敗としては、ChatGPTが「GWは5/2(火)以外 開館」「祝日も、5/2火曜日以外は開いております」という日付情報をうまく理解できていない、というものもあります。

失敗した質問一覧

失敗の改善例

こうした失敗の改善には様々な手法があります。

retrieverの改善策例として、

  • Rerank: 検索結果の順位付けを改良し、最も関連性の高い記事が上位に来るようにする。
  • ハイブリッド検索: 単純なベクトル検索だけでなく、キーワード検索やファセット検索と組み合わせることで、より精度の高い検索結果を得る。
  • ナレッジグラフ: 関連する知識をグラフ構造で保持し、質問に関連する情報をより効率的に引き出す。
  • 埋め込みモデルのファインチューニング(FT): 既存の埋め込みモデルを特定のデータセットに合わせて調整することで、検索精度を向上させる。
  • シソーラスの使用: 同義語や関連語を利用して、質問文と記事内の表現をマッチングしやすくする。

generatorの改善策例として、

  • 別モデルの使用: より高度な言語モデルを使用することで、より複雑な用語や方言にも対応できるようにする。
  • データクレンジング: データを事前に整形し、モデルが理解しやすい形式にする。
  • 表形式データの解析能力強化: 表形式のデータを正確に解析できるように、追加の訓練や特殊なアルゴリズムを導入する。
  • 文脈理解の強化: モデルが文脈をより正確に理解し、誤った推測を避けるようにする。
  • モデルのファインチューニング(FT): 特定の質問応答タスクに特化した訓練データでモデルを調整する。

次回から改善策として、retriever機構の改良に着手します。retrieverの精度改善はgeneratorにも良い影響を及ぼすことが期待できるためです。回答と関係がない情報が与えられるほどLLMの回答精度が落ちていくことが知られており(Same Task, More Tokens: the Impact of Input Length on the Reasoning Performance of Large Language Models)、もしretrieverの精度改善が実現して本当に必要な情報をより関連度上位に位置させられるようになれば、ChatGPTに与える不要な情報を減らすことができます。「いかにChatGPTが解くタスクをよりシンプルにできるか」、それが最終回答の精度改善につながることになります。

次回はそのretrieverの精度改善の有力な手段の一つとして知られるrerankという技術について取り上げる予定です。


(*)retrieverにおいては質問と関連度の高い情報をDB等から検索することになりますが、その結果として得られる上位k件のことをtopkと表現します。本検証では、retriever(ベクトル検索)で取得した上位8件をChatGPTに与える設定にしているため、top8と記載しています。ちなみに、厳密には、retrieverにおける検索対象は、記事単位ではなく記事をそれぞれ指定の文字数(正確にはトークン数)を基準に分割した、チャンクと呼ばれる単位。したがって、top8とは質問と関連度の高い上位8件のチャンクということになります。

Related

関連記事

Recommend

おすすめ記事