Gelişmiş bölme yöntemleri

LangChain ile Retrieval Augmented Generation (RAG)

Meri Nova

Machine Learning Engineer

Mevcut bölme stratejilerinin sınırlamaları

 

  1. 🤦 Bölmeler naif (bağlamdan habersiz)

    • Çevre metnin bağlamını yok sayar
  2. 🖇 Bölmeler karakterlerle vs. tokenlarla yapılır

    • Modeller tokenları işler
    • Bağlam penceresini aşma riski

 

SemanticChunker

 

TokenTextSplitter

LangChain ile Retrieval Augmented Generation (RAG)

Tokenlara göre bölme

Bir karakter metin böleyici, metni karakter sayısına göre parçalara ayırıyor.

LangChain ile Retrieval Augmented Generation (RAG)

Tokenlara göre bölme

Bir token metin böleyici, metni token sayısına göre parçalara ayırıyor.

LangChain ile Retrieval Augmented Generation (RAG)

Tokenlara göre bölme

Tokenlar, chunk_size ve chunk_overlap değerleriyle nasıl hizalandığını göstermek için vurgulanmıştır.

LangChain ile Retrieval Augmented Generation (RAG)

Tokenlara göre bölme

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")
LangChain ile Retrieval Augmented Generation (RAG)

Tokenlara göre bölme

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

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

Tokenlara göre bölme

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.
LangChain ile Retrieval Augmented Generation (RAG)

Anlamsal bölme

RAG uygulamaları hakkında bir cümle ve köpekler hakkında bir cümle içeren bir paragraf.

LangChain ile Retrieval Augmented Generation (RAG)

Anlamsal bölme

Paragraf karakterlere veya tokenlara göre bölündüğü için bağlam kaybolmuş.

LangChain ile Retrieval Augmented Generation (RAG)

Anlamsal bölme

Anlamsal bir bölen, konu RAG'den köpeklere geçtiğinde paragrafı o noktadan böldü.

LangChain ile Retrieval Augmented Generation (RAG)

Anlamsal bölme

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
LangChain ile Retrieval Augmented Generation (RAG)

Anlamsal bölme

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}
LangChain ile Retrieval Augmented Generation (RAG)

Ayo berlatih!

LangChain ile Retrieval Augmented Generation (RAG)

Preparing Video For Download...