Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Расследование (LLM-research) #120

Open
molivka opened this issue Nov 25, 2024 · 15 comments
Open

Расследование (LLM-research) #120

molivka opened this issue Nov 25, 2024 · 15 comments
Assignees
Labels

Comments

@molivka
Copy link
Contributor

molivka commented Nov 25, 2024

Проблемы

1. Плохо считается близость

Если посмотреть на то, какие вопросы подливаются в контекст mistral, то мне кажется, что близости (косинусные расстояния) считаются не точно, а раз так, то какой алгоритм по выбору похожих элементов из БЗ не выбирай, лучше не будет.

Пример:

cos(b[i], target) = 0.2
cos(b[j], target) = 0.4
cos(b[k], target) = 0.5

Оптимально брать b[k] с косинусной близостью 0.5, но кто сказал, что этот элемент, реально похож на target? Вдруг target = «Дик автомат», b[k] = «ДКА (детерминированный конечный автомат)», b[i] = «является ли язык Дика регулярным?», b[j] = «виды автоматов»?

Вывод: коммититься надо в подсчёт близких

2. Нет метрик качества

Относительно чего мы смотрим, что то или иное улучшение работает? Субъективное мнение, что «моделька выдаёт что-то похожее на правду»? А кто сказал, что это не случайность?

Метрика оценки качества нужна, причём их должно быть две:

  1. Метрика качества для поиска близких (здесь много чего можно попробовать улучшить, тут я потыкаюсь, когда будет хоть капля времени)
  2. Метрика по ответам mistral (можем улучшить только контекст / промт)

Вывод: надо ввести метрики (сейчас формулирую)

3. Версия модели не фиксирована

Каждый раз используется latest модель, зачем? Я считаю, что лучше зафиксировать одну модель, так будет проще отслеживать прогресс и получим хоть какой-то детерминизм (например: latest_prev имеет одну архитектуру, которая обращает внимание на первую часть предложения, а latest — другую, которая обращает внимание на вторую часть предложения, пример нереалистичный, но показательный)

Вывод: фиксируем версию mistral

4. Не оцениваем влияние новых вопросов

Сейчас мы просто вливаем вопросы, не трекая явно как какой вопрос влияет на работу системы. Кажется, что нужно это отслеживать, причём с двух строн:

  1. Не портится ли метрика поиска близких
  2. Не портится ли метрика ответов mistral

Это может помочь в определение того, что делает вопрос «плохим»

Вывод: нужны автотесты
Лёша писал про них и делает их, метрику можно взять как количество вхождений важных слов и терминов в правильном и проверяемом предложении (допишу нормально)
Идея как получить больше юзер подобных вопросов тут (просто я при составлении датасета сама переформулировала без нейронки)

5. Не работаем с промтами к mistral

Вообще не работаем с промтами, а это ещё одна возможность улучшить ответы, задали один (вроде как) и всё.
Было написано по крайней мере две классные идеи, но почему-то забыты: про неуверенность и уточняющий вопрос

Вывод: после создания бейзлайна, надо двигаться в нескольких направлениях, включая промты

6. Нет проверки гипотез

Из-за того, что нет бейзлайна и метрик качества, которые давали бы понимание, какие действия ведут к успеху, а какие нет, нельзя проводить эксперименты / проверять гипотезы

Вывод: строим базу:

  1. Метод подбора близких (у меня есть идея на этот счёт: дообучить модель на текстах про тфя, чтобы улучшить поиск семантически близких)
  2. Метрика качества для близости
  3. Метрика качества для ответов mistral
  4. Одна mistral фиксированной версии
  5. Автотесты
@molivka molivka self-assigned this Nov 25, 2024
@molivka
Copy link
Contributor Author

molivka commented Nov 25, 2024

Хочу зафиксировать важный стейт, поскольку (как однажды в 2 часа ночи до меня дошло) мы говорим про метрики в разных смыслах, для меня метрика = то, чем мы измеряем качество / какие-то другие показатели (так, например, в аналитике используются MAU, CR, LTV).

Токен — минимальная единица, которая получается после преобразования текста алгоритмами мо, токеном может быть: слово, часть слова, буква…
Эмбеддинг — вектор, который получается после преобразования объекта, в нашем случае текста
Метрика — это оценка качества модели, как хорошо она выполняет свою «работу», пример метрики: accuracy
близость векторов <=> близости предложений
Fine-tuning - процесс, когда нейросетка ДООБУЧАЕТСЯ на новых данных, я буду просто говорить дообучение
Промт - некие инструкции, которые дают модели понять, что она должна делать, как должна себя вести, в каком стиле отвечать и прочее (для меня это означает «формирование личности у чата»)
Контекст - это текст, который модель использует для понимания ситуации. Неформально: промтом задаём «личность соьеседника», контекстом задаём тематику и цели общения.
Бенчмарк - это некоторые тесты для оценки качества модели, состоящие из определённого набора задач. И, да, генеративные модели довольно сложно оценивать, поскольку непонятно, что считать «хорошим» или «плохим» ответом.

@stewkk stewkk added this to rofl-lab1 Nov 25, 2024
@stewkk stewkk moved this to In progress in rofl-lab1 Nov 25, 2024
@molivka molivka added the story label Nov 25, 2024
@molivka molivka pinned this issue Nov 25, 2024
@TonitaN
Copy link

TonitaN commented Nov 25, 2024

@molivka , в целом, кажется, охватили большую часть вопросов. Ещё где-то (возможно, не здесь) важно разобраться с размером контекстного окна.

@molivka
Copy link
Contributor Author

molivka commented Dec 6, 2024

есть кейс, когда пишешь бред + «язык» и получаются интересные варианты: https://gist.github.com/stewkk/ea58242ecd3ad1455024f64d9bc40124

https://gist.github.com/stewkk/3c411926c4451aba856fa3a40d38366c

как фикс: собрать «словарь» из возможных названий для языков, и в случае отсутствия названия языка кидать ответ об ошибке (или перед ответом модели указать, что может быть бред)

@BaldiSlayer
Copy link
Owner

BaldiSlayer commented Dec 6, 2024

Кмк доп промпт тоже поможет, если несколько раз указать, что не надо нести бред))) (но вряд ли прям полностью)

btw, мы с Сашей оказывается основали мисис по мнению mistal-7b
https://gist.github.com/stewkk/9365abe26bad7112bc3d62f48e242f15

Repository owner deleted a comment from BaldiSlayer Dec 7, 2024
@molivka
Copy link
Contributor Author

molivka commented Dec 7, 2024

го запретим mistral юзать латех?
немного больно на это смотреть

https://gist.github.com/stewkk/4b2b107ed87bbbb2affabed5241bb4f6

попросила без символов латеха и ответ точно из бз😳

https://gist.github.com/stewkk/38a6d0105d372ed944ef60ee50506297

@TonitaN
Copy link

TonitaN commented Dec 7, 2024

С промтом стало намного лучше, если поправить близости, думаю, станет уже в чём-то полезно (реально полезно, если ещё заткнуть дыры в БЗ).

@TonitaN
Copy link

TonitaN commented Dec 7, 2024

Тест выборки близостей - ближайший ответ вообще не попал в контекст
https://gist.github.com/stewkk/19221abb44f4664581c685579246fea9
(язык L_d много где возникает не в тему, если так и продолжится после фиксов, нужно будет уточнять элемент БЗ и изгонять сокращения)

@BaldiSlayer
Copy link
Owner

Тест выборки близостей - ближайший ответ вообще не попал в контекст https://gist.github.com/stewkk/19221abb44f4664581c685579246fea9 (язык L_d много где возникает не в тему, если так и продолжится после фиксов, нужно будет уточнять элемент БЗ и изгонять сокращения)

думаю, что пока что так происходит потому что это очень короткий вопрос, тут есть слово "язык", а "что", "такое" и "L_d" значения вообще не особо играют в семантике, поэтому он почти везде и выдается как близкий

@molivka
Copy link
Contributor Author

molivka commented Dec 7, 2024

думаю, что пока что так происходит потому что это очень короткий вопрос, тут есть слово "язык", а "что", "такое" и "L_d" значения вообще не особо играют в семантике, поэтому он почти везде и выдается как близкий

дополню: сейчас думаем как отойти от таких ситуаций, когда много мусорных фраз по типу «расскажи, мне, пожалуйста, ...», «объясни мне...»
я пока дошла только до сбора таких фраз и удаления их при препроцессинге

@TonitaN
Copy link

TonitaN commented Dec 7, 2024

А как думаете сделать? Через "чёрный список": похожесть на бесполезные фразы, которые заранее есть в словаре? Наоборот, через "белый список" фраз, похожесть на которых указывает на значимость и необходимость оставить фразу? Или через умную модельку(с)?

@molivka
Copy link
Contributor Author

molivka commented Dec 7, 2024

А как думаете сделать? Через "чёрный список": похожесть на бесполезные фразы, которые заранее есть в словаре? Наоборот, через "белый список" фраз, похожесть на которых указывает на значимость и необходимость оставить фразу? Или через умную модельку(с)?

надо тестить какой вариант будет лучше (мне пока кажется, что проще собрать «мусорные» фразы, потому что фраз по теме может быть много)

только не через модельку...

@BaldiSlayer
Copy link
Owner

BaldiSlayer commented Dec 7, 2024

С промтом стало намного лучше, если поправить близости, думаю, станет уже в чём-то полезно (реально полезно, если ещё заткнуть дыры в БЗ).

вообще говоря - промпт не самый лучший, я не занимался исследованием этой темы. Так что его тоже можно будет потюнить, мб даст чуть прирост)

а так - думаю надо сейчас фокусироваться именно на улучшении поиска близких

@BaldiSlayer BaldiSlayer unpinned this issue Dec 17, 2024
@molivka
Copy link
Contributor Author

molivka commented Dec 22, 2024

я почитала про LLM, которые хороши с русским, можно пока попробовать заменить текущую модель на BGEM3FlagModel
как по мне, она меньше даёт высокий скор там, где не надо.
dynamic_k лучше выпилить, оно не помогает (имхо), оставить, например, k = 3-4, чтобы модель не путалась, причём можно не ставить отсечение, просто посортить по метрике близости по убыванию и взять топ 3-4

UPD: и после этого убрать перевод на англ язык
Screenshot 2024-12-22 at 13 27 58
Screenshot 2024-12-22 at 13 28 05

@molivka
Copy link
Contributor Author

molivka commented Dec 22, 2024

также, word2vec в полном смысле этого слова не подходит под наши задачи, тк с его помощью (что логично) сравниваются СЛОВА на «похожесть»
но у меня шизовая идея, что его можно обучить на текстах, связанных с ТФЯ (лекции, учебники) и использовать как дополнительную проверку при поиске близких, например: поэлементно сравнивать слова из вопроса юзера и вопроса БЗ, суммировать косинусную близость, считать, например, среднее S (первое что пришло в голову) по этим близостям и допом ранжировать по этим S, и далее уже брать топ k в контекст

@molivka
Copy link
Contributor Author

molivka commented Dec 22, 2024

также как альтернативный вариант, я пытаюсь (пока не выходит) обучить doc2vec, то же самое, что и word2vec, но можно сравнивать предложения-документы
пока идея та же - обучать на тематических материалах, но всё упирается в количество и предобработку этих материалов

@BaldiSlayer BaldiSlayer moved this from In progress to Ready in rofl-lab1 Jan 23, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
Status: Ready
Development

No branches or pull requests

3 participants