ApsaraDB RDS for PostgreSQLのrds_embedding拡張機能を使用すると、ApsaraDB RDS for PostgreSQLインスタンス内のテキストをベクトルに変換できます。 拡張機能は、変換を容易にし、特定のデータ処理要件を満たすために、カスタムモデル構成とモデル呼び出し機能を提供します。
背景情報
埋め込みは、高次元データを低次元空間に変換する技術である。 機械学習および自然言語処理 (NLP) では、埋め込みは、スパース記号またはオブジェクトを連続ベクトルとして表すために使用される一般的な方法です。
埋め込み中に、ベクトルは、参照されるモデルに基づいて取得される。 ApsaraDB RDS for PostgreSQLでは、rds_embedding拡張機能を使用して、RDSインスタンス内のテキストを、参照される外部モデルに基づいてベクトルに変換できます。 ApsaraDB RDS for PostgreSQLでは、ベクトル類似度演算子を使用して、RDSインスタンス内のテキストと参照モデル内の指定されたテキストとの間の類似度を計算することもできます。 これにより、さまざまなシナリオでビジネス要件を満たすことができます。
前提条件
RDSインスタンスはPostgreSQL 14.0またはそれ以降のバージョンを実行します。
RDSインスタンスのマイナーエンジンバージョンが更新されました。 RDSインスタンスのメジャーエンジンバージョンが要件を満たしているが、拡張機能がまだサポートされていない場合は、マイナーエンジンバージョンを更新できます。 詳細については、「マイナーエンジンバージョンの更新」をご参照ください。
このトピックで使用されるモデルの
APIキー
が取得され、RDSインスタンスが存在するリージョンがOpenAIへのアクセスをサポートします。 このトピックでは、OpenAIとシンガポールリージョンの埋め込みモデルを使用します。 詳細については、「埋め込み」をご参照ください。RDSインスタンスはインターネット経由で接続されています。 デフォルトでは、インターネット経由でRDSインスタンスに接続することはできません。 RDSインスタンスが存在する仮想プライベートクラウド (VPC) 用のNATゲートウェイを作成する必要があります。 これにより、インターネット経由でRDSインスタンスに接続でき、RDSインスタンスは外部モデルにアクセスできます。 NAT gatewayの詳細については、「インターネットNAT gatewayのSNAT機能を使用してインターネットにアクセスする」をご参照ください。
拡張機能の有効化または無効化
このセクションのステートメントを実行するには、特権アカウントを使用する必要があります。
拡張機能を有効にします。
rds_embedding
拡張を有効にする前に、vector
拡張を有効にする必要があります。ベクトル
拡張は、必要なベクトルデータ型と、ベクトル間の距離や類似度の計算などの基本的なベクトルデータ操作をサポートします。rds_embeding_extension
は、高次元テキストのみをベクトルに変換します。CREATE EXTENSION vector; CREATE EXTENSION rds_embedding;
拡張機能を無効にします。
DROP EXTENSION rds_embedding; DROP EXTENSION vector;
例
testという名前のテストテーブルを作成します。
CREATE TABLE test(info text, vec vector(1536) NOT NULL);
モデルを追加します。
SELECT rds_embedding.add_model('text-embedding-ada-002','https://api.openai.com/v1/embeddings','Authorization: Bearer sk-****P','{"input":{"texts":["%s"]},"model":"text-embedding-v1"}','->"data"->0->>"embedding"');
説明このトピックで使用されるモデルは、OpenAI埋め込みモデルです。 このトピックで使用されるモデルの
APIキー
が取得され、RDSインスタンスが存在するリージョンがOpenAIへのアクセスをサポートします。 このトピックでは、OpenAIとシンガポールリージョンの埋め込みモデルを使用します。 詳細については、「埋め込み」をご参照ください。このステップで使用される関数の詳細については、「rds_embedding.add_model() 」をご参照ください。
テキストと必要なベクトルデータを挿入します。
INSERT INTO test SELECT '风急天高猿啸哀', rds_embedding.get_embedding_by_model('text-embedding-ada-002', 'sk-****P', '风急天高猿啸哀')::real[]; INSERT INTO test SELECT '渚清沙白鸟飞回', rds_embedding.get_embedding_by_model('text-embedding-ada-002', 'sk-****P', '渚清沙白鸟飞回')::real[]; INSERT INTO test SELECT '无边落木萧萧下', rds_embedding.get_embedding_by_model('text-embedding-ada-002', 'sk-****P', '无边落木萧萧下')::real[]; INSERT INTO test SELECT '不尽长江滚滚来', rds_embedding.get_embedding_by_model('text-embedding-ada-002', 'sk-****P', '不尽长江滚滚来')::real[];
説明このステップで使用される関数の詳細については、「rds_embedding.get_embedding_by_model() 」をご参照ください。
テストテーブル内のテキストの各部分のベクトルと、テキストの類似性を計算し
ます
。SELECT info, vec <=> rds_embedding.get_embedding_by_model('text-embedding-ada-002', 'sk-****P', '不尽长江滚滚来')::real[]::vector AS distance FROM test ORDER BY vec <=> rds_embedding.get_embedding_by_model('text-embedding-ada-002', 'sk-****P', '不尽长江滚滚来')::real[]::vector;
サンプル出力:
info | distance ----------------+-------------------- 不尽长江滚滚来 | 0 无边落木萧萧下 | 0.6855717919553399 风急天高猿啸哀 | 0.7423166439170339 渚清沙白鸟飞回 | 0.7926204045363088 (4 rows)