This media is not supported in your browser
VIEW IN TELEGRAM
An illustration of the proposed SimCLR framework. The CNN and MLP layers are trained simultaneously to yield projections that are similar for augmented versions of the same image, while being dissimilar for different images, even if those images are of the same class of object. The trained model not only does well at identifying different transformations of the same image, but also learns representations of similar concepts (e.g., chairs vs. dogs), which later can be associated with labels through fine-tuning.
Contrastive Code Representation Learning
Paras Jain, Ajay Jain, Tianjun Zhang, Pieter Abbeel, Joseph E. Gonzalez, Ion Stoica
Статья: https://arxiv.org/abs/2007.04973
Код: https://github.com/parasj/contracode
Про большие модели продолжу в следующий раз, а сейчас расскажу про ещё один кейс использования contrastive learning, но теперь для задачи работы с кодом! Благо вышла свежая работа от команды из Беркли.
Как и в случае SimCLR, идея в том, чтобы в режиме self-supervised с применением contrastive loss выучить какие-то интересные представления для кода, на которых потом можно файнтюнить интересные и полезные задачи -- суммаризацию кода, предсказание типов, автокомплит, определение ошибок и т.д.
Потенциал идеи огромен. Как минимум появятся более удобные тулы, позволяющие программистам удобнее и быстрее создавать надёжный код. Как максимум, генерация неотличимого от человеческого кода может стать обычным делом, как сейчас происходит с языком. Кстати, если вы ещё не видели примеры, как GPT-3 (зафайнтюненый на гитхабе) умеет писать питоновский код по текстовому описанию функций (https://www.youtube.com/watch?v=fZSFNUT6iY8) или отвечает на вопросы телефонного интервью по Ruby (https://twitter.com/lacker/status/1279136788326432771, этот вроде дефолтный), гляньте, это просветляет.
Проблема с кодом -- это отсутствие больших размеченных датасетов. Можно, конечно, заходить со стороны генерации данных, но получается несколько однобоко, по сравнению с реальным кодом. Есть неразмеченные, и с ними надо что-то делать. Self-supervised pre-training как раз подходящий инструмент для этого.
Уже были заходы на прикрутить берт к коду, например, CodeBERT (https://arxiv.org/abs/2002.08155) или CuBERT (https://arxiv.org/abs/2001.00059), были и другие заходы на эмбеддинги для кода (code2vec, code2seq и т.п.), но, кажется, результат пока не очень.
Авторы исходят из посылки, что программы с одинаковой функциональностью должны обладать одинаковыми репрезентациями (а с разной, соответственно, разными). Уже попахивает contrastive learning.
По имеющимся программам определить их эквивалентность не очень-то просто (в общем случае, конечно, вообще нельзя), но можно попробовать нагенерить вариантов различными модификациями имеющихся программ (типа аугментация для кода). Авторский подход под названием ContraCode использует это для выучивания интересных репрезентаций через contrastive learning.
Для генерации эквивалентных вариантов используют переименование переменных, переформатирование кода, обфускацию, вставку и удаление мёртвого кода, сворачивание констант, конвертацию типов (например, true в 1), плюс ещё subword regularization (влияет на токенизацию, но в целом это кажется не про модификацию кода) и сэмплирование строк (например, выбирают 90% строк, что конечно приводит к не-эквивалентности, но зато работает как регуляризация).
На этих вариантах делают contrastive pre-training, минимизируя InfoNCE loss (https://arxiv.org/abs/1807.03748), который определяет близость программ через скалярное произведение их эмбеддингов. Позитивные пары берутся из пар эквивалентных программ (полученных трансформацией), негативные из прошлых программ (хранятся в большой очереди, шансов что там затерялось что-то эквивалентное, мало).
Для обучения используется процедура аналогичная MoCo (конкурент SimCLR, https://arxiv.org/abs/1911.05722), где один энкодер обучается SGD, а второй архитектурно идентичный momentum encoder через EMA (exponential moving average) параметров первого энкодера. Сам энкодер может быть разным, здесь проверяют на BiLSTM и трансформере.
После предобучения делают трансфер на задачу, добавляя специфичную для неё голову декодера (MLP, LSTM, трансформер).
Для предобучения берут датасет CodeSearchNet (https://github.com/github/CodeSearchNet) и из него только JavaScript. Размеченные программы из него же используют для задачи extreme code summarization (надо предсказать имя метода). Также берут датасет от DeepTyper (https://github.com/DeepTyper/DeepTyper) и на примерах TypeScript из него обучают вывод типа.
Paras Jain, Ajay Jain, Tianjun Zhang, Pieter Abbeel, Joseph E. Gonzalez, Ion Stoica
Статья: https://arxiv.org/abs/2007.04973
Код: https://github.com/parasj/contracode
Про большие модели продолжу в следующий раз, а сейчас расскажу про ещё один кейс использования contrastive learning, но теперь для задачи работы с кодом! Благо вышла свежая работа от команды из Беркли.
Как и в случае SimCLR, идея в том, чтобы в режиме self-supervised с применением contrastive loss выучить какие-то интересные представления для кода, на которых потом можно файнтюнить интересные и полезные задачи -- суммаризацию кода, предсказание типов, автокомплит, определение ошибок и т.д.
Потенциал идеи огромен. Как минимум появятся более удобные тулы, позволяющие программистам удобнее и быстрее создавать надёжный код. Как максимум, генерация неотличимого от человеческого кода может стать обычным делом, как сейчас происходит с языком. Кстати, если вы ещё не видели примеры, как GPT-3 (зафайнтюненый на гитхабе) умеет писать питоновский код по текстовому описанию функций (https://www.youtube.com/watch?v=fZSFNUT6iY8) или отвечает на вопросы телефонного интервью по Ruby (https://twitter.com/lacker/status/1279136788326432771, этот вроде дефолтный), гляньте, это просветляет.
Проблема с кодом -- это отсутствие больших размеченных датасетов. Можно, конечно, заходить со стороны генерации данных, но получается несколько однобоко, по сравнению с реальным кодом. Есть неразмеченные, и с ними надо что-то делать. Self-supervised pre-training как раз подходящий инструмент для этого.
Уже были заходы на прикрутить берт к коду, например, CodeBERT (https://arxiv.org/abs/2002.08155) или CuBERT (https://arxiv.org/abs/2001.00059), были и другие заходы на эмбеддинги для кода (code2vec, code2seq и т.п.), но, кажется, результат пока не очень.
Авторы исходят из посылки, что программы с одинаковой функциональностью должны обладать одинаковыми репрезентациями (а с разной, соответственно, разными). Уже попахивает contrastive learning.
По имеющимся программам определить их эквивалентность не очень-то просто (в общем случае, конечно, вообще нельзя), но можно попробовать нагенерить вариантов различными модификациями имеющихся программ (типа аугментация для кода). Авторский подход под названием ContraCode использует это для выучивания интересных репрезентаций через contrastive learning.
Для генерации эквивалентных вариантов используют переименование переменных, переформатирование кода, обфускацию, вставку и удаление мёртвого кода, сворачивание констант, конвертацию типов (например, true в 1), плюс ещё subword regularization (влияет на токенизацию, но в целом это кажется не про модификацию кода) и сэмплирование строк (например, выбирают 90% строк, что конечно приводит к не-эквивалентности, но зато работает как регуляризация).
На этих вариантах делают contrastive pre-training, минимизируя InfoNCE loss (https://arxiv.org/abs/1807.03748), который определяет близость программ через скалярное произведение их эмбеддингов. Позитивные пары берутся из пар эквивалентных программ (полученных трансформацией), негативные из прошлых программ (хранятся в большой очереди, шансов что там затерялось что-то эквивалентное, мало).
Для обучения используется процедура аналогичная MoCo (конкурент SimCLR, https://arxiv.org/abs/1911.05722), где один энкодер обучается SGD, а второй архитектурно идентичный momentum encoder через EMA (exponential moving average) параметров первого энкодера. Сам энкодер может быть разным, здесь проверяют на BiLSTM и трансформере.
После предобучения делают трансфер на задачу, добавляя специфичную для неё голову декодера (MLP, LSTM, трансформер).
Для предобучения берут датасет CodeSearchNet (https://github.com/github/CodeSearchNet) и из него только JavaScript. Размеченные программы из него же используют для задачи extreme code summarization (надо предсказать имя метода). Также берут датасет от DeepTyper (https://github.com/DeepTyper/DeepTyper) и на примерах TypeScript из него обучают вывод типа.
GitHub
GitHub - parasj/contracode: Contrastive Code Representation Learning: functionality-based JavaScript embeddings through self-supervised…
Contrastive Code Representation Learning: functionality-based JavaScript embeddings through self-supervised learning - parasj/contracode
🔥1
Результат? Работает несколько лучше предыдущих методов. Бертоподобные репрезентации, работающие через MLM (Masked Language Model), показывают себя слабенько, а аугментации ContaCode помогают обычному supervised обучению даже без претрейнинга.
Может не выглядит как суперпрорыв по цифрам, но направление прикольное. И contrastive learning в последнее время всё более популярен. Следите за обоими!
Может не выглядит как суперпрорыв по цифрам, но направление прикольное. И contrastive learning в последнее время всё более популярен. Следите за обоими!
AlgebraNets
Jordan Hoffmann, Simon Schmitt, Simon Osindero, Karen Simonyan, Erich Elsen
Статья: https://arxiv.org/abs/2006.07360
Очень прикольная работа от DeepMind. Из серии “А что, так можно было?!”.
Все привыкли, что нейросети работают над полем вещественных чисел — входы, выходы, веса, активации — всё вещественное. Но как говорил нам Кантор, «сущность математики заключена в её свободе». Алгебра вещественных чисел — не единственная возможная алгебра и, что, если есть другие полезные алгебры для работы нейросетей? А они есть!
И в общем подходы уже были: с комплексными числами — Deep Complex Networks (https://arxiv.org/abs/1705.09792), Complex Gated Recurrent Neural Networks (https://arxiv.org/abs/1806.08267), Harmonic Networks (https://arxiv.org/abs/1612.04642), Complex Transformer (https://arxiv.org/abs/1910.10202), да и вообще давно уже дофига всего было (https://www.worldscientific.com/worldscibooks/10.1142/5345); с кватернионами — Deep Quaternion Networks (https://arxiv.org/abs/1712.04604), Quaternion Recurrent Neural Networks (https://arxiv.org/abs/1806.04418); и с октонионами — Deep Octonion Networks (https://arxiv.org/abs/1903.08478).
Теперь более общее решение — давайте заменим алгебру действительных чисел другими ассоциативными алгебрами: скаляры — кортежами (tuple), а вещественное умножение на умножение кортежей.
В качестве альтернативных алгебр предлагаются: комплексные числа, квадратные матрицы вещественных чисел размера 2, 3 и 4, квадратные комплексные матрицы размера 2, кватернионы, диагональные алгебры, дуальные числа и алгебра трёхэлементных векторов с векторным произведением.
Зачем вообще туда копать? Ради большей эффективности по параметрам (их может потребоваться меньше, чем у вещественных альтернатив) или по вычислениям (например, количество операций на каждое загруженное значение может быть разным и это может быть важно при оптимизации под конкретное железо). Для вещественных чисел на каждые два загруженных числа одно умножение, у комплексных уже на каждые 4 загруженных значения 4 умножения, у 4x4 вещественных матриц на 32 значения 64 умножения. Может сыграть для задач, где производительность ограничена пропускной способностью шины ускорителя.
Ну и вообще это открывает другое измерение в поиске новых архитектур и правильных inductive biases.
Всё это добро проверяют на больших моделях на ImageNet, Enwik8 и WikiText. Результаты интересные.
На ImageNet получают более эффективные по параметрам ResNet и MobileNet, требующие не больше FLOPS по сравнению с бейзлайном. Есть также интересные результаты прунинга модифицированных ResNet, которые получаются более вычислительно эффективными. Transformer-XL на Enwik8 требует меньше параметров для того же качества. Модифицированный GRU также весьма эффективен.
Особенный фаворит из алгебр — это квадратные вещественные матрицы размера 2, они лучше всех ранее рассмотренных алгебр, и по FLOPSам не уступают вещественным числам.
В общем интересное направление. Достойно продолжения.
Jordan Hoffmann, Simon Schmitt, Simon Osindero, Karen Simonyan, Erich Elsen
Статья: https://arxiv.org/abs/2006.07360
Очень прикольная работа от DeepMind. Из серии “А что, так можно было?!”.
Все привыкли, что нейросети работают над полем вещественных чисел — входы, выходы, веса, активации — всё вещественное. Но как говорил нам Кантор, «сущность математики заключена в её свободе». Алгебра вещественных чисел — не единственная возможная алгебра и, что, если есть другие полезные алгебры для работы нейросетей? А они есть!
И в общем подходы уже были: с комплексными числами — Deep Complex Networks (https://arxiv.org/abs/1705.09792), Complex Gated Recurrent Neural Networks (https://arxiv.org/abs/1806.08267), Harmonic Networks (https://arxiv.org/abs/1612.04642), Complex Transformer (https://arxiv.org/abs/1910.10202), да и вообще давно уже дофига всего было (https://www.worldscientific.com/worldscibooks/10.1142/5345); с кватернионами — Deep Quaternion Networks (https://arxiv.org/abs/1712.04604), Quaternion Recurrent Neural Networks (https://arxiv.org/abs/1806.04418); и с октонионами — Deep Octonion Networks (https://arxiv.org/abs/1903.08478).
Теперь более общее решение — давайте заменим алгебру действительных чисел другими ассоциативными алгебрами: скаляры — кортежами (tuple), а вещественное умножение на умножение кортежей.
В качестве альтернативных алгебр предлагаются: комплексные числа, квадратные матрицы вещественных чисел размера 2, 3 и 4, квадратные комплексные матрицы размера 2, кватернионы, диагональные алгебры, дуальные числа и алгебра трёхэлементных векторов с векторным произведением.
Зачем вообще туда копать? Ради большей эффективности по параметрам (их может потребоваться меньше, чем у вещественных альтернатив) или по вычислениям (например, количество операций на каждое загруженное значение может быть разным и это может быть важно при оптимизации под конкретное железо). Для вещественных чисел на каждые два загруженных числа одно умножение, у комплексных уже на каждые 4 загруженных значения 4 умножения, у 4x4 вещественных матриц на 32 значения 64 умножения. Может сыграть для задач, где производительность ограничена пропускной способностью шины ускорителя.
Ну и вообще это открывает другое измерение в поиске новых архитектур и правильных inductive biases.
Всё это добро проверяют на больших моделях на ImageNet, Enwik8 и WikiText. Результаты интересные.
На ImageNet получают более эффективные по параметрам ResNet и MobileNet, требующие не больше FLOPS по сравнению с бейзлайном. Есть также интересные результаты прунинга модифицированных ResNet, которые получаются более вычислительно эффективными. Transformer-XL на Enwik8 требует меньше параметров для того же качества. Модифицированный GRU также весьма эффективен.
Особенный фаворит из алгебр — это квадратные вещественные матрицы размера 2, они лучше всех ранее рассмотренных алгебр, и по FLOPSам не уступают вещественным числам.
В общем интересное направление. Достойно продолжения.
arXiv.org
Harmonic Networks: Deep Translation and Rotation Equivariance
Translating or rotating an input image should not affect the results of many computer vision tasks. Convolutional neural networks (CNNs) are already translation equivariant: input image...
LoCo: Local Contrastive Representation Learning
Yuwen Xiong, Mengye Ren, Raquel Urtasun
Статья: https://arxiv.org/abs/2008.01342
Попахивает серьёзным прорывом. Локальный (!) метод unsupervised representation learning, сравнимый с полноценными end-to-end (не-локальными) вариантами, и заодно превосходящий качество supervised end-to-end аналогов на ImageNet.
Как так? Разберёмся!
Недавно мы писали про SimCLRv2 (https://news.1rj.ru/str/gonzo_ML/324), довольно простой по сути метод unsupervised representation learning, дающий офигенное качество и превосходящий supervised бейзлайны (что уже неимоверно круто). Метод, как вы помните, основан на contrastive learning, выучивающий такие представления, что у трансформаций одной и той же картинки они близкие, а у разных — далёкие.
Contrastive learning в этом году наступает по всем фронтам, вполне можно назвать его одной из “Технологий года”. Различных примеров его применения множество, результаты хорошие, наверняка будут ещё. Например, про применение его к программному коду мы писали совсем недавно (https://news.1rj.ru/str/gonzo_ML/330).
SimCLR прекрасен, но одна проблема — он end-to-end, обучать такое дорого (и по времени, и по памяти), градиенты с верхнего слоя должны дойти до нижнего. Ну то есть не то, чтобы прям проблема, все практически сети сейчас так обучаются, но давно уже зреет убеждение, что эта история далека от biological plausibility, мозг работает не так, не ходят там градиенты через 100500 слоёв (а если и ходят, то никто пока не нашёл, где и как; но всё равно вряд ли). Все больше верят в local learning — правила, которые работают локально, по типу правила Хебба (“Fire together, wire together”) или STDP.
Попыток создать рабочие варианты локальных методов обучения множество. В прошлом году появился метод под названием Greedy InfoMax (https://arxiv.org/abs/1905.11786), использующий локально contrastive learning для каждого блока. Он показал интересные результаты (правда на сравнительно маленьком датасете STL-10). Но как показывают авторы текущей статьи, до end-to-end self-supervised фреймворков (подразумеваем SimCLR ещё v1, не более новый v2) он не дотягивает, разница в итоговом качестве заметная.
Хочется сделать локальный метод с качеством end-to-end метода (SimCLR). Оказывается, это возможно. Встречайте LoCo — Local Contrastive Representation Learning!
LoCo отличается от Greedy InfoMax (GIM) тем, что в последнем InfoNCE (классический contrastive loss) добавлялся к каждому блоку ResNet’а, а в LoCo блоки объединяются в группы по два, и каждый блок в одной группе выступает “верхним” (с которого идут градиенты), а в другой “нижним” (куда идут градиенты от лосса). Веса при этом у них зашарены. По гипотезе авторов это должно было дать недостающий фидбек с верхних уровней сети, а также сделать более глубоким декодер (помните, SimCLRv2 тоже отличался от первой версии тем, что там классификаторы стали более глубокими).
И это работает!
Проверяются на двух архитектурах: ResNet-50 и ShuffleNet v2-50. Обучают на ImageNet-1K, в качестве downstream задач берут также Mask R-CNN на Cityscapes и COCO и проверяют на задачах object detection и instance segmentation.
Результат сопоставим с не-локальным SimCLR и ощутимо превосходит GIM! И (как и сам SimCLR) на большом количестве эпох ощутимо бьёт supervised бэйзлайн.
В общем выглядит это всё офигенно. Получается, не нужно ждать сигнала с самого верха сети, чтобы выучивать качественные представления (хотя косвенно через шаринг весов, наверное, всё-таки получается такая связь есть — проверялись разные стратегии шаринга, полноценный шаринг работает лучше всех). С такими методами должно стать сильно проще делать model parallelism — разносить разные части модели на разные вычислительные устройства и считать это всё впараллель.
Как практический бонус, это также даёт какую-то экономию памяти — не надо хранить кучу активаций для обновления каждого блока.
Короче, очень интересная движуха! Продолжаем наблюдение.
Yuwen Xiong, Mengye Ren, Raquel Urtasun
Статья: https://arxiv.org/abs/2008.01342
Попахивает серьёзным прорывом. Локальный (!) метод unsupervised representation learning, сравнимый с полноценными end-to-end (не-локальными) вариантами, и заодно превосходящий качество supervised end-to-end аналогов на ImageNet.
Как так? Разберёмся!
Недавно мы писали про SimCLRv2 (https://news.1rj.ru/str/gonzo_ML/324), довольно простой по сути метод unsupervised representation learning, дающий офигенное качество и превосходящий supervised бейзлайны (что уже неимоверно круто). Метод, как вы помните, основан на contrastive learning, выучивающий такие представления, что у трансформаций одной и той же картинки они близкие, а у разных — далёкие.
Contrastive learning в этом году наступает по всем фронтам, вполне можно назвать его одной из “Технологий года”. Различных примеров его применения множество, результаты хорошие, наверняка будут ещё. Например, про применение его к программному коду мы писали совсем недавно (https://news.1rj.ru/str/gonzo_ML/330).
SimCLR прекрасен, но одна проблема — он end-to-end, обучать такое дорого (и по времени, и по памяти), градиенты с верхнего слоя должны дойти до нижнего. Ну то есть не то, чтобы прям проблема, все практически сети сейчас так обучаются, но давно уже зреет убеждение, что эта история далека от biological plausibility, мозг работает не так, не ходят там градиенты через 100500 слоёв (а если и ходят, то никто пока не нашёл, где и как; но всё равно вряд ли). Все больше верят в local learning — правила, которые работают локально, по типу правила Хебба (“Fire together, wire together”) или STDP.
Попыток создать рабочие варианты локальных методов обучения множество. В прошлом году появился метод под названием Greedy InfoMax (https://arxiv.org/abs/1905.11786), использующий локально contrastive learning для каждого блока. Он показал интересные результаты (правда на сравнительно маленьком датасете STL-10). Но как показывают авторы текущей статьи, до end-to-end self-supervised фреймворков (подразумеваем SimCLR ещё v1, не более новый v2) он не дотягивает, разница в итоговом качестве заметная.
Хочется сделать локальный метод с качеством end-to-end метода (SimCLR). Оказывается, это возможно. Встречайте LoCo — Local Contrastive Representation Learning!
LoCo отличается от Greedy InfoMax (GIM) тем, что в последнем InfoNCE (классический contrastive loss) добавлялся к каждому блоку ResNet’а, а в LoCo блоки объединяются в группы по два, и каждый блок в одной группе выступает “верхним” (с которого идут градиенты), а в другой “нижним” (куда идут градиенты от лосса). Веса при этом у них зашарены. По гипотезе авторов это должно было дать недостающий фидбек с верхних уровней сети, а также сделать более глубоким декодер (помните, SimCLRv2 тоже отличался от первой версии тем, что там классификаторы стали более глубокими).
И это работает!
Проверяются на двух архитектурах: ResNet-50 и ShuffleNet v2-50. Обучают на ImageNet-1K, в качестве downstream задач берут также Mask R-CNN на Cityscapes и COCO и проверяют на задачах object detection и instance segmentation.
Результат сопоставим с не-локальным SimCLR и ощутимо превосходит GIM! И (как и сам SimCLR) на большом количестве эпох ощутимо бьёт supervised бэйзлайн.
В общем выглядит это всё офигенно. Получается, не нужно ждать сигнала с самого верха сети, чтобы выучивать качественные представления (хотя косвенно через шаринг весов, наверное, всё-таки получается такая связь есть — проверялись разные стратегии шаринга, полноценный шаринг работает лучше всех). С такими методами должно стать сильно проще делать model parallelism — разносить разные части модели на разные вычислительные устройства и считать это всё впараллель.
Как практический бонус, это также даёт какую-то экономию памяти — не надо хранить кучу активаций для обновления каждого блока.
Короче, очень интересная движуха! Продолжаем наблюдение.
Telegram
gonzo-обзоры ML статей
Big Self-Supervised Models are Strong Semi-Supervised Learners
Ting Chen, Simon Kornblith, Kevin Swersky, Mohammad Norouzi, Geoffrey Hinton
Статья: https://arxiv.org/abs/2006.10029
Код: https://github.com/google-research/simclr
Продолжаем серию про большие…
Ting Chen, Simon Kornblith, Kevin Swersky, Mohammad Norouzi, Geoffrey Hinton
Статья: https://arxiv.org/abs/2006.10029
Код: https://github.com/google-research/simclr
Продолжаем серию про большие…
Language-agnostic BERT Sentence Embedding
Fangxiaoyu Feng, Yinfei Yang, Daniel Cer, Naveen Arivazhagan, Wei Wang
Статья: https://arxiv.org/abs/2007.01852
Модель: https://tfhub.dev/google/LaBSE
Пост: https://ai.googleblog.com/2020/08/language-agnostic-bert-sentence.html
В двух словах: LaBSE — более качественная замена multilingual BERT для эмбеддингов предложений. От Гугла.
Хорошие эмбеддинги предложений — это по-прежнему некоторый челлендж. А тем более мультиязычные эмбеддинги.
Обычный BERT и его мультиязычный вариант mBERT — это одна из дефолтных опций, но её качество ограничено. Masked language model (MLM) не даёт внутри себя хороших эмбеддингов предложений (не слов), и, вероятно, поэтому эмбеддинг [CLS] часто работает плохо и вместо него используют усреднение эмбеддингов всех токенов или файнтюнинг. При этом, качество mBERT всё же неожиданно высокое, имея в виду, что он НЕ обучался на параллельных текстах. mBERT поддерживает 104 языка (https://github.com/google-research/bert/blob/master/multilingual.md, https://huggingface.co/bert-base-multilingual-cased).
Из качественных эмбеддингов предложений есть сиамский Sentence-BERT (https://arxiv.org/abs/1908.10084), но он в оригинале моноязычный (default language), хотя вроде как есть модели на 100 языков (https://github.com/UKPLab/sentence-transformers), расскажите, если кто использовал.
Есть также multiningual universal sentence encoder (m-USE, https://arxiv.org/abs/1907.04307), расширение чисто английского USE также от Гугловой команды, включающей в себя Рэя Курцвейла (!). Уступает другим моделям, а особенно двуязычным. Он поддерживает 16 языков (https://tfhub.dev/google/universal-sentence-encoder-multilingual-large/3).
И, конечно, есть LASER от Фейсбука (https://research.fb.com/downloads/laser-language-agnostic-sentence-representations/). В отличие от вышеупомянутых моделей, построенных на трансформерах, этот использует BiLSTM. Обучен на 93 языках.
Авторы текущей работы попробовали собрать новую модель для многоязычных эмбеддингов предложений, взяв хорошие компоненты.
Что используется?
1. Используется фреймворк двойной энкодер (dual-encoder), в котором source и target предложения независимо обрабатываются общим энкодером, от которого берутся эмбеддинги [CLS] последнего слоя.
2. Используется additive margin softmax loss в негативным сэмплингом внутри батча (привет, contrastive learning!). По сути косинусная функция близости между эмбеддингами с добавлением margin (он явно помогает по результатам экспериментов), должна давать высокое значение для позитивных примеров (текст и его перевод) и низкое для негативных (текст и все остальные переводы в этом батче). Плюс эта штука bidirectional в том смысле, что сорс и таргет проверяются в обе стороны, и лосс является их суммой.
3. Дополнительно к этому негативный сэмплинг делается и между акселераторами (здесь TPU, но это не важно): предложения с других ускорителей считаются негативными примерами для текущего. Random negatives по сути, hard negative mining не показал улучшения, только ухудшение из-за уменьшения размера батча.
4. Предобучение энкодера с MLM (как BERT) + TLM (Translation Language Model, https://arxiv.org/abs/1901.07291). TLM — это расширение MLM, где предложения на двух языках конкатенируются и токены надо предсказывать в любой из частей, соответственно на разных языках. В текущей работе в отличие от оригинальной не используют language embedding. Модели по идее от этого сложнее, но с другой стороны должна уметь работать на языках, на которых не обучалась (и это так и есть!).
5. Используется progressive stacking алгоритм (http://proceedings.mlr.press/v97/gong19a.html), когда сначала обучают ¼ слоёв, затем их дублируют, обучают получившуюся половину, снова дублируют и обучают уже все слои.
Предобучают на моноязычных (CommonCrawl, Wikipedia) корпусах + двуязычных (намайнен из веба). Внутри много всякой фильтрации и чисток, качество датасета показано, что влияет ощутимо.
Fangxiaoyu Feng, Yinfei Yang, Daniel Cer, Naveen Arivazhagan, Wei Wang
Статья: https://arxiv.org/abs/2007.01852
Модель: https://tfhub.dev/google/LaBSE
Пост: https://ai.googleblog.com/2020/08/language-agnostic-bert-sentence.html
В двух словах: LaBSE — более качественная замена multilingual BERT для эмбеддингов предложений. От Гугла.
Хорошие эмбеддинги предложений — это по-прежнему некоторый челлендж. А тем более мультиязычные эмбеддинги.
Обычный BERT и его мультиязычный вариант mBERT — это одна из дефолтных опций, но её качество ограничено. Masked language model (MLM) не даёт внутри себя хороших эмбеддингов предложений (не слов), и, вероятно, поэтому эмбеддинг [CLS] часто работает плохо и вместо него используют усреднение эмбеддингов всех токенов или файнтюнинг. При этом, качество mBERT всё же неожиданно высокое, имея в виду, что он НЕ обучался на параллельных текстах. mBERT поддерживает 104 языка (https://github.com/google-research/bert/blob/master/multilingual.md, https://huggingface.co/bert-base-multilingual-cased).
Из качественных эмбеддингов предложений есть сиамский Sentence-BERT (https://arxiv.org/abs/1908.10084), но он в оригинале моноязычный (default language), хотя вроде как есть модели на 100 языков (https://github.com/UKPLab/sentence-transformers), расскажите, если кто использовал.
Есть также multiningual universal sentence encoder (m-USE, https://arxiv.org/abs/1907.04307), расширение чисто английского USE также от Гугловой команды, включающей в себя Рэя Курцвейла (!). Уступает другим моделям, а особенно двуязычным. Он поддерживает 16 языков (https://tfhub.dev/google/universal-sentence-encoder-multilingual-large/3).
И, конечно, есть LASER от Фейсбука (https://research.fb.com/downloads/laser-language-agnostic-sentence-representations/). В отличие от вышеупомянутых моделей, построенных на трансформерах, этот использует BiLSTM. Обучен на 93 языках.
Авторы текущей работы попробовали собрать новую модель для многоязычных эмбеддингов предложений, взяв хорошие компоненты.
Что используется?
1. Используется фреймворк двойной энкодер (dual-encoder), в котором source и target предложения независимо обрабатываются общим энкодером, от которого берутся эмбеддинги [CLS] последнего слоя.
2. Используется additive margin softmax loss в негативным сэмплингом внутри батча (привет, contrastive learning!). По сути косинусная функция близости между эмбеддингами с добавлением margin (он явно помогает по результатам экспериментов), должна давать высокое значение для позитивных примеров (текст и его перевод) и низкое для негативных (текст и все остальные переводы в этом батче). Плюс эта штука bidirectional в том смысле, что сорс и таргет проверяются в обе стороны, и лосс является их суммой.
3. Дополнительно к этому негативный сэмплинг делается и между акселераторами (здесь TPU, но это не важно): предложения с других ускорителей считаются негативными примерами для текущего. Random negatives по сути, hard negative mining не показал улучшения, только ухудшение из-за уменьшения размера батча.
4. Предобучение энкодера с MLM (как BERT) + TLM (Translation Language Model, https://arxiv.org/abs/1901.07291). TLM — это расширение MLM, где предложения на двух языках конкатенируются и токены надо предсказывать в любой из частей, соответственно на разных языках. В текущей работе в отличие от оригинальной не используют language embedding. Модели по идее от этого сложнее, но с другой стороны должна уметь работать на языках, на которых не обучалась (и это так и есть!).
5. Используется progressive stacking алгоритм (http://proceedings.mlr.press/v97/gong19a.html), когда сначала обучают ¼ слоёв, затем их дублируют, обучают получившуюся половину, снова дублируют и обучают уже все слои.
Предобучают на моноязычных (CommonCrawl, Wikipedia) корпусах + двуязычных (намайнен из веба). Внутри много всякой фильтрации и чисток, качество датасета показано, что влияет ощутимо.
research.google
Language-Agnostic BERT Sentence Embedding
Posted by Yinfei Yang and Fangxiaoyu Feng, Software Engineers, Google Research A multilingual embedding model is a powerful tool that encodes text ...