0Pricing
Learn AI with Python · Урок

Загрузка, разбиение и эмбеддинг документов

PyPDFLoader, RecursiveCharacterTextSplitter, OpenAIEmbeddings, стратегии построения эмбеддингов

«Загрузка, разбиение и эмбеддинг документов» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.

Конвейер загрузки данных для RAG

Прежде чем LLM сможет отвечать на основе ваших документов, их необходимо загрузить, разделить и преобразовать в векторы. В этом уроке рассматривается такой конвейер загрузки данных — основа любой системы генерации с дополнением контекста.

pip install langchain-community pypdf langchain-openai

Загрузка PDF

PyPDFLoader считывает PDF и возвращает список объектов Документ, по одному на страницу. Каждый документ содержит page_content (текст) и metadata (источник и номер страницы).

from langchain_community.document_loaders import PyPDFLoader

loader = PyPDFLoader("handbook.pdf")
docs = loader.load()
print(len(docs), "pages")

Зачем разделять документы?

Целые страницы часто слишком велики, чтобы преобразовать их в векторы или поместить в промпт. Разделение разбивает текст на небольшие фрагменты, которые хорошо преобразуются в векторы, и позволяет поиску возвращать только нужный отрывок, а не целую страницу.

RecursiveCharacterTextSplitter

Рекомендуемый инструмент разделения — RecursiveCharacterTextSplitter. Сначала он пытается разделять текст по абзацам, затем по предложениям и словам, сохраняя смысловую целостность фрагментов вместо разрыва слова посередине.

from langchain_text_splitters import RecursiveCharacterTextSplitter

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

Размер и перекрытие фрагментов

chunk_size задаёт максимальное количество символов во фрагменте, а chunk_overlap повторяет часть текста в соседних фрагментах, чтобы контекст не терялся на границах. Разбиение 1000/200 — распространённая отправная точка.

chunks = splitter.split_documents(docs)
print(len(chunks), "chunks")
print(chunks[0].page_content[:120])

Настройка размера фрагмента

Небольшие фрагменты обеспечивают точный поиск, но могут не содержать окружающий контекст. Большие фрагменты сохраняют контекст, однако снижают релевантность и требуют больше токенов. Перекрытие в размере 10–20% от размера фрагмента — хорошее значение по умолчанию для объединения соседних границ.

Что такое векторные представления?

Векторное представление преобразует текст в вектор чисел фиксированной длины, отражающий его смысл. Для похожих текстов получаются близкие векторы. Благодаря этому можно искать по смысловой близости, а не по ключевым словам.

OpenAIEmbeddings

Создавайте векторные представления с помощью OpenAIEmbeddings. Модель text-embedding-3-small недорога и эффективна. embed_query преобразует векторное представление одной строки, а embed_documents — списка строк.

from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vector = embeddings.embed_query("How do I reset my password?")
print(len(vector))  # 1536

Преобразование пакета векторов

Преобразуйте все фрагменты в векторы за один раз. Каждый фрагмент станет вектором, который позже можно сохранить в векторной базе данных для быстрого поиска по сходству.

texts = [c.page_content for c in chunks]
vectors = embeddings.embed_documents(texts)
print(len(vectors), "vectors of dim", len(vectors[0]))

Оценка стоимости векторных представлений

Стоимость векторных представлений рассчитывается по количеству токенов. Оцените общее число токенов во всех фрагментах, затем умножьте его на цену за 1 тыс. токенов. Подсчёт до преобразования помогает избежать неожиданных расходов при работе с большими наборами данных.

import tiktoken
enc = tiktoken.get_encoding("cl100k_base")
total = sum(len(enc.encode(c.page_content)) for c in chunks)
price_per_1k = 0.00002
print("tokens:", total, "cost $:", total / 1000 * price_per_1k)

Итоги конвейера

Поток загрузки данных выглядит так: загрузить документы, разделить их на перекрывающиеся фрагменты, преобразовать каждый фрагмент в вектор и на следующем уроке сохранить их. Качество разбиения и контроль затрат на этом этапе определяют качество и стоимость всей системы RAG.

Быстрая проверка

Проверьте свои знания о загрузке данных.

Повторение: загрузка, разделение, преобразование в векторы

Вы использовали PyPDFLoader для загрузки документов, RecursiveCharacterTextSplitter с параметрами chunk_size и chunk_overlap для их разделения на фрагменты, а также OpenAIEmbeddings для преобразования фрагментов в векторы. Кроме того, вы научились оценивать стоимость преобразования векторов по количеству токенов до обработки большого набора данных.

Часто задаваемые вопросы

Урок «Загрузка, разбиение и эмбеддинг документов» бесплатный?

Да — полный текст урока «Загрузка, разбиение и эмбеддинг документов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.

Чему я научусь в уроке «Загрузка, разбиение и эмбеддинг документов»?

PyPDFLoader, RecursiveCharacterTextSplitter, OpenAIEmbeddings, стратегии построения эмбеддингов Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Learn AI with Python?

Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Загрузка, разбиение и эмбеддинг документов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Learn AI with Python?

Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Архитектура LangChain и LCEL
  2. Загрузка, разбиение и эмбеддинг документов
  3. Векторные хранилища: Chroma и FAISS
  4. Создание системы вопросов и ответов RAG от начала до конца
← Назад к Learn AI with Python