Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks
Lewis et al. [Facebook]
arxiv.org/abs/2005.11401
Новая open domain question answering моделька от фейсбука мёржит seq2seq подход (T5/BART) с графами знаний. Мне почему-то такой подход кажется одновременно и очень практически полезным и несколько тупиковым, но всё равно интересным.
Основная идея: (предтренированный) attention учится искать по индексу документов, а (предтренированный) генератор обуславливается на то, что нашли. Всё файнтюнится end-to-end.
Lewis et al. [Facebook]
arxiv.org/abs/2005.11401
Новая open domain question answering моделька от фейсбука мёржит seq2seq подход (T5/BART) с графами знаний. Мне почему-то такой подход кажется одновременно и очень практически полезным и несколько тупиковым, но всё равно интересным.
Основная идея: (предтренированный) attention учится искать по индексу документов, а (предтренированный) генератор обуславливается на то, что нашли. Всё файнтюнится end-to-end.
Подвезли GPT-3
175 B параметров!
завтра подробно разберём
twitter.com/arankomatsuzaki/status/1266172138773307392
175 B параметров!
завтра подробно разберём
twitter.com/arankomatsuzaki/status/1266172138773307392
Twitter
Aran Komatsuzaki
Language Models are Few-Shot Learners - GPT 3 (175B params) causal LM - matches with sota fine-tuned performance with few-shot learning on various tasks - can write indistinguishable news articles https://t.co/0wZ036lnMn
Language Models are Few-Shot Learners
Brown, Mann, Ryder, Subbiah et al. [OpenAI]
arxiv.org/abs/2005.14165
Очевидный результат, про который все и так будут говорить - натренировали модель в 175B параметров. Для сравнения, в BERT large 340M, а в GPT2 - 1.5B. Генерит ещё более правдоподобные тексты, которые люди уже не могут отличить от настоящих (accuracy 52%), даже не смотря на то, что они тратят больше времени на ответ, чем с маленькими моделями (на ~20% больше относительно 1B).
А теперь про неочевидные результаты. Мы знаем, что языковые модели могут решать прикладные задачи без обучения. Однако для адекватного качества нужны очень большие модели (возможно, в тысячи раз больше GPT-3). Новые результаты показывают, что в few-shot сеттинге метрика от размера модели растёт несколько быстрее. Получается, LM с увеличеннием размера (модели и датасета) не только учат common sence, но и учатся быстрее генерализовывать по нескольким примерам. Также интересно то, что в статье имеется в виду под few-shot - это не обучение/файнтюнинг модели, в том виде, как мы привыкли. Это просто подача текста вида "x1 : y1, x2:y2, x3: ", где вся небольшая "обучающая выборка" подаётся на вход модели и она должна продолжить её. Такой подход позволил получить SOTA на TriviaQA (настоящий SOTA, в сравнении с моделями обученными на всём датасете) и в срееднем результаты не хуже зафайтнюненого BERT Large.
Но есть одно но. 175B параметров - это 700Гб (350Гб в fp16), так что скорее всего она не поместится в твою *080Ti ещё лет так 5.
Статья очень большая и интересная, советую заглянуть в секцию results, чтобы посмотреть на них подробнее или хотя бы глянуть графики.
Также зарилизили репозиторий, но в нём ничего полезного нет
Brown, Mann, Ryder, Subbiah et al. [OpenAI]
arxiv.org/abs/2005.14165
Очевидный результат, про который все и так будут говорить - натренировали модель в 175B параметров. Для сравнения, в BERT large 340M, а в GPT2 - 1.5B. Генерит ещё более правдоподобные тексты, которые люди уже не могут отличить от настоящих (accuracy 52%), даже не смотря на то, что они тратят больше времени на ответ, чем с маленькими моделями (на ~20% больше относительно 1B).
А теперь про неочевидные результаты. Мы знаем, что языковые модели могут решать прикладные задачи без обучения. Однако для адекватного качества нужны очень большие модели (возможно, в тысячи раз больше GPT-3). Новые результаты показывают, что в few-shot сеттинге метрика от размера модели растёт несколько быстрее. Получается, LM с увеличеннием размера (модели и датасета) не только учат common sence, но и учатся быстрее генерализовывать по нескольким примерам. Также интересно то, что в статье имеется в виду под few-shot - это не обучение/файнтюнинг модели, в том виде, как мы привыкли. Это просто подача текста вида "x1 : y1, x2:y2, x3: ", где вся небольшая "обучающая выборка" подаётся на вход модели и она должна продолжить её. Такой подход позволил получить SOTA на TriviaQA (настоящий SOTA, в сравнении с моделями обученными на всём датасете) и в срееднем результаты не хуже зафайтнюненого BERT Large.
Но есть одно но. 175B параметров - это 700Гб (350Гб в fp16), так что скорее всего она не поместится в твою *080Ti ещё лет так 5.
Статья очень большая и интересная, советую заглянуть в секцию results, чтобы посмотреть на них подробнее или хотя бы глянуть графики.
Также зарилизили репозиторий, но в нём ничего полезного нет
GitHub
GitHub - openai/gpt-3: GPT-3: Language Models are Few-Shot Learners
GPT-3: Language Models are Few-Shot Learners. Contribute to openai/gpt-3 development by creating an account on GitHub.
Новый релиз 🤗, теперь с лонгформером
https://github.com/huggingface/transformers/releases/tag/v2.11.0
https://github.com/huggingface/transformers/releases/tag/v2.11.0
GitHub
Release Longformer · huggingface/transformers
Longformer
Longformer (@ibeltagy)
Longformer for QA (@patil-suraj + @patrickvonplaten)
Longformer fast tokenizer (@patil-suraj)
Longformer for sequence classification (@patil-suraj)
Longformer for...
Longformer (@ibeltagy)
Longformer for QA (@patil-suraj + @patrickvonplaten)
Longformer fast tokenizer (@patil-suraj)
Longformer for sequence classification (@patil-suraj)
Longformer for...
Cascaded Text Generation with Markov Transformers
Deng and Ruch [Harvard and Cornell]
arxiv.org/abs/2006.01112
Интересная статья про альтернативу Beam Search для генерации текста. Cascaded decoding можно видеть как что-то обобщающее неавторегрессионные и авторегрессионные модели. Генерация происходит в несколько шагов: в начале вы считаете скоры слов как для неавторегресионной модели (предсказываете весь перевод целеком) и отбрасываете совсем маловероятные слова. После чего для оставшихся слов вы считаете скоры для двуграм (авторегресионно внутри каждой двуграммы) и отбрасываете самые маловероятные, потом для 3-gram итд, пока не успокоитесь.
Для того, чтобы эффективно считать скоры для n-gram авторы также предлогают Markov Transformer. По сути вы просто запрещаете биграммам смотреть друг на друга. Думаю, что это можно написатть следующим образом
Результаты: сравнимо с beam search по качеству (если добавить pseudolabelling с поомщью регрессионной модели), но в 3 раза быстрее.
зарелижен код
Deng and Ruch [Harvard and Cornell]
arxiv.org/abs/2006.01112
Интересная статья про альтернативу Beam Search для генерации текста. Cascaded decoding можно видеть как что-то обобщающее неавторегрессионные и авторегрессионные модели. Генерация происходит в несколько шагов: в начале вы считаете скоры слов как для неавторегресионной модели (предсказываете весь перевод целеком) и отбрасываете совсем маловероятные слова. После чего для оставшихся слов вы считаете скоры для двуграм (авторегресионно внутри каждой двуграммы) и отбрасываете самые маловероятные, потом для 3-gram итд, пока не успокоитесь.
Для того, чтобы эффективно считать скоры для n-gram авторы также предлогают Markov Transformer. По сути вы просто запрещаете биграммам смотреть друг на друга. Думаю, что это можно написатть следующим образом
rearrange(input, "bs (n_gram n) hid -> (bs n_gram) n hid", n_gram=4) без модификаций в архитектуре.Результаты: сравнимо с beam search по качеству (если добавить pseudolabelling с поомщью регрессионной модели), но в 3 раза быстрее.
зарелижен код
GitHub
GitHub - harvardnlp/cascaded-generation: Cascaded Text Generation with Markov Transformers
Cascaded Text Generation with Markov Transformers. Contribute to harvardnlp/cascaded-generation development by creating an account on GitHub.
А теперь хочется добавить критики и высказать свою боль по поводу зарелиженного кода.
Всё больше статей используют фреймворки не как фреймворки, а как часть кода. То есть, когда вы видете
В таком формате может быть нормально проверять свои гипотезы и разрабатывать ранние версии моделей. Но релизить такой код - это как-то невежливо и некрасиво по отношению к комьюнити. Потратье пару дней после сабмита статьи на то, чтобы причесать ваш код и сделать его минимальным. Тот же fairseq можно не модифицировать, а расширять - просто дописывать свои классы в своих файлах, а потом подключать к ванильному fairseq с помощью параметра
Если вы изобрели новую модель, которая делает что-то лучше остальных - позвольте другим использовать её простым и понятным образом. Это увеличит ваш impact, а impact - это ведь одна из главных причин, почему мы вообще занимаемся исследованями.
Помните, что вы пишете код один раз, а читаете его - десятки, а может быть и сотни раз. И не только вы.
Всё больше статей используют фреймворки не как фреймворки, а как часть кода. То есть, когда вы видете
import fairseq это не тот fairseq, который можно получить по pip install, это папка fairseq в конкретно этом проекте, где изменены 3 файла. Какие именно? Смотри по коммитам. А fairseq весьма большой, так что удачи. И это становится ещё хуже - иногда так добавлен не один фреймфорк, а несколько. В результате зарелиженный код может быть и добавляет статье воспроизводимости, но reusability остаётся нулевой.В таком формате может быть нормально проверять свои гипотезы и разрабатывать ранние версии моделей. Но релизить такой код - это как-то невежливо и некрасиво по отношению к комьюнити. Потратье пару дней после сабмита статьи на то, чтобы причесать ваш код и сделать его минимальным. Тот же fairseq можно не модифицировать, а расширять - просто дописывать свои классы в своих файлах, а потом подключать к ванильному fairseq с помощью параметра
--user-dir. В результате размер вашего репозитория уменьшается в сотни раз, позволяя проще модифицировать и переиспользовать ваш код.Если вы изобрели новую модель, которая делает что-то лучше остальных - позвольте другим использовать её простым и понятным образом. Это увеличит ваш impact, а impact - это ведь одна из главных причин, почему мы вообще занимаемся исследованями.
Помните, что вы пишете код один раз, а читаете его - десятки, а может быть и сотни раз. И не только вы.
И ссылочка на тред Thomas Wolf по этой же теме.
http://twitter.com/Thom_Wolf/status/1216990543533821952
http://twitter.com/Thom_Wolf/status/1216990543533821952
Twitter
Thomas Wolf
I often meet research scientists interested in open-sourcing their code/research and asking for advice. Here is a thread for you. First: why should you open-source models along with your paper? Because science is a virtuous circle of knowledge sharing not…
When Can Self-Attention Be Replaced by Feed Forward Layers?
Zhang et al. [University of Edinburgh]
arxiv.org/abs/2005.13895
Авторы тестировались на задачке speech-to-text, так что результат не факт, что обобщается на тексты, но по их наблюденям, можно просто выкинуть attention из последних 1-2 слоёв и не только прибавить в скорости, но и получить небольшой буст в метриках. В качестве бейзлайна сравнились с уменьшение количества слоёв.
Моей первой мыслью было попробовать запустить машинный перевод и посмотреть, как оно зайдёт. Но если внимательнее посмотреть на результаты статьи, они не такие убедительные. Ошибка падает с 9 до 8.9 на одном датасете и 3.5 до 3.4 на другом. Плюс, недавно я узнал, что BERT (по крайней мере 🤗) при обучении (MLM) использует не просто Linear для предсказания слов, a Linear->activation->LayerNorm->Linear. Так что в некотором смысле результаты этой статьи уже известны.
Zhang et al. [University of Edinburgh]
arxiv.org/abs/2005.13895
Авторы тестировались на задачке speech-to-text, так что результат не факт, что обобщается на тексты, но по их наблюденям, можно просто выкинуть attention из последних 1-2 слоёв и не только прибавить в скорости, но и получить небольшой буст в метриках. В качестве бейзлайна сравнились с уменьшение количества слоёв.
Моей первой мыслью было попробовать запустить машинный перевод и посмотреть, как оно зайдёт. Но если внимательнее посмотреть на результаты статьи, они не такие убедительные. Ошибка падает с 9 до 8.9 на одном датасете и 3.5 до 3.4 на другом. Плюс, недавно я узнал, что BERT (по крайней мере 🤗) при обучении (MLM) использует не просто Linear для предсказания слов, a Linear->activation->LayerNorm->Linear. Так что в некотором смысле результаты этой статьи уже известны.
Моделька, которая переводит ваш код с одного языка программирования на другой (C++ <=> Java <=> Python). Без параллельной разметки для обучения. Использовали те же самые алгоритмы, которые применяются для unsupervised перевода в человеческих языках и они неплохо работают.
Забавно как сделали тестсет - набрали примеры алгоритмов на geeksforgeeks, там есть примеры имплементаций на разных языках.
подробнее в треде
twitter.com/GuillaumeLample/status/1269982022413570048
Забавно как сделали тестсет - набрали примеры алгоритмов на geeksforgeeks, там есть примеры имплементаций на разных языках.
подробнее в треде
twitter.com/GuillaumeLample/status/1269982022413570048
Twitter
Guillaume Lample
Unsupervised Translation of Programming Languages. Feed a model with Python, C++, and Java source code from GitHub, and it automatically learns to translate between the 3 languages in a fully unsupervised way. https://t.co/FpUL886KS7 with @MaLachaux @b_roziere…