Analyser les sentiments d'un texte

La fonction ai.analyze_sentiment est un outil AlloyDB/AI intégré qui classe le sentiment d'un texte comme positif, négatif ou neutre. En intégrant cette fonctionnalité directement dans la base de données, AlloyDB pour PostgreSQL vous permet de traiter des données non structurées sans avoir à créer des pipelines ETL (Extract, Transform, Load) complexes ni à intégrer des services externes.

La fonction d'analyse des sentiments présente les avantages suivants :

  • Connaissances du monde : vaste ensemble de faits, de concepts, de relations et de compréhension contextuelle du monde que les grands modèles de langage (LLM) acquièrent lors de leur phase de pré-entraînement.
  • Analyse en temps réel : apporte les connaissances de Gemini sur le monde aux données d'entreprise à l'aide de SQL.
  • Évolutivité : compatible avec le traitement basé sur des tableaux et des curseurs pour gérer efficacement des milliers de lignes.
  • Simplicité : fournit une abstraction de haut niveau qui gère automatiquement l'appel de modèle et la préparation des données.

La fonction d'analyse des sentiments d'AlloyDB/AI est compatible avec plusieurs cas d'utilisation, y compris les suivants :

  • Commentaires des clients : classez des milliers d'avis bruts et non structurés sur les produits pour identifier les niveaux de satisfaction des clients.
  • Surveillance des réseaux sociaux : analysez le sentiment des mentions ou des commentaires sur les réseaux sociaux pour évaluer la perception du public vis-à-vis d'une marque.

Avant de commencer

Avant d'utiliser la fonction ai.analyze_sentiment, assurez-vous de remplir les conditions suivantes.

Activer l'extension

Assurez-vous d'avoir installé la dernière version de l'extension google_ml_integration.enable_preview_ai_functions (version 1.5.7 ou ultérieure) avec la fonctionnalité d'aperçu activée.

Pour activer l'option google_ml_integration.enable_preview_ai_functions dans AlloyDB, utilisez la commande SET. Cet indicateur contrôle l'accès aux fonctions d'IA en aperçu, comme ai.analyze_sentiment.

  1. Assurez-vous que votre google_ml_integration extension est en version 1.5.7 ou ultérieure. Vous pouvez vérifier la version en exécutant la commande suivante :

    SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
    

    Si vous devez passer à une version qui inclut ces fonctions d'aperçu, appelez ce qui suit :

    CALL google_ml.upgrade_to_preview_version();
    
  2. Activez le signalement pour la session en cours ou pour l'ensemble de la base de données. Pour activer le flag pour votre session actuelle, exécutez la commande suivante :

    SET google_ml_integration.enable_preview_ai_functions = 'on';
    

    Cette modification ne nécessite pas de redémarrer la base de données. La valeur par défaut de ce flag est off.

Créer un exemple de tableau

Pour suivre les exemples de la fonction d'analyse des sentiments de ce document, créez une table et remplissez-la avec les avis de films suivants.

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');

Analyser les sentiments d'une seule chaîne

Pour évaluer le sentiment d'une seule entrée de texte, utilisez la version scalaire de ai.analyze_sentiment.

SELECT ai.analyze_sentiment(
  prompt => 'TEXT_CONTENT',
  model_id => 'MODEL_ID' -- Optional. The default value is gemini-2.5-flash-lite.
);

L'exemple suivant vous montre comment effectuer analyse des sentiments au niveau des lignes sur des données textuelles stockées dans une table nommée reviews avec les colonnes id et review_content pour stocker les données d'avis. L'exemple exécute une requête SELECT qui applique la fonction ai.analyze_sentiment() à la colonne review_content pour chaque ligne du tableau. Cette fonction traite chaque avis individuellement et renvoie le sentiment calculé (positive, negative ou neutral).

--- Row Level sentiment analysis
SELECT ai.analyze_sentiment(review_content) FROM reviews;

Voici un exemple de résultat :

 id | analyze_sentiment
----+-------------------
  1 | positive
  2 | positive
  3 | positive
  4 | positive
  5 | positive
  6 | negative
  7 | negative
  8 | negative
  9 | neutral
 10 | neutral

Analyser les sentiments par lots

Pour améliorer les performances sur les ensembles de données plus volumineux, utilisez la version basée sur un tableau de la fonction pour traiter plusieurs chaînes en un seul appel.

SELECT ai.analyze_sentiment(
  prompts => 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-2.5-flash-lite.
);

L'exemple suivant analyse le sentiment des avis clients d'une table nommée reviews.

WITH sentiment_results AS (
SELECT
  ARRAY_AGG(id ORDER BY id) as ids,
  ai.analyze_sentiment( 
    prompts => 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;

Voici un exemple de résultat :

 id | sentiment
----+-----------
  1 | positive
  2 | positive
  3 | positive
  4 | positive
  5 | positive
  6 | negative
  7 | negative
  8 | negative
  9 | neutral
 10 | neutral

Analyser le sentiment à l'aide de curseurs

La fonction basée sur le curseur est destinée au traitement efficace des grands ensembles de données, car elle permet au système de diffuser les données via le modèle d'IA par lots gérables sans nécessiter le chargement de toutes les données en mémoire en même temps.

La signature de la fonction pour la version basée sur le curseur de ai.analyze_sentiment est la suivante :

CREATE OR REPLACE FUNCTION ai.analyze_sentiment(
    prompt TEXT,
    input_cursor REFCURSOR,
    batch_size INT DEFAULT NULL,
    model_id VARCHAR(100) DEFAULT NULL)
  RETURNS REFCURSOR

Vous pouvez désormais utiliser la fonction ai.analyze_sentiment. Comme il s'attend à un REFCURSOR, vous devez ouvrir un curseur pour les données d'entrée que vous souhaitez analyser. Dans cet exemple, vous analysez review_content à partir de la table reviews.

L'exemple suivant montre comment transmettre des données à la fonction ai.analyze_sentiment ligne par ligne à l'aide d'un curseur :

-- 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(
    prompt => 'Analyze the sentiment of the following movie review:',
    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;

Voici le résultat :

      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

Étapes suivantes