Mindmap
This commit is contained in:
@@ -260,3 +260,9 @@ python3 rag.py --help
|
||||
Этот проект -- пазл, который позволяет пошагово, по косточкам понять и настроить работу RAG.
|
||||
|
||||
Частично (в качестве агентов) в проекте участвовали модели семейств 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