Suddivisione del testo, embedding e archiviazione vettoriale

Retrieval Augmented Generation (RAG) con LangChain

Meri Nova

Machine Learning Engineer

Preparare i dati per il retrieval

Caricamento dei documenti.

Retrieval Augmented Generation (RAG) con LangChain

Preparare i dati per il retrieval

Suddivisione dei documenti.

Retrieval Augmented Generation (RAG) con LangChain

Preparare i dati per il retrieval

Embedding dei blocchi di documento.

Retrieval Augmented Generation (RAG) con LangChain

Preparare i dati per il retrieval

Archiviazione dei blocchi di documento.

Retrieval Augmented Generation (RAG) con LangChain

Preparare i dati per il retrieval

Nel flusso RAG è evidenziato il passaggio di splitting.

Retrieval Augmented Generation (RAG) con LangChain

chunk_size

Una freccia mostra che la dimensione ideale del chunk è centrale: chunk grandi sono lenti e difficili da interpretare, chunk piccoli hanno poco contesto.

chunk_overlap

  • Includi informazioni oltre il confine

Due chunk con un'area evidenziata che si sovrappone a entrambi.

Retrieval Augmented Generation (RAG) con 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) con 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]
  • I chunk possono avere poco contesto
  • I chunk possono superare chunk_size
Retrieval Augmented Generation (RAG) con LangChain

RecursiveCharacterTextSplitter

from langchain_text_splitters import RecursiveCharacterTextSplitter

splitter = RecursiveCharacterTextSplitter(

separators=["\n\n", "\n", " ", ""],
chunk_size=100, chunk_overlap=10
)
Retrieval Augmented Generation (RAG) con 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) con LangChain

Suddividere i documenti

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) con LangChain

Suddividere i documenti

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) con LangChain

Embedding e archiviazione

Sono evidenziati i passaggi di embedding e archiviazione.

Retrieval Augmented Generation (RAG) con LangChain

Cosa sono gli embedding?

Una frase viene passata a un modello di embedding.

Retrieval Augmented Generation (RAG) con LangChain

Cosa sono gli embedding?

Il modello di embedding rappresenta il testo come un vettore di valori numerici.

Retrieval Augmented Generation (RAG) con LangChain

Cosa sono gli embedding?

what_are_embeddings3.jpg

Retrieval Augmented Generation (RAG) con LangChain

Cosa sono gli embedding?

what_are_embeddings4.jpg

Retrieval Augmented Generation (RAG) con LangChain

Embedding e archiviazione dei chunk

  • Esegui embedding e archivia con: OpenAI e 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) con LangChain

Esercitiamoci!

Retrieval Augmented Generation (RAG) con LangChain

Preparing Video For Download...