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カラムが低い値が距離が近い、つまり類似していることを表しています。
| id | vector | text | distance |
|---|---|---|---|
| 1 | [0.9, 0.4, 0.8] | knight | 0.02 |
| 2 | [0.8, 0.5, 0.3] | ranger | 0.29 |
| 3 | [0.5, 0.9, 0.6] | cleric | 0.49 |