"Semantic - По абзацам/заголовкам " - не правильно объяснили. Это структурный чанкинг. Семантический чанкинг - это когда текст разбивается на чанки по их семантическом отличию (т.е. выделяються атомарные мысли\идеи). Семантические чанки могут не совпадать с "абзацами\заголовками". Перед нарезкой можно дать текст LLM и попросить расставить разделительные знаки там, где по ее мнению заканчивается одна мысль и начинается другая. Затратно, но может дать прирост в качестве (но не обязательно).
Obsidian + RAGFlow (можно заменить на Dify или Kotaemon) + n8n в докер-контейнерах на домашнем сервере. Все бесплатно и намного больше инструментов и интеграций. У вас хорошая задумка, но платить за это деньги будет только тот, кому лень скачать и настроить три yaml-файла.
Было ограничение на использование только локальных парсеров? Если нет - попробуйте LlamaParse или MistralOCR. Late Chanking - сохранение (подмешивание) глобальный контекст документа в эмбеддингах каждого отдельного чанка. Технологию предложила и активно продвигает Jina AI. Voyage AI тоже умеет так делать, но называет это "Contextualized Embeddings". Cohere Embed так не умеет т.к. у нее маленькое контекстное окно. (Чтобы "пропитать" эмбединг каждого чанка содержанием всего документа нужно большое контекстное окно), ИМХО: сейчас самый качественный (и самый дорогой ))) - Agentic Chunking. Вы просите сильную модель прочитать текст и расставить метки там, где, по её мнению, заканчивается одна мысль и начинается другая. А потом можно еще поверх заполировать Лейт-чанкингом, т.е. домешать немного глобального контекста в эмбединг каждого чанка.
У вас не описан самый первый шаг - парсинг. Сперва нужно определить формат и сложность документа а потом выбрать правильный инструмент для парсинга. Для pdf-сканов - это один инструмент, для сложных pdf (колонки, таблицы, сноски и пр.) с текстовым слоем - другой, для простых pdf - третий, для doc - четвертый и т.д. Я бы приводил все к одному формату - например к маркдауну. Правильный парсинг - залог успеха чанкинга )) По чанкингу - вы пробовали использовать Late Chuncking? В юридических документах часто определения терминов часто даются в начале а конкретные условия следуют в конце. Late Chuncking позволяет поисковому движку находить нужный параграф, даже если в нем самом не упоминаются ключевые субъекты договора, но они были упомянуты раньше. SOTA-векторайзеры умеют это делать. Не знаю применимо ли это к данному соревнованию, но в энтерпрайз-РАГах можно улучшить результат за счет предобработки квери пользователя. Пользователи очень часто криво строят вопросы. Препроцессинг запроса позволяет сделать несколько перефразов оригинального запроса и подать их все вместе в квери-векторизатор.
Все это можно реализовать с помощью уже существующих плагинов. C помощью плагина Local REST APi вообще можно все что угодно интегрировать. Например n8n. Что может это приложение, чего не сможет сделать связка "Copilot + Local REST APi + n8n"?
По локальной векторизации и реранкингу полностью согласен. BAAI/bge-m3 и BAAI/bge-reranker-v2-m3 - лучший выбор. Но почему для парсинга документов выбрали Docling, а не DeepseekOCR или MinerU? И почему внешний реранкер Voyage а не Cohere?
А если строить гибридный RAG (vector + graph)? - parsing документов - chunking для эмбедингов (причем структурный по главам и параграфам а затем внутри структуры еще и семантический) - выделение триплетов для графа знаний - гибридный retrieval (и по векторной БД и по графовой БД) - fusion результатов поиска - reranking ИМХО, тут лучше использовать LlamaIndex. Например так: парсинг - переводим все в маркдаун - LLamaParse (не LlamaIndex, но из той же обоймы )) структурный чанкинг - LlamaIndex MarkdownNodeParser семантический чанкинг - LlamaIndex SemanticDoubleMerging Векторный поиск - Qdrant через LlamaIndex QdrantVectorStore Графовый поиск - Neo4j через LlamaIndex graph retriever Объединение результатов поиска - LlamaIndex QueryFusionRetriever Реранкинг - вызов HuggingFace TEI BAAI/bge-reranker-v2-m3 тоже через LlamaIndex И все это с помощью стека LlamaIndex. Сможет ли Chonkie объединить векторный и графовый подходы?
Немного оффтоп: Чтобы вы порекомендовали для создания домашнего RAG-а? AnythingLLM, Open WebUI, RAGFlow, R2R, Morphik, UltraRAG, Onyx, Verba, LightRAG, Kotaemon, Quivr, Dify, FastGPT, AutoRAG, Msty, etc...
"Semantic - По абзацам/заголовкам " - не правильно объяснили. Это структурный чанкинг.
Семантический чанкинг - это когда текст разбивается на чанки по их семантическом отличию (т.е. выделяються атомарные мысли\идеи). Семантические чанки могут не совпадать с "абзацами\заголовками". Перед нарезкой можно дать текст LLM и попросить расставить разделительные знаки там, где по ее мнению заканчивается одна мысль и начинается другая. Затратно, но может дать прирост в качестве (но не обязательно).
Почему выбрали Docling, а не DeepseekOCR, MinerU, Marker, PaddleOCR?
Obsidian + RAGFlow (можно заменить на Dify или Kotaemon) + n8n в докер-контейнерах на домашнем сервере. Все бесплатно и намного больше инструментов и интеграций. У вас хорошая задумка, но платить за это деньги будет только тот, кому лень скачать и настроить три yaml-файла.
Зачем изобретать велисипед если уже есть Cherry Studio?
Было ограничение на использование только локальных парсеров? Если нет - попробуйте LlamaParse или MistralOCR.
Late Chanking - сохранение (подмешивание) глобальный контекст документа в эмбеддингах каждого отдельного чанка. Технологию предложила и активно продвигает Jina AI. Voyage AI тоже умеет так делать, но называет это "Contextualized Embeddings". Cohere Embed так не умеет т.к. у нее маленькое контекстное окно. (Чтобы "пропитать" эмбединг каждого чанка содержанием всего документа нужно большое контекстное окно),
ИМХО: сейчас самый качественный (и самый дорогой ))) - Agentic Chunking. Вы просите сильную модель прочитать текст и расставить метки там, где, по её мнению, заканчивается одна мысль и начинается другая. А потом можно еще поверх заполировать Лейт-чанкингом, т.е. домешать немного глобального контекста в эмбединг каждого чанка.
У вас не описан самый первый шаг - парсинг.
Сперва нужно определить формат и сложность документа а потом выбрать правильный инструмент для парсинга. Для pdf-сканов - это один инструмент, для сложных pdf (колонки, таблицы, сноски и пр.) с текстовым слоем - другой, для простых pdf - третий, для doc - четвертый и т.д. Я бы приводил все к одному формату - например к маркдауну.
Правильный парсинг - залог успеха чанкинга ))
По чанкингу - вы пробовали использовать Late Chuncking?
В юридических документах часто определения терминов часто даются в начале а конкретные условия следуют в конце. Late Chuncking позволяет поисковому движку находить нужный параграф, даже если в нем самом не упоминаются ключевые субъекты договора, но они были упомянуты раньше. SOTA-векторайзеры умеют это делать.
Не знаю применимо ли это к данному соревнованию, но в энтерпрайз-РАГах можно улучшить результат за счет предобработки квери пользователя. Пользователи очень часто криво строят вопросы. Препроцессинг запроса позволяет сделать несколько перефразов оригинального запроса и подать их все вместе в квери-векторизатор.
LLamaPasre или MistralOCR или olmOCR парсять сложные pdf хуже Docling?
Почему такой выбор парсера?
Ведь есть же: MistralOCR, LlamaParse, olmOCR 2, Unstructured, NetMind ParsePro.
Все это можно реализовать с помощью уже существующих плагинов. C помощью плагина Local REST APi вообще можно все что угодно интегрировать. Например n8n. Что может это приложение, чего не сможет сделать связка "Copilot + Local REST APi + n8n"?
По локальной векторизации и реранкингу полностью согласен.
BAAI/bge-m3 и BAAI/bge-reranker-v2-m3 - лучший выбор.
Но почему для парсинга документов выбрали Docling, а не DeepseekOCR или MinerU?
И почему внешний реранкер Voyage а не Cohere?
bge-m3 умеет dense, sparse и multi-vector retrieval в одной модели
multilingual-e5 хороша только для простого dense-only RAG без sparse/hybrid
А если строить гибридный RAG (vector + graph)?
- parsing документов
- chunking для эмбедингов (причем структурный по главам и параграфам а затем внутри структуры еще и семантический)
- выделение триплетов для графа знаний
- гибридный retrieval (и по векторной БД и по графовой БД)
- fusion результатов поиска
- reranking
ИМХО, тут лучше использовать LlamaIndex.
Например так:
парсинг - переводим все в маркдаун - LLamaParse (не LlamaIndex, но из той же обоймы ))
структурный чанкинг - LlamaIndex MarkdownNodeParser
семантический чанкинг - LlamaIndex SemanticDoubleMerging
Векторный поиск - Qdrant через LlamaIndex QdrantVectorStore
Графовый поиск - Neo4j через LlamaIndex graph retriever
Объединение результатов поиска - LlamaIndex QueryFusionRetriever
Реранкинг - вызов HuggingFace TEI BAAI/bge-reranker-v2-m3 тоже через LlamaIndex
И все это с помощью стека LlamaIndex.
Сможет ли Chonkie объединить векторный и графовый подходы?
Графовые базу один раз упомянули в самом начале, но ничего о графовом RAG не рассказали (( А он очень полезен если важна обїяснимость поиска.
Не только LightRAG но и Letta, Mem0, A-MEM
Не могли бы вы дать ссылки на курсы или полезные материалы по RAG?
А оптимизацией смен персонала в торговых залах и на складах вы не занимались? Есть интересные материалы на эту тему?
Какое-то однобокое сравнение. А как бы ваш продукт выглядел бы на фоне RAGFlow, Dify, R2R, Morphik, SurfSense?
есть еще Automatish (https://github.com/automatisch/automatisch)
open-source, >13k звезд на GitHub
Немного оффтоп: Чтобы вы порекомендовали для создания домашнего RAG-а?
AnythingLLM, Open WebUI, RAGFlow, R2R, Morphik, UltraRAG, Onyx, Verba, LightRAG, Kotaemon, Quivr, Dify, FastGPT, AutoRAG, Msty, etc...
Советую посмотреть следующие ресурсы:
1) https://github.com/DEEP-PolyU/Awesome-GraphRAG - содержит материалы посвященные GraphRAG
2) https://github.com/infiniflow/ragflow - мой любимец! трудится на домашнем сервере )))
3) https://github.com/HKUDS/LightRAG
4) https://github.com/circlemind-ai/fast-graphrag
5) https://github.com/OpenSPG/KAG
6) https://github.com/pingcap/autoflow
7) https://github.com/JayLZhou/GraphRAG
8) https://github.com/severian42/GraphRAG-Local-UI - UI к макрософтовскому GraphRAG с поддержкой локальных LLM
9) https://github.com/TheAiSingularity/graphrag-local-ollama - макрософтовский GraphRAG с поддержкой локальных LLM (без UI)
10) https://github.com/getzep/graphiti
11) https://github.com/apecloud/ApeRAG
12) https://github.com/OSU-NLP-Group/HippoRAG