Geavanceerde splitsmethoden

Retrieval Augmented Generation (RAG) met LangChain

Meri Nova

Machine Learning Engineer

Beperkingen van onze huidige splitsstrategieën

 

  1. 🤦 Splits zijn naïef (niet contextbewust)

    • Negeert context van omringende tekst
  2. 🖇 Splits op basis van tekens vs. tokens

    • Tokens worden door modellen verwerkt
    • Risico op overschrijden van het contextvenster

 

SemanticChunker

 

TokenTextSplitter

Retrieval Augmented Generation (RAG) met LangChain

Splitsen op tokens

Een tekensplitser die tekst in chunks splitst op basis van het aantal tekens.

Retrieval Augmented Generation (RAG) met LangChain

Splitsen op tokens

Een tokensplitser die tekst in chunks splitst op basis van het aantal tokens.

Retrieval Augmented Generation (RAG) met LangChain

Splitsen op tokens

De tokens zijn gemarkeerd om te laten zien hoe ze aligneren met de waarden chunk_size en chunk_overlap.

Retrieval Augmented Generation (RAG) met LangChain

Splitsen op tokens

import tiktoken
from langchain_text_splitters import TokenTextSplitter
example_string = "Mary had a little lamb, it's fleece was white as snow."

encoding = tiktoken.encoding_for_model('gpt-4o-mini')
splitter = TokenTextSplitter(encoding_name=encoding.name,
                             chunk_size=10,
                             chunk_overlap=2)

chunks = splitter.split_text(example_string) for i, chunk in enumerate(chunks): print(f"Chunk {i+1}:\n{chunk}\n")
Retrieval Augmented Generation (RAG) met LangChain

Splitsen op tokens

Chunk 1:
Mary had a little lamb, it's fleece

Chunk 2:
 fleece was white as snow.
Retrieval Augmented Generation (RAG) met LangChain

Splitsen op tokens

for i, chunk in enumerate(chunks):
    print(f"Chunk {i+1}:\nNo. tokens: {len(encoding.encode(chunk))}\n{chunk}\n")
Chunk 1:
No. tokens: 10
Mary had a little lamb, it's fleece was

Chunk 2:
No. tokens: 6
 fleece was white as snow.
Retrieval Augmented Generation (RAG) met LangChain

Semantisch splitsen

Een alinea met een zin over RAG-toepassingen en een zin over honden.

Retrieval Augmented Generation (RAG) met LangChain

Semantisch splitsen

De alinea is gesplitst met tekens of tokens waardoor context is verloren.

Retrieval Augmented Generation (RAG) met LangChain

Semantisch splitsen

Een semantische splitter splitst de alinea waar het onderwerp wisselt van RAG naar honden.

Retrieval Augmented Generation (RAG) met LangChain

Semantisch splitsen

from langchain_openai import OpenAIEmbeddings
from langchain_experimental.text_splitter import SemanticChunker

embeddings = OpenAIEmbeddings(api_key="...", model='text-embedding-3-small')
semantic_splitter = SemanticChunker( embeddings=embeddings,
breakpoint_threshold_type="gradient", breakpoint_threshold_amount=0.8
)
1 https://api.python.langchain.com/en/latest/text_splitter/langchain_experimental.text_splitter. SemanticChunker.html
Retrieval Augmented Generation (RAG) met LangChain

Semantisch splitsen

chunks = semantic_splitter.split_documents(data)
print(chunks[0])
page_content='Retrieval-Augmented Generation for\nKnowledge-Intensive NLP Tasks\ Patrick Lewis,
Ethan Perez,\nAleksandra Piktus, Fabio Petroni, Vladimir Karpukhin, Naman Goyal, Heinrich
Küttler,\nMike Lewis, Wen-tau Yih, Tim Rocktäschel, Sebastian Riedel, Douwe Kiela\nFacebook AI
Research; University College London;New York University;\[email protected]\nAbstract\nLarge
pre-trained language models have been shown to store factual knowledge\nin their parameters,
and achieve state-of-the-art results when fine-tuned on down-\nstream NLP tasks. However, their
ability to access and precisely manipulate knowl-\nedge is still limited, and hence on
knowledge-intensive tasks, their performance\nlags behind task-specific architectures.'
metadata={'source': 'rag_paper.pdf', 'page': 0}
Retrieval Augmented Generation (RAG) met LangChain

Laten we oefenen!

Retrieval Augmented Generation (RAG) met LangChain

Preparing Video For Download...