このリポジトリには、DuckDBをバックエンドとして使用して埋め込みベクターを保存および取得するPythonアプリケーションが含まれています。 DuckDBの新しい使用により、大規模なデータセット間で効率的な類似性検索が可能になります。この例では、Hacker Newsからコメントをロードし、機能を実装して、特定のコメントと最も類似した10のコメントを見つけました。
リポジトリをクローンします:
git clone https://github.com/patricktrainer/duckdb-embedding-search.gitリポジトリディレクトリに移動します。
cd duckdb-embedding-search必要なパッケージをインストールします:
pip install -r requirements.txtアプリケーションを使用するには、次の手順に従ってください。
load_comments.pyを使用してコメントをduckdbデータベースに読み込みます。コメントとそれらに対応する埋め込みベクトルは、 hn_embeddings.dbデータベースのembeddingsテーブルに保存されます。main.pyなど)を実行し、ハッカーニュースコメントを提供します。スクリプトは、データベースから最も類似した10のコメントを返します。注
embedding.pyのget_similarity関数は、データベースにまだ存在していない場合、提供されたコメントの新しい埋め込みベクトルを作成します。これは、Openai APIにヒットすることを意味し、APIの使用にカウントされます。
次の例は、アプリケーションの機能を示しています。コメントは入力として提供され、アプリケーションはデータベースから最も類似した10のコメントを返します。
入力として提供されたコメント:
私が気づいたことの1つは、多くのエンジニアがGitHubでライブラリを探しているとき、最後のコミット時間をチェックすることです。彼らは、最近の最後のコミットであるほど、図書館がより良いサポートであると考えています。しかし、必要なことを正確に行うアーカイブプロジェクトはどうですか、バグが0つあり、何年も安定していますか?それは、リサイクルストアで隠された宝石を見つけるようなものです!私が今日見ているほとんどのエンジニアは、「絶えず」更新されていないライブラリを自動的に破棄します...それが良いことだと暗示しています:)
アプリケーションによって返された最も類似したコメント(簡潔にするために略された):
テキスト:>共有ライブラリへの死。彼らが引き起こす頭痛は、利益の価値がありません。
完全に同意しない。 1つのサイズがすべてに適合しているわけではありませんが、静的ライブラリについて抜本的なステートメントを作成した人は誰でも、ソフトウェアパッケージが更新されるなど、特に最新の状態に維持されていない人の追跡など、基本的なソフトウェアメンテナンスの問題に関して完全に忘れていることを世界に述べています。
類似性:0.8047998201033179
テキスト:ここでは多くの良い点がありますが、収益性の高いシステムのメンテナンス作業は、時間の有効な使用のようです。
現在、一部の収益性の高いシステムはゆっくりとビットロットであり、終身在庫のエンジニアはビットロットに対処したりエスカレートしたりしない間、日常的な仕事をするのに忙しくし続けることができます。しかし、退屈で安定したものを退屈で安定させていることを確認するのが得意な人は、通常過小評価されていると思います。
類似性:0.796911347299464
connection.pyデータベース接続を処理します。embedding.py :ベクトル操作の埋め込みを管理します。operations.py :データ処理のユーティリティ関数が含まれています。openai_client.py APIとのインターフェース。DuckDBは、埋め込みベクターを保存するための軽量の高性能データベースとして使用されます。 connection.pyモジュールはDuckDBへの接続を確立し、 operations.pyは埋め込みを挿入および取得するためのロジックが含まれています。
埋め込みベクターは、OpenAIのAPIを使用して生成されます。 openai_client.pyモジュールには、APIとのインターフェースのロジックが含まれています。 embedding.pyモジュールには、埋め込みベクターを生成して比較するためのロジックが含まれています。