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 и им подобные. Проблема с ними заключается в том, что они могут состоять сразу ир данных разных форматов:
- текст
- таблицы
- картинки (в т.ч инфографика, чертежи, графики)
- и т.д.
Прежде чем мы начнем разбивать документы на чанки, мы должны научиться извлекать текст из этих документов. Продакшен-опыт показывает, что к экстракту текста невозможно глобально подготовиться: в каждом кейсе существуют свои подводные камни. Однако мы оставили тут для вас несколько материалов - но изучать их необязательно.
- Upstage AI Document Parser: Revolutionise Complex PDF Data Extraction!
- ✦ Marker: This Open-Source Tool will make your PDFs LLM Ready
- ✦ 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, базы данных) и иметь разную структуру. С какими сложностями вы можете столкнуться при создании универсального пайплайна предобработки данных и как их можно преодолеть?
- Как можно оценить качество разбиения текста на чанки до этапа построения индекса и генерации ответов? Существуют ли метрики или подходы для такой оценки?