Closed4

Haystackチュートリアルをやってみる: Better Retrieval with Embedding Retrieval

kun432kun432

Retriever

DocumentStoreから関連する文書の候補を抽出するのがRetriever。Reriverにはいくつかの種類がある。

  • 特徴
    • 単語の出現数を基にして動作する
    • 単語の出現に基づため、ベクトルは語彙のサイズに等しい非常に疎なものになる
    • BM25
    • TF-IDF
  • メリット
    • シンプルで高速
    • 原理が直感的
  • デメリット
    • クエリとテキスト間でのキーワード完全一致に依存

  • 特徴
    • ニューラルネットを用いて、情報を「密」なベクトルとして表現する
    • 2つのアプローチ
      • シングルエンコーダー: クエリと文章の両方を埋め込むための1つのモデルを使用。
      • デュアルエンコーダー: クエリと文章を別々に埋め込む2つのモデルを使用。
    • REALM
    • DPR
    • Sentence-Transformers
  • メリット
    • 単なる単語の一致よりも、意味の類似性を捉えられる
  • デメリット
    • 計算負荷が高い
    • 初回のモデル訓練が必要(ただし多くの事前学習済モデルが利用可能)

Embedding Retrievalで使用可能な主なモデル

以下のようなものが挙げられている

  • Sentence Transformers: 文の類似性
  • multi-qa-mpnet-base-dot-v1: 短いクエリでドキュメントを取得する
  • all-mpnet-base-v2: ドキュメント間の類似性
  • paraphrase-multilingual-mpnet-base-v2: 多言語

https://www.sbert.net/docs/pretrained_models.html#

kun432kun432

Colaboratoryで進める。

GPUを有効にする必要があるので、「ノートブックの設定」で"T4 GPU"を使用する。

インストール。今回はDocumentStoreにFAISSを使う。

%%bash

pip install --upgrade pip
pip install farm-haystack[colab,faiss,inference]

テレメトリー有効化。

from haystack.telemetry import tutorial_running

tutorial_running(6)

ロギング設定。

import logging

logging.basicConfig(format="%(levelname)s - %(name)s -  %(message)s", level=logging.WARNING)
logging.getLogger("haystack").setLevel(logging.INFO)
kun432kun432

Haystackはちょっと自分の探していたものとは違うのと、最近はもう触っていないので、クローズ。

このスクラップは2024/02/14にクローズされました