Textsentiment analysieren

Wählen Sie eine Dokumentenversion aus:

Die Funktion ai.analyze_sentiment ist ein integriertes AlloyDB AI-Tool, mit dem das Sentiment von Text als positiv, negativ oder neutral klassifiziert wird. Durch die Einbettung dieser Funktion direkt in die Datenbank können Sie mit AlloyDB Omni unstrukturierte Daten verarbeiten, ohne komplexe ETL-Pipelines (Extrahieren, Transformieren, Laden) oder Integrationen externer Dienste erstellen zu müssen.

Die Funktion zur Sentimentanalyse bietet folgende Vorteile:

  • Weltwissen: Die riesige Sammlung von Fakten, Konzepten, Beziehungen und kontextuellem Verständnis der Welt, die Large Language Models (LLM) in der Phase des Vortrainings erwerben.
  • Echtzeitanalyse: Das Weltwissen von Gemini wird mithilfe von SQL auf Unternehmensdaten angewendet.
  • Skalierbarkeit: Unterstützt die array- und cursorbasierte Verarbeitung, um Tausende von Zeilen effizient zu verarbeiten.
  • Einfachheit: Bietet eine Abstraktion auf hoher Ebene, mit der der Aufruf des Modells und die Datenvorbereitung automatisch verwaltet werden.

Die Funktion zur Sentimentanalyse von AlloyDB AI unterstützt verschiedene Anwendungsfälle, darunter:

  • Kundenfeedback: Klassifizieren Sie Tausende von unstrukturierten Produktrezensionen, um die Kundenzufriedenheit zu ermitteln.
  • Social-Media-Monitoring: Analysieren Sie das Sentiment in Social-Media-Erwähnungen oder ‑Kommentaren, um die öffentliche Wahrnehmung einer Marke zu ermitteln.

Hinweis

Prüfen Sie, ob die folgenden Anforderungen erfüllt sind, bevor Sie die Funktion ai.analyze_sentiment verwenden.

Erweiterung aktivieren

Prüfen Sie, ob die aktuelle Version der Erweiterung google_ml_integration.enable_preview_ai_functions (Version 1.5.7 oder höher) installiert ist und die Vorschaufunktion aktiviert ist.

Verwenden Sie den Befehl SET, um das Flag google_ml_integration.enable_preview_ai_functions in AlloyDB Omni zu aktivieren. Mit diesem Flag wird der Zugriff auf Vorschau-KI-Funktionen wie ai.analyze_sentiment gesteuert.

  1. Prüfen Sie, ob Ihre google_ml_integration extension Version 1.5.7 oder höher hat. Sie können die Version mit dem folgenden Befehl prüfen:

    SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
    

    Wenn Sie auf eine Version aktualisieren müssen, die diese Vorschaufunktionen enthält, rufen Sie Folgendes auf:

    CALL google_ml.upgrade_to_preview_version();
    
  2. Aktivieren Sie das Flag für die aktuelle Sitzung oder für die gesamte Datenbank. Führen Sie Folgendes aus, um das Flag für die aktuelle Sitzung zu aktivieren:

    SET google_ml_integration.enable_preview_ai_functions = 'on';
    

    Für diese Änderung ist kein Neustart der Datenbank erforderlich. Der Standardwert dieses Flags ist off.

Beispieltabelle erstellen

Wenn Sie die Beispiele für die Funktion zur Sentimentanalyse in diesem Dokument ausführen möchten, erstellen Sie eine Tabelle und füllen Sie sie mit den folgenden Filmrezensionen.

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

Sentiment eines einzelnen Strings analysieren

Verwenden Sie die skalare Version von ai.analyze_sentiment, um das Sentiment einer einzelnen Texteingabe zu bewerten.

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

Im folgenden Beispiel wird gezeigt, wie Sie eine Sentimentanalyse auf Zeilenebene für Textdaten durchführen, die in einer Tabelle mit dem Namen reviews mit den Spalten id und review_content zum Speichern von Rezensionsdaten gespeichert sind. Im Beispiel wird eine SELECT-Abfrage ausgeführt, die die Funktion ai.analyze_sentiment() auf die Spalte review_content für jede Zeile in der Tabelle anwendet. Diese Funktion verarbeitet jede Rezension einzeln und gibt das berechnete Sentiment (positive, negative oder neutral) zurück.

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

Das folgende Beispiel zeigt die Ausgabe:

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

Sentiment in Batches analysieren

Verwenden Sie für eine bessere Leistung bei größeren Datasets die arraybasierte Version der Funktion, um mehrere Strings in einem einzigen Aufruf zu verarbeiten.

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

Das folgende Beispiel zeigt die Ausgabe:

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

Sentiment mit Cursors analysieren

Die cursorbasierte Funktion ist für die effiziente Verarbeitung großer Datasets vorgesehen, da das System Daten in überschaubaren Batches über das KI-Modell streamen kann, ohne dass alle Daten gleichzeitig in den Arbeitsspeicher geladen werden müssen.

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

Sie können jetzt die Funktion ai.analyze_sentiment verwenden. Da sie einen REFCURSOR erwartet, müssen Sie einen Cursor für die Eingabedaten öffnen, die Sie analysieren möchten. In diesem Beispiel analysieren Sie review_content aus der Tabelle reviews.

Im folgenden Beispiel wird gezeigt, wie Sie Daten zeilenweise mit einem Cursor an die Funktion ai.analyze_sentiment übergeben:

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

Die Ausgabe sieht so aus:

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

Nächste Schritte