Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】# Data Ingestion & Vector Store #llmszoomcamp

2025年10月05日に「Dev.to」が公開したITニュース「# Data Ingestion & Vector Store #llmszoomcamp」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

医療データをQdrantに保存し、効率よく検索する方法を紹介。テキストをベクトル化し、キーワード検索(BM25)と合わせたハイブリッド検索を用いる。これにより、意味とキーワードの両面から関連性の高い情報を探し出す。検索結果はRRFで統合され、医療専門分野のデータ活用に役立つ。

ITニュース解説

このニュース記事は、医療分野の質疑応答データを効率的に検索するためのシステム構築について解説している。具体的には、大規模言語モデル(LLM)の文脈で重要な「データインジェスト」と呼ばれるデータ取り込みの手法と、「ベクトルストア」という特殊なデータベースの利用、そして「ハイブリッド検索」という高度な検索技術を組み合わせる方法が紹介されている。システムエンジニアを目指す皆さんにとって、現代の検索システムがどのように構築されているか、その基礎と応用を理解する良い機会となるだろう。

まず「データインジェスト」とは、外部にある様々な形式のデータをシステム内に取り込み、利用可能な形に変換・保存する一連のプロセスのことだ。このシステムでは、CSV形式で提供される医療に関する質疑応答データを取り込むことから始める。データはそのままでは検索しにくい。そこで、各質問と回答のテキストを「埋め込み(Embedding)」と呼ばれる数値のベクトルに変換する。この変換には「Sentence Transformers」というツールが使われる。これは、文章の意味的な内容を捉えて、似た意味の文章ほど近いベクトルになるように変換する技術だ。

次に、このベクトルデータを保存する場所が必要になる。それが「ベクトルストア」だ。従来のデータベースが文字や数値の情報を整理して保存するのに対し、ベクトルストアは意味を表す数値ベクトルを効率的に保存し、高速に検索できるように特化している。ここでは「Qdrant」というオープンソースのベクトルデータベースが利用されている。Qdrantは、大量のベクトルデータを管理し、類似するベクトルを迅速に見つけ出す機能に優れている。各データには、生成されたベクトルだけでなく、元の質問文や回答文などのテキストデータも「ペイロード」として付随させて保存する。ペイロードは、検索結果としてユーザーに表示される情報そのものとなる。

Qdrantでデータを扱うためには、まず「コレクション」と呼ばれるデータの保存領域を作成する必要がある。このコレクション作成時には、保存するベクトルのサイズ(次元数)と、ベクトルの類似性をどのように測るかという「距離計算方法」を指定する。記事では「コサイン距離」という方法が使われている。コサイン距離は、二つのベクトルが指す方向がどれだけ似ているかを測る指標で、特に文章の意味的な類似性を測るのに適している。この設定によって、Qdrantは効率的に類似する質問や回答を検索できるようになる。

しかし、ベクトル検索だけでは不十分な場合もある。特定のキーワードが確実に含まれるドキュメントを探したいとき、ベクトル検索では見逃してしまう可能性があるからだ。そこで、キーワード検索の古典的な手法である「BM25」というアルゴリズムを組み合わせる。BM25は、キーワードの出現頻度やドキュメントの長さなどを考慮して関連性を評価する。Qdrantでは、テキストデータに対してBM25インデックスを作成できる機能があり、これを利用してキーワード検索を高速化している。これにより、ベクトルによる意味的な類似性検索と、キーワードによる正確な検索の両方が可能になる。

データを取り込む際には、元のCSVファイルから一つ一つの質問と回答のペアを取り出し、それぞれに対してベクトルの生成とペイロードの準備を行う。具体的には、質問文と回答文を結合したテキストを作成し、それをSentence Transformersモデルに入力してベクトルを生成する。生成されたベクトルと、元の質問、回答、関連情報などをまとめたペイロードをセットにして、Qdrantのコレクションに「ポイント」として追加していく。この「Upserting Points」という操作によって、データがベクトルストアに効率的に保存される。

そして、このシステムの最大の特徴が「ハイブリッド検索」だ。これは、ベクトル検索とBM25キーワード検索という二つの異なる検索方法を同時に実行し、それぞれの結果を組み合わせて最終的なランキングを生成する手法だ。まず、ユーザーが入力した検索クエリもベクトルに変換され、Qdrantで類似するベクトルが検索される。同時に、ユーザーのクエリからBM25フィルターが構築され、キーワードに一致するドキュメントが検索される。

それぞれの検索方法から得られた結果は、それぞれ独自の関連度(ランク)を持つ。これらを公平に組み合わせるために「Reciprocal Rank Fusion(RRF)」というアルゴリズムが使われる。RRFは、異なる検索結果のランキングを統合し、両方の検索で上位にきたドキュメントほど高いスコアになるように調整する。具体的には、各ドキュメントがそれぞれの検索結果で何番目に表示されたか(ランク)に基づいてスコアを計算し、それらを合計することで最終的なランキングを決定する。例えば、ベクトル検索で1位、BM25検索で2位だったドキュメントは、片方でしか上位に来なかったドキュメントよりも高い総合スコアを得る。

さらに、このシステムでは医療分野という特性を活かし、検索結果のスコアを「ドメインスコアリング強化」によって調整している。例えば、検索クエリに含まれる単語と、ドキュメントの「医療部門」といった特定のメタデータが一致する場合、そのドキュメントの総合スコアをわずかに引き上げる。これにより、医療の専門分野に特化したより適切な結果を優先的に提示することが可能になる。

ハイブリッド検索を採用する最大の理由は、ベクトル検索が「意味的な類似性」を捉えるのに優れている一方で、BM25が「正確なキーワードの一致」を保証するという、それぞれの強みを活かすことにある。例えば、「胃の痛み」というクエリに対して、ベクトル検索は「消化器系の不調」といった類義語を含むドキュメントを見つけ出すかもしれない。しかし、「胃の痛み」というキーワードが明確に含まれるドキュメントを確実に見つけ出すのはBM25の得意分野だ。これらをRRFで組み合わせることで、ユーザーはより網羅的で精度の高い検索結果を得られるようになる。特に医療分野のような専門性が高く、キーワードの正確性が求められる場面では、このハイブリッドなアプローチが非常に効果的だ。

将来的な拡張性としては、情報の「鮮度」を考慮したスコアリングの追加が考えられる。例えば、最近更新された医療情報ほどスコアを高くするといった調整だ。また、特定のフィールド(質問文、回答文など)に対して検索時の重要度を柔軟に設定できるようにしたり、頻繁に利用される埋め込みベクトルをローカルにキャッシュして検索速度をさらに向上させたりといった改善も検討されている。これらの機能は、システムをより柔軟で高性能なものにするために、今後の開発で取り組むべき課題となる。

関連コンテンツ

関連IT用語