セマンティック検索、レコメンデーションエンジン、自然言語処理などの AIアプリケーションにおいて、ベクトルベースの検索の重要性が高まる中、4D は query() 関数にベクトルクエリのネイティブサポートを導入しました。この強化により、ベクトル類似度の比較が DataClass.query() および EntitySelection.query() に直接取り込まれます。
ベクトル類似度によるクエリ
おなじみの比較演算子 >, >=, <, <= を使用して、ベクトルフィールドが参照ベクトルと類似しているエンティティを検索できるようになりました。
基本構文は次のとおりです:
// OpenAI 埋め込みAPI を呼び出し、入力テキストのベクトルを生成します
var $result:=$clientAI.embeddings.create("A general manager living in France"; $model)
Var $inputEmbedding:=$result.vector
var $results := ds.MyClass.query("myVectorField > :1"; {vector: $inputEmbedding})
これは、デフォルトの類似度メトリックであるコサイン類似度を使用して、$myVector との類似度がデフォルトのしきい値(0.5)より大きいエンティティを返します。
検索をさらに微調整するには、以下の両方を明示的に定義できます:
-
metric属性で、ユースケースに最も関連性の高い類似度メトリックを定義
-
threshold属性で、検索結果が参照ベクトルとどの程度類似していれば関連性があるとみなすかを定義
var $comparisonVector := {vector: $inputEmbedding; metric: mk cosine; threshold: 0.4}
var $results := ds.MyTable.query("myVectorField <= :1"; $comparisonVector)
セマンティック検索と従来のクエリの組み合わせ
4D のアプローチの主な利点は、セマンティッククエリを従来の ORDAフィルターと同一のクエリ内で組み合わせることができる点です。
これにより、意味ベースの検索と構造化された基準を組み合わせた、強力で正確な検索を作成することができます。
var $comparisonVector := {vector: $myVector; metric: mk cosine; threshold: 0.4}
var $results := ds.MyTable.query("myVectorField <= :1 AND salary>100000"; $comparisonVector)
この例では、クエリは、職務記述が入力テキストと意味的に近く、かつ給与が100,000を超える従業員を取得します。
使用すべき場合 (とそうでない場合)
セマンティック検索 (クエリ) は、アプリケーションに完全一致ではなく、意味を理解させたい場合に最適です。
たとえば、以下の用途が考えられます:
-
あいまい検索や文脈検索 (例: 「これに似た文書を見つけたい」)
-
自然言語クエリ (例: 「マーケティングとデザインに携わる従業員」)
-
レコメンデーションエンジンとナレッジディスカバリー機能
しかし、構造化された分析タスクには向いていません。
「最も給与の高い従業員トップ10」のようなクエリであれば、従来のクエリの方が高速で適切です。
両方のアプローチを組み合わせることで、インテリジェントで正確な検索体験を構築することができます。セマンティック検索は、従来のORDA属性ベースのクエリと完璧に融合し、驚くべきパワーを発揮します。
まとめ
セマンティック検索 (クエリ) が 4D に組み込まれたことで、アプリケーションに AI駆動型の検索・発見機能を簡単に作成できるようになりました。
ユースケースに最適な類似度メトリックを選択し、関連性のしきい値を調整し、セマンティックフィルターと構造化フィルターを組み合わせて最適な結果を得ることができます。
この新機能は、AIベースの理解力を 4Dデータモデルに直接もたらし、よりスマートでコンテキストを意識したクエリへの扉を開きます。
現在、ベクトルフィールドはインデックス化されていませんが、インデックス化のサポートは今後のバージョンの 4D で導入される予定です。この将来的な機能強化により、大幅にパフォーマンスが改善され、大規模なデータセットのセマンティック検索がさらに高速で効率的になります。
現在、この投稿へのコメント機能は利用できません。