検索の構成を変えたとき、良くなったかどうかは数字で比べないと分かりません。ところが、比べ方そのものに落とし穴があります。
4つの構成を測ったところ、元の語で聞いた問いでは全部が同じ46.7%でした。言い換えで聞くと33.3%から53.3%まで開きます。
4つの構成を2種類の問いで実際に測りました。元の語では差が出ず、言い換えでは20ポイント開きます。
検索評価で何が結論を左右するのかを、実際に測って確かめました。用意したのは4つの構成と、性質の違う問い5件ずつです。
検索も評価も本当に実行しています。構成の中身も問いも正解もコードに書いてあり、そこを変えれば結果も変わります。
const configs = {
'語の一致だけ': (q) => overlap(q).map((x) => x.i),
'BM25': (q) => bm25(q).map((x) => x.i),
'BM25+並べ直し': (q) => { /* 上位6件を語の近さで並べ直す */ },
'BM25+言い換え補完': (q) => bm25(expand(q)).map((x) => x.i),
};
元の語で聞いた場合(問い 5件) 構成 適合率@3 再現率@3 nDCG@3 語の一致だけ 46.7% 90.0% 65.2% BM25 46.7% 90.0% 77.5% BM25+並べ直し 46.7% 90.0% 69.8% BM25+言い換え補完 46.7% 90.0% 77.5% 適合率で選ぶなら: 語の一致だけ nDCGで選ぶなら: BM25 指標で結論が分かれる 言い換えで聞いた場合(問い 5件) 構成 適合率@3 再現率@3 nDCG@3 語の一致だけ 33.3% 60.0% 48.1% BM25 40.0% 70.0% 54.2% BM25+並べ直し 40.0% 70.0% 54.2% BM25+言い換え補完 53.3% 90.0% 78.8% 適合率で選ぶなら: BM25+言い換え補完 nDCGで選ぶなら: BM25+言い換え補完 指標で結論が一致する
上の表の適合率の列を見てください。4つとも46.7%で並んでいます。この問いでは、どの構成を選んでも同じという結論になります。
再現率も4つとも90.0%です。2つの指標が、4つの構成をまったく区別していません。
理由は問いの性質にあります。文書の言葉づかいをそのまま使った問いでは、どの構成でも同じ文書が上位に来ます。差が出ないのは構成が同等だからではなく、問いが差を引き出せていないからです。
下の表では33.3%から53.3%まで開きました。20ポイントの差です。同じ4つの構成を、同じ指標で測っています。
違うのは問いだけです。利用者が文書の言葉づかいを知らずに聞いた場面を再現すると、言い換えを補う構成が明確に強いという結論になります。
もうひとつ見ておきたいのが、上の表の結論です。適合率で選ぶと「語の一致だけ」、nDCGで選ぶと「BM25」になりました。
適合率が並んでいるので、先頭に来たものが選ばれただけです。差のない指標で順位を付けると、意味のない勝者が出ます。指標の性質はnDCGの記事で扱っています。
差が出ないのは構成が同等だからではない。問いが引き出せていない。
It is important to note that one set of document ratings is needed per test query, and that the relevance judgements are based on the information need of the user that entered the query.原文Elasticsearch Reference「Ranking evaluation」 この内容の有効期限2027-02-18
問いと正解の組をそろえ、構成ごとに同じ指標で測ります。正解を用意する作業が本体になります。
検索評価は、問いと正解の組を用意して、構成ごとに同じ指標で測る作業です。手を入れた結果が良くなったかを判定するために置きます。
手間がかかるのは2番目です。Elasticsearchの説明でも、検索の要求に対する文書の関連度を表す評価の集合が必要だとされています。
同じ文書でも、問いが違えば正解かどうかが変わります。同じ文書では、試験の問いごとに1組の評価が必要で、関連度の判断はその問いを入力した利用者が何を必要としていたかにもとづくと明記されています。
つまり文書に「重要」といった印を付けても評価にはなりません。問いとの組で決まります。
測る場面は決まっています。構成を変える前と後です。前を測っていなければ、後の数字が良いのか悪いのか判定できません。
並べ直しを入れて数字が下がった例はリランキングの記事で扱っています。前を測っていたから、下がったと分かりました。
測ってみて効いたのは、文書の言葉づかいと同じ問いと、違う問いを分けて用意することでした。前者だけだと4つの構成が横並びになり、何も判断できません。後者を足した時点で、初めて20ポイントの差が見えました。
A set of document ratings that represent the documents' relevance with respect to a search request.原文Elasticsearch Reference「Ranking evaluation」 この内容の有効期限2027-02-18
差の出ない問いで測り、横並びの数字から勝者を選ぶことです。問いを見直さないと解けません。
検索評価の失敗は、測っているのに何も分かっていないという形で起きます。数字は出ているので、失敗したことに気づきにくくなります。
前の節の上の表では、適合率が4つとも46.7%でした。この状態で「いちばん良い構成」を選ぶと、順番が先頭のものが選ばれるだけです。
実際、その表では適合率で「語の一致だけ」が選ばれています。下の表では最下位の構成です。
4番目が効かないことは、前の節が示しています。5件を50件にしても、性質が同じなら4つとも46.7%のままです。
指標の読み方にも注意が要ります。Elasticsearchでは、上位k件に関連する結果がいくつ入ったかを測る指標が用意されていると説明されています。
前の節の表でも、再現率は元の語で90.0%、言い換えで60.0%から90.0%と動いています。適合率が横並びでも、再現率では差が出ていました。1つの指標だけを見ると、この差も見落とします。
数字が出ていても、差が出ていなければ何も分かっていない。
Recall at K (R@k) This metric measures the total number of relevant results in the top k search results.原文Elasticsearch Reference「Ranking evaluation」 この内容の有効期限2027-02-18
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る