Empfehlungssystem bei Azure Database for PostgreSQL – Flexibler Server und Azure OpenAI
GILT FÜR: Azure Database for PostgreSQL – Flexibler Server
Dieses praktische Tutorial zeigt, wie Sie mit Azure Database for PostgreSQL – Flexibler Server und dem Azure OpenAI Service eine Empfehlungsanwendung erstellen. Empfehlungen kommen in verschiedenen Bereichen zum Einsatz: Dienstleistungsanbieter neigen häufig dazu, Empfehlungen für die von ihnen angebotenen Produkte und Dienstleistungen auf der Grundlage von Vorgeschichte und Kontextinformationen zu geben, die vom Kunden und der Umgebung gesammelt wurden.
Es gibt verschiedene Möglichkeiten zum Modellieren von Empfehlungssystemen. Dieser Artikel befasst sich mit der einfachsten Form - Empfehlungen, die auf einem Produkt basieren, das z. B. einem früheren Kauf entspricht. In diesem Tutorial wird der Rezept-Datensatz aus dem Artikel über die semantische Suche verwendet, und es werden Rezepte empfohlen, die auf einem Rezept basieren, das einem Kunden zuvor gefallen hat oder nach dem er gesucht hat.
Voraussetzungen
- Erstellen Sie ein Open AI-Konto, und fordern Sie den Zugriff auf den Azure OpenAI Servicean.
- Gewähren des Zugriffs auf Azure OpenAI im gewünschten Abonnement.
- Zuweisung der Zugriffsberechtigungen zum Erstellen von Azure OpenAI-Ressourcen und zum Bereitstellen von Modellen.
Erstellen und Bereitstellen einer Azure OpenAI Service-Ressource und ein Modell, unter Verwendung des Einbettungsmodells text-embedding-ada-002. Den Bereitstellungsnamen kopieren, da er zum Erstellen von Einbettungen benötigt wird.
Aktivieren von azure_ai
und pgvector
Erweiterungen
Bevor Sie azure_ai
und pgvector
in Ihrer Instanz von Azure Database for PostgreSQL – Flexibler Server aktivieren können, müssen Sie sie, wie unter Verwenden von PostgreSQL-Erweiterungen beschrieben, Ihrer Positivliste hinzufügen und überprüfen, ob sie korrekt hinzugefügt wurden, indem Sie SHOW azure.extensions;
ausführen.
Anschließend können Sie die Erweiterung installieren, indem Sie eine Verbindung mit Ihrer Zieldatenbank herstellen und den Befehl CREATE EXTENSION ausführen. Sie müssen den Befehl separat für jede Datenbank wiederholen, in der die Erweiterung verfügbar sein soll.
CREATE EXTENSION azure_ai;
CREATE EXTENSION pgvector;
Konfigurieren des OpenAI-Endpunkts und des Schlüssels
In Azure KI Services unter Ressourcenverwaltung>Schlüssel und Endpunkte finden Sie den Endpunkt und die Schlüssel für Ihre Azure KI-Ressource. Verwenden Sie den Endpunkt und einen der Schlüssel, um der Erweiterung azure_ai
das Aufrufen der Modellimplementierung zu ermöglichen.
select azure_ai.set_setting('azure_openai.endpoint','https://<endpoint>.openai.azure.com');
select azure_ai.set_setting('azure_openai.subscription_key', '<API Key>');
Herunterladen und Importieren der Daten
- Herunterladen der Daten aus Kaggle.
- Stellen Sie eine Verbindung mit Ihrem Server her, und erstellen Sie eine
test
-Datenbank. Erstellen Sie darin eine Tabelle, in die Sie die Daten importieren. - Importieren der Daten
- Fügen Sie der Tabelle eine Spalte für Einbettungen hinzu.
- Generieren der Einbettungen
- Suchen.
Erstellen der Tabelle
CREATE TABLE public.recipes(
rid integer NOT NULL,
recipe_name text,
prep_time text,
cook_time text,
total_time text,
servings integer,
yield text,
ingredients text,
directions text,
rating real,
url text,
cuisine_path text,
nutrition text,
timing text,
img_src text,
PRIMARY KEY (rid)
);
Importieren der Daten
Definieren Sie die folgende Umgebungsvariable im Client-Fenster, um die Kodierung auf utf-8 festzulegen. Dieser Schritt ist erforderlich, da dieses bestimmte Dataset die WIN1252-Codierung verwendet.
Rem on Windows
Set PGCLIENTENCODING=utf-8;
# on Unix based operating systems
export PGCLIENTENCODING=utf-8
Importieren Sie die Daten in die erstellte Tabelle; Beachten Sie, dass dieses Dataset eine Kopfzeile enthält:
psql -d <database> -h <host> -U <user> -c "\copy recipes FROM <local recipe data file> DELIMITER ',' CSV HEADER"
Hinzufügen einer Spalte zum Speichern der Einbettungen
ALTER TABLE recipes ADD COLUMN embedding vector(1536);
Generieren von Einbettungen
Generieren Sie Einbettungen für Ihre Daten mit der Erweiterung azure_ai. Im Folgenden werden einige verschiedene Felder vektorisiert, verkettet:
WITH ro AS (
SELECT ro.rid
FROM
recipes ro
WHERE
ro.embedding is null
LIMIT 500
)
UPDATE
recipes r
SET
embedding = azure_openai.create_embeddings('text-embedding-ada-002', r.recipe_name||' '||r.cuisine_path||' '||r.ingredients||' '||r.nutrition||' '||r.directions)
FROM
ro
WHERE
r.rid = ro.rid;
Wiederholen Sie den Befehl, bis keine weiteren zu verarbeitenden Zeilen vorhanden sind.
Tipp
Experimentieren Sie mit LIMIT
. Bei einem hohen Wert könnte die Anweisung aufgrund der Drosselung durch Azure OpenAI auf halbem Weg scheitern. Wenn ein Fehler auftritt, warten Sie mindestens eine Minute, und führen Sie den Befehl erneut aus.
Erstellen Sie eine Suchfunktion in Ihrer Datenbank zur Vereinfachung:
create function
recommend_recipe(sampleRecipeId int, numResults int)
returns table(
out_recipeName text,
out_nutrition text,
out_similarityScore real)
as $$
declare
queryEmbedding vector(1536);
sampleRecipeText text;
begin
sampleRecipeText := (select
recipe_name||' '||cuisine_path||' '||ingredients||' '||nutrition||' '||directions
from
recipes where rid = sampleRecipeId);
queryEmbedding := (azure_openai.create_embeddings('text-embedding-ada-002',sampleRecipeText));
return query
select
distinct r.recipe_name,
r.nutrition,
(r.embedding <=> queryEmbedding)::real as score
from
recipes r
order by score asc limit numResults; -- cosine distance
end $$
language plpgsql;
Rufen Sie nun einfach die Funktion auf, um nach der Empfehlung zu suchen:
select out_recipename, out_similarityscore from recommend_recipe(1, 20); -- search for 20 recipe recommendations that closest to recipeId 1
Untersuchen Sie die Ergebnisse:
out_recipename | out_similarityscore
---------------------------------------+---------------------
Apple Pie by Grandma Ople | 0
Easy Apple Pie | 0.05137232
Grandma's Iron Skillet Apple Pie | 0.054287136
Old Fashioned Apple Pie | 0.058492836
Apple Hand Pies | 0.06449003
Apple Crumb Pie | 0.07290977
Old-Fashioned Apple Dumplings | 0.078374185
Fried Apple Pies | 0.07918481
Apple Pie Filling | 0.084320426
Apple Turnovers | 0.08576391
Dutch Apple Pie with Oatmeal Streusel | 0.08779895
Apple Crisp - Perfect and Easy | 0.09170883
Delicious Cinnamon Baked Apples | 0.09384012
Easy Apple Crisp with Pie Filling | 0.09477234
Jump Rope Pie | 0.09503954
Easy Apple Strudel | 0.095167875
Apricot Pie | 0.09634114
Easy Apple Crisp with Oat Topping | 0.09708358
Baked Apples | 0.09826993
Pear Pie | 0.099974394
(20 rows)
Nächste Schritte
Sie haben gelernt, wie Sie die semantische Suche mit Azure Database for PostgreSQL – Flexibler Server und Azure OpenAI durchführen.