Розбиття тексту, вбудовування та зберігання у векторах

Retrieval Augmented Generation (RAG) з LangChain

Meri Nova

Machine Learning Engineer

Підготовка даних до пошуку

Завантаження документів.

Retrieval Augmented Generation (RAG) з LangChain

Підготовка даних до пошуку

Розбиття документів.

Retrieval Augmented Generation (RAG) з LangChain

Підготовка даних до пошуку

Вбудовування фрагментів документа.

Retrieval Augmented Generation (RAG) з LangChain

Підготовка даних до пошуку

Збереження фрагментів документа.

Retrieval Augmented Generation (RAG) з LangChain

Підготовка даних до пошуку

У робочому процесі RAG виділено крок розбиття.

Retrieval Augmented Generation (RAG) з LangChain

chunk_size

Стрілка показує, що оптимальний розмір фрагмента — посередині: великі — повільно шукаються й важко тлумачаться, малі — дають замало контексту.

chunk_overlap

  • Додає інформацію поза межами

Два фрагменти з підсвіченою спільною зоною.

Retrieval Augmented Generation (RAG) з LangChain

CharacterTextSplitter

from langchain_text_splitters import CharacterTextSplitter

text = """Machine learning is a fascinating field.\n\nIt involves algorithms and models that can learn from data. These models can then make predictions or decisions without being explicitly programmed to perform the task.\nThis capability is increasingly valuable in various industries, from finance to healthcare.\n\nThere are many types of machine learning, including supervised, unsupervised, and reinforcement learning.\nEach type has its own strengths and applications."""
text_splitter = CharacterTextSplitter( separator="\n\n", chunk_size=100, chunk_overlap=10 )
Retrieval Augmented Generation (RAG) з LangChain

CharacterTextSplitter

chunks = text_splitter.split_text(text)

print(chunks) print([len(chunk) for chunk in chunks])
['Machine learning is a fascinating field.',
 'It involves algorithms and models that can learn from data. These models can...',
 'There are many types of machine learning, including supervised, unsupervised...']

[40, 260, 155]
  • Фрагменти можуть втрачати контекст
  • Фрагменти можуть бути більшими за chunk_size
Retrieval Augmented Generation (RAG) з LangChain

RecursiveCharacterTextSplitter

from langchain_text_splitters import RecursiveCharacterTextSplitter

splitter = RecursiveCharacterTextSplitter(

separators=["\n\n", "\n", " ", ""],
chunk_size=100, chunk_overlap=10
)
Retrieval Augmented Generation (RAG) з LangChain

RecursiveCharacterTextSplitter

chunks = splitter.split_text(text)

print(chunks)
print([len(chunk) for chunk in chunks])
['Machine learning is a fascinating field.',
 'It involves algorithms and models that can learn from data. These models ...',
 'or decisions without being explicitly programmed to perform the task.',
 'This capability is increasingly valuable in various industries, from ...',
 'There are many types of machine learning, including supervised, ...',
 'learning.',
 'Each type has its own strengths and applications.']
[40, 98, 69, 91, 95, 9, 49]
Retrieval Augmented Generation (RAG) з LangChain

Розбиття документів

from langchain_community.document_loaders import PyPDFLoader

loader = PyPDFLoader("research_paper.pdf")
documents = loader.load()

splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)

chunks = splitter.split_documents(documents)
Retrieval Augmented Generation (RAG) з LangChain

Розбиття документів

print(chunks)

print([len(chunk.page_content) for chunk in chunks])
[Document(metadata={'source': 'Rag Paper.pdf', 'page': 0}, page_content='...'),
 Document(metadata={'source': 'Rag Paper.pdf', 'page': 0}, page_content='...'),
 Document(metadata={'source': 'Rag Paper.pdf', 'page': 0}, page_content='...')]

[928, 946, 921,...]
Retrieval Augmented Generation (RAG) з LangChain

Вбудовування та зберігання

Виділено кроки вбудовування та зберігання.

Retrieval Augmented Generation (RAG) з LangChain

Що таке embeddings?

Речення подається в модель вбудовувань.

Retrieval Augmented Generation (RAG) з LangChain

Що таке embeddings?

Модель вбудовувань кодує текст як вектор числових значень.

Retrieval Augmented Generation (RAG) з LangChain

Що таке embeddings?

what_are_embeddings3.jpg

Retrieval Augmented Generation (RAG) з LangChain

Що таке embeddings?

what_are_embeddings4.jpg

Retrieval Augmented Generation (RAG) з LangChain

Вбудовування та зберігання фрагментів

  • Вбудуйте та збережіть за допомогою: OpenAI і ChromaDB
from langchain_openai import OpenAIEmbeddings
from langchain_chroma import Chroma

embedding_model = OpenAIEmbeddings(
    api_key=openai_api_key,
    model="text-embedding-3-small"
)


vector_store = Chroma.from_documents( documents=chunks, embedding=embedding_model )
Retrieval Augmented Generation (RAG) з LangChain

Давайте потренуємось!

Retrieval Augmented Generation (RAG) з LangChain

Preparing Video For Download...