วิธีการแบ่งข้อความขั้นสูง

Retrieval Augmented Generation (RAG) ด้วย LangChain

Meri Nova

Machine Learning Engineer

ข้อจำกัดของกลยุทธ์การแบ่งข้อความปัจจุบัน

 

  1. 🤦 การแบ่งแบบธรรมดา (ไม่รับรู้บริบท)

    • ไม่คำนึงถึงบริบทของข้อความโดยรอบ
  2. 🖇 การแบ่งใช้ตัวอักษรแทน token

    • โมเดลประมวลผลด้วย token
    • มีความเสี่ยงที่จะเกิน context window

 

SemanticChunker

 

TokenTextSplitter

Retrieval Augmented Generation (RAG) ด้วย LangChain

การแบ่งข้อความด้วย token

การแบ่งข้อความด้วย character text splitter โดยอิงตามจำนวนตัวอักษร

Retrieval Augmented Generation (RAG) ด้วย LangChain

การแบ่งข้อความด้วย token

การแบ่งข้อความด้วย token text splitter โดยอิงตามจำนวน token

Retrieval Augmented Generation (RAG) ด้วย LangChain

การแบ่งข้อความด้วย token

token ถูกไฮไลต์เพื่อแสดงความสอดคล้องกับค่า chunk_size และ chunk_overlap

Retrieval Augmented Generation (RAG) ด้วย LangChain

การแบ่งข้อความด้วย token

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) ด้วย LangChain

การแบ่งข้อความด้วย token

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

Chunk 2:
 fleece was white as snow.
Retrieval Augmented Generation (RAG) ด้วย LangChain

การแบ่งข้อความด้วย token

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) ด้วย LangChain

การแบ่งข้อความเชิงความหมาย

ย่อหน้าที่มีประโยคเกี่ยวกับ RAG และประโยคเกี่ยวกับสุนัข

Retrieval Augmented Generation (RAG) ด้วย LangChain

การแบ่งข้อความเชิงความหมาย

ย่อหน้าถูกแบ่งด้วยตัวอักษรหรือ token จนทำให้บริบทสูญหาย

Retrieval Augmented Generation (RAG) ด้วย LangChain

การแบ่งข้อความเชิงความหมาย

semantic splitter แบ่งย่อหน้า ณ จุดที่หัวข้อเปลี่ยนจาก RAG ไปเป็นเรื่องสุนัข

Retrieval Augmented Generation (RAG) ด้วย LangChain

การแบ่งข้อความเชิงความหมาย

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) ด้วย LangChain

การแบ่งข้อความเชิงความหมาย

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) ด้วย LangChain

มาฝึกกันเถอะ!

Retrieval Augmented Generation (RAG) ด้วย LangChain

Preparing Video For Download...