30億個のニューラル埋め込みを使ってわずか2カ月でゼロから検索エンジンを構築

ネットサービス

Google検索やBingのような検索エンジンをゼロから構築するというプロジェクトに着手したソフトウェアエンジニアのウィルソン・リンさんが、その過程を自身のブログ上で解説しています。

Building a web search engine from scratch in two months with 3 billion neural embeddings

https://blog.wilsonl.in/search-engine/

リンさんはゼロから検索エンジンを構築するというプロジェクトをスタートしました。リンさんは「検索エンジンは検索エンジン最適化(SEO)スパムの増加と関連性の高い質の高いコンテンツの減少に悪化している」と思っており、実際「なぜ検索エンジンは常に最高品質のコンテンツを表示できないのか?」という疑問を抱いていたそうです。

また、検索エンジンの性能が不足しているともリンさんは感じていた模様。ある程度複雑な検索クエリになると、ほとんどの検索エンジンが正しく検索結果を表示することができません。これに答えられるような検索エンジンを構築したいとリンさんは考えていたそうです。

実際、リンさんが構築した検索エンジンでは、長文の検索クエリでも問題なく検索結果を表示することができます。

検索エンジンは、コンピューターサイエンス、言語学、オントロジー、自然言語処理、機械学習、分散システム、パフォーマンスエンジニアリングなど、幅広い分野をカバーしたテクノロジーです。リンさんは独自の検索エンジンを構築した理由を、「短期間でどれだけの知識を習得し、カバーできるか試してみたかったのです。それに、自分専用の検索エンジンを持つのも面白いと思いました」と説明しています。 リンさんの構築した検索エンジンの主な特徴は以下の通り。

・200個のGPUクラスターを用い、合計30億個のSBERT埋め込みを生成

・ピーク時には数百のクローラーが1秒あたり5万ページを取り込み、検索エンジンインデックスは2億8000万件に達しました ・エンドツーエンドのクエリのレイテンシー(遅延)は約500ミリ秒

RocksDBHNSWは200個のコア、4TBのメモリ(RAM)、82TBのSSDに分割

実際にリンさんの構築した検索エンジンのライブデモ版が以下から試用できます。

wilsonl.in Search

https://search.wilsonl.in/

リンさんはSBERTのような文書埋め込みモデル(ニューラル埋め込み)が検索に優れているかどうかを試すため、最小限のプレイグラウンドを作成。ウェブページをいくつか取得し、それをチャンクに分割して複雑で間接的な自然言語クエリに正確に回答できるかどうを確認しました。 例えば、「Postgresの代わりにS3を使いたいのですが、データベースを使えば人間のコメントを別の列のファイルにタグ付けすることができます」という検索クエリで検索すると、従来の検索エンジンは「Postgres、S3、ファイルに関するランダムな結果」と検索クエリの中から適当なキーワードをピックアップして、ユーザーが欲しそうな検索結果を出力します。一方、ニューラル埋め込みを用いた検索では「オブジェクトの保存時にカスタムメタデータを指定することもできます」といった具合に、ユーザーの検索ワードをベースとした回答を出力することが可能です。

基本的に検索エンジンはキーワードではなく、検索の意図を理解する必要があります。例えば、検索クエリをキーワードやフレーズに分割するのではなく、長文のまま利用できれば、キーワードスパムやSEO戦術の影響を受けにくくなります。また、複数の概念や微妙なニュアンスを含む検索クエリを実行し、複雑な関係を解き明かすことができるとリンさんは主張しました。

さらに、ニューラル埋め込みを用いて検索を実行する場合の重要なステップとして、リンさんは「チャンク化」を挙げています。ほとんどのニューラル埋め込みはページ全体の入力を処理できず、検索クエリが長くなると表現力が低下する傾向にあります。

一般的なアプローチでは、数文字あるいは数単語ごとに単純に文章を分割することです。しかし、この手法では単語、文法、構造が乱雑に切り取られてしまうため、意味が損なわれる可能性があります。そこで、リンさんはトレーニング済みのSentencizerを用いて、自然かつ一貫性のある部分で文章を分割したそうです。Sentencizerは大規模なテキストコーパスでトレーニングされており、文法や構文を深く理解することで高い精度を実現しています。これにより、検索クエリ内の略語や小数点、URL、非公式な文法といった微妙なニュアンスもうまく処理できるようになったそうです。

文章は前の文や段落、議論されている概念などに基づいて構築されます。そのため、チャンクが文脈の構築から切り離されると間接的な参照(あれ、それなど)は意味を失ってしまいます。そこで、リンさんは正規化されたセマンティックドキュメントツリーを活用。

しかし、後続分や照応など、局所文脈の問題は解決されなかったため、リンさんは分類モデルのDistilBERTをトレーニングして活用しています。DistilBERTはある文とその前の文を受け取り、意味を保持するために、どの文(もしあれば)に依存しているのかをラベル付けするというものです。

これらの結果、リンさんの構築した検索エンジンの検索結果ページでは、SEOスパムが比較的少なくなりました。また、非常に複雑な検索クエリ(例:アイデアに関する段落全体を理解することが可能)でも適切な検索結果を出力することが可能となっています。

なお、検索にニューラル埋め込みを利用する方法や検索クエリを正確に分割する方法の他に、リンさんはクローラーを用いて実際の検索エンジンを構築するために必要なインデックスを作成したり、API経由でAIを利用するのは経済的に不可能だったため自前でGPUを構築したりと、さまざまな試行錯誤を経て独自の検索エンジンを構築しています。

・関連記事 Appleが独自の検索エンジンを作るつもりはない3つの理由を語る - GIGAZINE

ほぼ半数の人は「Googleや検索エンジンはあまり役に立たなくなってきている」と感じている - GIGAZINE

「ChatGPT」「Perplexity」など8つのAI検索エンジンを対象とした調査で60%以上の検索フレーズでニュース記事の誤った引用が提供されるとの結果、特に「Grok 3」は検索フレーズの94%に誤って回答するというひどさ - GIGAZINE

GoogleやBingの依存から脱却するためヨーロッパの検索企業EcosiaとQwantが検索用インデックスを作成するEuropean Search Perspective設立に合意 - GIGAZINE

Metaが独自のAI搭載検索エンジンを開発中と報道される - GIGAZINE

関連記事: