Pokročilé metody rozdělování

Retrieval Augmented Generation (RAG) with LangChain

Meri Nova

Machine Learning Engineer

Omezení stávajících strategií rozdělování

 

  1. 🤦 Rozdělení jsou naivní (bez kontextu)

    • Ignoruje kontext okolního textu
  2. 🖇 Rozdělení probíhá podle znaků, nikoli tokenů

    • Tokeny jsou zpracovávány modely
    • Riziko překročení kontextového okna

 

SemanticChunker

 

TokenTextSplitter

Retrieval Augmented Generation (RAG) with LangChain

Rozdělování na tokeny

Znakový textový rozdělovač rozdělující text do bloků podle počtu znaků.

Retrieval Augmented Generation (RAG) with LangChain

Rozdělování na tokeny

Tokenový textový rozdělovač rozdělující text do bloků podle počtu tokenů.

Retrieval Augmented Generation (RAG) with LangChain

Rozdělování na tokeny

Tokeny jsou zvýrazněny, aby bylo vidět, jak odpovídají hodnotám chunk_size a chunk_overlap.

Retrieval Augmented Generation (RAG) with LangChain

Rozdělování na tokeny

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

Rozdělování na tokeny

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

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

Rozdělování na tokeny

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

Sémantické rozdělování

Odstavec obsahující větu o aplikacích RAG a větu o psech.

Retrieval Augmented Generation (RAG) with LangChain

Sémantické rozdělování

Odstavec byl rozdělen pomocí znaků nebo tokenů, čímž došlo ke ztrátě kontextu.

Retrieval Augmented Generation (RAG) with LangChain

Sémantické rozdělování

Sémantický rozdělovač rozdělil odstavec v místě, kde se téma mění z RAG na psy.

Retrieval Augmented Generation (RAG) with LangChain

Sémantické rozdělování

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

Sémantické rozdělování

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

Pojďme si procvičit!

Retrieval Augmented Generation (RAG) with LangChain

Preparing Video For Download...