Semantisch zoeken en verrijkte embeddings

Introductie tot Embeddings met de OpenAI API

Emmanuel Pire

Senior Software Engineer, DataCamp

Semantisch zoeken

  • Gebruik embeddings om de meest vergelijkbare resultaten op een zoekopdracht te tonen
  • Voorbeeld: semantisch zoeken voor een nieuwssite

Hoe semantisch zoeken werkt: de zoektekst wordt ge-embed door het embeddingmodel, daarna wordt de afstand tussen de ge-embedde zoektekst en de ge-embedde koppen berekend. De dichtstbijzijnde kop wordt teruggegeven.

Introductie tot Embeddings met de OpenAI API

Semantisch zoeken

Hoe semantisch zoeken werkt: de zoektekst wordt ge-embed door het embeddingmodel, daarna wordt de afstand tussen de ge-embedde zoektekst en de ge-embedde koppen berekend. De dichtstbijzijnde kop wordt teruggegeven.

  1. Embed de zoekopdracht en andere teksten
  2. Bereken de cosinusafstanden
  3. Haal de teksten met de kleinste cosinusafstand op
Introductie tot Embeddings met de OpenAI API

Verrijkte embeddings

articles = [
    {"headline": "Economic Growth Continues Amid Global Uncertainty",
     "topic": "Business",
     "keywords": ["economy", "business", "finance"]},
    ...
    {"headline": "1.5 Billion Tune-in to the World Cup Final",
     "topic": "Sport",
     "keywords": ["soccer", "world cup", "tv"]}
]
Headline: Economic Growth Continues Amid Global Uncertainty
Topic: Business
Keywords: economy, business, finance
Introductie tot Embeddings met de OpenAI API

Features combineren met F-strings

articles = [..., {"headline": "1.5 Billion Tune-in to the World Cup ",
                  "topic": "Sport",
                  "keywords": ["soccer", "world cup", "tv"]}]


def create_article_text(article):
return f"""Headline: {article['headline']} Topic: {article['topic']} Keywords: {', '.join(article['keywords'])}"""
print(create_article_text(articles[-1]))
Headline: 1.5 Billion Tune-in to the World Cup Final
Topic: Sport
Keywords: soccer, world cup, tv
Introductie tot Embeddings met de OpenAI API

Verrijkte embeddings maken

article_texts = [create_article_text(article) for article in articles]

article_embeddings = create_embeddings(article_texts)
print(article_embeddings)
[[-0.019609929993748665, -0.03331860154867172, ...],
 ...,
 [..., -0.014373429119586945, -0.005235843360424042]]
Introductie tot Embeddings met de OpenAI API

Afstanden berekenen

from scipy.spatial import distance

def find_n_closest(query_vector, embeddings, n=3):

distances = [] for index, embedding in enumerate(embeddings): dist = distance.cosine(query_vector, embedding) distances.append({"distance": dist, "index": index})
distances_sorted = sorted(distances, key=lambda x: x["distance"])
return distances_sorted[0:n]
Introductie tot Embeddings met de OpenAI API

Zoekresultaten teruggeven

query_text = "AI"

query_vector = create_embeddings(query_text)[0]
hits = find_n_closest(query_vector, article_embeddings)
for hit in hits: article = articles[hit['index']] print(article['headline'])
Techreus koopt 49% van AI-startup
Techbedrijf lanceert innovatief product voor betere online toegankelijkheid
India landt succesvol bij zuidpool van de maan
Introductie tot Embeddings met de OpenAI API

Laten we oefenen!

Introductie tot Embeddings met de OpenAI API

Preparing Video For Download...