データナード

機械学習と自然言語処理についての備忘録 (旧ナード戦隊データマン)

paraphrase retrievalについてのメモ

paraphrase retrievalは、クエリ文と同等の意味を持つ文をシステムから検索するタスクです。

整理

パラフレーズとはある文の言い換えのことですが、paraphrase retrievalではクエリと同等の意味を持つ文をシステムから検索するという情報検索の問題を含んでいます。

 g: F \rightarrow I

のような変換を考えます。これは、特徴空間  F からインデックス空間  I を抽出する、というようなもので、インデックス空間は抽出対象の集合の全体、または抽出対象の順序集合の全体で与えられます。特に順序集合を抽出する問題はランキングの問題として考えることができます。ランキングの問題の場合、各々の順序におけるランキングスコアを得られる場合があります。

特徴空間は、クエリ  Q とシステム内の文  S から抽出されますが、複数の抽出方法があります。1)クエリからの抽出, 2)システム内の文からの抽出, 3)クエリと文のペアからの抽出, 4)その他の外部情報(ユーザーデータ等)を用いた抽出、などが典型的なものです。

基本的に使える情報は、

  • クエリ文  Q
  • システム内に保存された文 S
  • クエリから特徴を抽出する関数  f_Q: Q \rightarrow F_Q
  • システムに保存された文から特徴を抽出する関数  f_S: S \rightarrow F_S
  • クエリとシステム内の文の組み合わせから特徴を抽出する関数  f_P: Q \times S \rightarrow F_P
  • 高速に検索可能な特徴  f_T: S \rightarrow F_T
  • 演算された特徴  f_R: F_Q \times F_T \rightarrow F_R
  • i回目の検索時点における候補要素のID集合  I_i
  • (その他の外部的特徴  F_O )

のようなものがあると考えられます。

計算コスト上の理由から、 F_Q に対して  F_T のみを用いた検索  I_1 = g_1(I_0; F_Q, F_T) を最初に行うことが多いと考えられます。これは、事前計算可能な特徴の一部を用いた検索のほうが、それ以外の特徴を用いた検索よりも高速であることを意味します。たとえば、インデクシングはそのような事前計算の一つです。通常、 I_1 はTop-kだけ残します。

インデクシングされた文を検索したあと、検索精度を上げるための追加の検索がTop-kに対して行われます。そのような検索  I_2 = g_2(I_1; F_Q, F_S, F_P, F_O) はより高い精度を求めて行われます。一般に、検索アルゴリズム  g_i に対し、  I_i = g_i(I_{i-1}; F_Q, F_S, F_P, F_O) を適用することができます。

ただし、関数 g_i は、候補インデックス  I_{i-1} から、後続の特徴集合  F_x を使って検索を行い、絞り込んだ(or ソートした) インデックス集合(or 順序集合)を  I_i として出力する概念的な関数です。通常、 F_S, F_T, F_O はクエリに依存しないため、事前計算が可能ですが、事前計算可能な特徴の中に高速に検索可能ではない特徴が含まれる可能性もあります。

ベクトル検索

ベクトル検索は一つの検索方法です。

文は  f_S f_Q によってベクトルへ変換されます。事前計算されたベクトル集合  F_T は、内部的にクラスタリングやインデクシングが行われていることがあります。検索  I_1 = g(I_0; F_Q, F_T) は、クエリベクトルと事前計算されたベクトルの何らかの近さ  F_R を計算することによって検索されるのが一般的です。

つまり、これらのフェーズは以下のようにまとめられます:

  1. 検索対象の文を事前にベクトル化し、格納しておく (インデクシング)。
  2. クエリが投げられたとき、クエリをベクトル化する。(エンコード)
  3. クエリベクトルを入力して、システムから近い文を見つける (距離計算)。

faissのようなツールはそのような検索のためのものの一つです。

もし、faissを使うことが決まっていて、ベクトル以外の特徴を使わないなら、paraphrase retrievalにおいて操作可能なのは、「エンコードの手法」となります。つまり、インデクシングや「近さ」の計算方法はfaissが用意したものを使います。

言い換えれば、paraphrase retrievalでfaissを使う場合、「どんなエンコードをすればパラフレーズを高い精度で見つけることができるか」という問題とすることができます。

具体例

このような要件を満たす論文がないかを調べたところ、[1905.12786v1] Large Scale Question Paraphrase Retrieval with Smoothed Deep Metric Learning を見つけました。

基本的に、インデクシング及び検索はfaissが使われており、エンコード手法が主に検討されています。

典型的なアプローチはTriplet lossを使った方法で、ポジティブな例とネガティブな例の間の距離を最大化しながら、ポジティブな例間の距離を最小化するものです。

この論文における手法は、エンコーダの損失関数に工夫を加えたもののようで、Smoothed Deep Metric Learning と論文内で呼ばれています。これは、Triplet lossのような最小化の代わりに、問題を分類問題と見なしているようです。理想的には、元の質問の言い換えをデータセット内の他のすべての質問との間で分類できればいいのですが、時間とメモリの制約により実行不可能です。そこで、ランダムサンプリングされた質問の中から有効な言い換えだけを特定することができれば、この一般的な損失を概算することができる、という旨が述べられています (詳細は論文)。

ただし、目的のタスクのためのエンコーダを訓練するために訓練データが必要になるため、それを確保するための方法を考える必要があります。

参考

  1. [1905.12786v1] Large Scale Question Paraphrase Retrieval with Smoothed Deep Metric Learning
  2. Faiss: A library for efficient similarity search - Facebook Engineering
  3. Learning to rank - Wikipedia