Декодирование LLMs Создание кодировщиков трансформеров и многоступенчатых слоев внимания в Python с нуля
Декодирование LLMs Создание кодировщиков трансформеров и многоступенчатых слоев внимания в Python с нуля
Исследование тонкостей работы кодировщика, много-внимания и позиционного кодирования в больших языковых моделях
Этот пост был написан совместно с Рафаэлем Нарди.
Введение
Сегодня Вычислительная естественноязычная обработка (NLP) является быстро развивающимся предприятием, в котором сила вычислений соединяется с лингвистикой. Лингвистическая сторона этого основана в основном на теории Дистрибутивной Семантики Джона Руперта Ферта. Он однажды сказал следующее:
«Вы узнаете слово по его компаньонам»
Таким образом, семантическое представление слова определяется контекстом, в котором оно используется. Именно исходя из этого предположения статья “Вся ваша модель нуждается в внимании” Ашиша Васвани и др. [1] приобретает свою революционную значимость. Она устанавливает трансформирующую архитектуру в качестве ядра многих быстрорастущих инструментов, таких как BERT, GPT4, Лама и др.
- Становление лидером аналитики данных с Раджаном Сетураманом
- Изучайте Семантические Связи в Корпусе с Моделями Векторного Вложения
- Полное руководство по кэшированию в Python
В этой статье мы рассматриваем ключевые математические операции, лежащие в основе сегмента кодировщика в архитектуре трансформатора.
![Рисунок 1: Самодостаточное внимание сложно (изображение автора)](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*YeXHeZ6NufKf2YbnWDXt5Q.png)
Как всегда, код доступен на нашем GitHub.
Токенизация, эмбеддинги и векторные пространства
Первая задача, с которой нужно столкнуться при работе с проблемами NLP, заключается в том, как закодировать информацию, содержащуюся в предложении, чтобы ее можно было обработать машиной. Машины могут работать только с числами, что означает, что слова, их значения, пунктуация и т.д. должны быть переведены в числовое представление. В основе этой задачи лежит проблема эмбеддинга.
Прежде чем мы углубимся в то, что представляют собой эмбеддинги, нам нужно сделать промежуточный шаг и обсудить токенизацию. Здесь блоки слов или части слов определяются как основные строительные блоки (так называемые токены), которые будут затем представлены в виде чисел. Важно отметить, что мы не можем характеризовать слово или часть слова одним числом, поэтому мы используем списки чисел (векторы). Это дает нам гораздо большую мощность представления.