Tekst-embeddings zijn een onmisbare tool binnen natural language processing (NLP). Het zijn numerieke representaties van tekst waarbij elk woord of elke zin wordt weergegeven als een dichte vector met reële getallen.
Het grote voordeel van deze embeddings is dat ze semantische betekenissen en relaties tussen woorden of zinnen vastleggen, waardoor machines menselijke taal efficiënter kunnen begrijpen en verwerken.
Tekst-embeddings zijn cruciaal in scenario’s zoals tekstclassificatie, information retrieval en het detecteren van semantische gelijkenis.
OpenAI, bekend om zijn bijzondere bijdragen aan kunstmatige intelligentie, raadt momenteel het Ada V2-model aan voor het maken van tekst-embeddings. Dit model is afgeleid van de GPT-serie en is getraind om de contextuele betekenis en associaties in tekst nog beter vast te leggen.
Als je nog niet vertrouwd bent met de API van OpenAI of het openai Python-pakket, lees dan eerst GPT-3.5 en GPT-4 gebruiken via de OpenAI API in Python voordat je verdergaat. Deze gids helpt je bij het instellen van accounts en laat de voordelen van API-gebruik zien.
Deze tutorial maakt ook gebruik van clustering, een machinelearning-techniek om vergelijkbare instanties te groeperen. Als je niet bekend bent met clustering, en in het bijzonder k-means-clustering, lees dan Introductie tot k-means-clustering met scikit-learn in Python.
Waar kun je tekst-embeddings voor gebruiken?
Tekst-embeddings zijn toepasbaar op meerdere use-cases, waaronder maar niet beperkt tot:
- Tekstclassificatie. Tekst-embeddings helpen bij het bouwen van nauwkeurige modellen voor sentimentanalyse of onderwerpidentificatie.
- Information retrieval. Ze kunnen worden gebruikt om informatie op te halen die relevant is voor een specifieke zoekopdracht, vergelijkbaar met wat we in een zoekmachine vinden.
- Detectie van semantische gelijkenis. Embeddings kunnen de semantische gelijkenis tussen tekstfragmenten identificeren en kwantificeren.
- Aanbevelingssystemen. Ze verbeteren de kwaliteit van aanbevelingen door gebruikersvoorkeuren te begrijpen op basis van interactie met tekstdata.
- Tekstgeneratie. Embeddings worden gebruikt om samenhangendere en contextueel relevantere tekst te genereren.
- Machinevertaling. Tekst-embeddings kunnen semantische betekenissen over talen heen vastleggen, wat de kwaliteit van het machinevertalingsproces kan verbeteren.
Aan de slag
Er zijn verschillende Python-pakketten nodig om met tekst-embeddings te werken, zoals hieronder uiteengezet:
- os: Een ingebouwde Python-bibliotheek om met het besturingssysteem te communiceren.
- openai: de Python-client om met de OpenAI API te werken.
- scipy.spatial.distance: biedt functies om de afstand tussen verschillende datapunten te berekenen.
- sklean.cluster.KMeans: gebruikt om k-means-clustering uit te voeren.
- umap.UMAP: een techniek om de dimensionaliteit van hoog-dimensionale data te reduceren.
Installeer voordat je ze gebruikt openai, scipy, plotly sklearn en umap met het volgende commando. De volledige code staat in deze DataLab-workbook.
pip install -U openai, scipy, plotly-express, scikit-learn, umap-learn
Na een succesvolle uitvoering van het vorige commando kunnen alle bibliotheken als volgt worden geïmporteerd:
import os
import openai
from scipy.spatial import distance
import plotly.express as px
from sklearn.cluster import KMeans
from umap import UMAP
Nu kunnen we de OpenAI API-sleutel als volgt instellen:
openai.api_key = "<YOUR_API_KEY_HERE>"
Let op: Je moet je eigen API-sleutel instellen. Die uit de broncode is niet beschikbaar en was alleen voor individueel gebruik.
Het codepatroon voor het aanroepen van GPT via de API
De volgende helperfunctie kan worden gebruikt om een tekstregel te embedden met de OpenAI API. In de code gebruiken we de bestaande ada versie 2 om de embeddings te genereren.
def get_embedding(text_to_embed):
# Embed a line of text
response = openai.Embedding.create(
model= "text-embedding-ada-002",
input=[text_to_embed]
)
# Extract the AI output embedding as a list of floats
embedding = response["data"][0]["embedding"]
return embedding
Over de dataset
In deze sectie gebruiken we de Amazon-reviews van muziekinstrumenten, gratis beschikbaar op Kaggle. De data kan ook van mijn Github-account worden gedownload als volgt:
import pandas as pd
data_URL = "https://raw.githubusercontent.com/keitazoumana/Experimentation-Data/main/Musical_instruments_reviews.csv"
review_df = pd.read_csv(data_URL)
review_df.head()

Van alle kolommen zijn we alleen geïnteresseerd in de kolom reviewText.
review_df = review_df[['reviewText']]
print("Data shape: {}".format(review_df.shape))
display(review_df.head())
Data shape: (10261, 1)
Er staan veel reviews in de dataset. Om kosten te besparen gebruiken we slechts 100 willekeurig geselecteerde rijen.

Nu kunnen we de embeddings voor elke rij in de hele dataset genereren door de vorige functie toe te passen met een lambda-expressie:
review_df = review_df.sample(100)
review_df["embedding"] = review_df["reviewText"].astype(str).apply(get_embedding)
# Make the index start from 0
review_df.reset_index(drop=True)
review_df.head(10)

Eerste 10 rijen van de reviews en embeddings
Semantische gelijkenis begrijpen
Om het concept van semantische gelijkenis te laten zien, bekijken we twee reviews die een vergelijkbaar sentiment kunnen hebben:
“Dit product is fantastisch!”
“Het heeft mijn verwachtingen echt overtroffen!”
Met pdist() uit scipy.spatial.distance kunnen we de euclidische afstand tussen hun embeddings berekenen.
De euclidische afstand komt overeen met de wortel uit de som van de gekwadrateerde verschillen tussen de twee embeddings, en een illustratie staat hieronder:

Illustratie van de euclidische afstand (bron)
Als deze reviews inderdaad vergelijkbaar zijn, zou de afstand relatief klein moeten zijn.
Beschouw vervolgens twee verschillende reviews:
“Dit product is fantastisch!”
“Ik ben niet tevreden met het artikel.”
De afstand tussen de embeddings van deze reviews zal aanzienlijk groter zijn dan de afstand tussen de vergelijkbare reviews.
Casestudy: tekst-embeddings gebruiken voor clusteranalyse
De tekst-embeddings die we hebben gegenereerd, kunnen worden gebruikt om clusteranalyse uit te voeren, zodat vergelijkbare muziekinstrumenten die meer op elkaar lijken, bij elkaar kunnen worden gegroepeerd.
Er zijn meerdere clusteringsalgoritmen beschikbaar, zoals k-means, DBSCAN, hiërarchische clustering en Gaussian Mixture Models. In deze specifieke use-case gebruiken we k-means-clustering. Onze Introductie tot hiërarchische clustering in Python biedt echter een goed kader om de ins en outs van hiërarchische clustering en de implementatie in Python te begrijpen.
De tekstdata clusteren
Bij k-means-clustering moet je het aantal clusters vooraf instellen. We zetten dit aantal op 3 met de parameter n_clusters als volgt:
kmeans = KMeans(n_clusters=3)
kmeans.fit(review_df["embedding"].tolist())
Dimensies van de geëmbedde tekstdata reduceren
Mensen kunnen doorgaans maximaal drie dimensies visualiseren. In deze sectie gebruiken we UMAP, een relatief snelle en schaalbare tool voor dimensionaliteitsreductie.
Eerst definiëren we een instantie van de UMAP-klasse en passen we de fit_transform-functie toe op de embeddings, die een tweedimensionale representatie van de review-embeddings genereert die kan worden geplot.
reducer = UMAP()
embeddings_2d = reducer.fit_transform(review_df["embedding"].tolist())
De clusters visualiseren
Maak tot slot een scatterplot van de 2D-embeddings. De x- en y-coördinaten komen respectievelijk uit embeddings_2d[: , 0] en embeddings_2d[: , 1]
De clusters zullen visueel onderscheidend zijn:
fig = px.scatter(x=embeddings_2d[:, 0], y=embeddings_2d[:, 1], color=kmeans.labels_)
fig.show()

Cluster-visualisatie
Er zijn in totaal drie hoofdclusters met verschillende kleuren. De kleur van elke review in de figuur wordt bepaald door het clusterlabel/-nummer dat eraan is toegekend door het k-means-model. Ook geeft de positie van elk punt visueel weer hoe vergelijkbaar een bepaalde review is met de andere.
Ga een stap verder
Wil je je begrip van tekst-embeddings en de OpenAI API verdiepen? Bekijk dan het volgende materiaal van DataCamp: Fine-tuning van GPT-3 met de OpenAI API en Python en The OpenAI API in Python Cheat Sheet. Het helpt je het volledige potentieel van GPT-3 te benutten via fine-tuning en laat zien hoe je de OpenAI API en Python gebruikt om dit geavanceerde neurale netwerkmodel te verbeteren voor jouw specifieke use-case.
Een veelzijdige data scientist die graag zijn kennis deelt en iets terugdoet voor anderen. Zoumana is YouTube-contentmaker en een toonaangevende techschrijver op Medium. Hij haalt plezier uit spreken, coderen en lesgeven. Zoumana heeft twee masterdiploma’s: het eerste in informatica met een focus op machine learning uit Parijs, Frankrijk, en het tweede in data science van Texas Tech University in de VS. Zijn loopbaan begon als softwareontwikkelaar bij Groupe OPEN in Frankrijk. Daarna stapte hij over naar IBM als machine learning-consultant, waar hij end-to-end AI-oplossingen ontwikkelde voor verzekeringsmaatschappijen. Zoumana sloot zich aan bij Axionable, de eerste Sustainable AI-startup met vestigingen in Parijs en Montreal. Daar werkte hij als data scientist en bouwde hij AI-producten—voornamelijk NLP-usecases—voor klanten in Frankrijk, Montreal, Singapore en Zwitserland. Daarnaast wijdde hij 5% van zijn tijd aan research & development. Momenteel werkt hij als senior data scientist bij IFC – the World Bank Group.

