Dify でナレッジ内文章の検索精度を高めるための設定
こんにちは、コネヒトの@yosshiです!
この記事はコネヒト生成AIアドベントカレンダー 11日目の記事です。
今回は先日Difyでワークフローを作成する際に学んだ、「Dify でナレッジ内文章の検索精度を高めるために工夫したこと」について書きたいと思います。
(この辺りの知識をあまり持っていない立場からの視点なので、詳しい方からすると基本的なことなのかもしれません。その辺りはご容赦ください・・・)
作成したいもの
以下のような要件のチャットボットを作成しようとしていました。
以下のようなCSVファイルをナレッジとして登録する。
その上でユーザーが選択した「商品ジャンル」に該当する文章を、ナレッジから全て拾ってくる。
そこからCTR順に最大5件抽出して出力。
<CSVファイルのイメージ>
| **商品ジャンル** | **投稿日** | **商材名** | **記事タイトル** | **記事URL** | **CTR** |
|----------------------|-----------------------|---------------|---------------|-------------------------------|---------|
| サービス | 2024/11/01 10:00 | サンプル商品A | hogehoge | https://example.com/article1 | 0.532 |
| ベビーフード | 2024/11/05 14:30 | サンプル商品B | hogehoge | https://example.com/article2 | 1.167 |
| その他 | 2024/11/10 09:00 | サンプル商品C | hogehoge | https://example.com/article3 | 2.071 |
例えばユーザーが「ベビーフード」を選択すると、CSVからベビーフードに該当する文章が5件出力されるイメージ
起きた現象
いつも通りナレッジを登録し回答させようとしたのですが、以下のような問題が発生しました。
指定した5件の結果が返ってこない(数が不足している)
間違いなく条件に該当する文章は5件以上存在する状態
該当する文章が存在しているにも関わらず「存在しない」と言われる
本来該当しない「商品ジャンル」の文章を抽出してしまう。
そしてこれらの問題を解消しようとプロンプトを色々と調整したのですが、それだけでは変わりませんでした。
そもそも、RAGに対する理解が間違っていた
RAGとはそもそも、「事前に登録した大量のデータの中から、それに関連するであろう一部分だけ抽出して取得する」というものです。よって、該当するものを全て拾ってくる、という動作にならないことは当然のことでした。
よって本来このような要件を実現するためには正式なDBを用いてクエリ実行するのが適切と言えます。
ただ、そうはいってもLLMで抽出できないか試した結果、「全文検索」を設定するのが良さそうだと思いました。(ただ全て漏れなく確実に取得する、ということはできないのでそれを前提に使う必要がある)
(前提情報)検索設定の種類
前提情報としてDifyにて設定できる検索設定の内容について説明します。
Difyでは現状以下3パターンの検索方法を選ぶことができます。
ベクトル検索
テキストや画像などのデータを数値ベクトルとして表現し、それらベクトル間の類似度を計算することで関連する情報を見つけ出す検索方法。単語や文章の「意味」を捉え、似た意味を持つ別の単語・文章を見つけ出すことに長けている。
全文検索
ドキュメント内の全ての用語をインデックス化し、ユーザーが任意の用語を検索してそれに関連するチャンクを取得する。正確な照合などに長けている。
ハイブリット検索
全文検索とベクトル検索を同時に実行し、両方の利点を組み合わせながらそれぞれの欠点を補う。Difyではハイブリット検索を「おすすめの設定」として表現している。
Difyの画面上、ハイブリットがおすすめされていることから、あまり考えずにハイブリット検索を選択していました。
しかし今回のような要件(商品ジャンルのような「特定のキーワード」に該当するものを漏れなく拾ってくる)の場合、「全文検索」が最も適していると言えそうです。
参考にした記事
試した結果・理解した点
今回、検索設定を「全文検索」に変更したところ、検索におけるヒット数が増えるなど検索精度が改善しました。
この結果から、状況に応じて検索設定に関しても状況に応じて適切に設定する必要があるのだと理解しました。
最後に
本日は「Dify でナレッジ内文章の検索精度を高めるための設定」についてお話ししました。要件に応じて適切な検索設定を選択し、より効果的なナレッジ活用をしていきたいと思います。
コネヒト生成AIアドベントカレンダー、明日はコーポレートメンバーの樋口さんの投稿です。これからもまだまだ続きますのでどうぞお楽しみに!