サーチ・スティル・マターズ生成AIとベクトル・データベースによる情報検索の強化
ChatGPTのようなLLMの進歩にもかかわらず、検索は依然として重要である。GenAIと検索やベクターデータベースを組み合わせることで、検索の精度とエクスペリエンスが向上する。
検索の歴史は、まさにインターネットの誕生にまでさかのぼる。検索エンジンがなければ、オンラインで情報を見つけることはほとんど不可能だった。最初のインターネット検索エンジンはArchieで、1990年代にAlan Emtageによって開発された。その後、World Wide Web Wandererなど、いくつかの検索エンジンが登場した。
現在では、アルゴリズムは言葉の背後にある意味を理解できるまでに進歩し、Generative AIの助けを借りれば、インターネットの奥深くまで検索することができる。ChatGPTのような大規模な言語モデル(LLM)が台頭してからは特に、検索エンジンは頭打ちになったように見えるかもしれませんが、検索は依然として重要です。GenAI技術と情報検索や検索アルゴリズムを組み合わせることで、ユーザーはより良い検索体験とより正確な検索結果を得ることができる。
この記事では、以下について説明する:
検索の進化とGenAIのインパクト
検索、GenAI、ベクトル・データベースの組み合わせ
課題と考察
検索の未来
検索の進化:完全なキーワードマッチからセマンティック検索へ
検索エンジンは伝統的なキーワード検索からその旅を始めた。キーワードアルゴリズムは、検索エンジンがクエリとの関連性に基づいて結果をランク付けすることを可能にします。それらはキーワードの頻度、配置、そしてTerm Frequency-Inverse Document Frequency(TF-IDF)やBM25のような全体的なコンテンツの質のような要素を考慮し、これらは今でも非常に人気がある。
| ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | | TF-IDF は、TF-IDF を測定するものである。 | TF-IDFは、コーパスに対する文書内の用語の重要度を測定する。よりユニークな用語を強調する。| BM25は、用語頻度、文書の長さ、用語の飽和度を考慮することで、TF-IDFを改良したものである。BM25はクエリの関連性に基づいて、より微妙な文書ランキングを提供する。 | TF-IDFは生の用語頻度を考慮し、BM25は用語頻度を考慮する。 | | TF-IDFは文書の長さを考慮しない。 | BM25は文書の長さを調整する。BM25は文書の長さを調整する。 |
表:TF-IDFとBM25の比較。
従来の検索は、文脈、同義語、そしてユーザーのクエリの背後にあるより広い意味を理解するのに苦労している。セマンティック検索は、クエリの意図とコンテキストを解釈するために自然言語処理(NLP)を活用する大きな前進である。セマンティック検索の主な利点は以下の通り:
コンテキスト認識**:正確なキーワードだけでなく、クエリの背後にある意味を理解する。
関連性の向上**:より正確で文脈に関連した検索結果を提供します。
類義語の処理**:同義語や関連する概念を認識し、処理します。
意味検索が可能なのは、ベクトル埋め込みとベクトル類似検索技術によるものである。ベクトル埋め込みとは、自然言語のような様々な非構造化データの数値表現であり、単語や文の文脈的意味を捉える。
ベクトル埋め込みは通常、Cohereのembed-english-v3.0やOpenAIのtext-embedding-3-largeなど、様々な深層学習モデル(埋め込みモデルとも呼ばれる)によって生成される。
ベクトルデータベースは、膨大な量のベクトル埋め込みを効率的に保存し、索引を付け、検索することを目的として構築されています。また、クエリが与えられたときに、関連する文書を検索するための演算子も提供されています。
ベクトルデータベースは、ベクトルデータを扱い、類似検索を実行するように設計されているという点で、従来のリレーショナルデータベースとは異なる。しかし、ベクトルベースのクエリと並行して、従来の検索機能をサポートすることもできる。Zilliz Cloud](https://zilliz.com/cloud)のベクトルデータベース(フルマネージドMilvus)でのベクトル検索機能を紹介するウェビナーです。
ハイブリッド検索の仕組み](https://assets.zilliz.com/how_hybrid_search_works_5250109da8.png)
図1: ハイブリッド検索 Milvusベクターデータベースシステムでの動作について
キーワード検索とセマンティック検索を組み合わせることは可能であり、しばしば優れた結果をもたらす。Milvus](https://zilliz.com/what-is-milvus)のようなベクターデータベースは、1つのデータセットにつき最大10個のベクターフィールドをサポートし、複数のベクター列を同時に横断するハイブリッド検索を可能にします。Milvusの高度な機能により、異なるカラムの検索が可能になる:
電子商取引における商品の様々な見方など、情報の複数の視点を表現する。
BERT](https://zilliz.com/learn/explore-colbert-token-level-embedding-and-ranking-model-for-similarity-search#A-Quick-Recap-of-BERT)やTransformersなどのモデルによる密な埋め込みや、BM25、BGE-M3,、SPLADEなどのアルゴリズムによるスパース埋め込みなど、多様なタイプのベクトル埋め込みを利用。
画像、動画、音声、テキストなどの異なる非構造化データからマルチモーダルベクトルを融合し、犯罪捜査における生体認証などのアプリケーションを容易にする。
ベクトル検索を全文検索と統合し、多用途で包括的な検索機能を提供。
生成AIと検索への影響
大規模言語モデル(LLMs)は、膨大なコーパスデータに基づいて学習される。このアプローチにより、LLMは自然言語に関連する様々なタスクを理解し、取り組むことができる。検索の文脈では、LLMは以下の点で優れている:
より正確な検索結果を得るために、クエリの背後にある意図を把握する。
セマンティック検索: **コンテンツクエリの意味を解釈し、マッチングする。
自然言語処理:**ニュアンスのある言葉で複雑なクエリを処理する。
同義語の認識:** より広い検索範囲のために同義語を識別し、処理します。
多言語検索:グローバルアクセシビリティのための多言語でのクエリをサポートします。
これまでのグーグル検索では、さらなる調査が必要な何千ものページが返されていた。現在、ChatGPTのようなジェネレーティブAIは、会話や文脈を考慮した応答を提供することで、ウェブ検索を変革し、単純なクエリに対してより魅力的で役立つものにしている。初期段階では、LLMにはいくつかの限界がある:
権威の限界:権威の限界:生成AIは、学術的・科学的研究にとって重要な、権威ある情報源や直接的な引用を提供できないことが多い。
適時性の問題**:トレーニングに必要なリソースが大きいため、生成AIモデルは、特に急速に発展している分野では、常に最新の情報を反映しているとは限りません。
学習とセレンディピティ**:検索にAIを使うと、無関係な新しい情報を発見する機会が減る可能性がある。
エネルギー消費:***ジェネレーティブAIシステムは、従来の検索エンジンよりも大幅に多くのエネルギーを消費する。
幻覚: LLMは事前に訓練された情報に基づいてしか答えを出すことができない。参照するデータが十分でない場合、誤った情報や捏造された情報を提供する可能性がある。
分野特有の情報の欠如:** LLMは一般に入手可能なデータのみに基づいて訓練される。そのため、一般にはアクセスできないドメイン固有、専有、またはプライベートな情報が欠けている可能性がある。
このような制限は有害であるが、生成AIとベクトルデータベースを組み合わせて検索拡張生成(RAG)システムを構築することで、このような制限を緩和することができる。
RAG: 従来の検索と生成AIを組み合わせて、より正確な検索結果を得る
古い情報、引用や出典の不足、セレンディピティの低下といったいくつかの制限は、Retrieval Augmented Generation (RAG)と呼ばれる、生成AIとベクトルデータベースを組み合わせた一般的な手法によって軽減することができる。
図2:RAGの仕組み](https://assets.zilliz.com/Figure_1_How_RAG_works_246044aacf.png)
図2:RAGの仕組み
RAGは、まず、生成AIアプリケーションに使用したいデータソースを特定し、その結果が文脈に関連したものであることを確認します。これらのデータソースからのコンテンツは、選択した機械学習モデルを使用して、高次元空間におけるデータの数値表現であるベクトル埋め込みに変換されます。これらの埋め込みは、Milvusのようなベクトルデータベースに格納される。アプリケーションがクエリ、例えばチャットボットからの質問を受け取ると、クエリをベクトル埋め込みに変換します。このエンベッディングは、ベクトルデータベース内でセマンティック検索を行い、関連する文書やデータを検索する。検索結果は、元のクエリとプロンプトとともに、言語モデル(LLM)に送られ、文脈に正確で関連性のある応答を生成する。
簡単に言えば、RAGは検索アルゴリズムを使って外部ソースから関連情報を引き出し、それを事前に訓練されたLLMと統合する。この方法は、スタンドアロンのLLMに見られる古い情報や限られた情報源という問題を克服しています。
次のセクションでは、MilvusとLlamaIndexを使って基本的なRAGアプリケーションを実装する。
MilvusとLlamaIndexによるRAGの実装
人工知能(AI)の技術革新と進歩に関連するいくつかの合成データを使用する。このデータセットには2つのファイルが含まれる。1つは技術的進歩に関する要約を集めたもので、もう1つはAIの状態に関する簡単な概要をまとめたものである。
インポートとセットアップ
このコードスニペットには pymilvus
と llamaindex
の依存関係が必要である。以下のコマンドを使ってインストールしてほしい:
pip install pymilvus>=2.4.2
pip install llama-index-vector-stores-milvus
pip install llama-index
pip install openai
Google Colabを使用している場合、依存関係をインストールした後にランタイムを再起動する必要があるかもしれません。画面上部の Runtime メニューをクリックし、ドロップダウンメニューから "Restart session" を選択してください。
OpenAI のセットアップ
まず、GPTにアクセスするためのOpenAIのAPIキーを追加します:
インポート openai
openai.api_key = "sk-***********"
セキュリティを確保するため、APIキーが公開されないように.env
ファイルに格納する。
データの準備
この例では、ベクターデータベースに取り込むダミーデータを作成する。
**データファイルの作成
まず、2つのテキストファイルを作成します。
tech_innovations.txt
は技術的進歩の要約。- AIの現状をまとめた
ai_overview.txt
。
これらのファイルは作業ディレクトリに直接作成することもできるし、以下のコマンドを使って生成することもできる:
mkdir -p 'data/'
# tech_innovations.txtの作成
echo "1. 量子コンピューティングは、古典的なコンピュータよりもはるかに高速に複雑な計算を実行する能力によって、コンピューティングの分野に革命をもたらすことを約束する。
2.ブロックチェーン技術は、分散化された改ざん不可能な取引台帳を提供することで、セキュリティと透明性を高める。
3.5Gネットワークはより高速なデータ通信と低遅延を実現し、IoTやスマートシティ技術の進歩を可能にする。"> data/tech_innovations.txt
# ai_overview.txtの作成
echo "人工知能(AI)は急速に進化しており、最近では自然言語処理、コンピュータービジョン、ロボット工学が進歩している。ディープラーニングや強化学習のような技術は、ヘルスケアから自律走行車まで、様々な産業におけるイノベーションを牽引している。"> data/ai_overview.txt
**ドキュメントの生成
以下のPythonコードを使ってドキュメントを読み込み、llama_index
にロードする:
from llama_index.core import SimpleDirectoryReader
# 作成したファイルからドキュメントを読み込む
documents = SimpleDirectoryReader(
input_files=["./data/tech_innovations.txt", "./data/ai_overview.txt"].
).load_data()
# 最初のドキュメントのドキュメントIDを表示
print("Document ID:", documents[0].doc_id)
インデックスを作成する
インデックスは、テキストや数値データをベクトル表現にマッピングすることで、大規模なデータセットから情報を素早く取り出すために使われるデータ構造である。迅速な比較を可能にすることで、効率的な類似検索やクエリを容易にします。ここではMilvusベクトルストアを使用してインデックスを作成する方法を説明します:
from llama_index.core import VectorStoreIndex, StorageContext
from llama_index.vector_stores.milvus import MilvusVectorStore
# ベクターストアを初期化する
vector_store = MilvusVectorStore(uri="./milvus_demo.db", dim=1536, overwrite=True)
storage_context = StorageContext.from_defaults(vector_store=vector_store)
# 読み込まれたドキュメントからインデックスを作成する
インデックス = VectorStoreIndex.from_documents(documents, storage_context=storage_context)
MilvusVectorStore`のパラメータは以下の通りである:
- uri
をローカルファイル、例えば
../milvus.db` に設定するのが最も便利である。 - 大規模なデータセットの場合は、DockerやKubernetes上でよりパフォーマンスの高いMilvusサーバを構築し、サーバ
uri
(例:http://localhost:19530
) を使用することができる。 - Zilliz Cloudを利用する場合は、
uri
とtoken
をZilliz CloudのPublic EndpointとAPIキーに合わせる。
データを照会する。
ドキュメントがインデックスに格納されたので、クエリを実行しよう。インデックスはGPTの知識ベースとしてそれ自体に保存されたデータを使用します。このように:
query_engine = index.as_query_engine()
# クエリー例
res1 = query_engine.query("What are some recent technological advancesments?")
LLM と RAG を使用する際の課題と考慮点
上記のアイデアは新しいものであり、課題がないわけではない。そのいくつかを紹介しよう:
スピードと精度のバランス:** GPT-4やPaLMのような大規模な言語モデルは、パラメータ数の増加により高い精度を達成する。しかし、パラメータが増えると推論速度が低下し、コストが増加します。このため、生成速度と精度はトレードオフの関係にある。マイクロソフトのPhiシリーズのような新しいモデルは、精度を維持しながらパラメータサイズを小さくすることを目指しています。
バイアスへの対処と公平性の確保:** AIを活用した検索システムは、公平性を確保するためにバイアスに立ち向かわなければならない。例えば、グーグルの画像データベースは、米国や欧米中心であり、固定観念を強めていると批判されている。データセットに潜在するこのようなバイアスは、非白人グループや女性の不正確率を高める結果となる。2018年、アマゾンは自社のAI採用ツールに欠陥があったことを認めた。過去10年間、男性の履歴書のパターンに基づいて男性の応募者を優遇することを学習してきたのだ。こうした偏見に対処し、公平性を確保することが必要であり、AIはこの新しい検索の主要な要素である。
プライバシーとセキュリティの懸念:** AIが求める大規模なデータセットは、プライバシー法と相反し、データの共有や自動意思決定を制限し、AIの能力を制限する。COVID-19の期間中、このような制限によりAI開発者は健康データにアクセスすることができなかった。これは、管理措置やワクチン配布に関する意思決定を改善する能力に影響を与えた。AIがデータに無制限にアクセスできるようにすると、訓練中に個人のコンテンツを使用する可能性があるため、プライバシーに関する懸念が生じる可能性がある。
こうした深刻な懸念は、現代の検索エンジンの妨げとなっている。現在進行中の研究は、これらの問題に対処することを目的としており、近いうちに解決策が示されるかもしれない。
検索の未来:傾向と予測
検索の未来は、以下のようなイノベーションによって情報アクセスを一変させる:
1.パーソナライズ検索:これらの革新は、最近のグーグルのアップデートで見ることができる。グーグルのセマンティック検索は、クエリの文脈を理解するためにベクトル埋め込みを活用している。例えば、ユーザーが "best Italian restaurants near me "と検索すると、グーグルはエンベッディングを使って、ユーザーの好み、最近の検索、場所を考慮した結果を返す。
2.マルチモーダル検索**:以前は、検索はテキストにしか縛られていませんでしたが、エンベッディングを使うことで、テキスト、画像、音声のような異なるモダリティを検索できるようになりました。ユーザーは、複雑なクエリのために、テキストと画像を検索エンジンに提供することができる。
3.科学的・学術的検索:Semantic Scholar](https://www.semanticscholar.org/)のようなAIを搭載したツールは、自然言語処理を使用して研究論文を理解し、インデックスを作成し、より関連性の高い検索結果を提供する。グーグルのAI駆動型検索アルゴリズムは、異種の研究トピック間のつながりを特定し、従来の検索手法では見逃してしまうような洞察を明らかにすることができる。さらに、AIエージェントは、関連文書の検索、重要情報の取得、ユーザーへの提示などのタスクを分担することができる。
結論
この記事では、GoogleやBingのような検索エンジンにつながる以前のIRシステムについて説明した。また、AIの台頭により登場した新しい検索システムについても説明した。主な要点は以下の通りである:
検索システムの継続的な必要性**:生成的AIの進歩にもかかわらず、伝統的な情報検索(IR)システムは、特に学術的な用途では、依然として不可欠である。
権威性と適時性**:ユーザー、特に学術関係者は、情報の権威性と最新性を重視するが、生成AIのチャットボットにはそれが欠けていることが多い。
生成AIの課題**:直接的な引用の欠如、潜在的な誤情報、エネルギー消費などの問題は、検索におけるジェネレーティブAIの重大な懸念事項である。
高度な検索のためのLLMの制限を緩和するためのRAGの活用**:LLMはベクトルデータベースと統合し、コンテキストとして外部データソースにアクセスすることで、より正確な回答を生成することができる。
将来の可能性ジェネレーティブAIは検索プロセスを補強するかもしれないが、現在の限界に対処するためにはより多くの研究と開発が必要である。
その他のリソース
ジェネレーティブAIリソースハブ|Zilliz](https://zilliz.com/learn/generative-ai)
AI・LLM・ベクトルデータベース学習センター](https://zilliz.com/learn)
RAGとは ](https://zilliz.com/learn/Retrieval-Augmented-Generation)
プライベートLLMとは](https://zilliz.com/learn/what-are-private-llms)
リランカーでRAGを改善する方法](https://zilliz.com/learn/optimize-rag-with-rerankers-the-role-and-tradeoffs)