Shunya Ueta

Elasticsearchの近似近傍探索を使って、ドラえもんのひみつ道具検索エンジンを作ってみた

Elasticsearch 8 系から使用可能になった近似近傍探索1を使って、ドラえもんのひみつ道具の自然言語検索ができる検索エンジンを作ってみた。

デモ動画のように、検索したいひみつ道具を説明する文章することで近しいひみつ道具が検索されます。

コードは GitHub に公開してあるので、興味のある方は手元で、動かして遊ぶことが出来ます。 poetryDocker さえあれば動くようになっています。

hurutoriya/doraemon-himitsu-dogu-search: Doraemon Himitsu Dogu Japanese semantic search based on Elascticsearch ANN

システムの概要図はこんな感じ

sysytem design

所感

クエリ部分はこれだけで書けた。

query = {
		"knn": {
				"field": "vector",
				"query_vector": sentence_embeddings[0],
				"k": 10,
				"num_candidates": 100,
		},
		"fields": ["name", "description"],
}
result = es.search(index=INDEX_NAME, body=query)

ぶっちゃけて言えば、この規模で近似近傍探索のみやるなら検索エンジンを使わずとも Python 内でインメモリ探索して完結して動くと思うので Elasticsearch を使う意義を考えざるをえないが、自分が触ってみたかったのでやってみた。 そのおかげで色々学べたことが多いので、手を動かしてよかった。


これで、近似近傍探索周りで遊べるパイプライン+アプリが出来たので時間を見つけて色々試してみたいなと思っている。 例えば、


  1. k-nearest neighbor (kNN) search | Elasticsearch Guide [master] | Elastic ↩︎

  2. Elastocsearch 8.4 からは従来の検索手法と近似近傍探索を組み合わせることが可能に! Elasticsearch 8.4 introduces a hybrid search by Mayya Sharipova > Elasticsearch 8.4 introduces a hybrid search: ability to combine results from knn search with traditional search features (queries, aggs etc) and all this under a single familiar _search API. ↩︎

---

関連しているかもしれない記事


📮 📧 🐏: 記事への感想のおたよりをおまちしてます。 お気軽にお送りください。 メールアドレス入力があればメールで返信させていただきます。 もちろんお返事を希望せずに単なる感想だけでも大歓迎です。

このサイトの更新情報をRSSで配信しています。 お好きなフィードリーダーで購読してみてください。

このウェブサイトの運営や著者の活動を支援していただける方を募集しています。 もしよろしければ、Buy Me a Coffee からサポート(投げ銭)していただけると、著者の活動のモチベーションに繋がります✨

#elasticsearch #python #huggingface #machinelearning #search