Aufbau eines Empfehlungssystems mit Hugging Face TransformersAufbau eines Empfehlungssystems mit Hugging Face Transformers
Bild von jcomp auf Freepik

In der modernen Zeit verlassen wir uns auf die Software program in unseren Telefonen und Computern. Viele Anwendungen wie E-Commerce, Movie-Streaming, Spieleplattformen und andere haben unser Leben verändert, da diese Anwendungen die Dinge einfacher machen. Um das Ganze noch besser zu machen, bietet das Unternehmen oft Funktionen an, die Empfehlungen auf der Grundlage der Daten ermöglichen.

Empfehlungssysteme basieren auf der Vorhersage, woran der Benutzer auf Grundlage der Eingaben interessiert sein könnte. Das System schlägt die am besten geeigneten Artikel entweder auf Grundlage der Ähnlichkeit zwischen den Artikeln (inhaltsbasierte Filterung) oder des Verhaltens (kollaborative Filterung) vor.

Bei vielen Ansätzen zur Empfehlungssystemarchitektur können wir die Umarmende Gesichtstransformatoren Paket. Falls Sie es nicht wussten: Hugging Face Transformers ist ein Open-Supply-Python-Paket, das APIs einen einfachen Zugriff auf alle vorab trainierten NLP-Modelle ermöglicht, die Aufgaben wie Textverarbeitung, Generierung und viele andere unterstützen.

In diesem Artikel wird das Hugging Face Transformers-Paket verwendet, um ein einfaches Empfehlungssystem basierend auf der Einbettung von Ähnlichkeiten zu entwickeln. Lassen Sie uns beginnen.

Entwickeln Sie ein Empfehlungssystem mit Hugging Face Transformers

Bevor wir mit dem Tutorial beginnen, müssen wir die erforderlichen Pakete installieren. Dazu können Sie den folgenden Code verwenden:

pip set up transformers torch pandas scikit-learn

Sie können die passende Model für Ihre Umgebung über die Web site des Fackel Set up.

Als Beispiel für den Datensatz würden wir den Anime-Empfehlungsdatensatz verwenden von Kaggle.

Sobald die Umgebung und der Datensatz bereit sind, beginnen wir mit dem Tutorial. Zuerst müssen wir den Datensatz lesen und vorbereiten.

import pandas as pd

df = pd.read_csv('anime.csv')

df = df.dropna()
df('description') = df('identify') +' '+ df('style') + ' ' +df('kind')+' episodes: '+ df('episodes')

Im obigen Code lesen wir den Datensatz mit Pandas und löschen alle fehlenden Daten. Dann erstellen wir eine Funktion namens „Beschreibung“, die alle Informationen aus den verfügbaren Daten enthält, wie Identify, Style, Typ und Episodennummer. Die neue Spalte würde unsere Grundlage für das Empfehlungssystem werden. Es wäre besser, vollständigere Informationen zu haben, wie etwa die Handlung und Zusammenfassung des Animes, aber lassen wir uns vorerst mit dieser zufrieden geben.

Als nächstes würden wir Hugging Face Transformers verwenden, um ein Einbettungsmodell zu laden und den Textual content in einen numerischen Vektor umzuwandeln. Insbesondere würden wir Satzeinbettung verwenden, um den gesamten Satz umzuwandeln.

Das Empfehlungssystem würde auf der Einbettung aller Anime-„Beschreibungen“ basieren, die wir bald durchführen werden. Wir würden die Kosinus-Ähnlichkeitsmethode verwenden, die die Ähnlichkeit zweier Vektoren misst. Indem wir die Ähnlichkeit zwischen der Einbettung der Anime-„Beschreibung“ und der Einbettung der Abfrageeingabe des Benutzers messen, können wir präzise Elemente erhalten, die wir empfehlen können.

Der Ansatz der eingebetteten Ähnlichkeit klingt einfach, kann im Vergleich zum klassischen Empfehlungssystemmodell jedoch sehr leistungsstark sein, da er die semantische Beziehung zwischen Wörtern erfassen und dem Empfehlungsprozess eine kontextuelle Bedeutung verleihen kann.

Für dieses Tutorial würden wir die Einbettungsmodell-Satztransformatoren von Hugging Face verwenden. Um den Satz in eine Einbettung umzuwandeln, würden wir den folgenden Code verwenden.

from transformers import AutoTokenizer, AutoModel
import torch
import torch.nn.practical as F

def mean_pooling(model_output, attention_mask):
    token_embeddings = model_output(0) #First factor of model_output incorporates all token embeddings
    input_mask_expanded = attention_mask.unsqueeze(-1).broaden(token_embeddings.measurement()).float()
    return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)

tokenizer = AutoTokenizer.from_pretrained('sentence-transformers/all-MiniLM-L6-v2')
mannequin = AutoModel.from_pretrained('sentence-transformers/all-MiniLM-L6-v2')

def get_embeddings(sentences):
  encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors="pt")

  with torch.no_grad():
      model_output = mannequin(**encoded_input)

  sentence_embeddings = mean_pooling(model_output, encoded_input('attention_mask'))

  sentence_embeddings = F.normalize(sentence_embeddings, p=2, dim=1)

  return sentence_embeddings

Probieren Sie den Einbettungsprozess aus und sehen Sie sich das Vektorergebnis mit dem folgenden Code an. Ich würde die Ausgabe jedoch nicht anzeigen, da sie ziemlich lang ist.

sentences = ('Some nice film', 'One other humorous film')
end result = get_embeddings(sentences)
print("Sentence embeddings:")
print(end result)

Um die Dinge einfacher zu machen, unterhält Hugging Face ein Python-Paket zum Einbetten von Satztransformatoren, das den gesamten Transformationsprozess auf 3 Codezeilen reduziert. Installieren Sie das erforderliche Paket mit dem folgenden Code.

pip set up -U sentence-transformers

Dann können wir die gesamte Anime-„Beschreibung“ mit dem folgenden Code umwandeln.

from sentence_transformers import SentenceTransformer
mannequin = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')

anime_embeddings = mannequin.encode(df('description').tolist())

Wenn die eingebettete Datenbank bereit ist, erstellen wir eine Funktion zur Aufnahme von Benutzereingaben und zur Durchführung einer Kosinus-Ähnlichkeitsanalyse als Empfehlungssystem.

from sklearn.metrics.pairwise import cosine_similarity

def get_recommendations(question, embeddings, df, top_n=5):
    query_embedding = mannequin.encode((question))
    similarities = cosine_similarity(query_embedding, embeddings)
    top_indices = similarities(0).argsort()(-top_n:)(::-1)
    return df.iloc(top_indices)

Jetzt, da alles bereit ist, können wir das Empfehlungssystem ausprobieren. Hier ist ein Beispiel für die Erfassung der fünf besten Anime-Empfehlungen aus der Benutzereingabeabfrage.

question = "Humorous anime I can watch with buddies"
suggestions = get_recommendations(question, anime_embeddings, df)
print(suggestions(('identify', 'style')))
Output>>
                                         identify  
7363  Sentou Yousei Shoujo Tasukete! Mave-chan   
8140            Anime TV de Hakken! Tamagotchi   
4294      SKET Dance: SD Character Flash Anime   
1061                        Isshuukan Buddies.   
2850                       Oshiete! Galko-chan   

                                             style  
7363  Comedy, Parody, Sci-Fi, Shounen, Tremendous Energy  
8140          Comedy, Fantasy, Youngsters, Slice of Life  
4294                       Comedy, Faculty, Shounen  
1061        Comedy, Faculty, Shounen, Slice of Life  
2850                 Comedy, Faculty, Slice of Life 

Das Ergebnis sind alle Comedy-Animes, da wir uns lustige Anime wünschen. Meist sind auch Animes dabei, die sich zum gemeinsamen Anschauen mit Freunden aus dem Style eignen. Natürlich wäre die Empfehlung noch besser, wenn wir noch mehr Informationen hätten.

Abschluss

Ein Empfehlungssystem ist ein Software, das auf Grundlage der Eingaben vorhersagt, woran Benutzer interessiert sein könnten. Mithilfe von Hugging Face Transformers können wir ein Empfehlungssystem erstellen, das den Einbettungs- und Kosinus-Ähnlichkeitsansatz verwendet. Der Einbettungsansatz ist leistungsstark, da er die semantische Beziehung und die kontextuelle Bedeutung des Textes berücksichtigen kann.

Cornellius Yudha Wijaya ist Information Science Assistant Supervisor und Datenautor. Während seiner Vollzeitbeschäftigung bei Allianz Indonesien teilt er gerne Python- und Datentipps über soziale Medien und in den Medien. Cornellius schreibt über eine Vielzahl von KI- und maschinellen Lernthemen.

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert