メインコンテンツまでスキップ
バージョン: 次へ

Vector

Vector クラスを使用すると、ベクトル を扱うことができるようになり、それらの距離や類似性を計算することができます。 このクラスは 4D クラスストアより提供されます。

AI の世界では、ベクトルとは、機会が複雑なデータを理解し、操作することを可能にする、一連の数字です。 AI におけるベクトルの役割の詳細な概要については、こちらのページ を参照してください。

様々なベクトル計算を理解する

4D.Vector クラスは、3種類のベクター計算を提供します。 以下の表はそれぞれの計算の主な特徴をまとめたものです:

cosineSimilaritydotSimilarityeuclideanDistance
定義ベクトルとして表現された2つのテキストの向きを比較します。 2つが指している方向が同じであればあるほど、その2つは近いことを意味します。それぞれのベクトル次元の積の合計。 加重互換性スコアのようなものと考えることができます。定規で測ったかのような2つのベクトル感の実際の距離。
単純な例え私たちは同じ話題について話していますか?あなたは同じ主題について何度も何度も話をしていますか?あなたは私の言っている事から本当にそんなに離れていますか?
例題例えば、あなたが動画オンデマンドストリーミングサービス上で次に見る映画を探している場合を考えます。 コサイン類似性は、あなたの嗜好(例えば、若干のコメディが入ったアクション映画が好きである、など)とデータベース内にある映画の説明とを比較するために使用されます。 ここではあなたが映画の"ライトな"ファンである(映画を月一回見る)か、あるいは"大"ファンである(映画を週に10本見る)かは関係ありません。大事なのは、映画の特徴があなたの好み(例:アクション+コメディ)と類似しているかどうかです。 ストリーミングサービスはこのコサイン類似性を使用して、あなたの嗜好と"同じ方向を向いている"映画を推奨します。検索エンジを考えてみてください。 あなたが"チョコレートケーキのレシピ"と入力すると、アルゴリズムはあなたのクエリをWebページと比較します。 ドット積は、あるページがチョコレートケーキについて説明しているかどうか(あなたの検索と似た方向かどうか)をチェックするために使用されるだけではなく、より関連性のあるページにより重みをつけるために使用されます(例えば、チョコレートケーキについてのより詳細なコンテンツがたくさんあるページはより大きな"長さ"を与えられ、結果としてより高いスコアがつけられます)。 検索した内容について1行しか触れていないようなページは、低いスコアがつけられます。マッチングアプリを想像してみてください。 アルゴリズムはユークリッド距離を使用して、あなたのプロフィール(趣味、年齢、居住地など)と 他のユーザーのプロフィールを比較します。 もし二人のプロフィールがとても似通っている(例えば二人ともハイキングが趣味で、ポップミュージックが好き、そして住んでいるところが5kmしか離れていない)のであれば、二人のプロフィールのユークリッド距離は低くなり、アプリはこの人物をより"マッチしている"とサジェストしてきます。 ここでは、二人の嗜好の一般的な方向だけでなく、すべての違いも(どれだけ小さくても)考慮されます。

いずれの場合においても、さまざまなベクトルをテストしてどれがあなたの用途とデータに合致するか判断するのが良いと言えるでしょう。

ベクトルオブジェクト

ベクターオブジェクトは、変更不可で、ストリーム可能な共有オブジェクトです。

.cosineSimilarity( vector : 4D.Vector ) : Real
現在の4D ベクトルとvector 引数に渡したベクトルとの間のコサイン類似度を計算します
.dotSimilarity( vector : 4D.Vector ) : Real
.euclideanDistance( vector : 4D.Vector ) : Real
現在の4D ベクトルとvector 引数に渡したベクトルとの間のユークリッド距離を計算します
length : Integer
.toCollection() : Collection

4D.Vector.new()

履歴
リリース内容
20 R10追加

4D.Vector.new ( parameter : Collection ) : 4D.Vector

引数説明
引数実数のCollection->ベクトルを表せる実数値のコレクション
戻り値4D.Vector<-新規ベクトルオブジェクト

説明

4D.Vector.new() 関数は、新しい4D.Vector型のオブジェクト作成して返します。

parameter 引数には、作成したベクトルを表す実数値のコレクションを渡します。 これらの値は人工知能によって提供されるものであり、単語やデータなどのオブジェクトを数学的に表します。

例題

ベクトルを作成します:

var $vector := 4D.Vector.new([0.123; -0.456; 0.789]) 

ここのベクトル成分にアクセスすることや、あるいはベクトル全体をコレクションに戻すこともできます:

var $firstComponent := $vector[0]
var $collection := $vector.toCollection()

.cosineSimilarity()

.cosineSimilarity( vector : 4D.Vector ) : Real

引数説明
vector4D.Vector->比較するベクトル
戻り値Real<-ベクトル感の距離

説明

.cosineSimilarity() 関数は、現在の4D ベクトルとvector 引数に渡したベクトルとの間のコサイン類似度を計算します。 両ベクトルはサイズが同じである必要があります。

この計算はベクトル間の角度 を計算し、一般的にはテキスト間の意味的類似度を決定するために使用されます。 これはテキスト埋め込み、ドキュメント、文章など、データの方向性 の方が大きさ より重要なデータ(例: 意味検索やテキスト分類など)に対して推奨されます。

戻り値

  • 範囲: -1 (反対) 〜 1 (同一)
  • 返された値が高ければ高いほど、二つのベクトルは類似しているということになります。

例題 1

var $vector := 4D.Vector.new([0.123; -0.456; 0.789]) 
var $anotherVector := 4D.Vector.new([0.598; -0.951; 0.789])
var $similarity := $vector.cosineSimilarity($anotherVector)

例題 2

info

This example uses the 4D AIKit extension to generate embeddings:


var $model:="text-embedding-ada-002"
var $people:=ds.People.get(1)

$prompt:=String($people.Firstname)+" "+String($people.Lastname)+" was born on "+\
String($people.Birthday)+" and lives in "+String($people.Address)+", "+\
String($people.ZipCode)+", "+String($people.City)+", "+String($people.Country)+\
". Contact: "+String($people.email)+", "+String($people.Cell)+", "+\
String($people.Phone)+". Family IDs - Father: "+String($people.FatherID)+\
", Mother : "+String($people.MotherID)+", Partner: "+String($people.PartnerID)+"."

var $clientAI:=cs.AIKit.OpenAI.new(getAIKey())

// Vector calculation with 4D AIKit
var $result:=$clientAI.embeddings.create($prompt; $model)

// 4D.vector object creation
var $vector:=$result.vector

var $question:="I'm looking for John who lives in USA"

// Vector calculation with 4D AIKit component
var $questionVector:=$clientAI.embeddings.create($question; $model).vector

// similarity calculation
If ($vector.cosineSimilarity($questionVector)>0.9)
ALERT("Interesting result")
End if

.dotSimilarity()

.dotSimilarity( vector : 4D.Vector ) : Real

引数説明
vector4D.Vector->比較するベクトル
戻り値Real<-ベクトル感の距離

説明

.dotSimilarity() 関数は、現在の4D ベクトルとvector 引数に渡したベクトルとの間のドット積を計算します。 両ベクトルはサイズが同じである必要があります。

この計算は類似度大きさ の両方を反映し、一般的にはベクトルのノルム(大きさ)が異なるモデルで使用されます。 これは、埋め込みが大きさを考慮して微調整されているようなシナリオ(例: 推薦エンジン、関連性スコアづけ)などに推奨されます。

戻り値

  • ベクトルの大きさと方向性に依存します
  • 返された値が高ければ高いほど、二つのベクトルは類似しているということになります。

例題

var $vector := 4D.Vector.new([0.123; -0.456; 0.789]) 
var $anotherVector := 4D.Vector.new([0.598; -0.951; 0.789])
var $score := $vector.dotSimilarity($anotherVector)

例題 2

info

This example uses the 4D AIKit extension to generate embeddings:

var $model:="text-embedding-ada-002"
var $clientAI:=cs.AIKit.OpenAI.new(getAIKey())

$documents:=[{text: "How to bake a chocolate cake"; similarity: 0}; \
{text: "Best hiking trails in the Alps"; similarity: 0}; \
{text: "Tips for learning 4D programming"; similarity: 0}; \
{text: "Top 10 sci-fi movies of all time"; similarity: 0}]

$question:="4D coding tutorials"

// Vector calculation with 4D AIKit component
$questionVector:=$clientAI.embeddings.create($question; $model).vector

For each ($document; $documents)
// Vector calculation with 4D AIKit component
$vector:=$clientAI.embeddings.create($document.text; $model).vector
// similarity
$document.similarity:=$vector.dotSimilarity($questionVector)
End for each

$documents:=$documents.orderBy("similarity desc")
ALERT("Best answer: "+$documents[0].text)

.euclideanDistance()

.euclideanDistance( vector : 4D.Vector ) : Real

引数説明
vector4D.Vector->比較するベクトル
戻り値Real<-ベクトル感の距離

説明

.euclideanDistance() 関数は、現在の4D ベクトルとvector 引数に渡したベクトルとの間のユークリッド距離を計算します。 両ベクトルはサイズが同じである必要があります。

この計算はベクトル空間内での直線距離を計算します。 これは、数値または構造化されたデータ埋め込みや、生の空間での近似性が類似性に直接相関するモデルを使用する場合に推奨されます。

戻り値

  • 戻り値 >= 0
  • 返された値が低ければ低いほど、二つのベクトルは類似しているということになります。

例題

var $vector := 4D.Vector.new([0.123; -0.456; 0.789]) 
var $anotherVector := 4D.Vector.new([0.598; -0.951; 0.789])
var $distance := $vector.euclideanDistance($anotherVector)

.length

length : Integer

説明

.length プロパティにはベクトル成分の数を格納しています。

.toCollection()

.toCollection() : Collection

引数説明
戻り値Collection<-ベクトル成分を表す実数値のコレクション

.toCollection() 関数は、ベクトル成分を実数値のコレクションとして返します。