Freigeben über


Lernprogramm: Erstellen eines Empfehlungssystems mit Azure Database für PostgreSQL und Azure OpenAI

GILT FÜR: Azure Database for PostgreSQL – Flexible Server

In diesem praktischen Lernprogramm erfahren Sie, wie Sie eine Empfehlungsanwendung mithilfe von Azure Database für PostgreSQL und Azure OpenAI erstellen. Empfehlungen weisen Anwendungen in verschiedenen Domänen auf. Dienstleister neigen dazu, Empfehlungen für Produkte und Dienstleistungen bereitzustellen, die sie basierend auf früheren Verlaufs- und Kontextinformationen anbieten, die vom Kunden und der Umgebung gesammelt werden.

Es gibt verschiedene Möglichkeiten zum Modellieren von Empfehlungssystemen. In diesem Lernprogramm wird die einfachste Form untersucht: eine Empfehlung basierend auf einem Produkt, das (z. B.) einem vorherigen Kauf entspricht. In diesem Lernprogramm wird das Rezept-Dataset verwendet, das das Lernprogramm für die semantische Suche verwendet. Die Empfehlung ist für Rezepte, die auf einem Rezept basieren, das ein Kunde in der Vergangenheit gefällt oder gesucht hat.

Voraussetzungen

  1. Erstellen Sie ein OpenAI-Konto, und fordern Sie den Zugriff auf Azure OpenAI an.
  2. Gewähren des Zugriffs auf Azure OpenAI im gewünschten Abonnement.
  3. Zuweisung der Zugriffsberechtigungen zum Erstellen von Azure OpenAI-Ressourcen und zum Bereitstellen von Modellen.
  4. Erstellen und Bereitstellen einer Azure OpenAI-Ressource und eines Modells. Stellen Sie das Einbettungsmodell "text-embedding-ada-002" bereit. Kopieren Sie den Bereitstellungsnamen, weil Sie ihn zum Erstellen von Einbettungen benötigen.

Aktivieren der azure_ai- und pgvector-Erweiterungen

Bevor Sie azure_ai und pgvector auf Ihrem flexiblen Server für die Azure-Datenbank für PostgreSQL aktivieren können, müssen Sie diese Ihrer Zulassungsliste hinzufügen. Stellen Sie sicher, dass sie ordnungsgemäß hinzugefügt werden, 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. Wiederholen Sie den Befehl separat für jede Datenbank, in der die Erweiterung verfügbar sein soll.

CREATE EXTENSION azure_ai;
CREATE EXTENSION vector;

Konfigurieren eines OpenAI-Endpunkts und eines Schlüssels

In Azure AI-Diensten finden Sie unter Ressourcenverwaltungsschlüssel>und Endpunkte den Endpunkt und die Schlüssel für Ihre Azure AI-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 der Daten

Herunterladen der Daten aus Kaggle.

Erstellen der Tabelle

Stellen Sie eine Verbindung mit Ihrem Server her, und erstellen Sie eine test Datenbank. Verwenden Sie in dieser Datenbank den folgenden Befehl, um eine Tabelle zu erstellen, in der Sie Daten importieren:

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

Legen Sie die folgende Umgebungsvariable im Clientfenster fest, um die Codierung auf UTF-8 festzulegen. Dieser Schritt ist erforderlich, da dieses bestimmte Dataset die Windows-1252-Codierung verwendet.

Rem on Windows
Set PGCLIENTENCODING=utf-8;
# on Unix based operating systems
export PGCLIENTENCODING=utf-8

Importieren Sie die Daten in die von Ihnen 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

Fügen Sie der Tabelle eine Einbettungsspalte hinzu:

ALTER TABLE recipes ADD COLUMN embedding vector(1536);

Generieren von Einbettungen

Generieren Sie Einbettungen für Ihre Daten mithilfe der azure_ai Erweiterung. Im folgenden Beispiel werden einige Felder vektorisiert und 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

Spielen Sie mit dem LIMIT Wert um. Bei einem hohen Wert kann die Anweisung aufgrund der von Azure OpenAI auferlegten Drosselung möglicherweise vorzeitig fehlschlagen. Wenn die Anweisung fehlschlägt, 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)