Una incorporación de texto es una representación vectorial de datos de texto y se usan en muchas maneras de encontrar artículos similares. Interactúas con ellos cada vez que completas una búsqueda de Google o ver recomendaciones cuando compras en línea. Cuando creas incorporaciones de texto, obtienes representaciones vectoriales de texto natural como arrays de números de punto flotante. Esto significa que todas las entradas al texto se le asigna una representación numérica. Comparando la distancia numérica entre las representaciones vectoriales de dos fragmentos de texto, una aplicación puede determinan la similitud entre el texto o los objetos representados por las texto.
Con la API de incorporaciones de texto de Vertex AI, puedes crear un
la incorporación de texto con IA generativa. Usando
en este instructivo, podrás generar incorporaciones de texto para los datos almacenados
Modelos de incorporación de Spanner y Vertex AI, como el
textembedding-gecko
.
Para obtener más información sobre las incorporaciones, consulta Obtén incorporaciones de texto.
Objetivo
En este instructivo, aprenderás a realizar lo siguiente:
- Registra el modelo
textembedding-gecko
de Vertex AI en un esquema de Spanner con declaraciones DDL. - Haz referencia al modelo registrado con consultas en SQL para generar incorporaciones de los datos almacenados en Spanner.
Costos
En este instructivo, se usan componentes facturables de Google Cloud, que incluyen lo siguiente:
- Spanner
- Vertex AI
Para obtener más información sobre los costos de Spanner, consulta la página Precios de Spanner.
Para obtener más información sobre los costos de Vertex AI, consulta el Página de precios de Vertex AI
Genera y almacena incorporaciones de texto
Según el modelo que uses, la generación de incorporaciones puede tardar un poco. Para cargas de trabajo sensibles al rendimiento, se recomienda evitar generar en las transacciones de lectura y escritura. En cambio, genera las incorporaciones en un transacción de solo lectura con los siguientes ejemplos de SQL.
GoogleSQL
Registra un modelo de incorporaciones de texto en Spanner
En GoogleSQL, debes registrar un modelo antes de usarlo con
la función ML.PREDICT
. Para registrar el modelo textembedding-gecko
en una base de datos de Spanner, ejecuta la siguiente instrucción de DDL:
CREATE MODEL MODEL_NAME
INPUT(content STRING(MAX))
OUTPUT(
embeddings
STRUCT<
statistics STRUCT<truncated BOOL, token_count FLOAT64>,
values ARRAY<FLOAT64>>
)
REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/PROJECT/locations/LOCATION/publishers/google/models/textembedding-gecko$MODEL_VERSION'
);
Reemplaza lo siguiente:
MODEL_NAME
: Es el nombre del modelo de incorporación.PROJECT
: Es el proyecto que aloja el extremo de Vertex AI.LOCATION
: Es la ubicación del extremo de Vertex AI.MODEL_VERSION
: Es la versión del modelo de incorporacióntextembedding-gecko
.
Spanner otorga los permisos adecuados de forma automática. Si no, revisa el control de acceso al extremo del modelo.
El descubrimiento y la validación de esquemas no están disponibles para la IA generativa
e implementar modelos automáticamente. Debes proporcionar las cláusulas INPUT
y OUTPUT
que coincidan
según el esquema de los modelos. Para ver el esquema completo del modelo Gecko, consulta
Obtén incorporaciones de texto.
Genera incorporaciones de texto
Para generar incorporaciones, pasa un fragmento de texto directamente al
función ML.PREDICT
con el siguiente SQL:
SELECT embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT "A product description" as content)
);
Para generar incorporaciones de datos almacenados en una tabla, usa el siguiente SQL:
SELECT id, embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT id, description as content FROM Products)
);
Almacena incorporaciones de texto
Luego de generar las incorporaciones en una transacción de solo lectura, almacénalas en Spanner para que se puedan administrar con tus datos operativos. Para almacenar las incorporaciones, usar una transacción de lectura y escritura
Para las cargas de trabajo que son menos sensibles al rendimiento, puedes generar e insertar con el siguiente SQL en una transacción de lectura y escritura:
CREATE TABLE Products(
id INT64 NOT NULL,
description STRING(MAX),
embeddings ARRAY<FLOAT32>,
) PRIMARY KEY(id);
INSERT INTO Products (id, description, embeddings)
SELECT @Id, @Description, embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT @Description as content)
);
PostgreSQL
Genera incorporaciones de texto
Para generar incorporaciones, pasa un fragmento de texto directamente a la función spanner.ML_PREDICT_ROW
con el siguiente SQL:
SELECT
spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/textembedding-gecko$MODEL_VERSION',
'{"instances": [{"content": "A product description"}]}'::jsonb
) ->'predictions'->0->'embeddings'->'values';
Reemplaza lo siguiente:
PROJECT
: Es el proyecto que aloja el extremo de Vertex AI.LOCATION
: Es la ubicación del extremo de Vertex AI.MODEL_VERSION
: Es la versión del modelo de incorporacióntextembedding-gecko
.
Para generar incorporaciones de datos almacenados en una tabla, usa el siguiente SQL:
SELECT id, spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/textembedding-gecko$MODEL_VERSION',
JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', description))))
) -> `predictions`->0->`embeddings`->`values``
FROM Products;
Reemplaza lo siguiente:
PROJECT
: Es el proyecto que aloja el extremo de Vertex AI.LOCATION
: Es la ubicación del extremo de Vertex AI.MODEL_VERSION
: Es la versión del modelo de incorporacióntextembedding-gecko
.
Almacena incorporaciones de texto
Luego de generar las incorporaciones en una transacción de solo lectura, almacénalas en Spanner para que se puedan administrar con tus datos operativos. Para almacenar las incorporaciones, usar una transacción de lectura y escritura
Para las cargas de trabajo que son menos sensibles al rendimiento, puedes generar e insertar con el siguiente SQL en una transacción de lectura y escritura:
CREATE TABLE Products (
id INT8 NOT NULL,
description TEXT,
embeddings REAL[],
PRIMARY KEY(id)
);
INSERT INTO Products (id, description, embeddings)
SELECT @Id, @Description, spanner.FLOAT32_ARRAY(spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/textembedding-gecko$MODEL_VERSION',
JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', @Description)))
) -> 'predictions'->0->'embeddings'->'values'
));
Reemplaza lo siguiente:
PROJECT
: Es el proyecto que aloja el extremo de Vertex AI.LOCATION
: Es la ubicación del extremo de Vertex AI.MODEL_VERSION
: Es la versión del modelo de incorporacióntextembedding-gecko
.
Actualiza las incorporaciones de texto
Para actualizar tus incorporaciones o transferir datos en tiempo real, usa el UPDATE
(GoogleSQL
y PostgreSQL)
declaración.
Para actualizar la tabla Products
del ejemplo anterior, usa el siguiente SQL:
GoogleSQL
UPDATE Products
SET
description = @description,
embeddings = (SELECT embeddings.values
FROM ML.PREDICT(MODEL MODEL_NAME, (SELECT @description as content))
)
WHERE id = @id;
Reemplaza lo siguiente:
MODEL_NAME
: Es el nombre del modelo de incorporación.
PostgreSQL
UPDATE
Products
SET
description = $1,
embeddings = spanner.FLOAT32_ARRAY(
spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/textembedding-gecko$MODEL_VERSION',
JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', $1)))
) -> 'predictions'->0->'embeddings'->'values')
WHERE
id = $2;
Reemplaza lo siguiente:
PROJECT
: Es el proyecto que aloja el extremo de Vertex AI.LOCATION
: Es la ubicación del extremo de Vertex AI.MODEL_VERSION
: Es la versión del modelo de incorporacióntextembedding-gecko
.
¿Qué sigue?
- Aprende a usar la búsqueda de vectores de Vertex AI para buscar elementos con similitudes semánticas.
- Obtén más información sobre el aprendizaje automático y las incorporaciones en nuestra curso intensivo sobre incorporaciones.