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
- Verwenden Sie die folgenden KI-Funktionen, um eine semantische Analyse durchzuführen:
AI.IF: Daten mit Bedingungen in natürlicher Sprache filternAI.SCORE: Eingabe nach Stimmung bewertenAI.CLASSIFY: Eingaben in benutzerdefinierte Kategorien klassifizieren
Kosten
In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloudverwendet, 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
- Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, 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.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
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.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
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.
-
Aktivieren Sie die BigQuery API.
Rollen, die zum Aktivieren von APIs erforderlich sind
Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (
roles/serviceusage.serviceUsageAdmin), die die Berechtigungserviceusage.services.enableenthält. Weitere Informationen zum Zuweisen von RollenBei neuen Projekten ist die BigQuery API automatisch aktiviert.
- 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, um die Berechtigungen zu erhalten, die Sie zur Verwendung von KI-Funktionen benötigen:
-
Abfragejobs und Ladejobs ausführen:
BigQuery Job User (
roles/bigquery.jobUser) -
Dataset erstellen, Tabelle erstellen, Daten in eine Tabelle laden und Tabelle abfragen:
BigQuery-Dateneditor (
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 für dieses Tutorial ein Dataset namens my_dataset zu erstellen.
CREATE SCHEMA my_dataset OPTIONS (location = 'LOCATION');
Erstellen Sie als Nächstes eine Tabelle mit dem Namen customer_feedback, die Beispielrezensionen von Kunden 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.")
])
);
Sentiment insgesamt kategorisieren
Es kann hilfreich sein, das im Text ausgedrückte Gesamtsentiment zu extrahieren, um Anwendungsfälle wie die folgenden zu unterstützen:
- Anhand von Rezensionen die Kundenzufriedenheit messen
- Markenwahrnehmung in den sozialen Medien beobachten
- Priorisieren Sie Supportanfragen danach, wie verärgert die Nutzer sind.
In der folgenden Abfrage wird gezeigt, 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." | | +-----------+------------------------------------------+-----------+
Aspektbezogene Sentimentanalyse
Wenn ein allgemeines Sentiment 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 ermitteln, ohne seine Meinung zum Preis zu berücksichtigen. 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 einzelnen Rezensionen in der Tabelle customer_feedback in Bezug auf Preis, Kundenservice und Qualität auf einer Skala von 1 bis 10 bewerten können. Die Funktion gibt den benutzerdefinierten Wert „-1“ zurück, wenn ein Aspekt in der Rezension nicht erwähnt wird. So können Sie diese Rezensionen später herausfiltern.
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 einer positiven oder negativen Stimmung können Sie Text auch anhand bestimmter Emotionen klassifizieren, die Sie auswählen. Das ist nützlich, wenn Sie Nutzerreaktionen besser nachvollziehen oder sehr 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
- Support-Tickets nach Thema weiterleiten.
Im folgenden Beispiel wird gezeigt, wie Kundenfeedback in verschiedene Typen wie Abrechnungsproblem oder Kontozugriff klassifiziert und dann gezählt wird, 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 Funktion bitten, die Ähnlichkeit der Bedeutung zu bewerten. Das kann Ihnen bei Aufgaben wie den folgenden helfen:
- Doppelte oder fast doppelte Einträge finden
- Ähnliche Feedback-Beiträge gruppieren.
- Semantische Suchanwendungen unterstützen.
Mit der folgenden Abfrage werden Rezensionen gefunden, in denen die Schwierigkeit bei der Einrichtung des Produkts angesprochen wird:
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. In der folgenden Abfrage werden Rezensionen zuerst nach negativer Stimmung gefiltert und dann nach der Art der Frustration klassifiziert:
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 Prompts erstellen
Damit Ihre Abfragen lesbar bleiben, können Sie Ihre Prompt-Logik wiederverwenden, indem Sie benutzerdefinierte Funktionen erstellen. Mit der folgenden Abfrage wird eine Funktion zum Erkennen negativer Stimmung erstellt, indem AI.IF mit einem benutzerdefinierten Prompt aufgerufen wird. Anschließend wird die 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 Gebühren anfallen, 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:
- Wechseln Sie in der Google Cloud -Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), 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;