Getting Started with LanceDB

公式のGetting Started with LanceDBを元にLanceDBを触ってみます。

まずは必要なパッケージをインストールします。Python 3.8以上が必要となります。

pip install lancedb pandas

次に上記のライブラリをインポートします。lancedbがコアとなるベクターデータベースの機能を提供し、pandasはデータの操作に利用します。

import lancedb
import pandas as pd

次にLanceDBに接続します。公式の例ではLanceDB Cloudを利用していますが、以下のように指定するとローカルで試すことができます。

db = lancedb.connect(uri="data/lance.db")

pandasのデータフレームを3つのフィールド(id、vector、text)で作成します。

data = pd.DataFrame([
    {"id": "1", "vector": [0.9, 0.4, 0.8], "text": "knight"},    
    {"id": "2", "vector": [0.8, 0.5, 0.3], "text": "ranger"},  
    {"id": "3", "vector": [0.5, 0.9, 0.6], "text": "cleric"},    
    {"id": "4", "vector": [0.3, 0.8, 0.7], "text": "rogue"},     
    {"id": "5", "vector": [0.2, 1.0, 0.5], "text": "thief"},     
])

データベース内にテーブルを作成します。スキーマはデータから自動で決定されます。

table = db.create_table("adventurers", data)

次にベクトルの類似検索を実行します。クエリで指定するディメンションは実際のデータと一致する必要があります。例えば、前述のデータは[0.9, 0.4, 0.8]なので、ディメンションは3です。

この例を実行するとユークリッド距離を用いて、[0.8, 0.3, 0.8]にもっとも近い結果が3行返却されます。

query_vector = [0.8, 0.3, 0.8] # warrior 
results = table.search(query_vector).limit(3).to_pandas()
print(results)

distanceカラムが低い値が距離が近い、つまり類似していることを表しています。

idvectortextdistance
1[0.9, 0.4, 0.8]knight0.02
2[0.8, 0.5, 0.3]ranger0.29
3[0.5, 0.9, 0.6]cleric0.49