Împărțirea datelor externe pentru recuperare

Developing LLM Applications with LangChain

Jonathan Bennion

AI Engineer & LangChain Contributor

Etapele dezvoltării RAG

Fluxul general RAG: un încărcător de documente, un splitter și procesul de stocare și recuperare.

  • Împărțirea documentelor: împărțirea în fragmente
  • Fragmentarea documentelor pentru a se încadra în fereastra de context a unui LLM
Developing LLM Applications with LangChain

Să ne gândim la împărțire...

Primul paragraf din introducerea articolului Attention is All You Need.

Linia 1:

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

Linia 2:

in particular, have been firmly established as state of the art approaches in sequence modeling and
1 https://arxiv.org/abs/1706.03762
Developing LLM Applications with LangChain

Suprapunerea fragmentelor

Primul paragraf din introducerea articolului Attention is All You Need împărțit în două fragmente cu suprapunere.

Developing LLM Applications with LangChain

Care este cea mai bună strategie de împărțire a documentelor?

Cuvântul „context" împărțit în litere individuale.

 

  1. CharacterTextSplitter
  2. RecursiveCharacterTextSplitter
  3. Multe altele
1 Wikipedia Commons
Developing LLM Applications with LangChain
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
Developing LLM Applications with LangChain
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]
  • Se împarte după separator, deci < chunk_size, dar nu reușește întotdeauna!
Developing LLM Applications with LangChain
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)
Developing LLM Applications with LangChain

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. Împărțire după paragraf: "\n\n"
  2. Împărțire după propoziție: "\n"
  3. Împărțire după cuvinte: " "
Developing LLM Applications with LangChain

RecursiveCharacterTextSplitter cu HTML

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 [...]
Developing LLM Applications with LangChain

Să exersăm!

Developing LLM Applications with LangChain

Preparing Video For Download...