Продолжаем дистиллировать данные.
Dataset Distillation
Tongzhou Wang, Jun-Yan Zhu, Antonio Torralba, Alexei A. Efros
Статья: https://arxiv.org/abs/1811.10959
Страница: https://ssnl.github.io/dataset_distillation/
Код: https://github.com/SsnL/dataset-distillation
Теперь заход с другой стороны — что если модель не трогать, а большой датасет отдистиллировать в маленький? Например, превратить 60000 обучающих примеров MNIST’а в 10? Причём не как раньше, когда пытались оставлять наиболее значимые примеры, а прям вот создать синтетические примеры (возможно не из того многообразия, где обитают сами исходные данные), на которых модель хорошо и быстро обучится.
Оказывается, можно.
Это идейно похоже на процесс генерации картинок, максимально активирующих нейроны конкретных классов, где backprop применяется для генерации входных данных, а не для обновления весов модели. Здесь мы генерим входные примеры, которые дадут минимальный лосс через шаг (или много шагов, потому что одного обычно совсем недостаточно) градиентного спуска относительно начальных весов.
В прямолинейном варианте подход требует знания начальных весов сети. В более интересном варианте достаточно знать распределение, из которого сэмплили начальные веса. Для моделей, предобученных на другие задачи (AlexNet), метод может найти дистиллированный датасет для быстрого файнтюнинга.
Полученный дистиллированный датасет представляет интерес не только для изучения, он полезен также для continual learning методов, где часто сохраняется в специальном буфере подмножество обучающих примеров, на которых проверяется качество и блокируются изменения, ухудшающие его. Дистиллированный датасет выглядит интересной заменой такого случайного подмножества (занимает мало места и содержит много важной информации для обучения).
На MNIST получилось отдистиллировать весь датасет в 10 примеров (по одному на класс!), на которых LeNet обучается до почти 94% точности за 2000 шагов градиентного спуска с фиксированной инициализацией. С рандомной инициализацией 88.5%. На CIFAR10 тоже интересные результаты.
Неплохо также работает адаптация между MNIST/USPS/SVHN.
Или, например, получается адаптация претренированной AlexNet на PASCAL-VOC и CUB-200 датасеты с одной картинкой на категорию.
Метод заточен на конкретные архитектуры и инициализации, есть куда расширять. Но выглядит очень интересно. Например, можно существенно сократить вычисления на оценку моделей в neural architecture search (помните эти страшные цифры? https://www.technologyreview.com/s/613630/training-a-single-ai-model-can-emit-as-much-carbon-as-five-cars-in-their-lifetimes/)
Статья подана на ICLR 2020.
Дистиллированные картинки выглядят интересно. Есть над чем подумать.
Отдельное направление для применения этой работы — data poisoning attack. Из сабмита на ICLR эту часть убрали :) Наверняка готовят отдельную статью, это обещает быть сильно.
Хитрый data poisoning с помощью дистилляции позволяет сгенерить небольшое число примеров, которые всего за одну итерацию обучения сильно портят одну конкретную категорию классификации, не трогая остальные. Без доступа к точным значениям весов модели!
Dataset Distillation
Tongzhou Wang, Jun-Yan Zhu, Antonio Torralba, Alexei A. Efros
Статья: https://arxiv.org/abs/1811.10959
Страница: https://ssnl.github.io/dataset_distillation/
Код: https://github.com/SsnL/dataset-distillation
Теперь заход с другой стороны — что если модель не трогать, а большой датасет отдистиллировать в маленький? Например, превратить 60000 обучающих примеров MNIST’а в 10? Причём не как раньше, когда пытались оставлять наиболее значимые примеры, а прям вот создать синтетические примеры (возможно не из того многообразия, где обитают сами исходные данные), на которых модель хорошо и быстро обучится.
Оказывается, можно.
Это идейно похоже на процесс генерации картинок, максимально активирующих нейроны конкретных классов, где backprop применяется для генерации входных данных, а не для обновления весов модели. Здесь мы генерим входные примеры, которые дадут минимальный лосс через шаг (или много шагов, потому что одного обычно совсем недостаточно) градиентного спуска относительно начальных весов.
В прямолинейном варианте подход требует знания начальных весов сети. В более интересном варианте достаточно знать распределение, из которого сэмплили начальные веса. Для моделей, предобученных на другие задачи (AlexNet), метод может найти дистиллированный датасет для быстрого файнтюнинга.
Полученный дистиллированный датасет представляет интерес не только для изучения, он полезен также для continual learning методов, где часто сохраняется в специальном буфере подмножество обучающих примеров, на которых проверяется качество и блокируются изменения, ухудшающие его. Дистиллированный датасет выглядит интересной заменой такого случайного подмножества (занимает мало места и содержит много важной информации для обучения).
На MNIST получилось отдистиллировать весь датасет в 10 примеров (по одному на класс!), на которых LeNet обучается до почти 94% точности за 2000 шагов градиентного спуска с фиксированной инициализацией. С рандомной инициализацией 88.5%. На CIFAR10 тоже интересные результаты.
Неплохо также работает адаптация между MNIST/USPS/SVHN.
Или, например, получается адаптация претренированной AlexNet на PASCAL-VOC и CUB-200 датасеты с одной картинкой на категорию.
Метод заточен на конкретные архитектуры и инициализации, есть куда расширять. Но выглядит очень интересно. Например, можно существенно сократить вычисления на оценку моделей в neural architecture search (помните эти страшные цифры? https://www.technologyreview.com/s/613630/training-a-single-ai-model-can-emit-as-much-carbon-as-five-cars-in-their-lifetimes/)
Статья подана на ICLR 2020.
Дистиллированные картинки выглядят интересно. Есть над чем подумать.
Отдельное направление для применения этой работы — data poisoning attack. Из сабмита на ICLR эту часть убрали :) Наверняка готовят отдельную статью, это обещает быть сильно.
Хитрый data poisoning с помощью дистилляции позволяет сгенерить небольшое число примеров, которые всего за одну итерацию обучения сильно портят одну конкретную категорию классификации, не трогая остальные. Без доступа к точным значениям весов модели!
arXiv.org
Dataset Distillation
Model distillation aims to distill the knowledge of a complex model into a simpler one. In this paper, we consider an alternative formulation called dataset distillation: we keep the model fixed...
👍3
Stabilizing Transformers for Reinforcement Learning
Emilio Parisotto, H. Francis Song, Jack W. Rae, Razvan Pascanu, Caglar Gulcehre, Siddhant M. Jayakumar, Max Jaderberg, Raphael Lopez Kaufman, Aidan Clark, Seb Noury, Matthew M. Botvinick, Nicolas Heess, Raia Hadsell
CMU, Google, DeepMind
Статья: https://arxiv.org/abs/1910.06764
Обсуждается возможность использования трансформерных архитектур в рамках RL-задач. Известно, что предыдущие попытки давали нестабильные результаты.
Авторы предлагают модифицированную архитектуру под называнием GTrXL (Gated Transformer-XL). Она более всего похожа на Transformer-XL и содержит следующие модификации:
- как и в TrXL, используется относительное позиционирование токенов, что позволяет работать с широким окном;
- как и в модификации TrXL-I, layernorm делается на входе каждого слоя, а не на выходе, а residual connection позволяет его обойти без нормализации — авторы утверждают, что это очень важно в RL для выучивания ранних простых реактивных стратегий, на основании которых далее формируются уже более сложные;
- ключевым отличием является добавление gating-слоя вместо простого сложения в точке примыкания residual connection — здесь они экспериментировали с разными гейтами, победителем вышел GRU-style gating.
При этом показали, что если начальную инициализацию гейта делать близкой к identity map, то скорость обучения резко растёт (опять таки за счёт того, что сначала сразу выучивается простая policy).
Emilio Parisotto, H. Francis Song, Jack W. Rae, Razvan Pascanu, Caglar Gulcehre, Siddhant M. Jayakumar, Max Jaderberg, Raphael Lopez Kaufman, Aidan Clark, Seb Noury, Matthew M. Botvinick, Nicolas Heess, Raia Hadsell
CMU, Google, DeepMind
Статья: https://arxiv.org/abs/1910.06764
Обсуждается возможность использования трансформерных архитектур в рамках RL-задач. Известно, что предыдущие попытки давали нестабильные результаты.
Авторы предлагают модифицированную архитектуру под называнием GTrXL (Gated Transformer-XL). Она более всего похожа на Transformer-XL и содержит следующие модификации:
- как и в TrXL, используется относительное позиционирование токенов, что позволяет работать с широким окном;
- как и в модификации TrXL-I, layernorm делается на входе каждого слоя, а не на выходе, а residual connection позволяет его обойти без нормализации — авторы утверждают, что это очень важно в RL для выучивания ранних простых реактивных стратегий, на основании которых далее формируются уже более сложные;
- ключевым отличием является добавление gating-слоя вместо простого сложения в точке примыкания residual connection — здесь они экспериментировали с разными гейтами, победителем вышел GRU-style gating.
При этом показали, что если начальную инициализацию гейта делать близкой к identity map, то скорость обучения резко растёт (опять таки за счёт того, что сначала сразу выучивается простая policy).
Improving Transformer Models by Reordering their Sublayers
Ofir Press, Noah A. Smith, Omer Levy
University of Washington, Allen Institute for AI, Facebook AI Research
Статья: https://ofir.io/sandwich_transformer.pdf
Тредик с обсуждением: https://twitter.com/OfirPress/status/1193074964301111296
В обычном трансформере слои self-attn и feedforward чередуются через один. А что если попробовать другие порядки? Авторы делали много разных тестов на задаче LM на WikiText-103. Основные наблюдения:
- случайные чередования слоёв дают большой разброс качества, в том числе случаются результаты получше чем у бейзлайна;
- важен ли баланс в кол-ве self-attn и feedforward -- точно не понятно, решили оставить одинаковое количество;
- выяснили, что self-attn полезнее снизу, а сверху feedforward;
- искали оптимум в классе архитектур "k-сэндвичей", это вариант, где всего 32 слоя, и устроены они так: внизу k слоёв self-attn, потом (16-k) пар self-attn+feedforward и в конце k слоёв feedforward;
- из 32 слоёв оптимумом оказался k=6, т.е. sssssssfsfsfsfsfsfsfsfsfsfffffff, на нём perplexity оказался 17.96 (против 18.40 у бейзлайна).
Ofir Press, Noah A. Smith, Omer Levy
University of Washington, Allen Institute for AI, Facebook AI Research
Статья: https://ofir.io/sandwich_transformer.pdf
Тредик с обсуждением: https://twitter.com/OfirPress/status/1193074964301111296
В обычном трансформере слои self-attn и feedforward чередуются через один. А что если попробовать другие порядки? Авторы делали много разных тестов на задаче LM на WikiText-103. Основные наблюдения:
- случайные чередования слоёв дают большой разброс качества, в том числе случаются результаты получше чем у бейзлайна;
- важен ли баланс в кол-ве self-attn и feedforward -- точно не понятно, решили оставить одинаковое количество;
- выяснили, что self-attn полезнее снизу, а сверху feedforward;
- искали оптимум в классе архитектур "k-сэндвичей", это вариант, где всего 32 слоя, и устроены они так: внизу k слоёв self-attn, потом (16-k) пар self-attn+feedforward и в конце k слоёв feedforward;
- из 32 слоёв оптимумом оказался k=6, т.е. sssssssfsfsfsfsfsfsfsfsfsfffffff, на нём perplexity оказался 17.96 (против 18.40 у бейзлайна).
BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension
Mike Lewis, Yinhan Liu, Naman Goyal, Marjan Ghazvininejad, Abdelrahman Mohamed, Omer Levy, Ves Stoyanov, Luke Zettlemoyer
Facebook AI
#NLP #BERT #GPT2 #BART #denoising
Статья: https://arxiv.org/abs/1910.13461
По большому счёту, делают аналог denoising автоэнкодера на трансформерах. А именно, в качестве энкодера используют BERT, в качестве декодера GPT-2, общая схема -- классический seq2seq.
Экспериментируют со следующими видами шума на этапе предобучения:
- Token Masking -- замена токенов на [mask] -- MLM, как в BERT;
- Token Deletion -- удаление случайных токенов (без указания места удаления);
- Text Infilling -- замена нескольких слов на один символ [mask];
- Sentence Permutation -- случайная перестановка входных предложений местами;
- Document Rotation -- рубим входную строку в случайном месте и переставляем две части местами.
Дальше доучивали на нужную задачу (смотрели на бенчмарки SQuAD, GLUE и другие). Из интересных идей -- пробовали доучивать на перевод, добавив дополнительный энкодер из нового языка в эмбеддинги, идущие на вход основному энкодеру.
На сравнении с бертом тестировали эффективность разных стратегий зашумления на этапе предобучения. В целом, вышло, что чаще всего Text Infilling даёт SOTA в одиночку или в комбинации с другими, но, вообще говоря, это зависит от задачи.
Далее сравнивались с разными бейзлайнами на разных задачах:
- на дискриминативных задачах местами уступили RoBERTa,
- на задачах суммаризации -- получили SOTA,
- на некоторых других тоже, но не везде.
Общий вывод я бы сформулировал так:
- в целом модель выглядит универсальной и гибкой в управлении, можно ожидать, что она имеет некоторые шансы стать единой стандартной базой для transfer learning-а в разных задачах,
- Text Infilling как обобщение MLM -- хорошая идея, а вообще из работы следует, что оптимальная схема предобучения определяется финальной задачей (что печально),
- какого-то большого прорыва не вышло, но на отдельных задачах полулось заметно улучшить SOTA.
Mike Lewis, Yinhan Liu, Naman Goyal, Marjan Ghazvininejad, Abdelrahman Mohamed, Omer Levy, Ves Stoyanov, Luke Zettlemoyer
Facebook AI
#NLP #BERT #GPT2 #BART #denoising
Статья: https://arxiv.org/abs/1910.13461
По большому счёту, делают аналог denoising автоэнкодера на трансформерах. А именно, в качестве энкодера используют BERT, в качестве декодера GPT-2, общая схема -- классический seq2seq.
Экспериментируют со следующими видами шума на этапе предобучения:
- Token Masking -- замена токенов на [mask] -- MLM, как в BERT;
- Token Deletion -- удаление случайных токенов (без указания места удаления);
- Text Infilling -- замена нескольких слов на один символ [mask];
- Sentence Permutation -- случайная перестановка входных предложений местами;
- Document Rotation -- рубим входную строку в случайном месте и переставляем две части местами.
Дальше доучивали на нужную задачу (смотрели на бенчмарки SQuAD, GLUE и другие). Из интересных идей -- пробовали доучивать на перевод, добавив дополнительный энкодер из нового языка в эмбеддинги, идущие на вход основному энкодеру.
На сравнении с бертом тестировали эффективность разных стратегий зашумления на этапе предобучения. В целом, вышло, что чаще всего Text Infilling даёт SOTA в одиночку или в комбинации с другими, но, вообще говоря, это зависит от задачи.
Далее сравнивались с разными бейзлайнами на разных задачах:
- на дискриминативных задачах местами уступили RoBERTa,
- на задачах суммаризации -- получили SOTA,
- на некоторых других тоже, но не везде.
Общий вывод я бы сформулировал так:
- в целом модель выглядит универсальной и гибкой в управлении, можно ожидать, что она имеет некоторые шансы стать единой стандартной базой для transfer learning-а в разных задачах,
- Text Infilling как обобщение MLM -- хорошая идея, а вообще из работы следует, что оптимальная схема предобучения определяется финальной задачей (что печально),
- какого-то большого прорыва не вышло, но на отдельных задачах полулось заметно улучшить SOTA.
FreeLB: Enhanced Adversarial Training for Language Understanding
Chen Zhu, Yu Cheng, Zhe Gan, Siqi Sun, Tom Goldstein, Jingjing Liu
University of Maryland, Microsoft Dynamics 365 AI Research
#NLP #BERT #adversarial #ICLR
Версия на архиве: https://arxiv.org/abs/1909.11764
Версия, поданная на ICLR 2020: https://openreview.net/pdf?id=BygzbyHFvB
Кстати, одна из 11 статей, получившая на днях 8 из 8 баллов на blind review ICLR 2020.
Авторы предлагают новую adversarial схему обучения, FreeLB (Free Large-Batch), и показывают её эффективность при обучении трансформеров (BERT и RoBERTa) под NLP задачи из бенчмарков GLUE и ARC. Предлагаемый подход FreeLB применяется на этапе тюнинга обычной трансформер-модели на конкретную задачу.
В качестве общего соображения сообщается, что, в то время, как на задачах CV использование adversarial training приводит к улучшению генерализации и устойчивости модели к шуму за счёт некоторых потерь в точности, на задаче LM иногда наблюдается другой эффект -- улучшается как генерализация, так и точность.
Идея используемого adversarial подхода довольно проста -- после того, как мы сделали lookup за эмбеддингами токенов батча, мы их немного "портим", добавляя шум, и используем такие зашумлённые версии для обучения с тем же таргетом, что и в оригинале. Степень зашумления ограничивается небольшой евклидовой нормой добавляемого тензора шума. При этом позиционные и прочие служебные эмбеддинги не трогаем. В каком-то абстрактном смысле это отдалённо похоже на data augmentation подход. Шум, однако, у нас не случайный, а adversarial, т.е. всякий раз мы пытаемся подсунуть наиболее сложное для сети искажение.
В работе Madry et al. (2018) показано, что для поиска такого сложного зашумления можно использовать PGD (projected gradient descent): метод, в котором градиент проецируется на epsilon-сферу, и это помогает стабилизировать обучение. Проблема в том, для одного надёжного шага "спуска по шуму" нужно накопить несколько (К) forward-backward проходов по сети, что в случае с большими моделями и датасетами совсем не практично -- приводит к удорожанию обучения в К раз. В более поздних работах (модели FreeAT и YOPO) предлагается так или иначе экономить на расчётах, например, делая обновление градиента adversarial шума только раз в К шагов спуска основной модели.
Авторы данной работы предлагают новую схему (FreeLB) одновременной оптимизации сети и подстройки шума: при обработке минибатча будем делать К шагов по градиенту основной модели, накапливая его и пересчитывая оптимальный шум на основании текущего накопленного градиента на каждом шаге, а в конце разово применим итоговый накопленный градиент основной модели. Предлагается некоторое теоретическое обоснование, почему такой подход даёт более устойчивое обучение чем обычный PGD.
Дополнительно обсуждается возможность использования дропаутов при таком обучении (обычно в таких adversarial схемах dropout не используют) -- авторы предлагают фиксировать одинаковую маску дропаута на К шагов, примерно так, как это было сделано в Variational Dropout. Такой подход позволяет использовать dropout одновременно с adversarial training, и на ablation study (таб. 4) показано, что это даёт заметный профит.
В итоге, на тестовых задачах оптимизация с FreeLB показала лучшие результаты, обогнав как ванильные BERT и RoBERTa, так и варианты с PDG, FreeAT и YOPO.
Chen Zhu, Yu Cheng, Zhe Gan, Siqi Sun, Tom Goldstein, Jingjing Liu
University of Maryland, Microsoft Dynamics 365 AI Research
#NLP #BERT #adversarial #ICLR
Версия на архиве: https://arxiv.org/abs/1909.11764
Версия, поданная на ICLR 2020: https://openreview.net/pdf?id=BygzbyHFvB
Кстати, одна из 11 статей, получившая на днях 8 из 8 баллов на blind review ICLR 2020.
Авторы предлагают новую adversarial схему обучения, FreeLB (Free Large-Batch), и показывают её эффективность при обучении трансформеров (BERT и RoBERTa) под NLP задачи из бенчмарков GLUE и ARC. Предлагаемый подход FreeLB применяется на этапе тюнинга обычной трансформер-модели на конкретную задачу.
В качестве общего соображения сообщается, что, в то время, как на задачах CV использование adversarial training приводит к улучшению генерализации и устойчивости модели к шуму за счёт некоторых потерь в точности, на задаче LM иногда наблюдается другой эффект -- улучшается как генерализация, так и точность.
Идея используемого adversarial подхода довольно проста -- после того, как мы сделали lookup за эмбеддингами токенов батча, мы их немного "портим", добавляя шум, и используем такие зашумлённые версии для обучения с тем же таргетом, что и в оригинале. Степень зашумления ограничивается небольшой евклидовой нормой добавляемого тензора шума. При этом позиционные и прочие служебные эмбеддинги не трогаем. В каком-то абстрактном смысле это отдалённо похоже на data augmentation подход. Шум, однако, у нас не случайный, а adversarial, т.е. всякий раз мы пытаемся подсунуть наиболее сложное для сети искажение.
В работе Madry et al. (2018) показано, что для поиска такого сложного зашумления можно использовать PGD (projected gradient descent): метод, в котором градиент проецируется на epsilon-сферу, и это помогает стабилизировать обучение. Проблема в том, для одного надёжного шага "спуска по шуму" нужно накопить несколько (К) forward-backward проходов по сети, что в случае с большими моделями и датасетами совсем не практично -- приводит к удорожанию обучения в К раз. В более поздних работах (модели FreeAT и YOPO) предлагается так или иначе экономить на расчётах, например, делая обновление градиента adversarial шума только раз в К шагов спуска основной модели.
Авторы данной работы предлагают новую схему (FreeLB) одновременной оптимизации сети и подстройки шума: при обработке минибатча будем делать К шагов по градиенту основной модели, накапливая его и пересчитывая оптимальный шум на основании текущего накопленного градиента на каждом шаге, а в конце разово применим итоговый накопленный градиент основной модели. Предлагается некоторое теоретическое обоснование, почему такой подход даёт более устойчивое обучение чем обычный PGD.
Дополнительно обсуждается возможность использования дропаутов при таком обучении (обычно в таких adversarial схемах dropout не используют) -- авторы предлагают фиксировать одинаковую маску дропаута на К шагов, примерно так, как это было сделано в Variational Dropout. Такой подход позволяет использовать dropout одновременно с adversarial training, и на ablation study (таб. 4) показано, что это даёт заметный профит.
В итоге, на тестовых задачах оптимизация с FreeLB показала лучшие результаты, обогнав как ванильные BERT и RoBERTa, так и варианты с PDG, FreeAT и YOPO.
Just Add Functions: A Neural-Symbolic Language Model
David Demeter, Doug Downey
Статья: https://arxiv.org/abs/1912.05421
Прикольная статья про расширение нейросетевых языковых моделей (Neural Network Language Model, NNLM) более правильными inductive biases путём внедрения простых функций. Эти функции явно кодируют символьные отношения и выдают вероятностные распределения для слов.
У NNLM есть проблемы с некоторыми текстами, например, если там встречаются определённые пространственные, временные или количественные отношения.
Например, предсказание последнего слова в тексте:
William the Conqueror won the Battle of Hastings in 1066, and died in [1087]
где мы знаем, что это скорее всего четырёхзначное число большее (но не сильно) 1066.
Или в тексте:
Exciting European cities are Paris, Rome and [London]
где мы скорее всего ожидаем что-то географически близкое к перечисленным.
Эту всю логику довольно непросто заложить в классические NNLM, но можно легко описать простыми математическими или логическими выражениями.
Собственно после добавления в модель таких функций и получается нейро-символьная языковая модель (Neuro-Symbolic Language Model, NSLM).
NSLM представляет собой иерархическую NNLM (HNLM), генерирующую совместное распределение классов и слов. Простые функции используются для явного кодирования вероятностных распределений слов внутри класса. В работе такие функции называются микро-моделями (micro-models, MM). В обычных иерархических языковых моделях на месте микро-модели была бы какая-то другая сеточка.
Например, для класса <год> такой функцией может быть гауссиана (параметры которой выучены из данных), задающая дельту (в годах) между предыдущей уже встреченной в тексте датой (годом) и текущим словом, про которое модель решила, что это класс <год>.
Микро-модель задаётся метрической функцией (например, вычисляющей численную разницу между значениями двух токенов в случае класса <год>) и вероятностным распределением (PDF, в которую это значение трансформируется).
В работе NSLM делается на базе LSTM и разбираются классы про числа (year, day, round, decimal, range, convert) и географию (city, state, country).
NSLM бьёт по perplexity различные бейзлайны (LSTM NNLM, HNLM, character RNN, Neural cache models). На больших датасетах преимущество не настолько большое, но всё равно остаётся значительным на редких токенах. Более хитрые бейзлайны (например, с эмбеддингами, обученными на 6B корпусе, или с добавлением в эмбеддинги географических координат) тоже бьёт. И более продвинутую современную AWD-LSTM бьёт.
В общем получился красивый простой метод затачивания NNLM под доменно-специфичные задачи.
David Demeter, Doug Downey
Статья: https://arxiv.org/abs/1912.05421
Прикольная статья про расширение нейросетевых языковых моделей (Neural Network Language Model, NNLM) более правильными inductive biases путём внедрения простых функций. Эти функции явно кодируют символьные отношения и выдают вероятностные распределения для слов.
У NNLM есть проблемы с некоторыми текстами, например, если там встречаются определённые пространственные, временные или количественные отношения.
Например, предсказание последнего слова в тексте:
William the Conqueror won the Battle of Hastings in 1066, and died in [1087]
где мы знаем, что это скорее всего четырёхзначное число большее (но не сильно) 1066.
Или в тексте:
Exciting European cities are Paris, Rome and [London]
где мы скорее всего ожидаем что-то географически близкое к перечисленным.
Эту всю логику довольно непросто заложить в классические NNLM, но можно легко описать простыми математическими или логическими выражениями.
Собственно после добавления в модель таких функций и получается нейро-символьная языковая модель (Neuro-Symbolic Language Model, NSLM).
NSLM представляет собой иерархическую NNLM (HNLM), генерирующую совместное распределение классов и слов. Простые функции используются для явного кодирования вероятностных распределений слов внутри класса. В работе такие функции называются микро-моделями (micro-models, MM). В обычных иерархических языковых моделях на месте микро-модели была бы какая-то другая сеточка.
Например, для класса <год> такой функцией может быть гауссиана (параметры которой выучены из данных), задающая дельту (в годах) между предыдущей уже встреченной в тексте датой (годом) и текущим словом, про которое модель решила, что это класс <год>.
Микро-модель задаётся метрической функцией (например, вычисляющей численную разницу между значениями двух токенов в случае класса <год>) и вероятностным распределением (PDF, в которую это значение трансформируется).
В работе NSLM делается на базе LSTM и разбираются классы про числа (year, day, round, decimal, range, convert) и географию (city, state, country).
NSLM бьёт по perplexity различные бейзлайны (LSTM NNLM, HNLM, character RNN, Neural cache models). На больших датасетах преимущество не настолько большое, но всё равно остаётся значительным на редких токенах. Более хитрые бейзлайны (например, с эмбеддингами, обученными на 6B корпусе, или с добавлением в эмбеддинги географических координат) тоже бьёт. И более продвинутую современную AWD-LSTM бьёт.
В общем получился красивый простой метод затачивания NNLM под доменно-специфичные задачи.