Alım için harici verileri bölme

LangChain ile LLM Uygulamaları Geliştirme

Jonathan Bennion

AI Engineer & LangChain Contributor

RAG geliştirme adımları

Genel RAG iş akışı: bir belge yükleyici, bir belge bölücü ve depolama-alım süreci.

  • Belge bölme: belgeyi parçalara ayırın
  • Belgeleri bir LLM'nin bağlam penceresine sığacak şekilde parçalayın
LangChain ile LLM Uygulamaları Geliştirme

Bölmeyi düşünmek...

Attention is All You Need makalesinin girişinin ilk paragrafı.

Satır 1:

Recurrent neural networks, long short-term memory [13] and gated recurrent [7] neural networks

Satır 2:

in particular, have been firmly established as state of the art approaches in sequence modeling and
1 https://arxiv.org/abs/1706.03762
LangChain ile LLM Uygulamaları Geliştirme

Parça örtüşmesi

Bir örtüşme ile iki parçaya bölünmüş Attention is All You Need makalesinin girişinin ilk paragrafı.

LangChain ile LLM Uygulamaları Geliştirme

En iyi belge bölme stratejisi nedir?

"context" kelimesi, tek tek harflere parçalanmış.

 

  1. CharacterTextSplitter
  2. RecursiveCharacterTextSplitter
  3. Daha pek çoğu
1 Wikipedia Commons
LangChain ile LLM Uygulamaları Geliştirme
quote = '''One machine can do the work of fifty ordinary humans.\nNo machine can do
the work of one extraordinary human.'''
len(quote)
103
chunk_size = 24
chunk_overlap = 3
1 Elbert Hubbard
LangChain ile LLM Uygulamaları Geliştirme
from langchain_text_splitters import CharacterTextSplitter


ct_splitter = CharacterTextSplitter( separator='.', chunk_size=chunk_size, chunk_overlap=chunk_overlap)
docs = ct_splitter.split_text(quote) print(docs)
print([len(doc) for doc in docs])
['One machine can do the work of fifty ordinary humans',
 'No machine can do the work of one extraordinary human']

[52, 53]
  • Ayracı kullanarak böl ve < chunk_size olacak şekilde tut, ancak her zaman başarılı olmayabilir!
LangChain ile LLM Uygulamaları Geliştirme
from langchain_text_splitters import RecursiveCharacterTextSplitter


rc_splitter = RecursiveCharacterTextSplitter( separators=["\n\n", "\n", " ", ""], chunk_size=chunk_size, chunk_overlap=chunk_overlap)
docs = rc_splitter.split_text(quote) print(docs)
LangChain ile LLM Uygulamaları Geliştirme

RecursiveCharacterTextSplitter

  • separators=["\n\n", "\n", " ", ""]
['One machine can do the',
 'work of fifty ordinary',
 'humans.',
 'No machine can do the',
 'work of one',
 'extraordinary human.']
  1. Önce paragrafa göre böl: "\n\n"
  2. Sonra cümleye göre: "\n"
  3. Sonra kelimelere göre: " "
LangChain ile LLM Uygulamaları Geliştirme

HTML ile RecursiveCharacterTextSplitter

from langchain_community.document_loaders import UnstructuredHTMLLoader 
from langchain_text_splitters import RecursiveCharacterTextSplitter


loader = UnstructuredHTMLLoader("white_house_executive_order_nov_2023.html") data = loader.load()
rc_splitter = RecursiveCharacterTextSplitter( chunk_size=chunk_size, chunk_overlap=chunk_overlap, separators=['.'])
docs = rc_splitter.split_documents(data) print(docs[0])
Document(page_content="To search this site, enter a search term [...]
LangChain ile LLM Uygulamaları Geliştirme

Haydi pratik yapalım!

LangChain ile LLM Uygulamaları Geliştirme

Preparing Video For Download...