Галлюцинация, это ситуация, когда языковая модель выдаёт информацию, которая звучит уверенно и правдоподобно, но при этом фактически неверна или вообще выдумана: несуществующая статья, неправильная дата, придуманная цитата, ошибочная цифра. Проблема не в том, что модель "врёт" в человеческом смысле, а в том, что у неё в принципе нет внутреннего механизма, который отличал бы факт от правдоподобной выдумки.
Чтобы понять природу этой проблемы, нужно вернуться к тому, как модель вообще генерирует текст. Мы уже разбирали, что она предсказывает следующий токен на основе статистической вероятности, опираясь на закономерности, увиденные в данных при обучении. Модель не хранит внутри себя базу проверенных фактов, к которой можно свериться, она хранит распределённые статистические закономерности того, как обычно строятся предложения на похожие темы. Если в данных при обучении конкретный факт встречался редко, был противоречив, отсутствовал вовсе, или задача требует чего-то, чего в принципе не существует, модель всё равно продолжит генерировать текст, потому что её единственная задача на каждом шаге, выбрать статистически правдоподобный следующий токен, а не проверенный факт.
Отсюда возникает ключевая особенность: у модели нет встроенного ощущения "я не знаю". В отличие от человека, который может честно сказать, что не помнит точную дату или не уверен в цифре, модель по умолчанию генерирует ответ в любом случае, потому что сам процесс генерации не останавливается из-за нехватки достоверных данных. Если запрос сформулирован так, что подразумевает существование ответа, модель с высокой вероятностью его "найдёт", даже если реального основания для этого ответа в её знаниях нет. Классический пример, просьба назвать источник или цитату по теме, которую модель знает лишь поверхностно: она может сгенерировать правдоподобно звучащее название статьи или имя автора, которые на самом деле не существуют, просто потому что такая структура текста статистически ожидаема в подобном контексте.
Ещё один источник галлюцинаций, это сами данные, на которых обучалась модель. Если в интернете, откуда бралась значительная часть обучающих текстов, встречались ошибки, устаревшие сведения или противоречивые данные по одному и тому же вопросу, модель усваивает эти закономерности наравне с верными. Она не проводит проверку достоверности источников во время обучения, а находит общие статистические паттерны во всём массиве текста сразу, ошибочные данные включены в этот массив точно так же, как и достоверные.
Отдельная причина связана с тем, что многие модели настроены отвечать уверенным и связным тоном почти при любом запросе, потому что именно такой стиль ответа статистически преобладал в примерах, на которых их дообучали для общения с людьми. Уверенный тон ответа никак не связан с фактической точностью содержания, это просто стилистическая характеристика текста, а не показатель того, насколько модель "уверена" в правильности информации в человеческом понимании этого слова.
Важно понимать и практическое следствие. Галлюцинации чаще всего возникают именно там, где модели не хватает точных, часто повторяющихся данных: редкие факты, узкоспециализированные темы, точные цифры и даты, конкретные цитаты и ссылки на источники. Поэтому такие детали в ответах модели стоит отдельно проверять, особенно если результат используется для чего-то важного, а не воспринимать любой уверенно звучащий ответ как автоматически достоверный.
Please open Telegram to view this post
VIEW IN TELEGRAM
fadikMachineIntelligence
Anonymous Poll
0%
Полностью доверяю
75%
Проверяю важные факты
25%
Проверяю почти всё
0%
Не пользуюсь ИИ
Обычный чат-бот на основе языковой модели работает по простой схеме: вы отправляете запрос, модель генерирует один ответ текстом, и на этом её работа заканчивается, дальше нужно снова вмешаться человеку. ИИ-агент устроен иначе: он получает задачу, самостоятельно решает, какие шаги нужны для её выполнения, выполняет их один за другим, при необходимости обращается к внешним инструментам, и продолжает работать до тех пор, пока задача не будет решена или не понадобится вмешательство человека.
Ключевое отличие агента от обычного диалога, это наличие цикла из нескольких повторяющихся этапов, которые можно описать примерно так: модель оценивает текущую ситуацию и то, что уже сделано, решает, какое следующее действие приблизит её к цели, выполняет это действие, получает результат, и снова возвращается к оценке ситуации с учётом нового результата. Этот цикл повторяется автоматически, без того чтобы человек каждый раз формулировал следующий шаг вручную, как это происходит в обычном чате.
Чтобы агент мог реально что-то делать, а не только рассуждать текстом, ему нужен доступ к инструментам, это конкретные функции, которые модель может вызвать: поиск в интернете, выполнение кода, чтение и запись файлов, обращение к базе данных, отправка запроса во внешний сервис. Модель не выполняет эти действия сама по себе, она формирует запрос на вызов конкретного инструмента с нужными параметрами, инструмент выполняется отдельной программой, а результат его работы возвращается модели обратно в виде текста, который она использует для планирования следующего шага.
Ещё один важный элемент, память в рамках выполнения задачи. Поскольку задача может состоять из десятков шагов, агенту нужно удерживать в контексте, что уже было сделано, какие результаты получены, какие подзадачи ещё остались. Это прямо упирается в то, что мы уже разбирали про контекстное окно: чем длиннее и сложнее задача, тем больше информации о промежуточных шагах нужно удерживать одновременно, и при определённой длине задачи агент может начать терять из виду ранние шаги точно так же, как это происходит в обычном длинном диалоге.
Здесь же проявляется и связь с темой галлюцинаций, которую мы разбирали раньше. Если на каком-то промежуточном шаге агент ошибся, неверно интерпретировал результат инструмента или сделал неверный вывод, эта ошибка становится частью контекста для всех последующих шагов, и агент продолжает строить работу на основе неверной информации, не имея встроенного механизма, который надёжно распознал бы собственную ошибку в середине цепочки действий. Именно поэтому агентам обычно дают дополнительные проверочные шаги: например, просят перепроверить результат, свериться с исходными данными или показать промежуточный результат человеку перед тем, как продолжить.
Практические примеры того, чем реально занимаются агенты: написание и запуск кода с автоматическим исправлением ошибок по результатам выполнения, поиск и сбор информации из нескольких источников с последующим обобщением, работа с файлами и документами, выполнение многошаговых задач в связанных между собой сервисах, например бронирование, оформление заказов, работа с почтой и календарём. Общая черта всех этих сценариев в том, что задача заранее не разбита человеком на понятные пошаговые инструкции, а агент сам определяет порядок действий, опираясь на цель и доступные инструменты.
Главное ограничение агентов на сегодняшний день, это как раз накопление ошибок в длинных цепочках действий и отсутствие полноценного понимания, когда стоит остановиться и спросить человека, а когда можно двигаться дальше самостоятельно. Чем длиннее и сложнее автономная задача, тем выше становится риск, что где-то в середине цепочки агент свернёт не туда и продолжит выполнять уже не ту задачу, которая изначально была нужна.
Please open Telegram to view this post
VIEW IN TELEGRAM
fadikMachineIntelligence
Anonymous Poll
25%
Более умные модели
13%
Больше инструментов и доступов
13%
Долговременная память
50%
Умение понимать, когда нужно обратиться к человеку
fadikMachineIntelligence
Anonymous Quiz
33%
Обучение с учителем (Supervised Learning)
44%
Самообучение (Self-Supervised Learning)
0%
Обучение с подкреплением (Reinforcement Learning, RL)
22%
Обучение с подкреплением на основе обратной связи от человека (RLHF)
Обучение нейронной сети сводится к одной и той же математической операции, повторённой невероятное количество раз: умножению и сложению чисел, из которых состоят веса модели и входные данные. Чтобы объяснить, почему это так важно для выбора железа, разберём сначала пару базовых понятий.
Матрица, это просто таблица чисел, расположенных строками и столбцами, вроде обычной таблицы в Excel, только заполненная числами вместо текста. Внутри нейронной сети веса между слоями хранятся именно в виде таких таблиц чисел. Когда данные проходят через слой сети, происходит операция, которая называется умножением матриц: каждое число из входных данных умножается на соответствующие числа из таблицы весов, а результаты складываются вместе. Это происходит не один раз, а миллионы и миллиарды раз подряд, для каждого слоя сети и для каждого отдельного примера данных.
Процессор, CPU, устроен так, чтобы хорошо справляться с самыми разными задачами по очереди: сложной логикой с множеством условий, быстрым переключением между непохожими друг на друга процессами, операциями, где следующий шаг зависит от результата предыдущего. Для этого у процессора обычно всего несколько или несколько десятков вычислительных ядер, зато каждое ядро само по себе очень мощное и умеет быстро обрабатывать сложные, ветвящиеся последовательности команд одно за другим.
Видеокарта, GPU, устроена принципиально иначе. У неё тысячи, а у современных моделей даже десятки тысяч более простых вычислительных ядер. Каждое такое ядро по отдельности заметно слабее ядра процессора, зато все они способны выполнять одну и ту же простую операцию одновременно, каждое над своим отдельным куском данных. Изначально видеокарты создавались вовсе не для искусственного интеллекта, а для рендеринга изображений на экране: чтобы посчитать цвет и освещение сразу для миллионов пикселей, причём вычисление для одного пикселя почти никак не зависит от вычисления для соседнего, эту работу удобно раздать тысячам простых ядер, которые считают всё одновременно, а не одному мощному ядру, которое считало бы каждый пиксель по очереди.
Оказалось, что умножение матриц при обучении нейронной сети имеет точно такой же характер: огромное число отдельных умножений и сложений, каждое из которых почти не зависит от соседних и может выполняться параллельно. Поэтому видеокарты, изначально созданные для расчёта пикселей, отлично подошли и для обучения нейронных сетей, просто вместо цвета пикселя они теперь параллельно считают числа внутри весов и данных модели.
Разница в скорости на практике огромная. Процессор с несколькими десятками ядер может по-настоящему одновременно выполнять лишь несколько десятков таких операций, всё остальное ему приходится делать по очереди. Видеокарта с тысячами ядер выполняет тысячи подобных операций буквально за один и тот же момент времени. Когда нужно совершить триллионы однотипных умножений подряд, как это происходит при обучении крупной модели, такая разница означает не небольшое ускорение, а разницу в десятки и сотни раз по итоговому времени обучения.
Чтобы разработчики вообще могли заставить видеокарту считать что-то помимо графики для игр, компания Nvidia создала специальный программный инструмент под названием CUDA. Это набор инструментов и правил, который позволяет писать программы, использующие тысячи ядер видеокарты для любых вычислений общего назначения, а не только для отрисовки изображений на экране. Именно через CUDA программы для обучения нейронных сетей получают доступ ко всем ядрам видеокарты одновременно и раздают им отдельные кусочки одной и той же большой вычислительной задачи, вместо того чтобы считать всё последовательно на процессоре.
Please open Telegram to view this post
VIEW IN TELEGRAM
Удобно представить веса как коэффициенты важности. Если вес большой, соответствующий входной сигнал сильно влияет на решение нейрона. Если вес маленький, влияние почти отсутствует. Во время обучения модель постепенно изменяет миллиарды таких чисел, усиливая полезные связи и ослабляя бесполезные. Именно совокупность всех этих весов и хранит знания, которые модель приобрела в процессе обучения.
Мы это уже проходили, но можете считать это напоминанием.
Please open Telegram to view this post
VIEW IN TELEGRAM
fadikMachineIntelligence
Anonymous Poll
73%
Да, давно знал(а)
18%
Что-то слышал(а), но не понимал(а) почему
9%
Нет, это было для меня новым
Когда говорят о модели на 7B, 70B или 400B, буква B означает billion, миллиард, а цифра перед ней, это количество параметров модели. Параметры, это те самые веса нейронной сети, о которых уже шла речь в посте про устройство нейронных сетей: числа на каждой связи между нейронами, которые модель подстраивает под себя в процессе обучения. Модель на 70 миллиардов параметров имеет ровно столько отдельных весов, и каждый из них получил своё конкретное значение во время обучения на данных.
Разберём на простом примере, зачем вообще нужно так много этих чисел. Представим, что модели нужно понять смысл слова "коса" в предложении. В зависимости от контекста это может быть инструмент для покоса травы, причёска или узкая полоса суши в море. Чтобы правильно различать такие случаи, чтобы понимать десятки тысяч подобных тонкостей языка одновременно, плюс грамматику, факты о мире, логические связи между событиями, модели нужно очень много отдельных настроек, каждая из которых отвечает за свой маленький кусочек этого огромного пазла. Один параметр сам по себе почти ничего не значит, но миллиарды параметров вместе и формируют способность модели улавливать сложные закономерности.
На практике разница между моделями разного размера ощущается довольно конкретно. Модель на несколько миллиардов параметров обычно хорошо справляется с простыми и узкими задачами: коротким пересказом, ответом на прямой фактический вопрос, базовым переводом. Но у неё часто не хватает "запаса", чтобы уверенно держать в голове длинную цепочку рассуждений, тонкие нюансы формулировки или редкие специфические факты. Модель на несколько десятков или сотен миллиардов параметров справляется с этим заметно лучше, потому что у неё физически больше внутренних настроек, чтобы отдельно учесть больше вариантов и исключений.
Рост числа параметров имеет прямую цену, причём вполне измеримую. Каждый параметр нужно хранить в памяти видеокарты и использовать при каждом вычислении, а при обработке любого запроса задействуются все параметры сети сразу. Грубое практическое правило: модели в стандартной точности нужно примерно два гигабайта видеопамяти на каждый миллиард параметров. Значит, модели на 7 миллиардов параметров нужно порядка 14 гигабайт памяти, а модели на 70 миллиардов, уже около 140 гигабайт, это уровень мощного сервера, а не обычного домашнего компьютера. Отсюда и заметная разница в скорости ответа и в стоимости использования между небольшими и крупными моделями.
Есть и обратная сторона большого числа параметров, риск переобучения. Если у модели огромное количество настроек, а данных для обучения относительно мало, она может начать буквально запоминать конкретные примеры из обучающей выборки наизусть, вместо того чтобы находить общие закономерности. Такая модель отлично отвечает на вопросы, похожие на то, что уже видела при обучении, но плохо справляется с чем-то по-настоящему новым, ведь она выучила конкретные примеры, а не общий принцип. Поэтому крупные модели обучают не просто на большом числе параметров, а обязательно на соразмерно огромных объёмах данных: чем больше параметров, тем больше данных нужно, чтобы модели было из чего реально учиться, а не что запоминать.
Важно понимать, что число параметров, это не единственный показатель качества модели. Качество и разнообразие обучающих данных, архитектурные решения и этапы дополнительной настройки вроде RLHF, о котором шла речь в посте про типы обучения, тоже сильно влияют на итоговый результат. На практике нередко встречаются случаи, когда модель с меньшим числом параметров, но обученная на более качественных данных и лучше донастроенная, отвечает не хуже, а иногда и лучше, чем более крупная, но хуже обученная модель. Поэтому размер модели в параметрах стоит воспринимать как полезный ориентир масштаба, а не как прямой и единственный показатель того, насколько модель хороша.
Please open Telegram to view this post
VIEW IN TELEGRAM
fadikMachineIntelligence
Anonymous Poll
17%
50%
8%
25%
Дообучение, в английском варианте fine-tuning, это процесс, при котором уже готовую, полностью обученную модель дополнительно тренируют на новых, обычно более узких данных, чтобы она лучше справлялась с конкретной задачей. Это не обучение с нуля, а продолжение обучения поверх уже накопленных моделью знаний.
Чтобы понять, зачем это вообще нужно, стоит вспомнить, как модель обучается изначально. Большая языковая модель проходит долгий и очень дорогой этап обучения на огромном объёме текста из интернета, книг и других источников, формируя общее представление о языке, фактах, логике и стиле речи. Но такая базовая модель может плохо справляться с узкими, специфическими задачами: например, отвечать в строго заданном формате, разбираться в узкой профессиональной терминологии конкретной компании, или придерживаться определённого стиля общения. Обучать отдельную модель с нуля под каждую такую задачу было бы невероятно дорого и долго. Вместо этого берут уже готовую модель и донастраивают её.
Технически дообучение выглядит так: у модели уже есть все её параметры, веса, полученные после основного этапа обучения. Дальше этой модели показывают новый, обычно гораздо меньший набор данных, который относится именно к нужной задаче: примеры вопросов и правильных ответов в нужном формате, тексты в нужном стиле, диалоги с правильной подачей информации. Модель продолжает обучаться на этих новых примерах точно так же, как она обучалась раньше: делает прогноз, сравнивает с правильным ответом, немного подстраивает свои веса, чтобы в следующий раз ошибаться меньше. Разница в том, что теперь она не учится языку заново, а лишь слегка смещает уже имеющиеся знания в сторону нужной задачи.
Есть два основных подхода к тому, как менять веса при дообучении. Полное дообучение подразумевает изменение всех параметров модели целиком, это даёт максимальную гибкость, но требует почти столько же ресурсов и памяти, сколько потребовалось бы для обучения модели с нуля, ведь приходится хранить и обновлять каждый из миллиардов весов. Более экономный подход, параметр-эффективное дообучение, изменяет не все веса модели, а лишь небольшую дополнительную часть параметров, добавленную поверх замороженной, неизменной основной модели. Самый известный такой метод называется LoRA. Он даёт почти такой же результат, как полное дообучение, но требует в разы меньше памяти и вычислений, потому что основная часть модели вообще не трогается.
Важно понимать разницу между дообучением и другим способом настройки поведения модели, формулировкой самого запроса к ней. Можно просто попросить готовую модель отвечать в нужном стиле или формате прямо в тексте запроса, ничего при этом не меняя внутри самой модели, все её веса останутся такими же, какими были. Такой способ работает только в рамках одного разговора и каждый раз требует заново объяснять модели, что от неё нужно. Дообучение же напрямую меняет внутренние параметры модели, и результат сохраняется навсегда: модель буквально становится другой и ведёт себя по-новому уже без специальных инструкций в каждом запросе.
У дообучения есть и обратная сторона, риск того, что называется катастрофическим забыванием. Если дообучать модель слишком долго или слишком узко на новых данных, она может начать хуже справляться с задачами, в которых раньше была хороша, потому что её веса сместились слишком сильно в сторону новой узкой задачи и частично потеряли часть общих знаний, накопленных на этапе основного обучения. Хороший пример, модель, которую дообучили отвечать исключительно короткими и сухими техническими фразами, может со временем начать хуже писать связный и живой текст на общие темы, даже если её об этом никто не просил.
Поэтому дообучение обычно делают аккуратно, небольшими шагами, и на не слишком большом, но качественном наборе данных, чтобы получить нужную специализацию, не разрушив при этом общие способности модели. На практике процесс дообучения часто останавливают раньше, чем модель полностью выучит новые данные наизусть, чтобы избежать этого эффекта и сохранить баланс между новой специализацией и прежними знаниями.
Please open Telegram to view this post
VIEW IN TELEGRAM
fadikMachineIntelligence
Anonymous Poll
13%
50%
25%
13%
Python стал главным языком машинного обучения, и это интересный случай, потому что сам по себе Python не самый быстрый язык программирования, есть языки, которые выполняют код в разы и даже на порядки быстрее. Тем не менее почти весь мир машинного обучения работает именно на нём, и причина в том, как устроена работа с этим языком на практике.
Дело в том, что в задачах машинного обучения сам Python почти никогда не выполняет тяжёлые вычисления напрямую. Библиотеки, с которыми работают разработчики, написаны на языках вроде C и C++, которые компилируются заранее в быстрый машинный код, понятный процессору напрямую, без промежуточных шагов. Python в этой связке выступает верхним, удобным слоем: разработчик пишет простой и понятный код, а вся реальная тяжёлая математика выполняется внутри библиотеки на низком уровне. Когда вы просите библиотеку сложить два больших набора чисел, интерпретатор Python вызывает одну единственную функцию, а вся работа внутри неё выполняется уже быстрым скомпилированным кодом, а не медленной построчной обработкой на самом Python.
Это называется векторизацией: вместо того чтобы в цикле на чистом Python обрабатывать числа одно за другим, что было бы медленно, операция сразу выполняется над целым набором чисел одной командой на низком уровне. Библиотека NumPy стала фундаментом всей экосистемы именно потому, что предложила удобный и эффективный способ хранить большие наборы чисел и выполнять над ними такие быстрые операции, а уже поверх NumPy строились более специализированные библиотеки.
Pandas добавил удобную работу с табличными данными: загрузку, фильтрацию, сортировку, очистку данных от пропусков и ошибок перед обучением модели. Именно с подготовки и очистки данных через Pandas обычно начинается практически любая реальная задача машинного обучения, и на эту рутину часто уходит больше времени, чем на само обучение модели.
Scikit-learn собрал в единый и понятный интерфейс десятки классических алгоритмов машинного обучения: предсказание чисел, разделение объектов на категории, поиск похожих групп в данных. Не нужно писать сам алгоритм с нуля, достаточно подготовить данные и вызвать готовый метод библиотеки с нужными настройками.
Для более сложных задач с нейронными сетями используются PyTorch и TensorFlow. Они позволяют описывать структуру сети через понятные Python-конструкции, слои, функции активации, но всё фактическое обучение, вычисление математики и обновление внутренних весов сети, происходит на видеокартах, а Python-код лишь описывает архитектуру сети и управляет процессом обучения на верхнем уровне.
Jupyter Notebook стал стандартным инструментом для повседневной работы с данными и моделями, потому что позволяет выполнять код небольшими независимыми блоками и сразу видеть результат: таблицу, график, число, не перезапуская всю программу заново при каждом небольшом изменении. Для работы, где нужно постоянно проверять гипотезы и смотреть на промежуточные результаты, это оказалось удобнее, чем писать и запускать обычный цельный скрипт.
Ещё один важный фактор, это простой и читаемый синтаксис самого языка. Python читается почти как обычный текст, и математические формулы из научных статей переносятся в код почти без потери понятности. Для исследователей, для которых программирование, это инструмент, а не основная профессия, это резко снижает порог входа и ускоряет как саму работу, так и повторение чужих экспериментов другими людьми.
В результате сложилась устойчивая модель: Python выступает удобным языком-клеем, который связывает быстрые, но менее удобные для чтения низкоуровневые библиотеки в понятный интерфейс. Разработчик пишет читаемый код, а вся вычислительно тяжёлая часть уходит в скомпилированные библиотеки под капотом. Именно поэтому относительная медленность самого Python в задачах машинного обучения почти не ощущается на практике, узкое место находится не в Python-коде, а в вычислениях, давно вынесенных за его пределы.
Please open Telegram to view this post
VIEW IN TELEGRAM
fadikMachineIntelligence
Anonymous Poll
20%
60%
10%
10%
Языковая модель знает только то, что видела во время обучения. Она ничего не знает о ваших личных файлах, документах компании, свежих новостях или о чём угодно, что появилось после её обучения. Если спросить такую модель про внутреннюю инструкцию вашей фирмы или про вчерашнее событие, она либо честно скажет, что не знает, либо начнёт что-то придумывать.
RAG, расшифровывается как retrieval-augmented generation, генерация с подкреплением через поиск. Смысл простой: вместо того чтобы забивать нужную информацию прямо внутрь модели через долгое и дорогое дообучение, ей просто подкладывают нужный текст перед вопросом. Модель отвечает не по памяти, а читая конкретный текст, который ей только что показали, примерно как если бы человеку дали открытую книгу на нужной странице перед вопросом по этой теме.
Разберём на простом примере. Представим компанию, у которой есть сотни страниц с внутренними правилами: отпуска, больничные, командировки. Сотрудник спрашивает бота: "сколько дней отпуска положено после трёх лет работы". Без RAG модель либо не знает ответа, либо выдумывает правдоподобную цифру. С RAG происходит следующее.
Сначала все документы компании заранее разбивают на небольшие куски текста, по одному абзацу или блоку в несколько предложений. Каждый такой кусок превращают в набор чисел, который отражает его смысл, это называется эмбеддингом: куски текста с похожим смыслом получают похожие наборы чисел, а куски с разным смыслом получают сильно непохожие числа, даже если в них встречаются одинаковые слова. Все эти числа сохраняют в специальной базе данных, заточенной именно под быстрый поиск похожих наборов чисел, её называют векторной базой данных.
Когда сотрудник задаёт свой вопрос, вопрос точно так же превращают в набор чисел тем же способом. Дальше система быстро находит в базе куски документов, чьи числа оказались ближе всего к числам вопроса, то есть куски текста, максимально близкие по смыслу к тому, что спросили. В нашем примере система найдёт тот абзац из правил компании, где написано про количество дней отпуска в зависимости от стажа.
Найденный текст вставляют прямо в запрос к модели вместе с исходным вопросом сотрудника, и всё это целиком отправляют модели. Модель читает и вопрос, и найденный кусок правил компании, и формирует ответ на основе этого реального текста, а не на основе смутных обрывков из обучения. Поэтому ответ получается точным и опирается на реальный документ компании, а не на догадку.
Такой подход заметно снижает риск, что модель что-то придумает, потому что вместо статистической догадки у неё перед глазами реальный текст с ответом. Это не устраняет проблему полностью, модель всё ещё может неточно пересказать найденный текст, но точность значительно выше, чем при ответе по памяти.
Главное отличие RAG от дообучения в том, что сама модель вообще не меняется. Меняется только то, что подкладывают ей в запрос перед отправкой. Это делает RAG дешевле и быстрее, особенно когда документы часто обновляются: правила компании поменялись, добавили новый абзац, и система сразу начинает использовать свежую версию, без необходимости заново обучать модель.Есть и слабое место. Если система найдёт не тот кусок текста, который реально нужен для ответа, модель опирается на нерелевантный текст и может дать неверный ответ, даже если правильный ответ был где-то в документах компании, просто поиск его не нашёл. Качество работы RAG сильно зависит от того, насколько хорошо устроен сам поиск нужных фрагментов, а не только от самой модели.
Ещё один момент, на который стоит обратить внимание, это размер кусков, на которые разбивают документы. Если куски слишком маленькие, в них может не хватить контекста, чтобы понять, о чём вообще речь: например, фраза "не более 28 дней" ничего не значит без указания, что она про отпуск. Если куски слишком большие, в них попадает много лишнего текста, который занимает место в запросе, но не относится к вопросу. Поэтому размер кусков подбирают экспериментально под конкретный тип документов, чтобы каждый фрагмент нёс достаточно смысла сам по себе, но не был перегружен лишним.
Please open Telegram to view this post
VIEW IN TELEGRAM
fadikMachineIntelligence
Anonymous Poll
42%
17%
8%
33%
Всем привет! 👋
Есть небольшая идея по поводу канала.
Как вы смотрите на то, чтобы объединить Python и машинное обучение в одну основную тематику? Всё-таки Python главный инструмент для ML, поэтому эти темы отлично сочетаются.
На канале будет больше практики, проектов, разборов кода, библиотек и материалов, связанных сразу с Python и машинным обучением.
Если вам нравится такая идея накидайте реакций под этим постом!🔥
Есть небольшая идея по поводу канала.
Как вы смотрите на то, чтобы объединить Python и машинное обучение в одну основную тематику? Всё-таки Python главный инструмент для ML, поэтому эти темы отлично сочетаются.
На канале будет больше практики, проектов, разборов кода, библиотек и материалов, связанных сразу с Python и машинным обучением.
Если вам нравится такая идея накидайте реакций под этим постом!
Please open Telegram to view this post
VIEW IN TELEGRAM
Эмбеддинг, это способ превратить смысл слова, фразы или целого текста в набор чисел, с которым может работать компьютер. Компьютер не понимает текст напрямую так, как его понимает человек, зато отлично работает с числами, поэтому любой смысл, прежде чем модель сможет с ним что-то сделать, должен быть переведён в числовую форму.
Устроено это так: каждому слову или куску текста ставится в соответствие список чисел, обычно из нескольких сотен или тысяч значений. Этот список чисел и называется эмбеддингом, а сам процесс превращения текста в такой список называется получением эмбеддинга. Ключевое свойство эмбеддингов в том, что они не случайны: слова и тексты, похожие по смыслу, получают похожие наборы чисел, а слова и тексты, разные по смыслу, получают наборы чисел, сильно отличающиеся друг от друга. Например, эмбеддинги слов "кошка" и "кот" окажутся очень близки друг к другу, а эмбеддинг слова "самолёт" окажется далеко от них обоих.
Похожесть чисел здесь можно понимать почти буквально, геометрически. Каждый эмбеддинг, это как координаты точки в очень многомерном пространстве, только вместо привычных двух или трёх осей координат, вроде тех, что рисуют на школьном графике, у этого пространства могут быть сотни или тысячи осей. Слова с похожим смыслом оказываются точками, расположенными близко друг к другу в этом пространстве, а слова с разным смыслом оказываются далеко друг от друга. Расстояние между двумя точками в этом пространстве и есть математическая мера того, насколько похожи по смыслу два слова или два текста.
Откуда вообще берутся эти числа. Модель, которая создаёт эмбеддинги, обучается на огромном количестве текста, и в процессе обучения она учится размещать слова в этом многомерном пространстве так, чтобы слова, часто встречающиеся в похожих контекстах, оказывались рядом друг с другом. Если слова "кофе" и "чай" постоянно появляются в похожих предложениях, рядом со словами вроде "выпить", "чашка", "утро", модель со временем расположит эмбеддинги этих двух слов близко друг к другу, даже если никто не объяснял ей напрямую, что кофе и чай, это похожие напитки. Закономерность выучивается сама, просто из статистики того, как слова встречаются рядом друг с другом в реальных текстах.
Интересное свойство эмбеддингов в том, что в этом числовом пространстве отражаются не только простые синонимы, но и более сложные смысловые связи. Классический пример, разница между эмбеддингами слов "король" и "мужчина" оказывается очень похожа на разницу между эмбеддингами слов "королева" и "женщина". Это означает, что модель уловила в числах не просто похожесть слов, а саму смысловую связь между понятиями, вроде разницы в поле или в социальном статусе, и эта связь одинаково отражается в разных парах слов.
Эмбеддинги лежат в основе множества практических задач. Мы уже разбирали, как именно они используются в RAG: документы разбивают на куски текста, каждый кусок превращают в эмбеддинг, а затем ищут те куски, чей эмбеддинг ближе всего к эмбеддингу вопроса пользователя. Кроме этого, эмбеддинги используются в поисковых системах, чтобы находить результаты, похожие по смыслу на запрос, даже если в них нет тех же самых слов, в рекомендательных системах, чтобы находить похожий контент, и в системах определения дубликатов текста, чтобы понимать, что два по-разному написанных текста говорят об одном и том же.
Важно понимать, что эмбеддинг сам по себе, это просто набор чисел, у него нет никакого "перевода обратно" в человеческие слова напрямую. Числа полезны только для сравнения между собой: насколько близко или далеко расположены два эмбеддинга друг от друга в этом многомерном пространстве. Именно эта возможность быстро и математически точно сравнивать смысл разных кусков текста между собой и делает эмбеддинги таким удобным инструментом внутри самых разных систем, работающих с языком.
Please open Telegram to view this post
VIEW IN TELEGRAM
fadikMachineIntelligence
Anonymous Quiz
25%
По точным словам
63%
По смыслу
0%
По алфавиту
13%
По длине текста
OpenAI представила новую программу ChatGPT for Small Business, ориентированную на небольшие компании. Её цель сделать внедрение искусственного интеллекта доступнее для малого бизнеса.
— Что это означает на практике?
• Компании смогут быстрее внедрять ИИ в повседневную работу без необходимости создавать собственные решения с нуля.
• ChatGPT можно использовать для написания писем, подготовки документов, анализа информации, работы с клиентами, программирования и автоматизации рутинных задач.
• OpenAI делает ставку на то, что в ближайшие годы ИИ станет таким же привычным рабочим инструментом, как электронная почта или офисные программы.
— Почему это важно?
Раньше подобные технологии были в основном доступны крупным компаниям с большими бюджетами. Теперь всё больше инструментов появляется именно для малого бизнеса, стартапов и небольших команд. Это ещё один шаг к массовому использованию ИИ в работе.
Please open Telegram to view this post
VIEW IN TELEGRAM