Разбиение текста, эмбеддинги и векторное хранилище

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

Что такое эмбеддинги?

Предложение подаётся на вход модели эмбеддингов.

Retrieval Augmented Generation (RAG) с LangChain

Что такое эмбеддинги?

Модель эмбеддингов представляет текст в виде вектора числовых значений.

Retrieval Augmented Generation (RAG) с LangChain

Что такое эмбеддинги?

what_are_embeddings3.jpg

Retrieval Augmented Generation (RAG) с LangChain

Что такое эмбеддинги?

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...