ai.analyze_sentiment es una herramienta de IA integrada de AlloyDB AI que clasifica el sentimiento del texto como positivo, negativo o neutral. Cuando incorporas esta
capacidad directamente en la base de datos, AlloyDB Omni te permite procesar datos no estructurados
sin compilar canalizaciones complejas de extracción, transformación y carga (ETL) ni
integraciones de servicios externos.
La función de análisis de sentimiento ofrece los siguientes beneficios:
- Conocimiento del mundo: Es la gran colección de hechos, conceptos, relaciones y comprensión contextual del mundo que los modelos de lenguaje grandes (LLM) adquieren durante su fase de entrenamiento previo.
- Análisis en tiempo real: Lleva el conocimiento del mundo de Gemini a los datos empresariales con SQL.
- Escalabilidad: Admite el procesamiento basado en arrays y cursores para controlar miles de filas de manera eficiente.
- Simplicidad: Proporciona una abstracción de alto nivel que administra la invocación del modelo y la preparación de los datos de forma automática.
La función de análisis de opiniones de AlloyDB AI admite varios casos de uso, incluidos los siguientes:
- Comentarios de los clientes: Clasifica miles de opiniones sin procesar y no estructuradas sobre productos para identificar los niveles de satisfacción del cliente.
- Supervisión de redes sociales: Analiza la opinión en las menciones o los comentarios de redes sociales para medir la percepción pública de una marca.
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos antes de usar la función
ai.analyze_sentiment.
Habilita la extensión
Asegúrate de tener instalada la extensión google_ml_integration (versión 1.6.3 o
posterior) con el motor de consultas de IA habilitado.
Para habilitar la marca google_ml_integration.enable_ai_query_engine en AlloyDB Omni,
usa el comando SET. Este parámetro controla el acceso a las funciones de IA, como
ai.analyze_sentiment.
Asegúrate de que la extensión
google_ml_integrationsea la versión 1.6.3 o una posterior. Para verificar la versión, ejecuta lo siguiente:SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';Si necesitas actualizar la extensión, ejecuta el siguiente comando:
ALTER EXTENSION google_ml_integration UPDATE;Habilita la marca para la sesión actual o para toda la base de datos. Para habilitar la marca en tu sesión actual, ejecuta lo siguiente:
SET google_ml_integration.enable_ai_query_engine = 'on';Este cambio no requiere que se reinicie la base de datos. El valor predeterminado de esta marca es
off.
Crea una tabla de ejemplo
Para seguir los ejemplos de la función de análisis de opiniones de este documento, crea una tabla y complétala con las siguientes opiniones de películas.
CREATE TABLE IF NOT EXISTS reviews (
id INT PRIMARY KEY,
review_content TEXT
);
INSERT INTO reviews (id, review_content) VALUES
(1, 'This movie is very good'),
(2, 'The actors play the parts well'),
(3, 'I like the music in this film'),
(4, 'The story is easy to follow'),
(5, 'Many people will enjoy this show'),
(6, 'The film is too long'),
(7, 'I do not like the ending'),
(8, 'This movie is very boring'),
(9, 'The story is okay'),
(10, 'Some parts are fine');
Analiza el sentimiento de una sola cadena
Para evaluar la opinión de una sola entrada de texto, usa la versión escalar de
ai.analyze_sentiment.
SELECT ai.analyze_sentiment(
input => 'TEXT_CONTENT',
model_id => 'MODEL_ID' -- Optional. The default value is gemini-3.5-flash-lite.
);
En el siguiente ejemplo, se muestra cómo realizar un análisis de opiniones
a nivel de fila en los datos de texto almacenados en una tabla
llamada reviews con las columnas id y review_content
para almacenar datos de opiniones. En el ejemplo, se ejecuta una consulta SELECT que aplica la función ai.analyze_sentiment()
a la columna review_content para cada fila de la tabla. Esta
función procesa cada opinión de forma individual y devuelve la opinión calculada
(positive, negative o neutral).
--- Row Level sentiment analysis
SELECT id, ai.analyze_sentiment(review_content) FROM reviews;
El siguiente es el resultado de ejemplo:
id | analyze_sentiment
----+-------------------
1 | positive
2 | positive
3 | positive
4 | positive
5 | positive
6 | negative
7 | negative
8 | negative
9 | neutral
10 | neutral
Analiza opiniones en lotes
Para obtener un mejor rendimiento en conjuntos de datos más grandes, usa la versión basada en arrays de la función para procesar varias cadenas en una sola llamada.
SELECT ai.analyze_sentiment(
inputs => ARRAY['TEXT_1', 'TEXT_2'],
batch_size => BATCH_SIZE, -- Optional. The default value is 10.
model_id => 'MODEL_ID' -- Optional. The default value is gemini-3.5-flash-lite.
);
WITH sentiment_results AS (
SELECT
ARRAY_AGG(id ORDER BY id) as ids,
ai.analyze_sentiment(
inputs => array_agg(review_content ORDER BY id),
batch_size => 15) as sentiments
FROM reviews
),
correlated_results AS (
SELECT ids[i] as id, sentiments[i] as sentiment
FROM sentiment_results,
generate_series(1, array_length(ids, 1)) AS i
)
SELECT reviews.id, correlated_results.sentiment as sentiment
FROM reviews
JOIN correlated_results ON reviews.id = correlated_results.id
ORDER BY reviews.id;
El siguiente es el resultado de ejemplo:
id | sentiment
----+-----------
1 | positive
2 | positive
3 | positive
4 | positive
5 | positive
6 | negative
7 | negative
8 | negative
9 | neutral
10 | neutral
Analiza opiniones con cursores
La función basada en cursores está diseñada para procesar grandes conjuntos de datos de manera eficiente, ya que permite que el sistema transmita datos a través del modelo de IA en lotes administrables sin necesidad de cargar todos los datos en la memoria a la vez.
CREATE OR REPLACE FUNCTION ai.analyze_sentiment(
input_cursor REFCURSOR,
batch_size INT DEFAULT NULL,
model_id VARCHAR(100) DEFAULT NULL)
RETURNS REFCURSOR
Ahora puedes usar la función ai.analyze_sentiment. Como espera un REFCURSOR, debes abrir un cursor para los datos de entrada que quieres analizar. En este ejemplo,
analizarás review_content de la tabla reviews.
En el siguiente ejemplo, se muestra cómo ingresar datos en la función ai.analyze_sentiment
fila por fila con un cursor:
-- Start a transaction
BEGIN;
-- Declare a cursor for the review content
DECLARE review_cursor REFCURSOR;
-- Open the cursor with the query to fetch the review content
OPEN review_cursor FOR SELECT review_content FROM reviews;
-- Call the AI function, passing the cursor
-- This function will return another cursor containing the results
DECLARE result_cursor REFCURSOR;
SELECT ai.analyze_sentiment(
input_cursor => review_cursor,
batch_size => 5 -- Optional: Process in batches of 5
) INTO result_cursor;
-- Fetch and display results from the result_cursor
-- The exact way to fetch from a REFCURSOR depends on the SQL environment.
-- This is a conceptual example.
FETCH ALL FROM result_cursor;
-- Close the cursors
CLOSE review_cursor;
CLOSE result_cursor;
-- End the transaction
COMMIT;
Este es el resultado:
input | output
----------------------------------+----------
This movie is very good | positive
The actors play the parts well | positive
I like the music in this film | positive
The story is easy to follow | positive
Many people will enjoy this show | positive
The film is too long | negative
I do not like the ending | negative
This movie is very boring | negative
The story is okay | neutral
Some parts are fine | neutral