Перейти к основному содержимому

Data Preprocessing

Предварительная обработка данных (Data Preprocessing) - это критически важный этап в построении эффективных RAG-систем. От качества подготовки данных напрямую зависит точность и релевантность ответов, генерируемых моделью. В этом разделе мы рассмотрим основные методы и подходы к подготовке текстовых данных для RAG.

Preprocessing данных вы сможете применять не только в RAG - он полезен в GenAI Workflows и агентах!

подсказка

Data - is the king. Предварительная подготовка данных - это 50% успеха для RAG.

Если вы недооцениваете этот этап, то можете потерять 50% релевантности ответов. Trash in, trash out.

Questions

  • Мы хотим нарезать документ на кусочки для векторизации. Какие есть способы это сделать?
  • Почему нарезать по 1000 символов - это плохая идея? А по 100 токенов?
  • Как нарезать специфические документы, например, с html, json, или кодом?
  • Когда нам может потребоваться экстракция текста из вроде бы текстовых документов?

Steps

1. Внимательно читаем про способы разбиения текста на чанки в langchain

или смотрим лекцию

2. Text extraction

Существует огромное множество неструктурированных типов данных: pdf, docx, rtf и им подобные. Проблема с ними заключается в том, что они могут состоять сразу ир данных разных форматов:

  • текст
  • таблицы
  • картинки (в т.ч инфографика, чертежи, графики)
  • и т.д.

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

  1. Upstage AI Document Parser: Revolutionise Complex PDF Data Extraction!
  2. ✦ Marker: This Open-Source Tool will make your PDFs LLM Ready
  3. ✦ Extracting Text from PDFs for Large Language Models and RAG (PyMuPDF4llm 💚)

Python libraries for text extraction

  • pandas – удобные структуры DataFrame/Series; незаменима для загрузки, очистки пропусков, объединения разных источников и подготовки табличных данных для последующей генерации текстовых примеров.
  • scikit-learn – инструменты для масштабирования (StandardScaler, MinMaxScaler), кодирования категорий (OneHotEncoder, LabelEncoder) и разбиения выборки (train_test_split); примеры: подготовка фичей перед обучением классификатора с учётом генеративного контекста.
  • NLTK – классические NLP-модули: токенизация, стоп‑слова, стемминг/лемматизация; полезно для первоначальной обработки текстов перед подачей на вход LLM.
  • spaCy – быстрый парсинг, NER, лемматизация и POS‑тэггинг; применяют для извлечения сущностей и структурирования знаний в RAG-пайплайнах.
  • regex – расширенная работа с регулярными выражениями (поддержка Unicode, POS‑окружений); необходима для сложного текстового клининга и разбора шаблонов.
  • ftfy – «fixes text for you»: исправление битых Unicode, сломанных HTML‑энкодингов и артефактов OCR; кейс: очистка данных из разных веб‑скрейпингов.
  • chardet – автоматическое определение кодировки текстовых файлов; помогает корректно читать документы в разных кодировках перед препроцессингом.
  • langdetect – библиотека для определения языка текста; используется для мультилингвальных RAG‑решений, фильтрации и маршрутизации документов по языковым моделям.
  • clean-text – готовые функции очищения текста: удаление ссылок, эмодзи, спецсимволов и лишних пробелов; ускоряет подготовку корпусa перед векторизацией.
  • unstructured – распознавание и парсинг PDF, DOCX, HTML, PPTX; извлекает «чистый» текст и метаданные для создания источников знаний.
  • Apache Tika – сервис для извлечения текста/метаданных из множества форматов; полезен в конвейерах ETL больших документальных хранилищ.
  • PDFPlumber – детальная работа с PDF: таблицы, колонки, координатное извлечение текста; подходит для структурирования корпоративных отчётов.
  • PyPDF2 – базовые функции чтения/записи PDF, объединения и разбиения страниц; применяется для подготовки батчей документов к векторному хранению.
  • BeautifulSoup4 – парсинг HTML/XML; используется для сбора и очистки веб‑данных перед созданием вики‑подобных индексов.

Extra Steps

E1. How to Set the Chunk Size in Document Splitter

E2. Дополнительное чтение: Mastering Text Splitting for Effective RAG with Langchain

Now we know...

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

Exercises

Вопросы на размышление, чтобы в голове студента задвигались нейроны:

  • Как изменится качество ответов RAG-системы, если использовать очень маленькие или очень большие размеры чанков? Какие компромиссы существуют при выборе размера чанка?
  • Представьте, что вам нужно обработать данные, содержащие таблицы и код. Какие стратегии разбиения текста будут наиболее эффективны и почему стандартные сплиттеры могут дать сбой?
  • В реальном проекте данные могут поступать из разных источников (PDF, HTML, JSON, базы данных) и иметь разную структуру. С какими сложностями вы можете столкнуться при создании универсального пайплайна предобработки данных и как их можно преодолеть?
  • Как можно оценить качество разбиения текста на чанки до этапа построения индекса и генерации ответов? Существуют ли метрики или подходы для такой оценки?