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.