Sentence Transformers 2.2 : 使用方法 : 交差エンコーダ

Sentence Transformers 2.2 : 使用方法 : 交差エンコーダ (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 11/28/2022 (v2.2.2)

* 本ページは、UKPLab/sentence-transformers の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

クラスキャット 人工知能 研究開発支援サービス

クラスキャット は人工知能・テレワークに関する各種サービスを提供しています。お気軽にご相談ください :

◆ 人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。スケジュール
  • お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。

お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。

  • 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
  • sales-info@classcat.com  ;  Web: www.classcat.com  ;   ClassCatJP

 

Sentence Transformers 2.2 : 使用方法 : 交差エンコーダ

SentenceTransformers はまたセンテンスペア・スコアリングとセンテンスペア分類タスクのための交差エンコーダのロードもサポートしています。

 

Bi-エンコーダ vs. 交差エンコーダ

最初に、Bi- と交差-エンコーダの違いを理解することは重要です。

Bi-エンコーダ は与えられたセンテンスに対するセンテンス埋め込みを生成します。センテンス A と B を BERT に独立に渡すと、センテンス埋め込み u と v という結果になります。そしてこれらのセンテンス埋め込みはコサイン類以度を使用して比較できます :

その一方で、交差エンコーダに対しては、両方のセンテンスを同時に Transformer ネットワークに渡します。そしてそれは入力センテンスペアの類以度を示す 0 と 1 の間の値の出力を生成します :

交差エンコーダはセンテンス埋め込みを生成しません。また、個々のセンテンスを交差エンコーダに渡すこともできません。

私たちの 論文 で詳述しているように、交差エンコーダは Bi-エンコーダよりも良いパフォーマンスを実現します。しかし、多くのアプリケーションにとてはそれらは実践的ではありません、それらは例えばインデックスを作成したり、コサイン類以度を使用して効率的に比較できるような埋め込みを生成しないからです。

 

When to use Cross- / Bi-Encoders?

交差エンコーダは、スコア付けしたいセンテンスペアの事前定義されたセットを持つ場合にはいつでも使用できます。例えば、100 のセンテンスペアを持ち、これら 100 ペアのための類似性スコアを得たい場合です。

Bi-エンコーダ (センテンス埋め込みの計算 参照) は効率的な比較のためにベクトル空間のセンテンス埋め込みを必要とする場合に使用されます。アプリケーションは例えば情報検索 / 意味検索やクラスタリングです。これらのアプリケーションに対しては交差エンコーダは間違った選択です : 10,000 センテンスを CrossEncoder でクラスタリングするには、およそ 5 千万のセンテンス組み合わせに対して類以度スコアを計算する必要があり、これはおよそ 65 時間かかります。Bi-エンコーダを使用すれば、各センテンスに対して埋め込みを計算するので、5 秒しかかかりません。それからクラスタリングを行なうことができます。

 

交差エンコーダの使用方法

交差エンコーダの使用は非常に簡単です :

from sentence_transformers.cross_encoder import CrossEncoder
model = CrossEncoder('model_name_or_path')
scores = model.predict([["My first", "sentence pair"],  
                        ["Second text", "pair"]])

model.predict にセンテンス ペア のリストを渡します。注意してください、交差エンコーダは個々のセンテンス上では動作しません、センテンスペアを渡す必要があります。

モデル名としては、Huggingface AutoModel クラスと互換性のあるモデルかパスを渡すことができます。

コーパスのすべての可能性のあるセンテンスによるクエリーをスコア付けする、完全なサンプルについては、cross-encoder_usage.py をご覧ください。

 

Bi- と交差エンコーダの組み合わせ

交差エンコーダは Bi-エンコーダよりも高いパフォーマンスを実現しますが、大規模なデータセットには上手くスケールしません。ここでは、例えば情報検索 / 意味検索シナリオでは、交差- と Bi-エンコーダを組み合わせることは意味がある可能性があります : まず、クエリーに対して例えば top-100 の最も類似したセンテンスを検索するために効率的な Bi-エンコーダを使用します。それから、すべての (query, hit) の組み合わせに対してスコアを計算することにより、これらの 100 ヒットを再ランク付けするために交差エンコーダを使用します。

Bi- と交差エンコーダを組み合わせる詳細は、アプリケーション – 情報検索 をご覧ください。

 

交差エンコーダの訓練

貴方自身の交差エンコーダモデルを訓練する方法は 交差エンコーダ訓練 をご覧ください。

 

以上