銀河鉄道

LangChain のthreshold(しきい値)とは|ベクトル検索における「信用のボーダーライン」設計

サムネイル
[LangChain]thresholdしきい値
thresholdで
ボーダーライン

threshold?

敷居とする値のこと

threshold(しきい値)とは

「ユーザーの質問」と「資料から得たテキスト(チャンク)」とが、どれくらい類似しているか(cosine類似度)を数値としたもの

設定された数値より高ければOK、それ以下なら無視するという基準とするもの。

類似度スコア(cosine類似度)とは
  • ユーザーの質問と資料の文章の「意味の近さ」を、cosine類似度(-1〜1)で表した数値。
  • 1に近いほど似てて、0に近いほど似てない。

threshold(しきい値)が高いと?低いと?

設定内容メリットデメリット
高い(例:0.8)厳選モード精度が高くなる該当なしで沈黙することも
低い(例:0.3)ゆるゆるモード関連情報は拾いやすい関係ない情報まで混ざることも

threshold(しきい値)はどこで使う?

  • ユーザーの質問に対し、
    どのチャンク(テキストのかたまり)を参考にして回答を作るか を選ぶとき

  • similarity_search()similarity_search_with_score() などで
    どのチャンクを参考にするか選ぶとき。
  • LangChainで使うときの例:
docs = vectorstore.similarity_search_with_score(
    query="月の起源は?",
    score_threshold=0.75,
    k=5
)

なぜ、threshold(しきい値)の設計が大事?

「どこまでを“意味が近い”と見なすか」を設計する

信頼性の調整

「どれくらい意味が近かったら、そのチャンクを信用していいか?」
を決める“フィルターの強さ”。

  • 高いしきい値(例:0.8)→ 厳選!関係ありすぎるやつだけ通す
  • 低いしきい値(例:0.3)→ ゆるゆる!ちょっと似てたら通す

なにに影響する?

  • 回答の正確さ
  • 回答の有無
  • 誤情報を拾う危険性

OpenAI との関係

threshold は LangChainの機能。OpenAIではない!

  • OpenAIはベクトルをくれるだけ
  • 選ぶ基準はLangChainが担当する
要素提供元役割
OpenAIOpenAI社テキスト → ベクトル化(embedding)だけ
FAISSMeta社ベクトルの類似検索をするエンジン
LangChainLangChain社embedding・検索・しきい値設定をつないでくれるラッパー

OpenAI API(ChatGPTとか)

  • Embedding(埋め込みベクトル)を出してくれるだけ。
  • たとえば text-embedding-ada-002 でベクトルが得られる。
  • 類似度の計算やしきい値の制御はしてくれない

LangChain

  • ベクトル検索(FAISSとか)で、
    • 類似度を計算(cosine similarity)
    • score_threshold= みたいにしきい値を自分で設定できる。
  • これは similarity_search_with_score(threshold=0.7) とかの形で使う。

まとめ|しきい値ってどこで使う?

LangChainの検索フェーズで、どこまでを“類似”と見なすかの基準

OpenAIとLangChainのつなぎ方

  1. OpenAI で「テキスト」→「ベクトル」に変換(埋め込み)
  2. LangChain 経由でそのベクトルを FAISS に保存
  3. ユーザーの質問をまたベクトル化して、FAISS で類似ベクトルを検索!

もし OpenAI 単体で使うなら、自分で類似度計算して、しきい値チェックも手動でしなければならない

まとめ

しきい値は「答えの信用ライン」。

設計者がコントロールする、賢さと柔らかさの境界線

ベクトル検索では「意味が近いかどうか」を数値で表現する。
その数値が「このくらい以上なら使ってええで」というボーダーライン=しきい値
しきい値が高すぎるとスルーされ、低すぎると関係ない情報まで拾ってしまう。

つまり、しきい値は「信用できる根拠ラインの設計」そのもの。
設計者の“答えの厳しさ”を決めるスライダーみたいなもの。

補足:しきい値とは、文字通り「敷居」のこと

しきい値って、「閾値」って難しい漢字になってるけど、実は「敷居」のこと。

「敷居をまたぐ値」という意味。

またいだら“使える”、またげなかったら“無視”。

著者

author
月うさぎ

編集後記:
この記事の内容がベストではないかもしれません。

記事一覧