見出し画像

ベクトル検索(Chroma)を使ってみよう!

ふと、ベクトル検索について調べてみたくなりましたので、何回かに渡ってベクトル検索を取り上げていきます。いくつかベクトル検索の記事を書いたら、取りまとめたいと考えています。

ベクトル検索って何?聞いたことがありますか?今回は、このベクトル検索についてわかりやすく解説します。ベクトル検索は、コンピュータが文章や画像などの情報を、数値の配列(ベクトル)に変換して比較する方法です。この技術を使うことで、関連性の高いアイテムやドキュメントを効率的に見つけることができます。

例えば、レシピの検索を考えてみましょう。何千ものレシピがある中で、あなたが「夏にぴったりのフルーツサラダ」を探しているとします。このとき、ベクトル検索が活躍します。各レシピは、フルーツの種類や調理法、材料の量などの特徴をベクトルで表現されます。そして、あなたが入力したキーワードも同じようにベクトルに変換されます。

ベクトル検索では、それぞれのレシピのベクトルと、あなたが入力したキーワードのベクトルの類似性を計算します。類似性が高いものほど、あなたが探している「夏にぴったりのフルーツサラダ」に近いレシピと判断されるわけです。このようにして、関連性の高いレシピが見つかります。

ベクトル検索は、文章だけでなく、画像や音声などの情報を検索する際にも利用されます。また、機械学習や人工知能の分野でも重要な役割を果たしています。


さて、今回のChromaは下記サイトを参考にしております。


上記サイトより、Chromaの特徴としては、LangChainやLlamaIndexにも統合されていたり、ドキュメントが整備されていたり、クエリー、フィルタリング、density estimationなどの機能もあり、オープンソースです。


上記サイトに、Google Colabのコードがありましたので、利用させて頂きます。

今回使用したコードは以下です。

!pip install chromadb
import chromadb

client = chromadb.Client()

collection = client.create_collection("test")

collection.add(
    embeddings=[
        [1.1, 2.3, 3.2],
        [4.5, 6.9, 4.4],
        [1.1, 2.3, 3.2],
        [4.5, 6.9, 4.4],
        [1.1, 2.3, 3.2],
        [4.5, 6.9, 4.4],
        [1.1, 2.3, 3.2],
        [4.5, 6.9, 4.4],
    ],
    metadatas=[
        {"uri": "img1.png", "style": "style1"},
        {"uri": "img2.png", "style": "style2"},
        {"uri": "img3.png", "style": "style1"},
        {"uri": "img4.png", "style": "style1"},
        {"uri": "img5.png", "style": "style1"},
        {"uri": "img6.png", "style": "style1"},
        {"uri": "img7.png", "style": "style1"},
        {"uri": "img8.png", "style": "style1"},
    ],
    documents=["doc1", "doc2", "doc3", "doc4", "doc5", "doc6", "doc7", "doc8"],
    ids=["id1", "id2", "id3", "id4", "id5", "id6", "id7", "id8"],
)

query_result = collection.query(
        query_embeddings=[1.1, 2.3, 3.2],
        n_results=1,
    )

print(query_result)



  1. !pip install chromadbchromadbというPythonライブラリをインストールします。

  2. import chromadbchromadbライブラリをインポートして使えるようにします。

  3. client = chromadb.Client()chromadbのクライアントオブジェクトを作成します。

  4. collection = client.create_collection("test")testという名前のコレクションを作成します。

  5. collection.add(...):コレクションにデータを追加します。ここでは、8つのベクトル(embeddings)、メタデータ(metadatas)、ドキュメント(documents)、そしてID(ids)が追加されています。各ベクトルは、画像や文章などの特徴を表現したもので、メタデータには画像のファイル名やスタイルが格納されています。

  6. query_result = collection.query(...):コレクション内のデータを検索します。ここでは、[1.1, 2.3, 3.2]というクエリベクトルを使って検索し、類似度の高いデータを1件取得しています。

  7. print(query_result):検索結果を表示します。


このコードは、ベクトルデータベースchromadbを使って、類似性のあるデータを簡単に検索する方法を示しています。

ベクトル検索は、ウェブサイトなどでユーザが購入したり見たりしたページの類似商品や類似ページを案内するのに使われますので、n_results=1を3などにすれば3個のおすすめが出ますよという意味合いがこのコードにはあります。


他の使い方は、Chromaの下記のページが参考になります。


この記事が気に入ったらサポートをしてみませんか?