La función ai.analyze_sentiment es una herramienta de IA integrada de AlloyDB AI que clasifica el sentimiento del texto como positivo, negativo o neutral. Incorporando
esta capacidad directamente en la base de datos, AlloyDB para PostgreSQL te permite
aplicar la comprensión del lenguaje de Gemini a los datos empresariales no estructurados en
tiempo real con SQL, lo que admite el procesamiento por lotes basado en arrays y cursores
en miles de filas sin canalizaciones complejas de extracción, transformación y carga (ETL).
Puedes usar ai.analyze_sentiment para clasificar opiniones sobre productos y comentarios de clientes no estructurados, o bien analizar las menciones en redes sociales para evaluar la percepción de la 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 versión más reciente de la extensión google_ml_integration.enable_preview_ai_functions (versión 1.5.7 o posterior) con la funcionalidad de vista previa habilitada.
Para habilitar la marca google_ml_integration.enable_preview_ai_functions en AlloyDB,
usa el comando SET. Este parámetro controla el acceso a las funciones de IA en versión preliminar, como
ai.analyze_sentiment.
Asegúrate de que la extensión
google_ml_integrationsea la versión 1.6.1 o una posterior. Para verificar la versión, ejecuta lo siguiente:SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';Si necesitas actualizar a una versión que incluya estas funciones de versión preliminar, llama a lo siguiente:
CALL google_ml.upgrade_to_preview_version();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_preview_ai_functions = '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 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.
);
En el siguiente ejemplo, se analiza la opinión de las opiniones de los clientes de una tabla
llamada reviews.
WITH sentiment_results AS (
SELECT
ARRAY_AGG(id ORDER BY id) as ids,
ai.analyze_sentiment(
inputs => array_agg( 'Please analyze the sentiment of this review: ' || 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 DESC;
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 manejables sin necesidad de que todos los datos se carguen en la memoria a la vez.
La firma de la función para la versión basada en cursores de ai.analyze_sentiment es
la siguiente:
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:
-- Run the cursor logic in an anonymous PL/pgSQL block
DO $$
DECLARE
-- Declare a cursor for the review content
review_cursor REFCURSOR;
result_cursor REFCURSOR;
result_record RECORD;
BEGIN
-- 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
result_cursor := ai.analyze_sentiment(
input_cursor => review_cursor,
batch_size => 5 -- Optional: Process in batches of 5. The default value is 10.
);
-- Fetch and display results from the result_cursor
LOOP
FETCH result_cursor INTO result_record;
EXIT WHEN NOT FOUND;
RAISE NOTICE '%', result_record;
END LOOP;
-- Close the cursors
CLOSE review_cursor;
CLOSE result_cursor;
-- End the anonymous block
END $$;
Este es el resultado:
review_content | sentiment | score
------------------------------+-----------+-------
This movie is very good | Positive | 0.9
The actors play the parts well | Positive | 0.8
I like the music in this film | Positive | 0.8
The story is easy to follow | Positive | 0.7
Many people will enjoy this show | Positive | 0.8
The film is too long | Negative | -0.6
I do not like the ending | Negative | -0.8
This movie is very boring | Negative | -0.9
The story is okay | Neutral | 0.1
Some parts are fine | Neutral | 0.2