Explorer l'espace vectoriel

Introduction aux embeddings avec l’API OpenAI

Emmanuel Pire

Senior Software Engineer, DataCamp

Exemple : embarquer des titres

articles = [
    {"headline": "Economic Growth Continues Amid Global Uncertainty", "topic": "Business"},
    {"headline": "Interest rates fall to historic lows", "topic": "Business"},
    {"headline": "Scientists Make Breakthrough Discovery in Renewable Energy", "topic": "Science"},
    {"headline": "India Successfully Lands Near Moon's South Pole", "topic": "Science"},
    {"headline": "New Particle Discovered at CERN", "topic": "Science"},
    {"headline": "Tech Company Launches Innovative Product to Improve Online Accessibility", "topic": "Tech"},
    {"headline": "Tech Giant Buys 49% Stake In AI Startup", "topic": "Tech"},
    {"headline": "New Social Media Platform Has Everyone Talking!", "topic": "Tech"},
    {"headline": "The Blues get promoted on the final day of the season!", "topic": "Sport"},
    {"headline": "1.5 Billion Tune-in to the World Cup Final", "topic": "Sport"}
]
Introduction aux embeddings avec l’API OpenAI

Exemple : embarquer des titres

Une liste de dictionnaires contenant les titres et leurs embeddings.

Introduction aux embeddings avec l’API OpenAI

Embarquer plusieurs entrées

headline_text = [article['headline'] for article in articles]
headline_text
["Economic Growth Continues Amid Global Uncertainty",
 ...,
 "1.5 Billion Tune-in to the World Cup Final"]
response = client.embeddings.create(
  model="text-embedding-3-small",
  input=headline_text
)
response_dict = response.model_dump()
  • Le batching est plus efficace que plusieurs appels d'API
Introduction aux embeddings avec l’API OpenAI
[...]

'data': [
    {
      "embedding": [-0.017142612487077713, ..., -0.0012911480152979493],
      "index": 0,
      "object": "embedding"
    },
    {
      "embedding": [-0.032995883375406265, ..., -0.0028605300467461348],
      "index": 1,
      "object": "embedding"
    },
    ...
  ]

[...]
Introduction aux embeddings avec l’API OpenAI

Embarquer plusieurs entrées

articles = [
    {"headline": "Economic Growth Continues Amid Global Uncertainty", "topic": "Business"},
     ...
]
for i, article in enumerate(articles):

article['embedding'] = response_dict['data'][i]['embedding']
print(articles[:2])
[{'headline': 'Economic Growth Continues Amid Global Uncertainty',
  'topic': 'Business',
  'embedding': [-0.017142612487077713, ..., -0.0012911480152979493]}
 {'headline': 'Interest rates fall to historic lows',
  'topic': 'Business',
  'embedding': [-0.032995883375406265, ..., -0.0028605300467461348]}]
Introduction aux embeddings avec l’API OpenAI

Quelle est la longueur du vecteur d'embedding ?

  • « Economic Growth Continues Amid Global Uncertainty »
len(articles[0]['embedding'])
1536
  • « Tech Company Launches Innovative Product to Improve Accessibility »
len(articles[5]['embedding'])
1536
  • Renvoie toujours 1536 nombres !
Introduction aux embeddings avec l’API OpenAI

Réduction de dimension et t-SNE

 

  • Plusieurs techniques pour réduire le nombre de dimensions
  • t-SNE (t-distributed Stochastic Neighbor Embedding)
1 https://www.datacamp.com/tutorial/introduction-t-sne
Introduction aux embeddings avec l’API OpenAI

Mettre en œuvre t-SNE

from sklearn.manifold import TSNE
import numpy as np


embeddings = [article['embedding'] for article in articles]
tsne = TSNE(n_components=2, perplexity=5)
embeddings_2d = tsne.fit_transform(np.array(embeddings))
  • n_components : nombre de dimensions en sortie
  • perplexity : paramètre de l'algorithme, doit être inférieur au nombre de points
  • Provoque une perte d'information
1 https://www.datacamp.com/tutorial/introduction-t-sne
Introduction aux embeddings avec l’API OpenAI

Visualiser les embeddings

import matplotlib.pyplot as plt

plt.scatter(embeddings_2d[:, 0], embeddings_2d[:, 1])

topics = [article['topic'] for article in articles] for i, topic in enumerate(topics): plt.annotate(topic, (embeddings_2d[i, 0], embeddings_2d[i, 1])) plt.show()
Introduction aux embeddings avec l’API OpenAI

Visualiser les embeddings

 

  • Les articles similaires sont regroupés !
  • Le modèle a capté le sens sémantique

 

  • À suivre : calculer la similarité

 

Un nuage de points 2D montrant que les critiques ayant le même sentiment et le même sujet sont plus proches dans l'espace vectoriel.

Introduction aux embeddings avec l’API OpenAI

Passons à la pratique !

Introduction aux embeddings avec l’API OpenAI

Preparing Video For Download...