Как улучшить векторный поиск в RAG без сложной нарезки чанков?
В объёмных (юридических / медицинских) документах смысл фрагмента часто зависит от контекста. В классическом RAG документ режут на чанки и векторизуют каждый по отдельности. В результате — сбой в поиске, потому что часть смысла чанка лежит за его границами.
⚫️Late chunking — техника от Jina AI, которую обычно пропускают в RAG-туториалах. Основная идея: вместо предварительной обрезки текста прогоняем через модель весь документ и получаем вектор для токенов, каждый из которых уже «впитал» контекст текста.
Эмбеддинг чанка — усреднение (mean pooling) векторов его токенов. Текст подаётся целиком или большими частями с перекрытием. Это «дороже» с точки зрения вычислений, зато у вектора каждого чанка больше контекста.
💡Пример из статьи: в начале документа стоит «Берлин», далее — «город», «он», «его население». При наивной нарезке чанк «его население…» не содержит слова «Берлин», и модель не связывает местоимение с сущностью. При late chunking тот же чанк «помнит» про Берлин. На длиннодокументных retrieval-бенчмарках late chunking почти всегда обходит наивную нарезку без дообучения.
⚫️Что использовать:
- jina-embeddings-v3/v4 (v5 уже не подойдёт — другой тип пулинга)
- модели Perplexity (pplx-embed-context-v1), более современные, обученные под late chunking специально
Автор: Александр Абугалиев
В объёмных (юридических / медицинских) документах смысл фрагмента часто зависит от контекста. В классическом RAG документ режут на чанки и векторизуют каждый по отдельности. В результате — сбой в поиске, потому что часть смысла чанка лежит за его границами.
⚫️Late chunking — техника от Jina AI, которую обычно пропускают в RAG-туториалах. Основная идея: вместо предварительной обрезки текста прогоняем через модель весь документ и получаем вектор для токенов, каждый из которых уже «впитал» контекст текста.
Эмбеддинг чанка — усреднение (mean pooling) векторов его токенов. Текст подаётся целиком или большими частями с перекрытием. Это «дороже» с точки зрения вычислений, зато у вектора каждого чанка больше контекста.
💡Пример из статьи: в начале документа стоит «Берлин», далее — «город», «он», «его население». При наивной нарезке чанк «его население…» не содержит слова «Берлин», и модель не связывает местоимение с сущностью. При late chunking тот же чанк «помнит» про Берлин. На длиннодокументных retrieval-бенчмарках late chunking почти всегда обходит наивную нарезку без дообучения.
⚫️Что использовать:
- jina-embeddings-v3/v4 (v5 уже не подойдёт — другой тип пулинга)
- модели Perplexity (pplx-embed-context-v1), более современные, обученные под late chunking специально
Автор: Александр Абугалиев
Глубже про векторный поиск и RAG рассказываем на нашем курсе по LLM для ML/DL-инженеров. Также там разбираем fine-tuning, alignment, агентов, ускорение и деплой LLM. Новый поток стартует 30 июня, а до 21 июня вы можете присоединиться со скидкой 20%!