こんにちは。ひるたんぬです。
突然ですが、皆さんはシャツを着る時に後ろ前をどのように判断していますか?
一般的な判断基準としては首の部分の形状(Vネックやボタンが付いている場合は分かりやすいですよね)や、首の部分についているブランドのタグで判断される方もいらっしゃるのでは無いでしょうか。
ただ、この場合ですと、シャツの首周りを確認するために、わざわざシャツの向きを変えたり、整えたりする必要がありますよね(語彙力が乏しく…通じますかね?)。小さなことですが、大変な作業だよなぁ…と私は勝手に思っています。
私はシャツの裏側についている洗濯表示のタグの位置で判断しています。実は、洗濯表示のタグは必ずと言っていいほど左についているんです¹。
これにより、着る前にシャツの向きを変えることなく、下から裏の洗濯タグの位置を確認し、着ることができます。
少し時短することができました。嬉しいですね。
¹ 私の人生経験上では左側にしかついていなかったのですが、明確にルールや取り決めなどは無いようです。右側の服が増えたらどうしよう…
参考:洋服のタグ | さくら中央税理士法人
さて、今回は生成AIを利用するにあたって、ハルシネーションを起こしにくくする手法の一つであるRAGについて、個人的に気になったことがあったので検証してみました。
気になったこと
先述した通り、RAGは生成AIのハルシネーションを起こしにくくするための手法の一つであり、昨今「ハルシネーションを防ぐにはRAGを導入しましょう!」と言ったことをよく耳にしていました。
そこで、私は「RAGの情報そのものがLLMにて学習していた事前知識と矛盾する場合や、RAGの情報内で矛盾していた場合どういう結果になるのだろうか…?」と思い、今回の検証を実施することにしました。
テストケース
上記を整理すると、今回は以下のようなテストケースが考えられます。
今回は知りたいことを”A”, “B”とし、解を”V, W, X, Y, Z”で表しています。また”−”はその情報を持ち合わせていない・与えないことを表します。
パターン | LLMの事前知識 | RAGの情報① | RAGの情報② |
①-a | A = Z | − | − |
①-b | A = Z | A = Y | − |
①-c | A = Z | A = Y | A = X |
②-a | − | B = W | − |
②-b | − | B = W | B = V |
パターン①は、LLMの事前知識がある場合、②はない場合です。
また、各パターンの”a”は、一般的な(正しい)使い方の結果を想定しています。
事前準備
RAG環境の準備
今回の検証を実施するにあたり、RAGの構築が必須となります。今回は比較検証がメインとなるため、RAGの構築につきましては、下記記事を参考に実施しました。
…特に大きな懸念もなく構築することができました。
なお、今回は複数のケースで独立したRAG(ナレッジベース)を作成する必要があるため、バケット内のケースごとにフォルダを分割し、それぞれでナレッジベースを作成しました。
パターン①の題材決め
パターン①では、Aというものに対して、既知の解Zと、矛盾する解X, Yを用意する必要があります。
今回はAをりんごとし、Zを果物と定義することにします。そして矛盾する解はそれぞれ「X = 魚類」「Y = 肉類」とします。
パターン②の題材決め
パターン②では、LLMがまだ知らない事象について確認する必要があります。
今回は架空の何か「えよぴんぷ」を作り出し、矛盾する解「V = 日本の郷土料理」「W = SCSKの社員」とします。
事前確認としてLLMに「えよぴんぷ」を知っているか確認も取ります。
知らないと答えてくれました。念の為、郷土料理やSCSKの社員か聞いても知らないか確認をします。
知らなかったですね。良かったです。
RAGに与える資料作り
今回は各要素について、「りんごは果物です。」等といった記述のみをした文書ファイルをそれぞれ作成し、与えることにします。
一例を以下に添付します。
これだけのPDFファイルも中々シュールです。
検証
準備も整ったので、一つずつ検証をしてみましょう。
パターン①-a
まずは、既知の情報のみでの確認です。シンプルな質問で確認をします。
▼ A = Z の確認
…もちろん正しいです。
パターン①-b
続いて、矛盾する情報を一つ与えた場合について確認をしてみます。
★ 「A = Z」と「A = Y」の情報を持っている場合です。
…LLMは自身に「常識」を持っており、それと照らし合わせて判断していることが伺えました。
常識を基に、矛盾した情報に惑わされることなく「りんごは果物である」という事実を一貫して述べています。
パターン①-c
更に矛盾する情報を与えた場合の確認です。
★ 「A = Z」と「A = Y」「A = Z」の情報を持っている場合です。
パターン①-bと同じように、「りんごは果物である」というLLMの主張は変わりませんでした。
また、ナレッジベースの情報に矛盾があるということも指摘してきました。
パターン②-a
ここからは、LLMに事前知識がない場合の検証です。
★ 「B = W」の情報のみを持っている場合です。
きちんとRAGが動作し、えよぴんぷがSCSKの社員であることを答えてくれました。
料理にならなくて安心しました。
パターン②-b
更にLLMに矛盾した情報を与えてみましょう。
★ 「B = W」と「B = V」の情報を持っている場合です。
ここで、BとWの関係について、一方のみの情報で解を出す事例がありました。
何回か聞いてみましたが、この状況は変わりませんでした。
そこで、BとVの関係についても何度か質問してみたところ、以下のような回答を出すことがありました。
まとめ
今回の検証の結果をまとめます。
パターン | LLMの事前知識 | RAGの情報① | RAGの情報② | 結果 |
①-a | A = Z | − | − | A = Z のみ出力 |
①-b | A = Z | A = Y | − | A = Z のみ出力 A = Y は誤った情報と回答 |
①-c | A = Z | A = Y | A = X | A = Z のみ出力 A = X, Y は誤った情報・矛盾していると回答 |
②-a | − | B = W | − | B = W のみ出力 |
②-b | − | B = W | B = V | 結果が安定せず |
考察・今後に向けて
ここからは私個人の完全なる推測です。
今回は、ナレッジベースに与える情報として、「AはYです。」といった事実のみ与えました。
そのため、パターン①のように事前知識がある場合、情報量が少ないナレッジベースの内容は虚偽として捉えられた可能性が高いです。
一方、パターン②のようにLLMが事前確認として持ち合わせていない事象に対しては、情報量が(恐らく)等しい事象を与えたため、LLMが判断に迷い、様々な結果が出力されたと考えています。
今後はパターン①に対抗するため、事前知識に対抗しうる情報量をナレッジベースに与えた場合や、パターン②において情報量に偏りをもたせた場合の挙動について調査をすると、また面白い結果が出るのかなと感じた次第です。
おわりに
この記事を執筆していると、ほんの少しですが学生時代の研究生活を思い出しました。(今回の検証は、厳密性・再現性の観点から見ると本当にお遊び程度ですが…)
この内容についても学術的に研究されている論文もあります(アーカイブですが)ので、興味がある方は読んでみると面白いかもしれません。私も少しだけですが読みました。
※ 今回の検証結果の一部は、下記論文の内容とも合致していました。