学習型スパース検索による情報検索の強化
Milvusベクトルデータベースを用いて、学習されたスパース埋込みの内部構造、利点、実用的なアプリケーションを探求する。
シリーズ全体を読む
- 自然言語処理の基礎:トークン、Nグラム、Bag-of-Wordsモデル
- 言語モデルのためのニューラルネットワークとエンベッディング入門
- 疎な埋め込みと密な埋め込み
- 長文のためのセンテンス・トランスフォーマー
- 独自のテキスト埋め込みモデルをトレーニングする
- 埋め込みモデルの評価
- クラス活性化マッピング(CAM):ディープラーニングモデルにおけるより良い解釈可能性
- CLIP物体検出:AIビジョンと言語理解の融合
- SPLADEを発見:スパースデータ処理に革命を起こす
- BERTopicの探求:ニューラル・トピック・モデリングの新時代
- データの合理化次元を減らす効果的な戦略
- All-Mpnet-Base-V2:AIによる文埋め込み機能の強化
- データ分析における時系列の埋め込み
- 学習型スパース検索による情報検索の強化
- BERT(Bidirectional Encoder Representations from Transformers)とは?
- ミクスチャー・オブ・エキスパート(MoE)とは?
情報検索手法の成長は、伝統的な統計的キーワードマッチングから、BERTのような深層学習モデルの変革力への旅を見てきた。従来のアプローチは強固な基盤を提供する一方で、テキストの微妙な意味的関係を捕捉する手助けをしばしば必要としていた。BERTのような高密度検索手法は、高次元ベクトルを活用して文脈的意味論をカプセル化することで、大きな進歩をもたらした。しかし、ドメイン固有の知識に依存しているため、Out-Of-Domainの状況では課題に直面する。
学習されたスパース埋め込みは、スパース表現の解釈可能性とディープラーニングモデルの文脈理解を組み合わせたユニークなソリューションを提供します。このブログでは、Milvusベクトルデータベースを用いて、学習済みスパース埋込みの内部構造、利点、実用的なアプリケーションを探ります。この議論は、効率性と解釈可能性の両方を強化することで、情報検索システムに革命をもたらす可能性を照らし出す。以下は、学習されたスパース検索に関するいくつかの簡単なメモである。
スパース検索入門
スパース検索は、膨大なコーパスから関連性の高い小さな文書集合を効率的に検索することに重点を置いた情報検索の手法である。高次元ベクトルを使用する密な検索手法とは異なり、スパース検索はクエリと文書をスパースベクトルとして表現する。この手法では、データの疎密、つまり0でない次元(または項)がわずかであることを利用し、検索効率を大幅に向上させる。
スパース検索の主な利点は、検索結果の精度を向上させる能力にある。最も関連性の高い用語に焦点を当て、重要性の低い用語を無視することで、スパース検索は、クエリと適切な文書をより効果的にマッチさせることができる。これは、テキスト、画像、その他のデータタイプを含むマルチモーダル検索シナリオなど、複数の情報源を組み合わせる必要があるアプリケーションで特に有益である。
近年、スパース検索は、その解釈のしやすさと効率性から支持を集めている。迅速かつ正確な検索を可能にし、進化し続ける情報検索において非常に貴重なツールとなっている。
キーワードマッチングから文脈理解へ:情報検索手法の進化
初期の情報検索システムは、TF-IDFやBM25のようなBag of Wordsアルゴリズムのような統計に基づいたキーワードマッチング手法に大きく依存していた。これらのアプローチは、文書コーパス全体の用語頻度と分布を分析することで、文書の関連性を評価する。その単純さにもかかわらず、これらの手法は驚くほど豊富であることが証明され、インターネットの爆発的な成長期にユビキタスなツールとなった。
2013年、GoogleはWord2Vecを発表した。これは、高次元ベクトルを使って単語を表現し、その意味的ニュアンスをカプセル化する最初の試みである。このアプローチは、機械学習主導の情報検索の方法論への最初のシフトを示した。さらに、転置インデックスの実装は、検索操作を最適化するために不可欠となり、その機能を強化するために、出力ディレクトリなどのパラメータを調整する必要があった。
この状況は、情報検索のベストプラクティスに革命をもたらしたトランスフォーマーをベースとした、事前に訓練された言語モデルであるBERTの登場によって劇的に変化した。アテンションパワードトランスフォーマーを活用することで、BERTはドキュメントの複雑な文脈的意味論を捉えます。BERTは、それらを高密度のベクトルに凝縮し、最近傍ベクトル検索を使用して、任意のクエリに対してロバストかつ意味的に正確な検索を可能にします。その結果、検索プロセスを根本的に強化する大きな進歩がもたらされた。
デビューから3ヶ月後、NogueiraとChoはBERTをMS MARCOの通過ランキングタスクに適用した。BERT は、以前の最良手法であった IRNet と比較して 30%の有効性の向上を達成し、BM25 のベースラインを 2 倍上回った。2024年3月まで早送りすると、テキストランキングのスコアはさらに急上昇し、評価と開発でそれぞれ0.450と0.463という驚異的なスコアに達している。
出典)
これらの進歩は、情報検索手法の絶え間ない進化を強調するものであり、自然言語処理(NLP)のニューラル時代と呼ぶにふさわしい到来を告げるものである。
学習されたスパース検索テクニック
学習されたスパース検索技術は、伝統的な語彙的単語袋モデルと最新のベクトル埋め込みアルゴリズムの長所を組み合わせることで、この分野での重要な進歩を表している。これらの技術は、機械学習モデルによって学習された文脈情報で強化されたスパースベクトルとして、クエリとドキュメントの両方を表現することを目的としている。
最も注目すべき学習済みスパース検索手法には、SPLADE、SPLADE v2、DeepCT、uniCOIL、EPIC、DeepImpact、TILDE、TILDEv2、Sparta、SPLADE-max、DistilSPLADE-maxなどがある。これらの手法は、テキストや画像などの異なるモダリティ間の関係を学習し、データ内の意味的なニュアンスを効果的に捉えることで、検索結果の精度を高める。
例えば、SPLADE(Sparse Lexical and Dense Embeddings)は、従来のスパースベクトルの解釈可能性を保持しつつ、密な埋め込みによる文脈理解を取り入れたスパース語彙表現を生成する。このハイブリッドなアプローチにより、より正確で意味のある検索が可能になり、厳密な用語マッチングとセマンティック検索のギャップを埋めることができる。
このような学習されたスパース技術を活用することで、情報検索システムはより高い精度と効率を達成することができ、多様な検索タスクを扱う上でより頑健で多用途なものとなる。
領域外情報検索の課題:マルチモーダル検索は未だ未解明である
BERTのような高密度ベクトル技術は、情報検索において従来のBag of Wordsモデルとは異なる明確な利点を提供する。BERTの強みは、テキスト内の複雑な文脈的ニュアンスを把握する能力にあり、この特徴は、馴染みのあるドメイン内のクエリを処理する際のパフォーマンスを大幅に向上させる。
しかし、BERTは、慣れ親しんだ領域を超えてOut-of-Domain(OOD)検索に踏み出すと、課題に遭遇する。BERTの学習プロセスは、本質的に学習データの特徴に偏るため、OODデータセット内の未見のテキストスニペットに対して意味のある埋め込みを生成することが苦手である。この限界は、ドメイン固有の用語が豊富なデータセットで顕著になる。
この問題を緩和する一つの可能性のあるアプローチは、微調整である。しかし、この解決策は常に実行可能で費用対効果が高いとは限らない。ファインチューニングを行うには、対象ドメインに関連するクエリ、正文書、負文書のトリプレットからなる、中規模から大規模の注釈付きデータセットにアクセスする必要がある。さらに、そのようなデータセットの作成には、データの品質を保証するためにドメインの専門家の専門知識が必要となり、そのプロセスは労働集約的であり、コストがかかる可能性がある。学習されたスパース検索のための統一的なフレームワークは、様々な検索手法を定義、学習、評価するための構造化された方法を提供し、モジュール性と特定の要件に応じたカスタマイズを重視した柔軟なツールキットを提供することができる。
一方、従来のBag of Wordsアルゴリズムは、語彙のミスマッチ問題(クエリと関連文書間の典型的な用語の重複の欠如)に取り組んでいるにもかかわらず、OOD情報検索においてBERTを凌駕している。これは、Bag of Wordsアルゴリズムでは、未認識の用語は「学習」されるのではなく、正確に「マッチング」されるからである。
BM25は、多くのOut Of Domain (OOD)検索において優れている。ソース](https://assets.zilliz.com/2_table_3905ed16ea.png)
学習されたスパース埋め込み:伝統的なスパースベクトル表現と文脈化された情報の融合
圏外検索のためのBag of Wordsのような厳密な用語マッチング手法と、圏内検索や意味検索のためのBERTのような密な検索手法の長所を組み合わせることは、情報検索における長年の課題であった。幸いなことに、有望な解決策が現れている:学習されたスパース埋め込みである。
しかし、学習されたスパース埋め込みとは一体何なのだろうか?
学習スパース埋め込みは、SPLADEやBGE-M3のような洗練された機械学習モデルによって作られたデータのスパースベクトル表現を示します。BM25のような統計的手法にのみ依存する従来のスパースベクトルとは異なり、学習型スパース埋め込みは、キーワード検索機能を保持しながら、文脈情報でスパース表現を豊かにします。たとえテキスト中に明示的に存在しなくても、隣接または相関するトークンの重要性を識別することができ、その結果、関連するキーワードやクラスを捕捉することに長けた「学習された」スパース表現が得られる。
SPLADEを例に考えてみよう。与えられたテキストをエンコードするとき、SPLADEは以下のようなトークンと重みのマッピングの形で疎な埋め込みを生成する:
{"hello":0.33, "world":0.72}
一見したところ、これらの埋め込みは統計的手法によって生成された従来のスパース埋め込みに似ている。しかし、決定的な違いはその構成にある。文脈情報を組み込んだ機械学習モデルは、学習されたスパース埋込みの次元(項)と重みの両方を決定する。スパース表現と学習されたコンテキストの融合は、情報検索タスクのための強力なツールを提供し、厳密な用語マッチングと意味理解の間のギャップをシームレスに埋める。
BEIRでのNDCG@ 10の結果](https://assets.zilliz.com/3_ndcg_389717bee6.png)
画像ソースhttp://arxiv.org/abs/2109.10086
長大なベクトル内に広範な詳細をカプセル化する密な埋め込みとは対照的に、学習された疎な埋め込みは、より簡潔なアプローチを採用し、本質的なテキスト情報のみを保持します。この意図的な単純化により、学習データへの過剰適合を防ぎ、Out-Of-Domainの情報検索シナリオで新しいデータパターンに遭遇した際のモデルの汎化能力を向上させます。
学習されたスパース埋め込みは、重要なテキスト要素に優先順位をつける一方で、余計な詳細を取り除くことで、関連する情報の捕捉とオーバーフィッティングの落とし穴の回避のバランスをとり、多様な検索タスクにおける有用性を高めている。
表4.NDCG@10で測定したMLDRテストセットにおける多言語長文書検索の評価](https://assets.zilliz.com/4_evaluation_multilingual_96cc212500.png)
画像ソースhttps://arxiv.org/abs/2402.03216
学習されたスパース埋め込みは、ドメイン内情報検索において、密な検索手法と顕著な相乗効果を示す。BGE-M3の著者が行った実験によると、学習されたスパース埋め込みは、多言語またはクロスリンガル検索タスクにおいて、一貫して密な埋め込みを上回り、より高い精度を誇っています。さらに、これらのエンベッディングを統合した場合、これらのエンベッディングを組み合わせて使用することで、さらに精度が向上し、スパースと密な検索技術の相補的な性質が強調される。
表5 NarrativeQA (nDCG@10)での評価](https://assets.zilliz.com/5_Evaluation_narrative_QA_5dc5b94f66.png)
画像ソースhttps://arxiv.org/abs/2402.03216
さらに、このような埋め込みに固有のスパース性は、最小限の計算資源でベクトル類似性検索を容易にします。さらに、学習されたスパース埋め込みが持つ用語マッチング特性は、マッチした文書を素早く調べて対応するマッチした単語を特定できるため、解釈可能性を高めます。この特徴により、検索プロセスに対するより正確な洞察が可能となり、システム全体の透明性と使いやすさが向上する。
ショーケース
このセクションでは、学習されたスパース埋め込みが、密な検索では不十分な状況においていかに優れているかを示す。
データセット: MIRACL..
_クエリ朱熹は何年生きましたか?
メモ
- 朱熹は宋代の中国の書家、歴史家、哲学者、詩人、政治家。
- MIRACLデータセットは多言語であり、このショーケースでは英語部分の "train "分割のみを使用する。MIRACLデータセットには26746の文章が含まれており、そのうちの7つが朱熹に関連したものである。
クエリに基づき、密検索と疎検索の手法を使って、これら7つの関連ストーリーを検索した。最初に、すべてのストーリーをそれぞれ密埋め込みまたは疎埋め込みに符号化し、Milvusベクトルデータベースに格納した。その後、クエリをエンコードし、KNN searchを用いてクエリ埋め込みに最も近い上位10個のストーリーを特定した。以下の結果では、朱熹に関連するストーリーが太字でハイライトされている:
疎な検索結果(IP距離、大きいほど近い):
スコア: 26.221 ID:244468#1 テキスト朱熹は恵州市武源県に生まれた。
スコア: 26.041 ID:?244468#3 本文:朱熹は恵州武源県に生まれた:宋の寧宗皇帝は、朱熹の死後8年目の1208年、朱熹を更生させ、...
スコア: 25.772 Id:244468#2 文:1179年、朱熹は1156年以来官職に就いていなかったが、南康軍府長官に任命された。
スコア: 23.905 Id:5823#39 テキスト宋の時代、朱熹(AD1130-1200)は道教や仏教の思想を儒教に取り入れた。
スコア: 23.639 Id:337115#2 テキスト...宋の時代、学者朱熹(AD1130-1200)は道教と仏教の思想を儒教に加えた ...
スコア: 23.061 ID::10443808#22 テキスト朱熹は儒教に道教や仏教の思想を取り入れたと主張する多くの批評家の一人である。
スコア: 22.577 ID: 55800148#1155800148#11 本文:1930年2月、朱熹は "朱熹 "を "朱熹 "と呼ぶことにした:1930年2月、朱熹は家族を家に残し、革命家として生きることを決意した。
スコア: 20.779 Id:12662060#3 本文朱熹は、孔子と孟子の人間性を生来の善とする考え方を支持し、「理」を宇宙の基本的なパターンとして理解することを明らかにした。
スコア: 20.061 ID::244468#28 テキスト朱熹(しゅき)は、宇宙の基本的なパターンである「理」の理解を明確にしました:朱老師は正統な教えを受け継ぎ、それを賢人の領域に広めた。
スコア: 19.991 ID::13658250#10 テキスト朱熹は66歳(中国の計算では66歳、西洋の基準では65歳)で自殺した。
濃い検索結果(L2距離、小さいほど近い):
スコア: 0.600 ID:244468#1 テキスト朱熹は恵州市武源県で生まれた。
スコア: 0.706 Id:244468#3 文: 朱熹は恵州婺源県に生まれた:宋の寧宗皇帝は、朱熹の死後8年目の1208年、寧宗皇帝は朱熹を...
スコア: 0.759 Id:13658250#10 本文朱熹は66歳(中国の計算では66歳、西洋の基準では65歳)で自殺した。
スコア: 0.804 Id:6667852#0 文:秦の昭王(BC325-251)、または秦の昭王(BC325-251)は、英吉利の生まれ。
スコア: 0.818 Id:259901#4 テキスト3世紀の歴史書「三国志」によると、劉備は周県で生まれたとされている。
スコア: 0.868 Id:343207#0 テキスト劉瑩(りゅうえい)は、漢の劉帝(りゅうてい)、劉嬰(りゅうえい)の名で知られる最後の皇帝。
スコア: 0.876 ID::31071887#1 テキスト明朝の始祖は洪武帝(1328年10月21日-1398年6月24日)であり、「朱元璋」という個人名でも知られている。
スコア: 0.882 ID::2945225#0 テキスト唐の艾(アイ)帝(89226年10月27日、908年3月)、昭宣帝()としても知られる。
スコア: 0.890 ID::33230345#0 テキスト:李奚または李琦(『資治通鑑』や『五代史』では李谿、『旧唐書』では李↪LoHan_78CE ...
スコア: 0.893 ID::172890#1 テキスト武尊はもともと麒麟山脈と敦煌(甘粛省)の間で越支の近くに住んでいた。
スパース検索では7つ全てのストーリーがトップ10にランクインしているが、密検索では2つしかトップ10にランクインしていない。スパース検索と密検索はどちらも 244468#1
と 244468#3
という番号を正しく識別しているが、密検索では関連するストーリーを追加することができない。その代わり、密な方法によって返された他の8つのストーリーは中国の歴史的な物語に関するもので、モデルは関連性があると判断するが、焦点のキャラクターである朱熹とは無関係である。
私たちのアプローチの背後にあるメカニズムを掘り下げたければ、次のセクションに進んで、Milvusを使用したベクトル検索プロセスの詳細をご覧ください。
ステップバイステップガイド:Milvusによるベクトル検索の実行方法
Milvusはスケーラビリティとパフォーマンスで有名なオープンソースのベクトルデータベースです。最新リリースであるMilvus 2.4では、スパースベクトルとデンスベクトルの両方をベータ版としてサポートしています。このデモでは、Milvus 2.4を使ってデータセットを保存し、ベクトル検索を行います。
また、MIRACLデータセットに対してMilvusで上記のクエリ「朱熹は何年生きたか」を実行する方法を説明します。
SPLADEとMiniLM-L6-v2モデルを使って、クエリとMIRACLソースデータセットをそれぞれスパース埋め込みとデンス埋め込みに変換する。
まず、ディレクトリを作成し、環境とMilvusサービスをセットアップする。python(>=3.8)、
virtualenv、
docker、
docker-compose`がインストールされていることを確認する。
mkdir milvus_sparse_demo && cd milvus_sparse_demo
# milvus ローカルクラスタをスピンアップする。
wget https://github.com/milvus-io/milvus/releases/download/v2.4.0-rc.1/milvus-standalone-docker-compose.yml -O docker-compose.yml
docker-compose up -d
# 仮想環境を作成する
virtualenv -p python3.8 .venv && source .venv/bin/activate
touch milvus_sparse_demo.py
バージョン2.4から、MilvusのPython SDKであるpymilvusはオプションのmodel
モジュールを導入した。このモジュールは好みのモデルを用いてテキストを疎または密な埋め込みにエンコードするプロセスを簡素化します。さらに、HuggingFaceから必要なデータセットにアクセスするために、インストールに pip
を利用する。
pip install "pymilvus[model]" datasets tqdm
まず、HuggingFaceの Datasets
ライブラリを使ってデータセットをダウンロードし、すべてのパッセージを収集する。
from datasets import load_dataset
miracl = load_dataset('miracl/miracl', 'en')['train'] # データセット内の全てのパッセージを収集する。
# データセット内のすべてのパッセージを収集する
docs = list({doc['docid']: doc for entry in miracl for doc in entry['positive_passages'] + entry['negative_passages']}.values())
print(docs[0])
# {'docid': '2078963#10', 'text': '場の量子論の発展における第3のスレッド...'}.
クエリーをエンコードする:
from pymilvus import model
sparse_ef = model.sparse.SpladeEmbeddingFunction(
model_name="naver/splade-cocondenser-selfdistil"、
device="cpu"、
)
dense_ef = model.dense.SentenceTransformerEmbeddingFunction(
model_name='all-MiniLM-L6-v2'、
device='cpu'、
)
query = "朱熹は何年生きましたか?"
query_sparse_emb = sparse_ef([query])
query_dense_emb = dense_ef([query])
生成された疎な埋め込みを検査し、重みが最も高いトークンを見つけることができます:
sparse_token_weights = sorted([(sparse_ef.model.tokenizer.decode(col), query_sparse_emb[0, col])
for col in query_sparse_emb.indices[query_sparse_emb.indptr[0]:query_sparse_emb.indptr[1]], key=lambda item: item[1], reverse=True).
print(sparse_token_weights[:7])
# [('zhu', 3.0623178), ('xi', 2.4944391), ('zhang', 1.4790473), ('date', 1.4589322), ('years', 1.4154341), ('live', 1.3365831), ('china', 1.2351396)].
すべてのドキュメントをエンコードする:
from tqdm import tqdm
doc_sparse_embs = [sparse_ef([doc['text']]) for doc in tqdm(docs, desc='Encoding Sparse')].
doc_dense_embs = [dense_ef([doc['text']])[0] for doc in tqdm(docs, desc='エンコーディング密')].
次に、Milvusでdoc id
、text、denseとsparse embeddingsを含むすべてを格納するコレクションを作成し、データセット全体を挿入する。
from pymilvus import (
MilvusClient, FieldSchema, CollectionSchema, DataType
)
milvus_client = MilvusClient("http://localhost:19530")
コレクション名 = 'miracl_demo'
fields = [
FieldSchema(name="doc_id", dtype=DataType.VARCHAR, is_primary=True, auto_id=False, max_length=100)、
FieldSchema(name="text",dtype=DataType.VARCHAR,max_length=65530)、
FieldSchema(name="sparse_vector", dtype=DataType.SPARSE_FLOAT_VECTOR)、
FieldSchema(name="dense_vector", dtype=DataType.FLOAT_VECTOR, dim=384)、
]
milvus_client.create_collection(collection_name, schema=CollectionSchema(fields, "miracl demo"), timeout=5, consistency_level="Strong")
バッチサイズ = 30
n_docs = len(docs)
for i in tqdm(range(0, n_docs, batch_size), desc='ドキュメントの挿入'):
milvus_client.insert(コレクション名, [
{
"doc_id": docs[idx]['docid']、
"text": docs[idx]['text']、
"sparse_vector": doc_sparse_embs[idx]、
"dense_vector": doc_dense_embs[idx].
}
for idx in range(i, min(i+batch_size, n_docs))
])
検索処理を高速化するために、ベクトルフィールドのインデックスを作成する:
index_params = milvus_client.prepare_index_params()
index_params.add_index(
フィールド名="sparse_vector"、
index_type="SPARSE_INVERTED_INDEX"、
metric_type="IP"、
)
index_params.add_index(
フィールド名="dense_vector"、
index_type="FLAT"、
metric_type="L2"、
)
milvus_client.create_index(collection_name, index_params=index_params)
milvus_client.load_collection(collection_name)
これで検索を実行し、結果を調べることができます:
k = 10
sparse_results = milvus_client.search(collection_name, query_sparse_emb, anns_field="sparse_vector", limit=k, search_params={"metric_type":"IP"}, output_fields=['doc_id', 'text'])[0].
dense_results = milvus_client.search(collection_name, query_dense_emb, anns_field="dense_vector", limit=k, search_params={"metric_type":"L2"}, output_fields=['doc_id', 'text'])[0].
print(f'スパース検索結果:')
for result in sparse_results:
print(f"\tScore: {result['distance']}.Id:{result['entity']['doc_id']}」と表示されます。テキスト{result['entity']['text']}")
print(f'密な検索結果:')
for result in dense_results:
print(f"\tScore: {result['distance']}")Id:{result['entity']['doc_id']}」と表示されます。テキスト{result['entity']['text']}")
次のような出力が表示される。密集検索の結果では、最初の2つのストーリーだけが朱熹に関連している。読みやすいようにテキストをトリミングした。
スパース検索結果
スコア: 26.221 ID:244468#1 テキスト朱熹は恵州市武源県に生まれた。
スコア: 26.041 ID:?244468#3 本文:朱熹は恵州武源県に生まれた:宋の寧宗皇帝は、朱熹の死後8年目の1208年、朱熹を更生させ、...
スコア: 25.772 Id:244468#2 文:1179年、朱熹は1156年以来官職に就いていなかったが、南康軍府長官に任命された。
スコア: 23.905 Id:5823#39 テキスト宋の時代、朱熹(AD1130-1200)は道教や仏教の思想を儒教に取り入れた。
スコア: 23.639 Id:337115#2 テキスト...宋の時代、学者朱熹(AD1130-1200)は道教と仏教の思想を儒教に加えた ...
スコア: 23.061 ID::10443808#22 テキスト朱熹は儒教に道教や仏教の思想を取り入れたと主張する多くの批評家の一人である。
スコア: 22.577 ID: 55800148#1155800148#11 本文:1930年2月、朱熹は "朱熹 "を "朱熹 "と呼ぶことにした:1930年2月、朱熹は家族を家に残し、革命家として生きることを決意した。
スコア: 20.779 Id:12662060#3 本文朱熹は、孔子と孟子の人間性を生来の善とする考え方を支持し、「理」を宇宙の基本的なパターンとして理解することを明らかにした。
スコア: 20.061 ID::244468#28 テキスト朱熹(しゅき)は、宇宙の基本的なパターンである「理」の理解を明確にしました:朱老師は正統な教えを受け継ぎ、それを賢人の領域に広めた。
スコア: 19.991 ID::13658250#10 テキスト朱熹は66歳(中国の計算では66歳、西洋の基準では65歳)で自殺した。
濃い検索結果
スコア: 0.600 Id:244468#1 文:朱熹は恵州市武源県に生まれた。
スコア: 0.706 ID:?244468#3 文章: 朱熹は徽州武源県に生まれた:宋の寧宗皇帝は、朱熹の死後8年目の1208年、寧宗皇帝は朱熹を...
スコア: 0.759 Id:13658250#10 本文朱熹は66歳(中国の計算では66歳、西洋の基準では65歳)で自殺した。
スコア: 0.804 Id:6667852#0 文:秦の昭王(BC325-251)、または秦の昭王(BC325-251)は、英吉利の生まれ。
スコア: 0.818 Id:259901#4 テキスト3世紀の歴史書「三国志」によると、劉備は周県で生まれたとされている。
スコア: 0.868 Id:343207#0 テキスト劉瑩(りゅうえい)は、漢の劉帝(りゅうてい)、劉嬰(りゅうえい)の名で知られる最後の皇帝。
スコア: 0.876 ID::31071887#1 テキスト明朝の始祖は洪武帝(1328年10月21日-1398年6月24日)であり、「朱元璋」という個人名でも知られている。
スコア: 0.882 ID::2945225#0 テキスト唐の艾(アイ)帝(89226年10月27日、908年3月)、昭宣帝()としても知られる。
スコア: 0.890 ID::33230345#0 テキスト:李奚または李琦(『資治通鑑』や『五代史』では李谿、『旧唐書』では李↪LoHan_78CE ...
スコア: 0.893 ID::172890#1 テキスト武尊はもともと麒麟山脈と敦煌(甘粛省)の間で越支の近くに住んでいた。
ようやく片付いた。
docker-compose down
cd ... && rm -rf milvus_sparse_demo
まとめ
要約すると、学習されたスパース埋め込みを探索することで、情報検索の方法論におけるパラダイムシフトが明らかになった。従来のスパース表現と文脈情報を融合させることで、これらの埋め込みは、厳密な用語マッチングと意味理解に内在する課題に対処する汎用的なソリューションを提供する。
我々は、学習されたスパース埋め込みが、解釈可能性を維持しながら、関連するキーワードやクラスを捕捉することに優れており、情報検索タスクにおける効率性と明瞭性の間の微妙なバランスを取ることを目撃した。高密度な検索手法との相乗的な統合は、精度と性能をさらに向上させ、現代の情報検索システムにおいて不可欠な役割を果たすことを強調している。
Milvusを用いた実用的なデモンストレーションを通じて、学習されたスパース埋め込みが実世界のシナリオにおいて具体的にどのような利点を持つかを説明し、関連する情報を正確かつ効率的に検索する上でのその実力を示す。
スパース検索モデルの評価
スパース検索モデルの性能を評価することは、その有効性を確認し、改善点を特定するために非常に重要です。この文脈で使われる一般的な評価指標には、精度、リコール、F1スコアがあり、これらは検索された文書の精度と関連性を測定します。
スパース検索モデルの性能をさらに向上させるために、クエリ拡張や高密度検索などの技術を採用することができる。クエリ拡張は、検索精度を向上させるために、元のクエリに追加の用語を追加することであり、一方、高密度検索は、クエリと文書の意味的コンテキストをキャプチャするために高次元ベクトルを使用する。
情報検索技術の概念的枠組みは、新しい疎な検索モデルやアプリケーションの開発の指針にもなる。この枠組みは、スパース検索手法と高密度検索手法の統合、マルチモーダルデータの利用、検索アルゴリズムの継続的改良など、ニューラル情報処理システムの様々な側面を包含している。
スパース検索モデルを体系的に評価し改良することで、研究者や実務家は、現代の複雑なデータランドスケープに対応できる、より効果的で効率的な情報検索システムを開発することができる。