Saltar al contenido principal
Versión: 20 R10 BETA

Vector

La clase Vector permite manejar vectores y ejecutar cálculos de distancia y similitud entre ellos. Esta clase está disponible en el "class store" de 4D.

En el mundo de las IA, un vector es una secuencia de números que permite a una máquina comprender y manipular datos complejos. Para una visión detallada del papel de los vectores con las IAs, puede consultar esta página.

Comprender los diferentes cálculos vectoriales

La clase 4D.Vector propone tres tipos de cálculos vectoriales. La siguiente tabla resume las principales características de cada uno:

cosineSimilaritydotSimilarityeuclideanDistance
DefiniciónCompara la orientación de dos textos representados como vectores. Cuanto más apunta en la misma dirección, más cerca están.Suma de productos entre cada dimensión vectorial. Es como una puntuación ponderada de compatibilidad.Distancia real entre dos vectores, como si se midiera con una regla.
Analogía simple¿Estamos hablando del mismo tema?¿Se refiere usted al mismo tema de forma insistente?¿Está realmente lejos de lo que estoy diciendo?
EjemploImagine que busca películas para ver en un servicio de streaming de vídeo a la carta. La similitud del coseno se utiliza para comparar sus gustos (por ejemplo, le gustan las películas de acción con un poco de comedia) con las descripciones de las películas de su base de datos. No importa si es un "pequeño" fan (ve 1 película al mes) o un "gran" fan (ve 10 películas a la semana), lo que importa es si las películas tienen características similares a lo que le gusta (acción + comedia). El servicio de streaming utiliza la similitud del coseno para recomendar películas que "apuntan en la misma dirección" que sus preferencias.Piense en un motor de búsqueda. Cuando escribe "receta de tarta de chocolate", el algoritmo compara su consulta con páginas web. El producto punto se puede utilizar no sólo para comprobar si una página habla de pasteles de chocolate (una dirección similar a la de su búsqueda), sino también para dar más peso a las páginas que son muy relevantes (por ejemplo, una página con mucho contenido detallado sobre pasteles de chocolate tendrá una mayor "longitud" y, por tanto, una puntuación más alta). Una página con una sola frase sobre el tema tendrá una puntuación más baja.Imagine una aplicación de citas. El algoritmo puede utilizar la distancia euclidiana para comparar su perfil (sus intereses, edad, ubicación, etc.) con las de otros usuarios. Si sus perfiles son muy similares (por ejemplo, a ambos les gusta el senderismo, la música pop, y viven a 5 km de distancia), la distancia euclidiana entre sus perfiles será baja, y la aplicación sugerirá a esta persona como un buen "match". Aquí cuentan todas las diferencias (por pequeñas que sean), no sólo la orientación general de sus gustos.

En cualquier caso, conviene probar los distintos vectores para determinar cuál se adapta mejor a sus necesidades y datos.

Objeto vector

Los objetos vectoriales son compartidos, inmutables y transmisibles.

.cosineSimilarity( vector : 4D.Vector ) : Real
calcula la similitud coseno entre el vector 4D actual y el que se paso en el parámetro vector
.dotSimilarity( vector : 4D.Vector ) : Real
calcula el producto punto del vector 4D actual y el que pasó en el parámetro vector
.euclideanDistance( vector : 4D.Vector ) : Real
calcula la distancia euclídea entre el vector 4D actual y el que pasó en el parámetro vector
length : Integer
el número de componentes del vector
.toCollection() : Collection
devuelve los componentes del vector como una colección de reales

4D.Vector.new()

Historia
LanzamientoModificaciones
20 R10Añadidos

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

ParámetrosTipoDescripción
parámetrosColección de reales->Colección de números reales que representan un vector
Resultado4D.Vector<-Nuevo objeto vector

Descripción

La función 4D.Vector.new() crea y devuelve un nuevo objeto del tipo 4D.Vector.

En parameter, pase una colección de números reales que representen el vector a crear. Estos valores los ofrecen las inteligencias artificiales y representan matemáticamente objetos como palabras o datos.

Ejemplo

Para crear un vector:

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

Puede acceder a componentes individuales o convertir todo el vector en una colección:

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

.cosineSimilarity()

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

ParámetrosTipoDescripción
vector4D.Vector->Vector con el que comparar
ResultadoReal<-Distancia entre vectores

Descripción

La función .cosineSimilarity() calcula la similitud coseno entre el vector 4D actual y el que se paso en el parámetro vector. Ambos vectores deben tener el mismo tamaño.

Esta métrica mide el ángulo entre vectores y se utiliza habitualmente para determinar la similitud semántica entre textos. Se recomienda para incrustaciones de texto, documentos, frases y cualquier dato en el que la dirección importe más que la magnitud (por ejemplo, para la búsqueda semántica o la clasificación de textos).

Valor devuelto

  • Rango: -1 (opuesto) a 1 (idéntico).
  • Cuanto mayor sea el valor devuelto, más parecidos son los vectores.

Ejemplo 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)

Ejemplo 2

info

Este ejemplo utiliza la extensión 4D AIKit para generar incrustaciones.


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())

// Cálculo de vectores con 4D AIKit
var $result:=$clientAI.embeddings.create($prompt; $model)

// Creación de objetos 4D.vector
var $vector:=$result.vector

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

// Cálculo vectorial con componente 4D AIKit
var $questionVector:=$clientAI.embeddings.create($question; $model).vector

// cálculo de similitud
If ($vector.cosineSimilarity($questionVector)>0.9)
ALERT("Interesting result")
End if

//resultado real: 0,7360136465949


.dotSimilarity()

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

ParámetrosTipoDescripción
vector4D.Vector->Vector con el que comparar
ResultadoReal<-Distancia entre vectores

Descripción

La función .dotSimilarity() calcula el producto punto del vector 4D actual y el que pasó en el parámetro vector. Ambos vectores deben tener el mismo tamaño.

Esta métrica refleja tanto la similitud como la magnitud, y se utiliza generalmente en modelos en los que varían las normas vectoriales (magnitudes). Se recomienda para escenarios en los que las incrustaciones se han afinado teniendo en cuenta la magnitud (por ejemplo, motores de recomendación, puntuación de relevancia).

Valor devuelto

  • Depende de las magnitudes y direcciones de los vectores
  • Cuanto mayor sea el valor devuelto, más parecidos son los vectores.

Ejemplo

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)

Ejemplo 2

info

Este ejemplo utiliza la extensión 4D AIKit para generar incrustaciones.

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"

// Cálculo de vectores con el componente AIKit 4D
$questionVector:=$clientAI.embeddings.create($question; $model).vector

For each ($document; $documents)
// Cálculo de vectores con el componente AIKit 4D
$vector:=$clientAI.embeddings.create($document.text; $model).vector
// similitud
$document.similarity:=$vector.dotSimilarity($questionVector)
End for each

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

//$documents:
//{text:Tips for learning 4D programming,similarity:0.90409492325102}
//{text:Top 10 sci-fi movies of all time,similarity:0.75362527646035}
//{text:How to bake a chocolate cake,similarity:0.73664833336323}
//{text:Best hiking trails in the Alps,similarity:0.73138600461065}

.euclideanDistance()

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

ParámetrosTipoDescripción
vector4D.Vector->Vector con el que comparar
ResultadoReal<-Distancia entre vectores

Descripción

La función .euclideanDistance() calcula la distancia euclídea entre el vector 4D actual y el que pasó en el parámetro vector. Ambos vectores deben tener el mismo tamaño.

Esto mide la distancia de línea recta en el espacio vectorial. Se recomienda para incrustaciones de datos numéricos o estructurados, o cuando se utilizan modelos en los que la proximidad en el espacio bruto se correlaciona directamente con la similitud.

Valor devuelto

  • valor devuelto >= 0
  • Cuanto más bajo sea el valor devuelto, más parecidos son los vectores.

Ejemplo 1

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)

Ejemplo 2

$places:=[\
{name: "Eiffel Tower"; coord: [48.8584; 200.2945]; similarity: 0}; \
{name: "Louvre Museum"; coord: [48.8606; 200.3376]; similarity: 0}; \
{name: "Notre-Dame"; coord: [48.8529; 200.35]; similarity: 0}; \
{name: "Montmartre"; coord: [48.8867; 200.3431]; similarity: 0}\
]

$userLocation:=[8.8566; 20.3522]
var $vector:=4D.Vector.new($userLocation)

For each ($place; $places)
$place.similarity:=$vector.euclideanDistance(4D.Vector.new($place.coord))
End for each

$places:=$places.orderBy("similarity asc")
ALERT("Nearest monument: "+$places[0].name)

.length

length : Integer

Descripción

La propiedad .length contiene el número de componentes del vector.

.toCollection()

.toCollection() : Collection

ParámetrosTipoDescripción
ResultadoCollection<-Colección de números reales que representan los componentes del vector

La función .toCollection() devuelve los componentes del vector como una colección de reales.