Semantische Analyse mit verwalteten KI-Funktionen durchführen

In dieser Anleitung erfahren Sie, wie Sie mit verwalteten KI-Funktionen von BigQuery ML eine semantische Analyse von Kundenfeedback durchführen.

Ziele

In dieser Anleitung erwartet Sie Folgendes:

  • Dataset erstellen und Sentimentdaten in eine Tabelle laden
  • Die folgenden KI-Funktionen verwenden, um eine semantische Analyse durchzuführen:
    • AI.IF: Daten mit Bedingungen in natürlicher Sprache filtern
    • AI.SCORE: Eingaben nach Sentiment bewerten
    • AI.CLASSIFY: Eingaben in benutzerdefinierte Kategorien klassifizieren

Kosten

In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloud, verwendet, darunter:

  • BigQuery
  • BigQuery ML

Weitere Informationen zu den Kosten für BigQuery finden Sie auf der Seite BigQuery-Preise.

Weitere Informationen zu den Kosten für BigQuery ML finden Sie unter BigQuery ML-Preise.

Hinweis

  1. Melden Sie sich in Ihrem Google Cloud Konto an. Wenn Sie noch kein Konto haben Google Cloud, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. If you're using an existing project for this guide, verify that you have the permissions required to complete this guide. If you created a new project, then you already have the required permissions.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. If you're using an existing project for this guide, verify that you have the permissions required to complete this guide. If you created a new project, then you already have the required permissions.

  6. Aktivieren Sie die BigQuery API.

    Erforderliche Rollen zum Aktivieren von APIs

    Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin), die die Berechtigung serviceusage.services.enable enthält. Weitere Informationen zum Zuweisen von Rollen.

    API aktivieren

    Bei neuen Projekten ist die BigQuery API ist automatisch aktiviert.

  7. Optional: Aktivieren Sie die Abrechnung für das Projekt. Die Abrechnung funktioniert auch dann, wenn Sie die Abrechnung nicht aktivieren oder keine Kreditkarte angeben möchten. BigQuery bietet Ihnen eine Sandbox zum Ausführen dieser Schritte. Weitere Informationen finden Sie unter BigQuery-Sandbox aktivieren.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Projekt zuzuweisen, damit Sie die Berechtigungen zum Verwenden von KI-Funktionen haben:

  • Abfragejobs und Ladejobs ausführen: BigQuery-Jobnutzer (roles/bigquery.jobUser)
  • Dataset erstellen, Tabelle erstellen, Daten in eine Tabelle laden und Tabelle abfragen: BigQuery-Datenbearbeiter (roles/bigquery.dataEditor)

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Beispieldaten erstellen

Führen Sie die folgende Abfrage aus, um ein Dataset mit dem Namen my_dataset für diese Anleitung zu erstellen.

CREATE SCHEMA my_dataset OPTIONS (location = 'LOCATION');

Erstellen Sie als Nächstes eine Tabelle mit dem Namen customer_feedback, die Beispielrezensionen für ein Gerät enthält:

CREATE TABLE my_dataset.customer_feedback AS (
  SELECT
    *
  FROM
    UNNEST( [STRUCT<review_id INT64, review_text STRING> 
      (1, "The battery life is incredible, and the screen is gorgeous! Best phone I've ever had. Totally worth the price."),
      (2, "Customer support was a nightmare. It took three weeks for my order to arrive, and when it did, the box was damaged. Very frustrating!"),
      (3, "The product does exactly what it says on the box. No complaints, but not exciting either."),
      (4, "I'm so happy with this purchase! It arrived early and exceeded all my expectations. The quality is top-notch, although the setup was a bit tricky."),
      (5, "The price is a bit too high for what you get. The material feels cheap and I'm worried it won't last. Service was okay."),
      (6, "Absolutely furious! The item arrived broken, and getting a refund is proving impossible. I will never buy from them again."),
      (7, "This new feature for account access is confusing. I can't find where to update my profile. Please fix this bug!"),
      (8, "The shipping was delayed, but the support team was very helpful and kept me informed. The product itself is great, especially for the price.") 
      ])
);

Gesamtstimmung kategorisieren

Es kann hilfreich sein, die in einem Text ausgedrückte Gesamtstimmung zu extrahieren, um Anwendungsfälle wie die folgenden zu unterstützen:

  • Kundenzufriedenheit anhand von Rezensionen einschätzen
  • Markenwahrnehmung in sozialen Medien beobachten
  • Supporttickets basierend darauf priorisieren, wie verärgert Nutzer sind

Die folgende Abfrage zeigt, wie Sie mit der Funktion AI.CLASSIFY Rezensionen aus der Tabelle customer_feedback als positiv, negativ oder neutral klassifizieren:

SELECT
  review_id,
  review_text,
  AI.CLASSIFY(
    review_text,
    categories => ['positive', 'negative', 'neutral']) AS sentiment
FROM
  my_dataset.customer_feedback;

Das Ergebnis sieht in etwa so aus:

+-----------+------------------------------------------+-----------+
| review_id | review_text                              | sentiment |
+-----------+------------------------------------------+-----------+
| 7         | This new feature for account access is   | negative  |
|           | confusing. I can't find where to update  |           |
|           | my profile. Please fix this bug!         |           |
+-----------+------------------------------------------+-----------+
| 4         | "I'm so happy with this purchase! It     | positive  |
|           | arrived early and exceeded all my        |           |
|           | expectations. The quality is top-notch,  |           |
|           | although the setup was a bit tricky."    |           |
+-----------+------------------------------------------+-----------+
| 2         | "Customer support was a nightmare. It    | negative  |
|           | took three weeks for my order to         |           |
|           | arrive, and when it did, the box was     |           |
|           | damaged. Very frustrating!"              |           |
+-----------+------------------------------------------+-----------+
| 1         | "The battery life is incredible, and     | positive  |
|           | the screen is gorgeous! Best phone I've  |           |
|           | ever had. Totally worth the price."      |           |
+-----------+------------------------------------------+-----------+
| 8         | "The shipping was delayed, but the       | positive  |
|           | support team was very helpful and kept   |           |
|           | me informed. The product itself is       |           |
|           | great, especially for the price."        |           |
+-----------+------------------------------------------+-----------+
| 5         | The price is a bit too high for what     | negative  |
|           | you get. The material feels cheap and    |           |
|           | I'm worried it won't last. Service was   |           |
|           | okay.                                    |           |
+-----------+------------------------------------------+-----------+
| 3         | "The product does exactly what it says   | neutral   |
|           | on the box. No complaints, but not       |           |
|           | exciting either."                        |           |
+-----------+------------------------------------------+-----------+
| 6         | "Absolutely furious! The item arrived    | negative  |
|           | broken, and getting a refund is proving  |           |
|           | impossible. I will never buy from them   |           |
|           | again."                                  |           |
+-----------+------------------------------------------+-----------+

Aspektbasierte Stimmung analysieren

Wenn eine Gesamtstimmung wie positiv oder negativ für Ihren Anwendungsfall nicht ausreicht, können Sie einen bestimmten Aspekt der Bedeutung von Text analysieren. Sie möchten beispielsweise die Einstellung eines Nutzers zur Qualität des Produkts verstehen, ohne auf seine Meinung zum Preis einzugehen. Sie können sogar einen benutzerdefinierten Wert anfordern, um anzugeben, dass ein bestimmter Aspekt nicht zutrifft.

Im folgenden Beispiel wird gezeigt, wie Sie mit der Funktion AI.SCORE die Stimmung der Nutzer anhand der Rezensionen in der Tabelle customer_feedback auf einer Skala von 1 bis 10 bewerten, je nachdem, wie positiv die Rezensionen in Bezug auf Preis, Kundenservice und Qualität sind. Die Funktion gibt den benutzerdefinierten Wert -1 zurück, wenn ein Aspekt in der Rezension nicht erwähnt wird, damit Sie diese später herausfiltern können.

SELECT
  review_id,
  review_text,
  AI.SCORE(
    ("Score 0.0 to 10 on positive sentiment about PRICE for review: ", review_text,
    "If price is not mentioned, return -1.0")) AS price_score,
  AI.SCORE(
    ("Score 0.0 to 10 on positive sentiment about CUSTOMER SERVICE for review: ", review_text,
    "If customer service is not mentioned, return -1.0")) AS service_score,
  AI.SCORE(
    ("Score 0.0 to 10 on positive sentiment about QUALITY for review: ", review_text,
    "If quality is not mentioned, return -1.0")) AS quality_score
FROM
  my_dataset.customer_feedback
LIMIT 3;

Das Ergebnis sieht in etwa so aus:

+-----------+------------------------------------------+--------------+---------------+---------------+
| review_id | review_text                              |  price_score | service_score | quality_score |
+-----------+------------------------------------------+--------------+---------------+---------------+
| 4         | "I'm so happy with this purchase! It     | -1.0         | -1.0          | 9.5           |
|           | arrived early and exceeded all my        |              |               |               |
|           | expectations. The quality is top-notch,  |              |               |               |
|           | although the setup was a bit tricky."    |              |               |               |
+-----------+------------------------------------------+--------------+---------------+---------------+
| 8         | "The shipping was delayed, but the       |  9.0         |  8.5          | 9.0           |
|           | support team was very helpful and kept   |              |               |               |
|           | me informed. The product itself is       |              |               |               |
|           | great, especially for the price."        |              |               |               |
+-----------+------------------------------------------+--------------+---------------+---------------+
| 6         | "Absolutely furious! The item arrived    | -1.0         |  1.0          | 0.0           |
|           | broken, and getting a refund is proving  |              |               |               |
|           | impossible. I will never buy from them   |              |               |               |
|           | again."                                  |              |               |               |
+-----------+------------------------------------------+--------------+---------------+---------------+

Emotionen erkennen

Neben der positiven oder negativen Stimmung können Sie Text auch anhand bestimmter Emotionen klassifizieren, die Sie auswählen. Das ist nützlich, wenn Sie die Reaktionen der Nutzer besser verstehen oder stark emotionale Rückmeldungen zur Überprüfung kennzeichnen möchten.

SELECT
  review_id,
  review_text,
  AI.CLASSIFY(
    review_text,
    categories => ['joy', 'anger', 'sadness', 'surprise', 'fear', 'disgust', 'neutral', 'other']
  ) AS emotion
FROM
  my_dataset.customer_feedback;

Das Ergebnis sieht in etwa so aus:

+-----------+------------------------------------------+---------+
| review_id | review_text                              | emotion |
+-----------+------------------------------------------+---------+
| 2         | "Customer support was a nightmare. It    | anger   |
|           | took three weeks for my order to         |         |
|           | arrive, and when it did, the box was     |         |
|           | damaged. Very frustrating!"              |         |
+-----------+------------------------------------------+---------+
| 7         | This new feature for account access is   | anger   |
|           | confusing. I can't find where to update  |         |
|           | my profile. Please fix this bug!         |         |
+-----------+------------------------------------------+---------+
| 4         | "I'm so happy with this purchase! It     | joy     |
|           | arrived early and exceeded all my        |         |
|           | expectations. The quality is top-notch,  |         |
|           | although the setup was a bit tricky."    |         |
+-----------+------------------------------------------+---------+
| 1         | "The battery life is incredible, and     | joy     |
|           | the screen is gorgeous! Best phone I've  |         |
|           | ever had. Totally worth the price."      |         |
+-----------+------------------------------------------+---------+
| 8         | "The shipping was delayed, but the       | joy     |
|           | support team was very helpful and kept   |         |
|           | me informed. The product itself is       |         |
|           | great, especially for the price."        |         |
+-----------+------------------------------------------+---------+
| 5         | The price is a bit too high for what     | sadness |
|           | you get. The material feels cheap and    |         |
|           | I'm worried it won't last. Service was   |         |
|           | okay.                                    |         |
+-----------+------------------------------------------+---------+
| 3         | "The product does exactly what it says   | neutral |
|           | on the box. No complaints, but not       |         |
|           | exciting either."                        |         |
+-----------+------------------------------------------+---------+
| 6         | "Absolutely furious! The item arrived    | anger   |
|           | broken, and getting a refund is proving  |         |
|           | impossible. I will never buy from them   |         |
|           | again."                                  |         |
+-----------+------------------------------------------+---------+

Rezensionen nach Thema kategorisieren

Mit der Funktion AI.CLASSIFY können Sie Rezensionen in vordefinierte Themen gruppieren. Sie haben zum Beispiel folgende Möglichkeiten:

  • Häufige Themen im Kundenfeedback erkennen
  • Dokumente nach Thema organisieren
  • Supporttickets nach Thema weiterleiten

Im folgenden Beispiel wird gezeigt, wie Sie Kundenfeedback in verschiedene Typen wie Abrechnungsproblem oder Kontozugriff klassifizieren und dann zählen, wie viele Rezensionen zu jeder Kategorie gehören:

SELECT
  AI.CLASSIFY(
    review_text,
    categories => ['Billing Issue', 'Account Access',
                   'Product Bug', 'Feature Request',
                   'Shipping Delay', 'Other']) AS topic,
    COUNT(*) AS number_of_reviews,
FROM
  my_dataset.customer_feedback
GROUP BY topic
ORDER BY number_of_reviews DESC;

Das Ergebnis sieht in etwa so aus:

+----------------+-------------------+
| topic          | number_of_reviews |
+----------------+-------------------+
| Other          | 5                 |
| Shipping Delay | 2                 |
| Product Bug    | 1                 |
+----------------+-------------------+

Semantisch ähnliche Rezensionen identifizieren

Mit der Funktion AI.SCORE können Sie bewerten, wie semantisch ähnlich zwei Textteile sind, indem Sie die Ähnlichkeit der Bedeutung bewerten lassen. Das kann Ihnen bei Aufgaben wie den folgenden helfen:

  • Doppelte oder fast doppelte Einträge finden
  • Ähnliche Rückmeldungen gruppieren
  • Semantische Suchanwendungen unterstützen

Die folgende Abfrage sucht nach Rezensionen, in denen die Schwierigkeiten bei der Einrichtung des Produkts erwähnt werden:

SELECT
  review_id,
  review_text,
  AI.SCORE(
    (
      """How similar is the review to the concept of 'difficulty in setting up the product'?
         A higher score indicates more similarity. Review: """,
      review_text)) AS setup_difficulty
FROM my_dataset.customer_feedback
ORDER BY setup_difficulty DESC
LIMIT 2;

Das Ergebnis sieht in etwa so aus:

+-----------+------------------------------------------+------------------+
| review_id | review_text                              | setup_difficulty |
+-----------+------------------------------------------+------------------+
| 4         | "I'm so happy with this purchase! It     | 3                |
|           | arrived early and exceeded all my        |                  |
|           | expectations. The quality is top-notch,  |                  |
|           | although the setup was a bit tricky."    |                  |
+-----------+------------------------------------------+------------------+
| 7         | This new feature for account access is   | 1                |
|           | confusing. I can't find where to update  |                  |
|           | my profile. Please fix this bug!         |                  |
+-----------+------------------------------------------+------------------+

Sie können auch die Funktion AI.IF verwenden, um Rezensionen zu finden, die sich auf Text beziehen:

SELECT
  review_id,
  review_text
FROM my_dataset.customer_feedback
WHERE
  AI.IF(
    (
      "Does this review discuss difficulty setting up the product? Review: ",
      review_text));

Funktionen kombinieren

Es kann hilfreich sein, diese Funktionen in einer einzigen Abfrage zu kombinieren. Die folgende Abfrage filtert beispielsweise zuerst Rezensionen nach negativer Stimmung und klassifiziert sie dann nach der Art der Frustration:

SELECT
  review_id,
  review_text,
  AI.CLASSIFY(
    review_text,
    categories => [
      'Poor Quality', 'Bad Customer Service', 'High Price', 'Other Negative']) AS negative_topic
FROM my_dataset.customer_feedback
WHERE
  AI.IF(
    ("Does this review express a negative sentiment? Review: ", review_text));

Wiederverwendbare UDFs für Eingabeaufforderungen erstellen

Damit Ihre Abfragen besser lesbar sind, können Sie Ihre Logik für Eingabeaufforderungen wiederverwenden, indem Sie benutzerdefinierte Funktionenerstellen. Die folgende Abfrage erstellt eine Funktion zum Erkennen negativer Stimmungen, indem AI.IF mit einer benutzerdefinierten Eingabeaufforderung aufgerufen wird. Anschließend wird diese Funktion aufgerufen, um nach negativen Rezensionen zu filtern.

CREATE OR REPLACE FUNCTION my_dataset.is_negative_sentiment(review_text STRING)
RETURNS BOOL
AS (
    AI.IF(
      ("Does this review express a negative sentiment? Review: ", review_text))
);

SELECT
  review_id,
  review_text
FROM my_dataset.customer_feedback
WHERE my_dataset.is_negative_sentiment(review_text);

Bereinigen

Damit keine Kosten entstehen, können Sie entweder das Projekt löschen, das die von Ihnen erstellten Ressourcen enthält, oder das Projekt beibehalten und die einzelnen Ressourcen löschen.

Projekt löschen

So löschen Sie das Projekt:

  1. Wechseln Sie in der Google Cloud -Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Herunterfahren), um das Projekt zu löschen.

Dataset löschen

Wenn Sie das Dataset und alle darin enthaltenen Ressourcen, einschließlich aller Tabellen und Funktionen, löschen möchten, führen Sie die folgende Abfrage aus:

DROP SCHEMA my_dataset CASCADE;