Can a Fruit Fly Learn Word Embeddings?
Yuchen Liang, Chaitanya K. Ryali, Benjamin Hoover, Leopold Grinberg, Saket Navlakha, Mohammed J. Zaki, Dmitry Krotov
Статья: https://arxiv.org/abs/2101.06887
Код (в текущей версии кода обучить на своём датасете нельзя): https://github.com/bhoov/flyvec
Сайт проекта (можно поиграться с эмбеддингами): https://flyvec.org/
Текущий прогресс в нейросетях по факту очень сильно обусловлен анализом изображений, давшим большой пинок области благодаря ImageNet, свёрточным архитектурам и вообще близости визуальной модальности нашему пониманию. Есть, конечно, рекуррентные сети и трансформеры с другими implicit biases, но это иная песня.
Параллельно этим движухам, в последние годы всё активнее пробивается направление про принципиально другие модальности, также инспирированные природой, но менее родные нам как виду, среди которых обоняние (https://www.quantamagazine.org/new-ai-strategy-mimics-how-brains-learn-to-smell-20180918/) и мозг дрозофилы, вернее грибовидное тело (mushroom body), как модельный объект.
Одна из свежих работ на эту тему исследует годность дрозофильной модели для построения эмбеддингов слов по типу word2vec/GloVe/BERT.
Грибовидное тело мухи отвечает за обработку сенсорной информации. Projection neurons (PN, проекционные нейроны?) получают сигналы с различных сенсоров, в основном обонятельных, но также есть входы, отвечающие за температуру, влажность и даже визуальные. Эти входы дальше заводятся через синапсы на популяцию Kenyon cells (KC, клетки Кеньона?), а те в свою очередь соединены между собой через anterior paired lateral нейрон (APL, даже ну буду пытаться переводить) и ингибируют друг друга (образуя рекуррентную сеть), так что при активации получается ситуация вида “победитель получает всё” с очень малым количеством активных нейронов, то есть разреженный код.
У реальной дрозофилы PN примерно штук 50, а KC около 2000.
Связи между PN и KC вроде как случайные, но этот вопрос дискутируется. В предыдущей своей работе (частично те же авторы плюс великий Хопфилд, “Bio-Inspired Hashing for Unsupervised Similarity Search”, https://arxiv.org/abs/2001.04907) было показано, что обучаемые связи между PN и KC дают более качественные результаты, чем рандомные, так что здесь используется этот вариант.
Кроме того, текущий вариант должен работать со словами довольно большого словаря, так что получается не расширение размерности (от 50 до 2000), а наоборот сужение (от размера словаря 20000 в 2000).
Цель работы — понять, может ли такая сеть выучить эмбеддинги, сопоставимые по качеству со статическими word2vec/GloVe или контекстными BERT. Мотив в том, что “мушиная” схема реализует достаточно общий алгоритм эмбеддингов и его можно применить для чего-то, чем муха никогда ни в жизни, ни в эволюции не занималась. Принципиальное отличие “мушиных” эмбеддингов в том, что они 1) бинарные, 2) разреженные в отличие от a) вещественных и b) плотных упомянутых выше языковых эмбеддингов.
Для (unsupervised) обучения берут текстовый датасет (OpenWebText, 32Gb, 6B токенов), нарезают на окна длины w (9-15) слов, оставляют 20000 наиболее частотных токенов.
Входной вектор состоит из блока контекста (bag-of-words из единиц в позиции имеющихся слов) и целевого блока (one-hot кодирование конкретного слова, это центральное слово в окне). Цель алгоритма выучить корреляции между блоками контекста и цели.
Задача обучения формулируется в терминах минимизации энергетической функции и реализуется это через итеративное изменение весов. Алгоритм локальный и без учителя.
За подробностями формулы, более детальным описаниям алгоритма и интуицией обращайтесь к этой и предыдущим статьям авторов (https://www.ibm.com/blogs/research/2019/04/biological-algorithm/).
Yuchen Liang, Chaitanya K. Ryali, Benjamin Hoover, Leopold Grinberg, Saket Navlakha, Mohammed J. Zaki, Dmitry Krotov
Статья: https://arxiv.org/abs/2101.06887
Код (в текущей версии кода обучить на своём датасете нельзя): https://github.com/bhoov/flyvec
Сайт проекта (можно поиграться с эмбеддингами): https://flyvec.org/
Текущий прогресс в нейросетях по факту очень сильно обусловлен анализом изображений, давшим большой пинок области благодаря ImageNet, свёрточным архитектурам и вообще близости визуальной модальности нашему пониманию. Есть, конечно, рекуррентные сети и трансформеры с другими implicit biases, но это иная песня.
Параллельно этим движухам, в последние годы всё активнее пробивается направление про принципиально другие модальности, также инспирированные природой, но менее родные нам как виду, среди которых обоняние (https://www.quantamagazine.org/new-ai-strategy-mimics-how-brains-learn-to-smell-20180918/) и мозг дрозофилы, вернее грибовидное тело (mushroom body), как модельный объект.
Одна из свежих работ на эту тему исследует годность дрозофильной модели для построения эмбеддингов слов по типу word2vec/GloVe/BERT.
Грибовидное тело мухи отвечает за обработку сенсорной информации. Projection neurons (PN, проекционные нейроны?) получают сигналы с различных сенсоров, в основном обонятельных, но также есть входы, отвечающие за температуру, влажность и даже визуальные. Эти входы дальше заводятся через синапсы на популяцию Kenyon cells (KC, клетки Кеньона?), а те в свою очередь соединены между собой через anterior paired lateral нейрон (APL, даже ну буду пытаться переводить) и ингибируют друг друга (образуя рекуррентную сеть), так что при активации получается ситуация вида “победитель получает всё” с очень малым количеством активных нейронов, то есть разреженный код.
У реальной дрозофилы PN примерно штук 50, а KC около 2000.
Связи между PN и KC вроде как случайные, но этот вопрос дискутируется. В предыдущей своей работе (частично те же авторы плюс великий Хопфилд, “Bio-Inspired Hashing for Unsupervised Similarity Search”, https://arxiv.org/abs/2001.04907) было показано, что обучаемые связи между PN и KC дают более качественные результаты, чем рандомные, так что здесь используется этот вариант.
Кроме того, текущий вариант должен работать со словами довольно большого словаря, так что получается не расширение размерности (от 50 до 2000), а наоборот сужение (от размера словаря 20000 в 2000).
Цель работы — понять, может ли такая сеть выучить эмбеддинги, сопоставимые по качеству со статическими word2vec/GloVe или контекстными BERT. Мотив в том, что “мушиная” схема реализует достаточно общий алгоритм эмбеддингов и его можно применить для чего-то, чем муха никогда ни в жизни, ни в эволюции не занималась. Принципиальное отличие “мушиных” эмбеддингов в том, что они 1) бинарные, 2) разреженные в отличие от a) вещественных и b) плотных упомянутых выше языковых эмбеддингов.
Для (unsupervised) обучения берут текстовый датасет (OpenWebText, 32Gb, 6B токенов), нарезают на окна длины w (9-15) слов, оставляют 20000 наиболее частотных токенов.
Входной вектор состоит из блока контекста (bag-of-words из единиц в позиции имеющихся слов) и целевого блока (one-hot кодирование конкретного слова, это центральное слово в окне). Цель алгоритма выучить корреляции между блоками контекста и цели.
Задача обучения формулируется в терминах минимизации энергетической функции и реализуется это через итеративное изменение весов. Алгоритм локальный и без учителя.
За подробностями формулы, более детальным описаниям алгоритма и интуицией обращайтесь к этой и предыдущим статьям авторов (https://www.ibm.com/blogs/research/2019/04/biological-algorithm/).
GitHub
GitHub - bhoov/flyvec: A biologically inspired method to create sparse, binary word vectors
A biologically inspired method to create sparse, binary word vectors - bhoov/flyvec
После обучения весов можно начать генерить хеш-коды для очередных w-грамм. В единицу устанавливаются топ-k Kenyon cells с максимальными активациями. В случае статических эмбеддингов в блоке контекста содержатся все нули и только в блоке цели стоит единица в соответствующей слову позиции. В случае контекстных эмбеддингов блок контекста заполняется единицами где надо. В итоге получаем код длины K (по числу KC) с максимум k единицами в нём.
Типичные параметры в сравнениях K=400, k=51, w=11.
Дальше на различных датасетах для оценки эмбеддингов слов сравниваются с альтернативами: word2vec, GloVe и их бинаризациями. Получается в целом достойно. Применяют для кластеризации слов, тоже получают осмысленный результат. На контекстных эмбеддингах хуже берта, но лучше word2vec, GloVe и Word2Sense (https://www.aclweb.org/anthology/P19-1570/). На классификации документов не побеждает, но уровень нормальный.
Одно из главных преимуществ алгоритма при этом — его скорость и нетребовательность к памяти. На конфигурации авторов предложенный алгоритм обучается за пару часов, GloVe там же обучается порядка 10 часов. Про берт вообще молчу.
В общем, интересная движуха. Глупо оценивать такие подходы по одной лишь метрике качества и сравнивать с SoTA, в которую вбухали дофига времени, сил и вычислений. Наверное, ещё более интересными такие подходы станут с доступностью нейроморфных архитектур, где разреженность будет родной и из коробки, и в сочетании с низкой потребляемой мощностью такие вот bio-inspired решения окажутся в совершенно иной экологической нише, куда берты просто не влезут.
Типичные параметры в сравнениях K=400, k=51, w=11.
Дальше на различных датасетах для оценки эмбеддингов слов сравниваются с альтернативами: word2vec, GloVe и их бинаризациями. Получается в целом достойно. Применяют для кластеризации слов, тоже получают осмысленный результат. На контекстных эмбеддингах хуже берта, но лучше word2vec, GloVe и Word2Sense (https://www.aclweb.org/anthology/P19-1570/). На классификации документов не побеждает, но уровень нормальный.
Одно из главных преимуществ алгоритма при этом — его скорость и нетребовательность к памяти. На конфигурации авторов предложенный алгоритм обучается за пару часов, GloVe там же обучается порядка 10 часов. Про берт вообще молчу.
В общем, интересная движуха. Глупо оценивать такие подходы по одной лишь метрике качества и сравнивать с SoTA, в которую вбухали дофига времени, сил и вычислений. Наверное, ещё более интересными такие подходы станут с доступностью нейроморфных архитектур, где разреженность будет родной и из коробки, и в сочетании с низкой потребляемой мощностью такие вот bio-inspired решения окажутся в совершенно иной экологической нише, куда берты просто не влезут.
Addressing Some Limitations of Transformers with Feedback Memory
Angela Fan, Thibaut Lavril, Edouard Grave, Armand Joulin, Sainbayar Sukhbaatar
Статья: https://arxiv.org/abs/2002.09402
Unofficial code: https://github.com/lucidrains/feedback-transformer-pytorch
Implementation with comments: https://nn.labml.ai/transformers/feedback/index.html
Прикольная малозамеченная работа годовалой давности.
Общая идея: Трансформеры довольно эффективно параллелятся, обрабатывая последовательность токенов (трансформации каждого токена вычисляются параллельно в каждом слое), но при авторегрессионной генерации это препятствует использовать последовательную природу задачи на полную. Причина в том, что обрабатывая определённый токен, каждый слой получает репрезентации предыдущих токенов только с нижних относительно себя слоёв, и не получает ничего с верхних, хотя там по идее самая ценная информация и сосредоточена. И, главное, на предыдущем шаге генерации мы её уже посчитали, но просто не используем.
В предложенной реализации под названием Feedback Transformer авторы для вычисления очередной (по времени) репрезентации в любом слое делают доступными все предыдущие репрезентации всех слоёв.
На словах, наверное, тяжело воспринимается, но картинка всё легко передаёт (Fig.1 & 2).
Обычный трансформер вычисляет на каждом слое self-attention текущего токена и прошлого контекста (предыдущих токенов), где контекст это репрезентации этих предыдущих токенов, пришедшие [снизу] на текущий же слой.
Feedback Transformer заменяет контекст на специальные вектора памяти, feedback memory, и считает self-attention текущего токена и этой памяти. Feedback memory для каждого токена, входящего в attention span, аггрегирует скрытые состояния всех слоёв в общий вектор. Для агрегации используются обучаемые параметры, по которым дальше считается softmax, дающий в итоговой сумме веса репрезентаций каждого слоя. Я так понимаю, что эти параметры статичны после обучения, и это прямой путь к дальнейшим усовершенствованиям — добавить адаптивное вычисление этих весов по текущим входам и состоянию памяти.
Теперь все предыдущие вичисления становятся доступны всем будущим вычислениям и по идее это даёт возможность выучить более качественные репрезентации или получить на менее глубокой модели тот же уровень абстракций, что у более глубокой.
Также можно на это посмотреть как на модификацию трансформера, дающую способность делать рекурсивные вычисления (да, это не первый такой подход) — выход слоя может отправиться через память в тот же слой на следующем временном шаге. И модель, получается, может поддерживать внутреннее состояние сколько влезет. Здесь существенное отличие от обычного трансформера, в котором слой не может получить свой же выход. И это же отличается от внутреннего состояния RNN, которое хоть и позволяет так же рекурсивно себя обрабатывать, но зато ограничено числом слоёв и их размерами (к тому же в RNN рекурсивность обычно только внутри одного слоя). В Feedback Transformer внутреннее состояние — это вся его память, которая может расти с увеличением длины входной последовательности. Получается побогаче..
Поскольку трансформер становится теперь явно последовательным, то для борьбы с замедлением есть хаки. Главный из них это общие на все слои матрицы для вычисления key и value. Оно и логично, память общая, K и V можно сразу посчитать и отдать всем слоям, которые внутри себя будут вычислять только Q для внимания. Это заодно сокращает и требования к памяти, что даёт возможность использовать батчи побольше, а это в свою очередь возвращает часть параллельности, но через другое измерение. В итоге получается не сильно медленнее. А кроме того теперь можно использовать менее глубокие трансформеры и получать то же качество репрезентаций.
В общем, красиво выходит.
Angela Fan, Thibaut Lavril, Edouard Grave, Armand Joulin, Sainbayar Sukhbaatar
Статья: https://arxiv.org/abs/2002.09402
Unofficial code: https://github.com/lucidrains/feedback-transformer-pytorch
Implementation with comments: https://nn.labml.ai/transformers/feedback/index.html
Прикольная малозамеченная работа годовалой давности.
Общая идея: Трансформеры довольно эффективно параллелятся, обрабатывая последовательность токенов (трансформации каждого токена вычисляются параллельно в каждом слое), но при авторегрессионной генерации это препятствует использовать последовательную природу задачи на полную. Причина в том, что обрабатывая определённый токен, каждый слой получает репрезентации предыдущих токенов только с нижних относительно себя слоёв, и не получает ничего с верхних, хотя там по идее самая ценная информация и сосредоточена. И, главное, на предыдущем шаге генерации мы её уже посчитали, но просто не используем.
В предложенной реализации под названием Feedback Transformer авторы для вычисления очередной (по времени) репрезентации в любом слое делают доступными все предыдущие репрезентации всех слоёв.
На словах, наверное, тяжело воспринимается, но картинка всё легко передаёт (Fig.1 & 2).
Обычный трансформер вычисляет на каждом слое self-attention текущего токена и прошлого контекста (предыдущих токенов), где контекст это репрезентации этих предыдущих токенов, пришедшие [снизу] на текущий же слой.
Feedback Transformer заменяет контекст на специальные вектора памяти, feedback memory, и считает self-attention текущего токена и этой памяти. Feedback memory для каждого токена, входящего в attention span, аггрегирует скрытые состояния всех слоёв в общий вектор. Для агрегации используются обучаемые параметры, по которым дальше считается softmax, дающий в итоговой сумме веса репрезентаций каждого слоя. Я так понимаю, что эти параметры статичны после обучения, и это прямой путь к дальнейшим усовершенствованиям — добавить адаптивное вычисление этих весов по текущим входам и состоянию памяти.
Теперь все предыдущие вичисления становятся доступны всем будущим вычислениям и по идее это даёт возможность выучить более качественные репрезентации или получить на менее глубокой модели тот же уровень абстракций, что у более глубокой.
Также можно на это посмотреть как на модификацию трансформера, дающую способность делать рекурсивные вычисления (да, это не первый такой подход) — выход слоя может отправиться через память в тот же слой на следующем временном шаге. И модель, получается, может поддерживать внутреннее состояние сколько влезет. Здесь существенное отличие от обычного трансформера, в котором слой не может получить свой же выход. И это же отличается от внутреннего состояния RNN, которое хоть и позволяет так же рекурсивно себя обрабатывать, но зато ограничено числом слоёв и их размерами (к тому же в RNN рекурсивность обычно только внутри одного слоя). В Feedback Transformer внутреннее состояние — это вся его память, которая может расти с увеличением длины входной последовательности. Получается побогаче..
Поскольку трансформер становится теперь явно последовательным, то для борьбы с замедлением есть хаки. Главный из них это общие на все слои матрицы для вычисления key и value. Оно и логично, память общая, K и V можно сразу посчитать и отдать всем слоям, которые внутри себя будут вычислять только Q для внимания. Это заодно сокращает и требования к памяти, что даёт возможность использовать батчи побольше, а это в свою очередь возвращает часть параллельности, но через другое измерение. В итоге получается не сильно медленнее. А кроме того теперь можно использовать менее глубокие трансформеры и получать то же качество репрезентаций.
В общем, красиво выходит.
GitHub
GitHub - lucidrains/feedback-transformer-pytorch: Implementation of Feedback Transformer in Pytorch
Implementation of Feedback Transformer in Pytorch. Contribute to lucidrains/feedback-transformer-pytorch development by creating an account on GitHub.
Есть отдельные демонстрации ограниченности обычного трансформера. На задачах типа copy, reverse, counting, random walk и паре алгоритмических где надо отслеживать состояние переменных при разных операциях инкремента/декремента и логических условий, показывают, что стандартный трансформер не особо справляется с задачами, где надо иметь доступ к долгой памяти или иметь возможность долго обновлять внутреннее состояние. Наглядно видно, что профит есть и кое-где существенный.
Есть также профит на задачах машинного перевода и RL.
Из интересного, смотрят как можно было бы агрегировать репрезентации в feedback memory и показывают, что и тупое усреднение работает неплохо, и (ещё лучше) работает просто взятие с последних слоёв. Оно и логично. Полноценный обучаемый механизм агрегирования лишь несильно лучше этого варианта.
На ICLR 2021 правда работу не взяли (https://openreview.net/forum?id=OCm0rwa1lx1):
“This paper focuses on the limitations of the transformer architecture as an autoregressive model. The paper is relatively easy to follow. Though most reviewers find the paper interesting, the idea is not very novel. The introduction of sequential-ness to Transformer is good, though it also slow things down especially as the sequence gets longer.
An extensive set of experiments are performed, though the results are not entirely convincing. The authors are encouraged to add more ablative experiments, efficiency analysis, and large-scale results.”
Ну не знаааю… По мне так экспериментальная часть вполне уже неплоха. Надо было обучить что-то на гигантском кластере, чтобы убедить? Не туда куда-то всё идёт...
Есть также профит на задачах машинного перевода и RL.
Из интересного, смотрят как можно было бы агрегировать репрезентации в feedback memory и показывают, что и тупое усреднение работает неплохо, и (ещё лучше) работает просто взятие с последних слоёв. Оно и логично. Полноценный обучаемый механизм агрегирования лишь несильно лучше этого варианта.
На ICLR 2021 правда работу не взяли (https://openreview.net/forum?id=OCm0rwa1lx1):
“This paper focuses on the limitations of the transformer architecture as an autoregressive model. The paper is relatively easy to follow. Though most reviewers find the paper interesting, the idea is not very novel. The introduction of sequential-ness to Transformer is good, though it also slow things down especially as the sequence gets longer.
An extensive set of experiments are performed, though the results are not entirely convincing. The authors are encouraged to add more ablative experiments, efficiency analysis, and large-scale results.”
Ну не знаааю… По мне так экспериментальная часть вполне уже неплоха. Надо было обучить что-то на гигантском кластере, чтобы убедить? Не туда куда-то всё идёт...
OpenReview
Addressing Some Limitations of Transformers with Feedback Memory
Transformers have been successfully applied to sequential tasks despite being feedforward networks. Unlike recurrent neural networks, Transformers use attention to capture temporal relations while...
Improving Neural Language Models with a Continuous Cache
Edouard Grave, Armand Joulin, Nicolas Usunier
Статья: https://arxiv.org/abs/1612.04426
Уже довольно старая статья частично тех же авторов, что и недавно описанный Feedback Transformer. И, мне кажется, она тоже недостаточно известна.
Идея проста и эффективна: давайте кешировать прошлые активации языковой модели (имеется в виду скрытое состояние RNN) с соответствовавшими им словами, и при вычислении вероятности генерации очередного слова ходить в кеш (через dot product attention), чтобы модифицировать эти вероятности на основе хранимого в кеше длинного контекста.
Это по сути упрощённый вариант memory-augmented моделей. Память активаций есть, модель в неё ходит, но, что интересно, механизм крайне прост, вообще не требует обучения и может быть добавлен к уже имеющейся модели. Такая память может быть объёмом в тысячи ячеек.
Технически, механизм очень простой. При генерации слова X_{i+1} из скрытого состояния H_i мы сохраняем в кеше пару (H_i, X_{i+1}). В момент t генерации очередного слова мы считаем dot product текущего состояния H_t со всеми состояниями в кеше и получаем распределение вероятностей соответствующих слов из кеша. Затем эту вероятность можно замешать с обычной вероятностью генерации слов предварительно обученной моделью (замешивать можно разными способами). С получившимся модифицированным распределением вероятностей работаем как обычно, например, сэмплим из него.
Модель кеша эксплуатирует наблюдение, что как только слово встретилось в документе однажды, гораздо больше шансов встретить его вновь. Она улучшает языковую модель, отлавливая дальние зависимости. Это позволяет эффективно адаптировать модель к новому домену, а также такие модели могут предсказывать внесловарные слова после того, как те один раз уже встретились (и чтобы это работало, я так понимаю, X_{i+1} это не слово, которое мы сгенерили в момент времени i, а слово, которое пришло на вход в момент времени i+1 и которое мы привязали к скрытому состоянию H_i). Ну и вообще хорошая работа с дальними зависимостями улучшает качество сгенерированного текста.
Модель даёт хорошее улучшение относительно базовой LSTM и чем больше размер памяти, тем заметнее улучшение. Авторы продемонстрировали, что модель скейлится до тысяч ячеек, сохраняя способность улучшать результаты. Элементарно добавить поверх обученной модели.
Интересно, кстати, было бы добавить поверх GPT-3, хотя в трансформерах с этим, пожалуй, из коробки несколько получше, но всё равно потенциально можно расширить контекст. И вообще, кажется, тогда получится лайтовый вариант Feedback Transformer. Ну тоже интересно, особенно тем, что отдельное обучение не требуется (которое у Feedback Transformer было к тому же более медленным).
Эта статья попала постером на ICLR 2017.
У статьи есть продолжение “Unbounded cache model for online language modeling with open vocabulary” (https://arxiv.org/abs/1711.02604), попавшее на NIPS 2017. Там добавляют неограниченную память, в которой хранят вообще всё предыдущее, а для вытаскивания из кеша используют approximate kNN (k=200...1000).
Тут по идее можно было бы собрать аналог лайтового Feedback Transformer с очень большим контекстом, и в случае GPT-3 иметь просто гигантские промпты, что весьма интересно. Расскажите, если кто доберётся попробовать раньше меня.
Edouard Grave, Armand Joulin, Nicolas Usunier
Статья: https://arxiv.org/abs/1612.04426
Уже довольно старая статья частично тех же авторов, что и недавно описанный Feedback Transformer. И, мне кажется, она тоже недостаточно известна.
Идея проста и эффективна: давайте кешировать прошлые активации языковой модели (имеется в виду скрытое состояние RNN) с соответствовавшими им словами, и при вычислении вероятности генерации очередного слова ходить в кеш (через dot product attention), чтобы модифицировать эти вероятности на основе хранимого в кеше длинного контекста.
Это по сути упрощённый вариант memory-augmented моделей. Память активаций есть, модель в неё ходит, но, что интересно, механизм крайне прост, вообще не требует обучения и может быть добавлен к уже имеющейся модели. Такая память может быть объёмом в тысячи ячеек.
Технически, механизм очень простой. При генерации слова X_{i+1} из скрытого состояния H_i мы сохраняем в кеше пару (H_i, X_{i+1}). В момент t генерации очередного слова мы считаем dot product текущего состояния H_t со всеми состояниями в кеше и получаем распределение вероятностей соответствующих слов из кеша. Затем эту вероятность можно замешать с обычной вероятностью генерации слов предварительно обученной моделью (замешивать можно разными способами). С получившимся модифицированным распределением вероятностей работаем как обычно, например, сэмплим из него.
Модель кеша эксплуатирует наблюдение, что как только слово встретилось в документе однажды, гораздо больше шансов встретить его вновь. Она улучшает языковую модель, отлавливая дальние зависимости. Это позволяет эффективно адаптировать модель к новому домену, а также такие модели могут предсказывать внесловарные слова после того, как те один раз уже встретились (и чтобы это работало, я так понимаю, X_{i+1} это не слово, которое мы сгенерили в момент времени i, а слово, которое пришло на вход в момент времени i+1 и которое мы привязали к скрытому состоянию H_i). Ну и вообще хорошая работа с дальними зависимостями улучшает качество сгенерированного текста.
Модель даёт хорошее улучшение относительно базовой LSTM и чем больше размер памяти, тем заметнее улучшение. Авторы продемонстрировали, что модель скейлится до тысяч ячеек, сохраняя способность улучшать результаты. Элементарно добавить поверх обученной модели.
Интересно, кстати, было бы добавить поверх GPT-3, хотя в трансформерах с этим, пожалуй, из коробки несколько получше, но всё равно потенциально можно расширить контекст. И вообще, кажется, тогда получится лайтовый вариант Feedback Transformer. Ну тоже интересно, особенно тем, что отдельное обучение не требуется (которое у Feedback Transformer было к тому же более медленным).
Эта статья попала постером на ICLR 2017.
У статьи есть продолжение “Unbounded cache model for online language modeling with open vocabulary” (https://arxiv.org/abs/1711.02604), попавшее на NIPS 2017. Там добавляют неограниченную память, в которой хранят вообще всё предыдущее, а для вытаскивания из кеша используют approximate kNN (k=200...1000).
Тут по идее можно было бы собрать аналог лайтового Feedback Transformer с очень большим контекстом, и в случае GPT-3 иметь просто гигантские промпты, что весьма интересно. Расскажите, если кто доберётся попробовать раньше меня.
👍1