Mindmap
This commit is contained in:
@@ -260,3 +260,9 @@ python3 rag.py --help
|
|||||||
Этот проект -- пазл, который позволяет пошагово, по косточкам понять и настроить работу RAG.
|
Этот проект -- пазл, который позволяет пошагово, по косточкам понять и настроить работу RAG.
|
||||||
|
|
||||||
Частично (в качестве агентов) в проекте участвовали модели семейств qwen, clause и chatgpt.
|
Частично (в качестве агентов) в проекте участвовали модели семейств qwen, clause и chatgpt.
|
||||||
|
|
||||||
|
## Дополнительные материалы
|
||||||
|
|
||||||
|
* https://github.com/ollama/ollama/blob/main/docs/api.md
|
||||||
|
* https://habr.com/ru/articles/881268/
|
||||||
|
* https://habr.com/ru/companies/oleg-bunin/articles/835910/
|
||||||
|
|||||||
132
rag/mindmap.puml
Normal file
132
rag/mindmap.puml
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
@startmindmap RAG
|
||||||
|
title Mindmap по построению RAG
|
||||||
|
' header
|
||||||
|
' https://git.axenov.dev/anthony/ollama
|
||||||
|
' endheader
|
||||||
|
|
||||||
|
* RAG
|
||||||
|
|
||||||
|
** Подготовка сырых данных
|
||||||
|
*** Количество
|
||||||
|
****_ Больше => сложнее
|
||||||
|
*** Формат
|
||||||
|
**** HTML
|
||||||
|
*****_ Очистка
|
||||||
|
**** Markdown
|
||||||
|
**** JSON
|
||||||
|
**** PDF
|
||||||
|
***** OCR
|
||||||
|
****** Проблема плохого текста\n(сканы, картинки, фото)
|
||||||
|
****** Проблема разметки текста\n(колонки, обтекание картинок)
|
||||||
|
**** Проблема наличия таблиц
|
||||||
|
*****_ Оставить
|
||||||
|
*****_ Удалить
|
||||||
|
*****_ Конвертировать
|
||||||
|
******_ Markdown
|
||||||
|
*******_ Таблица
|
||||||
|
*******_ Список
|
||||||
|
******_ CSV
|
||||||
|
*** Качество
|
||||||
|
**** Очистка
|
||||||
|
*****_ Картинки
|
||||||
|
*****_ Бессмысленный текст
|
||||||
|
*****_ Разметка HTML, XML, ...
|
||||||
|
**** Метаданные
|
||||||
|
*****_ Название
|
||||||
|
*****_ Ссылка
|
||||||
|
*****_ Дата
|
||||||
|
*****_ Автор
|
||||||
|
*****_ ...
|
||||||
|
**** Семантика и смысл текстов
|
||||||
|
***** Разделение на осмысленные наборы
|
||||||
|
|
||||||
|
** Встраивание данных
|
||||||
|
*** Векторизация
|
||||||
|
**** Подбор модели эмбеддинга *
|
||||||
|
***** Проблема русского языка
|
||||||
|
**** Подбор способа разделения
|
||||||
|
***** Fixed-length chunking\n(строго по символам)
|
||||||
|
******_ самый простой и быстрый
|
||||||
|
******_ хорош для длинных текстов
|
||||||
|
******_ рвёт тексты с потерей связи
|
||||||
|
***** Semantic chunking\n(по смысловым блокам)
|
||||||
|
******_ посложнее
|
||||||
|
******_ сохраняет логику, даёт больше смысла
|
||||||
|
******_ лучше поиск
|
||||||
|
******_ чанки могут быть разных размеров
|
||||||
|
***** Structural chunking\n(по структуре текстов)
|
||||||
|
******_ самый сложный и медленный
|
||||||
|
******_ сохраняет контекст
|
||||||
|
******_ хорош для сложных и технических текстов
|
||||||
|
******_ требует структурированные входные данные
|
||||||
|
**** Подбор размера чанка
|
||||||
|
*****_ уменьшение
|
||||||
|
******_ меньше смысла
|
||||||
|
******_ больше нерелевантных результатов и галлюцинаций
|
||||||
|
******_ быстрее поиск
|
||||||
|
******_ хуже ответ
|
||||||
|
*****_ увеличение
|
||||||
|
******_ больше смысла
|
||||||
|
******_ больше размер контекста
|
||||||
|
******_ медленнее поиск
|
||||||
|
******_ хуже ответ
|
||||||
|
**** Подбор перекрытия чанков
|
||||||
|
*****_ уменьшение
|
||||||
|
******_ хуже смысловая связь документов
|
||||||
|
******_ более уникальные чанки
|
||||||
|
*****_ увеличение
|
||||||
|
******_ лучше смысловая связь документов
|
||||||
|
******_ сильнее дублирование частей чанков
|
||||||
|
*** Индексация
|
||||||
|
**** Метод хранения чанков
|
||||||
|
*****_ chromadb (примитивно на базе sqlite, но медленно)
|
||||||
|
*****_ qdrant (быстро, но немного усложняет деплой)
|
||||||
|
*****_ postgres + pgvector (сложнее)
|
||||||
|
*****_ ...
|
||||||
|
|
||||||
|
** Классификация\n(Classification)
|
||||||
|
*** Подбор модели классификации
|
||||||
|
**** Проблема русского языка
|
||||||
|
|
||||||
|
** Поиск и встраивание\n(Embedding)
|
||||||
|
***: Подбор модели эмбеддинга *
|
||||||
|
<i>та же, что на этапе векторизации</i>;
|
||||||
|
***: Подбор top_k
|
||||||
|
<i>количество чанков для поиска</i>;
|
||||||
|
|
||||||
|
** Ранжирование\n(Re-ranking)
|
||||||
|
*** Подбор модели реранкинга
|
||||||
|
' **** Проблема русского языка
|
||||||
|
***: Подбор top_n
|
||||||
|
<i>количество лучших чанков после реранка</i>;
|
||||||
|
|
||||||
|
** Генерация ответа
|
||||||
|
*** Подбор модели генерации
|
||||||
|
**** Проблема размера модели\n(млрд параметров)
|
||||||
|
*****_ меньше
|
||||||
|
******_ требует меньше ресурсов (RAM, CPU, GPU)
|
||||||
|
******_ выше скорость ответа (TPS)
|
||||||
|
******_ ниже качество (мешанина токенов, путает язык, игнорирует инструкции)
|
||||||
|
*****_ больше
|
||||||
|
******_ требует больше ресурсов (RAM, CPU, GPU)
|
||||||
|
******_ ниже скорость ответа (TPS)
|
||||||
|
******_ выше качество, но может быть избыточно, в зависимости от домена
|
||||||
|
*** Подбор системного промпта
|
||||||
|
**** Проблема русского языка
|
||||||
|
*****_ модель может его не понимать/генерировать
|
||||||
|
*****_ язык сложнее, занимает больше токенов в контексте
|
||||||
|
**** Проблема размера контекста
|
||||||
|
*****: Проблема Lost-in-the-middle
|
||||||
|
----
|
||||||
|
Исследование:
|
||||||
|
* коротко https://huggingface.co/papers/2307.03172
|
||||||
|
* целиком https://arxiv.org/abs/2307.03172
|
||||||
|
;
|
||||||
|
******_ ...
|
||||||
|
*****_ Сдвиг контекстного окна
|
||||||
|
*****_ Сжатие контекста
|
||||||
|
*** Подбор настроек генерации
|
||||||
|
****_ temperature
|
||||||
|
****_ top_p?
|
||||||
|
****_ ...
|
||||||
|
@endmindmap
|
||||||
Reference in New Issue
Block a user