Hacker News ベクトル検索データセット
はじめに
Hacker News データセットには、2,874 万件の
投稿とそれらのベクトル埋め込みが含まれています。埋め込みは、SentenceTransformers のモデル all-MiniLM-L6-v2 を使用して生成されています。各埋め込みベクトルの次元は 384 です。
このデータセットを用いることで、ユーザー生成テキストデータを基盤にした大規模な実世界のベクトル検索アプリケーションにおける設計、サイジング、およびパフォーマンスの各側面を一通り検討できます。
データセットの詳細
ベクトル埋め込みを含む完全なデータセットは、ClickHouse により単一の Parquet ファイルとして S3 バケット で提供されています。
このデータセットのストレージおよびメモリ要件を見積もるため、まずは ドキュメント を参照してサイジングを行うことを推奨します。
手順
ベクトル類似性インデックスを構築する
以下のSQLを実行して、hackernewsテーブルのvector列にベクトル類似性インデックスを定義および構築します:
インデックスの作成と検索に関するパラメータおよびパフォーマンスの考慮事項については、ドキュメントを参照してください。
上記のステートメントでは、HNSWハイパーパラメータMとef_constructionにそれぞれ64と512の値を使用しています。
これらのパラメータの最適な値を選択する際は、選択した値に対応するインデックス構築時間と検索結果の品質を評価し、慎重に決定する必要があります。
2,874万件の完全なデータセットに対するインデックスの構築と保存には、利用可能なCPUコア数とストレージ帯域幅に応じて、数分から1時間程度かかる場合があります。
ANN検索を実行する
ベクトル類似性インデックスが構築されると、ベクトル検索クエリは自動的にインデックスを使用します:
ベクトルインデックスの初回メモリロード時には、数秒から数分程度かかる場合があります。
検索クエリの埋め込みを生成する
Sentence Transformersは、文や段落の意味を捉えるための、ローカルで使いやすい埋め込みモデルを提供します。
このHackerNewsデータセットには、all-MiniLM-L6-v2モデルから生成されたベクトル埋め込みが含まれています。
以下に、sentence_transformers Pythonパッケージを使用してプログラムで埋め込みベクトルを生成する方法を示すPythonスクリプトの例を示します。検索用の埋め込みベクトルは、SELECTクエリ内のcosineDistance()関数に引数として渡されます。
上記のPythonスクリプトの実行例と類似検索の結果を以下に示します (上位20件の投稿からそれぞれ100文字のみを出力):
要約デモアプリケーション
上記の例では、ClickHouseを使用したセマンティック検索とドキュメント取得を実演しました。
次に、非常にシンプルでありながら高い可能性を持つ生成AIのサンプルアプリケーションを紹介します。
アプリケーションは以下の手順を実行します:
- ユーザーから topic の入力を受け付ける
SentenceTransformersのall-MiniLM-L6-v2モデルを使用して、topic の埋め込みベクトルを生成しますhackernewsテーブルに対してベクトル類似度検索を実行し、関連性の高い投稿やコメントを取得しますLangChainと OpenAI のgpt-3.5-turboChat API を使用して、ステップ #3 で取得したコンテンツを要約します。 ステップ #3 で取得した投稿やコメントは コンテキスト として Chat API に渡され、Generative AI を成立させる鍵となる要素となります。
要約アプリケーションの実行例を以下に示し、その後に要約アプリケーションのコードを記載します。アプリケーションの実行には、環境変数 OPENAI_API_KEY に OpenAI API キーを設定する必要があります。OpenAI API キーは https://platform.openai.com での登録後に取得できます。
本アプリケーションは、顧客感情分析、技術サポートの自動化、ユーザー会話の分析、法的文書、医療記録、会議議事録、財務諸表など、複数のエンタープライズ領域に適用可能な生成AIユースケースを実証します
上記アプリケーションのコード: