Découpage du texte, embeddings et stockage vectoriel

Retrieval Augmented Generation (RAG) avec LangChain

Meri Nova

Machine Learning Engineer

Préparer les données pour la recherche

Chargement des documents.

Retrieval Augmented Generation (RAG) avec LangChain

Préparer les données pour la recherche

Découpage des documents.

Retrieval Augmented Generation (RAG) avec LangChain

Préparer les données pour la recherche

Création des embeddings pour les segments.

Retrieval Augmented Generation (RAG) avec LangChain

Préparer les données pour la recherche

Stockage des segments.

Retrieval Augmented Generation (RAG) avec LangChain

Préparer les données pour la recherche

L'étape de découpage est mise en évidence dans le flux de développement RAG.

Retrieval Augmented Generation (RAG) avec LangChain

chunk_size

Une flèche indiquant que la taille idéale d'un segment se situe au milieu ; des segments trop grands ralentissent la recherche et nuisent à l'interprétation, et des segments trop petits manquent de contexte.

chunk_overlap

  • Inclure de l'information au-delà de la limite

Deux segments avec une zone surlignée qui se chevauche.

Retrieval Augmented Generation (RAG) avec LangChain

CharacterTextSplitter

from langchain_text_splitters import CharacterTextSplitter

text = """Machine learning is a fascinating field.\n\nIt involves algorithms and models that can learn from data. These models can then make predictions or decisions without being explicitly programmed to perform the task.\nThis capability is increasingly valuable in various industries, from finance to healthcare.\n\nThere are many types of machine learning, including supervised, unsupervised, and reinforcement learning.\nEach type has its own strengths and applications."""
text_splitter = CharacterTextSplitter( separator="\n\n", chunk_size=100, chunk_overlap=10 )
Retrieval Augmented Generation (RAG) avec LangChain

CharacterTextSplitter

chunks = text_splitter.split_text(text)

print(chunks) print([len(chunk) for chunk in chunks])
['Machine learning is a fascinating field.',
 'It involves algorithms and models that can learn from data. These models can...',
 'There are many types of machine learning, including supervised, unsupervised...']

[40, 260, 155]
  • Les segments peuvent manquer de contexte
  • Les segments peuvent dépasser chunk_size
Retrieval Augmented Generation (RAG) avec LangChain

RecursiveCharacterTextSplitter

from langchain_text_splitters import RecursiveCharacterTextSplitter

splitter = RecursiveCharacterTextSplitter(

separators=["\n\n", "\n", " ", ""],
chunk_size=100, chunk_overlap=10
)
Retrieval Augmented Generation (RAG) avec LangChain

RecursiveCharacterTextSplitter

chunks = splitter.split_text(text)

print(chunks)
print([len(chunk) for chunk in chunks])
['Machine learning is a fascinating field.',
 'It involves algorithms and models that can learn from data. These models ...',
 'or decisions without being explicitly programmed to perform the task.',
 'This capability is increasingly valuable in various industries, from ...',
 'There are many types of machine learning, including supervised, ...',
 'learning.',
 'Each type has its own strengths and applications.']
[40, 98, 69, 91, 95, 9, 49]
Retrieval Augmented Generation (RAG) avec LangChain

Découper des documents

from langchain_community.document_loaders import PyPDFLoader

loader = PyPDFLoader("research_paper.pdf")
documents = loader.load()

splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)

chunks = splitter.split_documents(documents)
Retrieval Augmented Generation (RAG) avec LangChain

Découper des documents

print(chunks)

print([len(chunk.page_content) for chunk in chunks])
[Document(metadata={'source': 'Rag Paper.pdf', 'page': 0}, page_content='...'),
 Document(metadata={'source': 'Rag Paper.pdf', 'page': 0}, page_content='...'),
 Document(metadata={'source': 'Rag Paper.pdf', 'page': 0}, page_content='...')]

[928, 946, 921,...]
Retrieval Augmented Generation (RAG) avec LangChain

Embeddings et stockage

Les étapes d'embedding et de stockage sont mises en évidence.

Retrieval Augmented Generation (RAG) avec LangChain

Qu'est-ce qu'un embedding ?

Une phrase est envoyée à un modèle d'embedding.

Retrieval Augmented Generation (RAG) avec LangChain

Qu'est-ce qu'un embedding ?

Le modèle d'embedding représente le texte comme un vecteur de valeurs numériques.

Retrieval Augmented Generation (RAG) avec LangChain

Qu'est-ce qu'un embedding ?

what_are_embeddings3.jpg

Retrieval Augmented Generation (RAG) avec LangChain

Qu'est-ce qu'un embedding ?

what_are_embeddings4.jpg

Retrieval Augmented Generation (RAG) avec LangChain

Créer des embeddings et stocker les segments

  • Créer des embeddings et stocker avec : OpenAI et ChromaDB
from langchain_openai import OpenAIEmbeddings
from langchain_chroma import Chroma

embedding_model = OpenAIEmbeddings(
    api_key=openai_api_key,
    model="text-embedding-3-small"
)


vector_store = Chroma.from_documents( documents=chunks, embedding=embedding_model )
Retrieval Augmented Generation (RAG) avec LangChain

Passons à la pratique !

Retrieval Augmented Generation (RAG) avec LangChain

Preparing Video For Download...