はじめに
DifyでRAGを使う場合、検索設定を次の3つから選択することになります。
- ベクトル検索
- 全文検索
- ハイブリッド検索
ハイブリッド検索とは文字通り、ベクトル検索と全文検索とをハイブリッドで行うため、こちらの方が精度が高くなります。ハイブリッド検索が推奨値となります。そして、ハイブリッド検索を選択すると、次に「ウェイト設定」と「Rerankモデル」が選択できるようになります。
ウェイト設定
ウェイト設定のウェイトとは重みのことです。なぜか訳を「重み設定」とせずに「ウェイト設定」と訳しています。何のウェイトかといえば、ベクトル検索で使われる「セマンティック優先度」と、全文検索で使われる「キーワード優先度」のこととなります。単にベクトル検索と全文検索を行うだけでなく、ウェイトを考慮した上で検索した方が、精度をあげることができます。
セマンティック優先度とキーワード優先度の重みの付け方は諸刃の剣です。つまり、セマンティック優先度を高く設定すれば、キーワード優先度は低くなり、逆にセマンティック優先度を低く設定すれば、キーワード優先度は高くなります。
どの程度の重み加減にするといい塩梅になるのかついては、少し話が難しくなりそうです。
Rerank設定
精度をよくしたい場合は、「ウェイト設定」ではなく「Rerank設定」をすることになります。ウェイト設定よりもRerank設定の方が検索の精度が高くなります。Rerank設定にすれば、重みを付けたハイブリッド検索は行ってくれないが、その代わりに、再順位付けを行うようになります。
Rerank設定の場合、Rerank専用のモデルを別途指定する必要があります。プルダウンメニューからRerankモデルの一覧が表示されない場合は、Rerank用のモデルのAPI-KEY設定ができていません。
OpenAIのAPI-KEY設定を行っただけでは、Rerank用のモデルは使えるようになりません。OpenAIはそもそも、Rerank用のモデルを提供していないためです。新たに、Rerank用のモデルを提供しているプロバイダーからAPI-KEYを取得して設定する必要があります。
どこのプロバイダーがRerank用のモデルを提供しているのかについては、下記の赤線部分を見れば分かります。
提供しているプロバイダーの数はそれ程多くはありません。迷ったならCohereを選択するといいようです。Cohereが提供しているモデルが一番精度が高くて有名なためです。Cohereのモデルは無償で提供されています。
「rerank-v3.5」は最新のモデルでv3.0よりも精度が上がっています。推論が強化されているようで、多言語にも対応しています。100以上の言語に対応しており、当然日本語にも対応しています。最新のモデルで試した場合は「rerank-v3.5」を選択することになります。
Cohereとは
RAGを使うにあたって、なぜ、Rerank用のモデルが必要になるのかといわれれば、LLMのモデルだけでは高い精度が担保できないためです。LLMにはハルシネーション(幻覚)を発生させる弱点を持っています。LLMのモデルに更にRerankのモデルを組み合わせることで、ハルシネーションを抑制することができるようになります。
CohereはOpenAIほど知名度は高くはないが、カナダに拠点を持つスタートアップ企業で、特にRAGに向けたモデルの開発に力を入れています。また、OracleやNVIDIAなどが出資しており、OpenAIの有力なライバルと目されているようです。
埋め込みモデルとは(補足)
RAGを使う場合、LLMとは別に埋め込みモデルを選択することになります。Rankモデルともまた異なります。埋め込みモデルはデータを数値ベクトルに変換する際に利用されるモデルです。
OpenAIのAPI-KEYを登録すると3つの埋め込みモデルが選択できるようになります。
CohereのAPI-KEYを登録すると7つの埋め込みモデルが選択できるようになります。
OpenAIの埋め込みモデルは、「ada-002 → small → large」とバージョンアップしていっているようで、largeが一番性能がいいことになります。どれを選択したらいいか迷った場合は、largeをとりあえず選択しておけば問題ないかと思います。ただし、largeの場合、1Kトークンあたり$0.00013のコストがかかり、smallの場合は、 1Kトークンあたり$0.00002コストがかかることになります。
Cohereではナレッジで読み込みデータが英語である場合は「embed-english-v3.0」を選択し、英語以外であれば「embed-multilingual-v3.0」を選択します。日本語であれば「embed-multilingual-v3.0」を選択することになります。