Pour créer un index ou mettre à jour un index existant, vous devez fournir des vecteurs à Vector Search, dont le format et la structure sont décrits dans les sections suivantes.
Stockage de données d'entrée et organisation des fichiers
Conditions préalables
Stockez vos données d'entrée dans un bucket Cloud Storage, dans votre projet Google Cloud.
Les fichiers de données d'entrée doivent être organisés comme suit :
- Chaque lot de fichiers de données d'entrée doit se trouver dans un seul et même répertoire Cloud Storage.
- Les fichiers de données doivent être placés directement sous
batch_root
et nommés avec les suffixes suivants :.csv
,.json
et.avro
. - Le répertoire racine de lot peut contenir jusqu'à 5 000 objets (fichiers).
- Chaque fichier de données est interprété comme un ensemble d'enregistrements. Le format de l'enregistrement est déterminé par le suffixe du nom de fichier et les exigences inhérentes au format sont décrites. Consultez la page Formats de fichiers de données.
- Chaque enregistrement doit avoir un
id
et un vecteur de caractéristiques en plus de vos champs facultatifs compatibles avec Vertex AI Feature Store, tels que les restrictions et le regroupement. - Un sous-répertoire nommé
delete
peut être présent. Chaque fichier situé directement sousbatch_root
/delete
est traité sous la forme d'un fichier texte d'enregistrementsid
, avec unid
sur chaque ligne. - Tous les autres répertoires et fichiers sont ignorés.
Traitement des données d'entrée
- Tous les enregistrements de tous les fichiers de données, y compris ceux situés sous
delete
, constituent un seul et même lot d'entrées. - L'ordre relatif des enregistrements dans un fichier de données est sans importance.
- Un ID ne doit apparaître qu'une seule fois dans un lot. S'il existe un doublon avec le même ID, ces deux éléments ne seront affichés et comptabilisés que comme un seul vecteur.
- Un ID ne peut pas figurer à la fois dans un fichier de données standard et dans un fichier de données de suppression.
- Tous les ID d'un fichier de données sous "delete" sont supprimés de la version d'index suivante.
- Les enregistrements issus de fichiers de données standards sont inclus dans la version suivante, en écrasant une valeur présente dans une ancienne version d'index.
Voici des exemples d'embeddings denses, creux et hybrides :
Embeddings denses
{"id": "1", "embedding": [1,1,1]} {"id": "2", "embedding": [2,2,2]}
Embeddings creux (version Preview publique) :
{"id": "3", "sparse_embedding": {"values": [0.1, 0.2], "dimensions": [1, 4]}} {"id": "4", "sparse_embedding": {"values": [-0.4, 0.2, -1.3], "dimensions": [10, 20, 20]}}
Embeddings hybrides (version Preview publique) :
{"id": "5", "embedding": [5, 5, -5], "sparse_embedding": {"values": [0.1], "dimensions": [500]}} {"id": "6", "embedding": [6, 7, -8.1], "sparse_embedding": {"values": [0.1, -0.2], "dimensions": [40, 901]}}
Voici un exemple d'organisation de fichiers de données d'entrée valide :
batch_root/
feature_file_1.csv
feature_file_2.csv
delete/
delete_file.txt
Les fichiers feature_file_1.csv
et feature_file_2.csv
contiennent des enregistrements au format CSV. Le fichier delete_file.txt
contient la liste des identifiants d'enregistrement à supprimer de la prochaine version d'index.
Formats de fichiers de données
JSON
- Encodez le fichier JSON en UTF-8.
- Chaque ligne du fichier JSON est interprétée comme un objet JSON distinct.
- Chaque enregistrement doit contenir un champ
id
pour spécifier l'ID du vecteur. - Chaque enregistrement doit contenir au moins l'un des éléments
embedding
ousparse_embedding
. - Le champ
embedding
est un tableau de nombres à virgule flottanteN
qui représente le vecteur de caractéristiques, oùN
est la dimension du vecteur de caractéristiques configuré au moment de la création de l'index. Ce champ ne peut être utilisé que pour les embeddings denses.configs.dimensions
, spécifié au moment de la création de l'index, doit être de la même longueur queembeddings
.configs.dimensions
s'applique uniquement àembedding
, et non àsparse_embedding
.
- Le champ
sparse_embedding
est un objet comportant les champsvalues
etdimensions
. Le champvalues
est une liste de nombres à virgule flottante qui représente le vecteur de caractéristiques, et le champdimensions
est une liste d'entiers qui représentent la dimension dans laquelle se trouve la valeur correspondante. Par exemple, un embedding creux semblable à[0,0.1,0,0,0.2]
peut être représenté par"sparse_embedding": {"values": [0.1, 0.2], "dimensions": [1,4]}
. Ce champ ne peut être utilisé que pour les embeddings creux.- La longueur de
sparse_embedding.values
doit être identique à celle desparse_embedding.dimensions
. Elles n'ont pas besoin d'avoir la même longueur queconfigs.dimensions
, qui est spécifié au moment de la création de l'index et ne s'applique pas àsparse_embedding
.
- La longueur de
- Vous pouvez inclure un champ
restricts
facultatif qui spécifie un tableau d'objetsTokenNamespace
dans les restrictions. Pour chaque objet :- Spécifiez un champ
namespace
qui correspond àTokenNamespace.namespace
. - Un champ
allow
facultatif peut être défini sur un tableau de chaînes correspondant à la liste deTokenNamespace.string_tokens
. - Un champ
deny
facultatif peut être défini sur un tableau de chaînes correspondant à la liste deTokenNamespace.string_blacklist_tokens
. - La valeur du champ
crowding_tag
, s'il est présent, doit correspondre à une chaîne.
- Spécifiez un champ
- Vous pouvez inclure un champ
numeric_restricts
facultatif qui spécifie un tableau deNumericRestrictNamespace
. Pour chaque objet :- Spécifiez un champ
namespace
qui correspond àNumericRestrictNamespace.namespace
. - L'un des champs de valeur
value_int
,value_float
etvalue_double
. - Il ne doit pas comporter de champ nommé "op". Ce champ est réservé aux requêtes.
- Spécifiez un champ
Avro
- Utilisez un fichier Avro valide.
- Pour représenter un point de données creux uniquement, fournissez un embedding creux dans le champ
sparse_embedding
et saisissez une liste vide dans le champembedding
. Créez des enregistrements conformes au schéma suivant :
{ "type": "record", "name": "FeatureVector", "fields": [ { "name": "id", "type": "string" }, { "name": "embedding", "type": { "type": "array", "items": "float" } }, { "name": "sparse_embedding", "type": [ "null", { "type": "record", "name": "sparse_embedding", "fields": [ { "name": "values", "type": { "type": "array", "items": "float" } }, { "name": "dimensions", "type": { "type": "array", "items": "long" } } ] } ] }, { "name": "restricts", "type": [ "null", { "type": "array", "items": { "type": "record", "name": "Restrict", "fields": [ { "name": "namespace", "type": "string" }, { "name": "allow", "type": [ "null", { "type": "array", "items": "string" } ] }, { "name": "deny", "type": [ "null", { "type": "array", "items": "string" } ] } ] } } ] }, { "name": "numeric_restricts", "type": [ "null", { "type": "array", "items": { "name": "NumericRestrict", "type": "record", "fields": [ { "name": "namespace", "type": "string" }, { "name": "value_int", "type": [ "null", "int" ], "default": null }, { "name": "value_float", "type": [ "null", "float" ], "default": null }, { "name": "value_double", "type": [ "null", "double" ], "default": null } ] } } ], "default": null }, { "name": "crowding_tag", "type": [ "null", "string" ] } ] }
CSV
- Format :
ID,N feature vector values,Any number of dimension:value sparse values,name=value lists
- Encodez le fichier CSV en UTF-8.
- Chaque ligne du fichier CSV doit contenir exactement un enregistrement.
- La première valeur de chaque ligne doit être l'ID de vecteur, qui doit être une chaîne UTF-8 valide.
- Après l'ID, au moins un embedding dense ou creux doit être spécifié.
- Pour un embedding dense, les valeurs
N
suivantes représentent le vecteur de caractéristiques, oùN
est la dimension du vecteur de caractéristiques configuré au moment de la création de l'index. - Pour un embedding creux, vous pouvez spécifier n'importe quel nombre de valeurs
dimension:value
. Dans ce cas,value
est analysé en tant que nombre à virgule flottante etdimension
en tant que valeurlong
. - Pour un embedding hybride présentant des embeddings creux et denses, les embeddings denses doivent être spécifiés avant les embeddings creux.
- Les valeurs de vecteur de caractéristiques doivent être des littéraux à virgule flottante, tels que définis dans les spécifications du langage Java.
- Les valeurs supplémentaires peuvent être au format
name=value
. - Le nom
crowding_tag
est interprété comme le tag de regroupement et ne peut apparaître qu'une seule fois dans l'enregistrement. Toutes les autres paires
name=value
sont interprétées comme des restrictions d'espace de noms. Le même nom peut être répété s'il existe plusieurs valeurs dans un espace de noms.Par exemple,
color=red,color=blue
représente ceTokenNamespace
:{ "namespace": "color" "string_tokens": ["red", "blue"] }
Si la valeur commence par
!
, le reste de la chaîne est interprété comme une valeur exclue.Par exemple,
color=!red
représente ceTokenNamespace
:{ "namespace": "color" "string_blacklist_tokens": ["red"] }
Les paires
#name=numericValue
avec un suffixe de type numérique sont interprétées comme des restrictions d'espace de noms numérique. Le suffixe de type numérique esti
pour "int",f
pour "float" etd
pour "double". Le même nom ne doit pas être répété, car une seule valeur doit être associée par espace de noms.Par exemple,
#size=3i
représente ceNumericRestrictNamespace
:{ "namespace": "size" "value_int": 3 }
#ratio=0.1f
représente ceNumericRestrictNamespace
:{ "namespace": "ratio" "value_float": 0.1 }
#weight=0.3d
représente ceNumericRestriction
:{ "namespace": "weight" "value_double": 0.3 }
L'exemple suivant est un point de données avec
id: "6"
,embedding: [7, -8.1]
,sparse_embedding: {values: [0.1, -0.2, 0.5], dimensions: [40, 901, 1111]}}
, le tag de regroupementtest
, la liste d'autorisation de jetonscolor: red, blue
, la liste de blocage des jetonscolor: purple
et une valeur numérique de restriction deratio
avec le nombre à virgule flottante0.1
:6,7,-8.1,40:0.1,901:-0.2,1111:0.5,crowding_tag=test,color=red,color=blue,color=!purple,ratio=0.1f
Étapes suivantes
- Découvrez comment Créer et gérer votre index.