Fractionner des données externes pour la recherche

Développer des applications LLM avec LangChain

Jonathan Bennion

AI Engineer & LangChain Contributor

Étapes de développement RAG

Flux RAG général : un chargeur de documents, un fractionneur de documents, puis l'entreposage et la recherche.

  • Fractionnement des documents : découper en blocs
  • Scinder pour tenir dans la fenêtre de contexte d'un LLM
Développer des applications LLM avec LangChain

Réfléchir au fractionnement…

Premier paragraphe de l'introduction de l'article Attention is All You Need.

Ligne 1 :

Recurrent neural networks, long short-term memory [13] and gated recurrent [7] neural networks

Ligne 2 :

in particular, have been firmly established as state of the art approaches in sequence modeling and
1 https://arxiv.org/abs/1706.03762
Développer des applications LLM avec LangChain

Chevauchement des blocs

Premier paragraphe de l'introduction de l'article Attention is All You Need, découpé en deux blocs avec chevauchement.

Développer des applications LLM avec LangChain

Quelle est la meilleure stratégie de fractionnement ?

Le mot « context » découpé en lettres individuelles.

 

  1. CharacterTextSplitter
  2. RecursiveCharacterTextSplitter
  3. Plusieurs autres
1 Wikipedia Commons
Développer des applications LLM avec LangChain
quote = '''One machine can do the work of fifty ordinary humans.\nNo machine can do
the work of one extraordinary human.'''
len(quote)
103
chunk_size = 24
chunk_overlap = 3
1 Elbert Hubbard
Développer des applications LLM avec LangChain
from langchain_text_splitters import CharacterTextSplitter


ct_splitter = CharacterTextSplitter( separator='.', chunk_size=chunk_size, chunk_overlap=chunk_overlap)
docs = ct_splitter.split_text(quote) print(docs)
print([len(doc) for doc in docs])
['One machine can do the work of fifty ordinary humans',
 'No machine can do the work of one extraordinary human']

[52, 53]
  • Découper selon le séparateur pour rester sous < chunk_size, mais ce n'est pas garanti !
Développer des applications LLM avec LangChain
from langchain_text_splitters import RecursiveCharacterTextSplitter


rc_splitter = RecursiveCharacterTextSplitter( separators=["\n\n", "\n", " ", ""], chunk_size=chunk_size, chunk_overlap=chunk_overlap)
docs = rc_splitter.split_text(quote) print(docs)
Développer des applications LLM avec LangChain

RecursiveCharacterTextSplitter

  • separators=["\n\n", "\n", " ", ""]
['One machine can do the',
 'work of fifty ordinary',
 'humans.',
 'No machine can do the',
 'work of one',
 'extraordinary human.']
  1. Essayer par paragraphe : "\n\n"
  2. Essayer par phrase : "\n"
  3. Essayer par mots : " "
Développer des applications LLM avec LangChain

RecursiveCharacterTextSplitter avec HTML

from langchain_community.document_loaders import UnstructuredHTMLLoader 
from langchain_text_splitters import RecursiveCharacterTextSplitter


loader = UnstructuredHTMLLoader("white_house_executive_order_nov_2023.html") data = loader.load()
rc_splitter = RecursiveCharacterTextSplitter( chunk_size=chunk_size, chunk_overlap=chunk_overlap, separators=['.'])
docs = rc_splitter.split_documents(data) print(docs[0])
Document(page_content="To search this site, enter a search term [...]
Développer des applications LLM avec LangChain

Passons à la pratique !

Développer des applications LLM avec LangChain

Preparing Video For Download...