Embeddings d'articles Wikipedia pour la recherche

Dans ce tutoriel, nous explorerons le processus de préparation d'un dataset d'articles Wikipedia pour la recherche, en nous concentrant spécifiquement sur les Jeux olympiques d'hiver 2022. Cela implique plusieurs étapes clés : collecter les articles, les découper en sections gérables, créer des embeddings pour ces sections, et stocker les résultats pour une récupération efficace.
Prérequis
Avant de commencer, assurez-vous d'avoir les bibliothèques nécessaires installées. Vous pouvez installer les bibliothèques manquantes avec pip :
pip install openai mwclient mwparserfromhell pandas tiktokenDéfinissez votre clé API OpenAI comme variable d'environnement :
export OPENAI_API_KEY="votre-cle-api"Collecte des articles
Nous commençons par télécharger les articles Wikipedia liés aux Jeux olympiques d'hiver 2022. En utilisant la bibliothèque mwclient, nous pouvons accéder à l'API de Wikipedia pour récupérer les articles d'une catégorie spécifique.
import mwclient
CATEGORY_TITLE = "Category:2022 Winter Olympics"
WIKI_SITE = "en.wikipedia.org"
site = mwclient.Site(WIKI_SITE)
category_page = site.pages[CATEGORY_TITLE]
titles = titles_from_category(category_page, max_depth=1)
print(f"Trouvé {len(titles)} titres d'articles dans {CATEGORY_TITLE}.")Découpage des articles
Une fois que nous avons les articles, nous devons les diviser en sections plus petites et semi-autonomes. C'est crucial car les modèles GPT ne peuvent traiter qu'une quantité limitée de texte à la fois. Nous écartons les sections moins pertinentes et nettoyons le texte en supprimant les balises de référence et les espaces blancs.
def clean_section(section):
titles, text = section
text = re.sub(r"<ref.*?</ref>", "", text)
text = text.strip()
return (titles, text)
wikipedia_sections = [clean_section(ws) for ws in wikipedia_sections]Création des embeddings pour les sections
Avec les sections préparées, nous utilisons l'API OpenAI pour générer des embeddings pour chaque section. Cette étape transforme le texte en un format numérique qui peut être facilement recherché et comparé.
from openai import OpenAI
import pandas as pd
client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
embeddings = []
for batch_start in range(0, len(wikipedia_strings), BATCH_SIZE):
batch_end = batch_start + BATCH_SIZE
batch = wikipedia_strings[batch_start:batch_end]
response = client.embeddings.create(model=EMBEDDING_MODEL, input=batch)
embeddings.extend([e.embedding for e in response.data])
df = pd.DataFrame({"text": wikipedia_strings, "embedding": embeddings})Stockage des embeddings
Enfin, nous stockons les embeddings dans un fichier CSV pour un accès et une récupération faciles. Pour des datasets plus grands, envisagez d'utiliser une base de données vectorielle pour de meilleures performances.
SAVE_PATH = "data/winter_olympics_2022.csv"
df.to_csv(SAVE_PATH, index=False)Ce processus nous permet de préparer et de rechercher efficacement à travers de grandes collections de données textuelles, ce qui en fait un outil puissant pour des applications comme la réponse aux questions et la recherche d'informations.
Référence : Embedding Wikipedia articles for search par Ted Sanders.
Discutez de votre projet avec nous
Nous sommes ici pour vous aider avec vos besoins en développement Web. Planifiez un appel pour discuter de votre projet et comment nous pouvons vous aider.
Trouvons les meilleures solutions pour vos besoins.
Articles connexes

Creer un Podcast a partir d'un PDF avec Vercel AI SDK et LangChain
Apprenez a creer un podcast a partir d'un PDF en utilisant Vercel AI SDK, PDFLoader de LangChain, ElevenLabs et Next.js.
Améliorer l'efficacité du service client : Exploiter les appels d'outils obligatoires dans ChatCompletion
Découvrez comment les appels d'outils obligatoires dans ChatCompletion peuvent améliorer l'efficacité du service client en fournissant des réponses cohérentes et des workflows rationalisés.

Explorer la nouvelle API Responses : Un guide complet
Plongez dans la nouvelle API Responses, conçue pour simplifier les interactions complexes et multimodales avec des conversations stateful et des outils hébergés.