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