Avancerade uppdelningsmetoder

Retrieval Augmented Generation (RAG) med LangChain

Meri Nova

Machine Learning Engineer

Begränsningar med nuvarande uppdelningsstrategier

 

  1. 🤦 Uppdelningar är naiva (ej kontextmedvetna)

    • Ignorerar kontexten i omgivande text
  2. 🖇 Uppdelningar görs med tecken, inte tokens

    • Tokens bearbetas av modeller
    • Risk att överskrida kontextfönstret

 

SemanticChunker

 

TokenTextSplitter

Retrieval Augmented Generation (RAG) med LangChain

Uppdelning på tokens

En teckentextdelare som delar upp text i bitar baserat på antal tecken.

Retrieval Augmented Generation (RAG) med LangChain

Uppdelning på tokens

En tokentextdelare som delar upp text i bitar baserat på antal tokens.

Retrieval Augmented Generation (RAG) med LangChain

Uppdelning på tokens

Tokens är markerade för att visa hur de stämmer överens med värdena för chunk_size och chunk_overlap.

Retrieval Augmented Generation (RAG) med LangChain

Uppdelning på 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) med LangChain

Uppdelning på tokens

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

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

Uppdelning på 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) med LangChain

Semantisk uppdelning

Ett stycke med en mening om RAG-applikationer och en mening om hundar.

Retrieval Augmented Generation (RAG) med LangChain

Semantisk uppdelning

Stycket har delats upp med tecken eller tokens så att kontexten har gått förlorad.

Retrieval Augmented Generation (RAG) med LangChain

Semantisk uppdelning

En semantisk delare delade stycket vid den punkt där ämnet skiftar från RAG till hundar.

Retrieval Augmented Generation (RAG) med LangChain

Semantisk uppdelning

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

Semantisk uppdelning

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

Nu kör vi en övning!

Retrieval Augmented Generation (RAG) med LangChain

Preparing Video For Download...