Часть вторая
Как это работает внутри? А если точнее - языковая модель.
Понятно, мы можем изучить как хорошо пользоваться современными LLM (большая языковая модель), ИИ агентами, какая модель на чем лучше работает. Возможно с практической точки зрения это будет даже полезней, но цели данной статьи другие. Мы уже выбрали "красную таблетку", то есть нас не устраивает быть просто пользователем.
Но прежде чем собирать-разбирать современные модели и слои, надо разобраться в самых основах.
Как модель работает, что там происходит такое, что она "понимает" смысл слов и предложений?
То есть вопрос - как оцифровать смысл? Ответ : векторизация, многомерный вектор.
Первое, что мы должны понять - что такое многомерный вектор и матрица.
Многомерный вектор - упорядоченный набор чисел-координат.
Многомерным вектором можно описать любое слово или сущность.
Матрица - просто прямоугольная таблица чисел, двумерная. Матрица может задать правило по которым один вектор можно преобразовать в другой (связать, различить, оценить).
Для примера создадим вектор с размерностью 4-ре. Это очень мало для современных моделей.
Теперь берём слово - лимон. Попробуем описать его с помощью 4-мерного вектора.
Лимон: [0.95, 0.98, 0.90, 0.00]
Ось 1 (X) = 0.95 — Съедобность
Ось 2 (Y) = 0.98 — Кислость.
Ось 3 (Z) = 0.90 — Желтость.
Ось 4 (W) = 0.00 — Техника и механизмы (он никакого отношения не имеет к технике, мы игнорируем этот признак)
Теперь сравним с Лайм =[0.95, 0.95, 0.70, 0.00].
Видим, что лайм близко с лимоном (съедобный, кислый, чуть чуть жёлтый, не имеет никакого отношения к технике).
Смотрим на Трактор - никакого отношения к трактору кислые наши фрукты не имеют. Банан где по двум осям сходится (желтый, съедобный), но не близко (не кислый).
Ок, поздравляю - мы создали Embedding - это начальные координаты сущностей. От слова embed (встраивать), думаю всем знакомое.
Здесь признаки и числа придуманы вручную для наглядности.
То есть мы встроили в модель самые самые начальные понятия.
Ок, а как модель понимает лимон или лайм, трактор?
Теперь мы приходим к очень важному понятию в IT - токен.
Само слово токен от англ. token — знак, символ, жетон. Токеном в программировании называют набор цифр-символов которые указывают на что-то либо выражает что-то.
Теперь, нам нужно преобразовать слова в токены, чтобы мы могли расставить начальные координаты (кислость, желтость и т.п.).
Этот процесс называется токенизация. А движок который превращает слова в токены - токенизатор.
Причем токен не обязательно слово целиком, оно может быть "нарезано " на ломтики, например несёт -> н ес ёт в токенизаторе BPE (Byte-Pair Encoding).
Теперь вы понимаете, что токенизатор и ембеддинг связаны, как язык и словарь, будет несовпадение - все, ничего работать не будет.
Теперь, мы разбирали 4-мерный массив и смогли отличить кислость лайма и лимона. А у реального эмбеддинга kimi k3 размерность 7168 - представьте сколько туда можно закодировать признаков каждой сущности (в реальности очень много, так как в жизни все чуть сложнее).
Хорошо, а как она "понимает" смысл?
Смысл она конечно не понимает, она вычисляет координаты. Правила по которым она вычисляет координаты называются весами, это те самые матрицы.
Вот пример - мы создали матрицу весов "Можно добавить в чай".
Можно_Добавить_В_Чай_Веса = [
[0.5], // Съедобность
[1.0], // Кислость
[0.0] // Желтость
[0.0] // Техника - не нужно
]
Здесь матрица (веса), задают правила, по которым мы будем обрабатывать значения векторов (а значения изначально получены из ембединга).
X (Съедобность) - умножаем на 0.5 (не факт что подойдёт);
Y (Кислость) - умножаем 1.0;
Z (Желтость) - 0.0 (цвет не важен);
Лимон =
1. 0.95 × 0.5 = 0.475 (сработало правило съедобности)
2. 0.98 × 1.0 = 0.980 (сработало правило кислости)
3. 0.90 × 0.0 = 0.000 (желтый цвет обнулился)
Складываем: 0.475 + 0.980 + 0.000 = 1.455.
Для примера, мы решили, что отметка выше 1.2 - можно добавлять в чай.
Лимон можно добавить в чай )
В следующем посте дойдём до самого интересного - соберём свою микромодель.