̶с̶а̶м̶̶о̶изолента мёбиуса
2.31K subscribers
13 photos
2 videos
1 file
175 links
Костыли и технологии для обработки естественных языков. Обзоры статей и личный опыт. by @cointegrated
Download Telegram
Тут народ жалуется, что мы цензурируем грубые слова в нашем переводе речи.
Прошу заметить, что это не так: мы не даём модели сквернословить без причины, но если на вход подать действительно оскорбительное аудио, то модель его переведёт, передав всю глубину чувств и нужную степень непристойности 😈

Вот пара видосов (осторожно, там грязные выражения!), которые я записал в нашей выразительной демке (там правда 4 языка только).
HalOmi poster vertical.pdf
2.1 MB
А я тем временем на EMNLP.
Пока что пассивно тусую на воркшопе WMT, а послезавтра буду презентовать статью HalOmi: A Manually Annotated Benchmark for Multilingual Hallucination and Omission Detection in Machine Translation.
По-хорошему, HalOmi заслуживает отдельного поста здесь, но я ленивый, поэтому просто прикрепляю постер и ссылку на получившйся бенчмарк.

Ну и да, если вы вдруг тоже тут, то приходите, поболтаем)
а есть ли тут случаем сотрудники apple?
хочется промокод на ноут)
Чтож, поздравляю подписчиков с наступающим (а тех, кто на востоке, уже и с наступившим) НГ!

В Мете я за этот год собрал бенчмарк по детекции галлюцинаций, разработал новые автоматические метрики качества перевода с точки зрения сохранения семантики (BLASER 2.0) и выразительности (метрики для SeamlessExpressive), и помог обучить и релизнуть семейство моделей Seamless. Вне работы, я помог языковым активистам запустить башкирского голосового помощника Homai, создать первый тувинский нейросетевой переводчик, и улучшить эрзянский переводчик до практически применимого уровня качества.

Надеюсь, что и у вас истекающий год был плодотворным 🤗

В следующем году мне, надеюсь, удастся более системно заниматься мультиязычностью и поддержкой малоресурсных языков – и в машинном переводе, и в general-purpose языковых моделях.

Ну а всем нам пожелаю, чтобы в 2024 году в мире было меньше войны, а больше – мира, благоразумия и сотрудничества.
Начну-ка я год с токсичности 😈
Мы с коллегами недавно выпустили новый классификатор токсичности для текстов и аудио - MuTox.
Статья, код, блокнот в колабе с примерами.
Для обучения этого классификатора мы организовали разметку 43K коротких аудио на 21 языке на предмет токсичности (датасет тоже опубликован).

Сам классификатор - маленькая моделька поверх эмбеддингов SONAR, которые недурно представляют тексты на 200 языках в общем семантическом пространстве (также есть энкодеры речи для ~50 языков, и их число будет расти). Поэтому есть основания надеяться, что и для других языков, поддержаных SONAR (список примерно совпадает со списоком FLORES-200 и NLLB), моделька будет показывать какой-то приличный уровень качества.
̶с̶а̶м̶̶о̶изолента мёбиуса
Начну-ка я год с токсичности 😈 Мы с коллегами недавно выпустили новый классификатор токсичности для текстов и аудио - MuTox. Статья, код, блокнот в колабе с примерами. Для обучения этого классификатора мы организовали разметку 43K коротких аудио на 21 языке…
Ну и кстати да, одно возможных из применений этого классификатора - в дорожке TextDetox по девятиязычной детоксификации текстов, которую организует этой весной группа с участием моих бывших коллег.

Мы в Сколтехе в своё время собрали хорошее решение этой задачи для английского и русского языков, собрав для этого параллельные датасеты - и теперь интересно, насколько эта технология обобщается на другие языки без новых размеченных данных. Мы уже пробовали (статья), и результаты пока не супер впечатляют. Потому и сделали из этого новое соревнование.

Если вы вдруг внезапно решили войти с ноги в академический NLP, я рекомендую поучаствовать в этой дорожке (или любой другой), и написать об этом статью, которую почти гарантировано примут на CLEF - конференцию, в рамках которой дорожка проходит. Кстати, сама конференция будет в Гренобле, который я отдельно рекомендую посетить 🏔

Подробности: https://pan.webis.de/clef24/pan24-web/text-detoxification.html.
Позволю себе в кои-то веки несерьезный пост – но тоже связанный с языками!

Предлагаю вам загадку: прочитать эту запись.
𓃰𓆦𓆚𓃬𓂾𓃔 𓆦𓃓𓃰
(у кого не отображается шрифт - см. прикрепленное изображение).

Подсказка: это более простой способ написать 𓃰𓏢𓆦𓃻𓅠𓆚𓃻𓃬𓀬𓂾𓃔𓏢 𓆦𓀬𓃓𓅠𓂈𓃰𓏢.
Пока мы с вами загадки загадываем, в репозиторий FLORES+ доехал development set на чувашском и на луговомарийском.

Что такое FLORES+? Это новый этап в жизни небольшого тестового датасета FLoRes на основе данных из Wikimedia, который сначала был 3-язычный, потом стал 100-язычный, а с выпуском модели NLLB-200 его расширили на все 200 языков. Он состоит из 3000 довольно сложных предложений (1000 - dev dataset, 1000 - devtest, и ещё 1000 - test, который никто никогда не видел и наверное и не увидит). И поскольку эти предложения покрывают много разных тем, то это один из лучших на сегодняшний день датасетов, на которых можно измерять качество машинного перевода. И один из самых мультиязычных (если не считать разных религиозных текстов и Всеобщей декларации прав человека, которые переведены на тыщу языков).

Всем этим занималась Meta, но несколько месяцев назад датасет передали в руки Open Language Data Initiative с тем, чтобы новые языки добавлялись коллаборативно, на общественных началах. И это работает: сейчас их там уже 212.

Таки что с этого добавления получат чувашский и марийский языки? Теперь разработчики систем машинного перевода со всего мира смогут измерять качество перевода между этими языками и 210 остальными языками, поддержанными во FLORES+ - а значит, будут более мотивированы этот самый перевод разрабатывать и совершенствовать. И мне кажется, это очень круто 😊
Помните, я рассказывал про эмбеддинги предложений SONAR?
Те самые, для которых есть текстовый энкодер (предложение=>вектор) и декодер (вектор=>предложение) для 200 языков, и ещё несколько десятков энкодеров речи, переводящих устные предложения в то же семантическое пространство, что и письменные.
На основе которых работает моделька BLASER 2.0, неплохо коррелирующая с человеческими оценками (XSTS) качества перевода текста и речи.
На основе которых мои коллеги недавно запилили самый мультиязычный классификатор токсичности, MuTox.
Ну и, конечно, на основе которых мои коллеги собрали датасет SeamlessAlign: собранные по интернетам и заматченные по смыслу пары предложений речь-текст (100К часов) и речь-речь (9К часов) на разных языках. Этот датасет использовался для обучения моделей Seamless, примерно лучших из того, что сегодня существует для перевода речи.

Так вот. SONAR сейчас понимает текст на 200 языках (те же самые, что NLLB), но энкодеры речи пока есть только для 57 языков.
Зачем эти энкодеры вообще нужны? В голову приходит несколько примеров применений:
1) Классификация и перевод устных предложений напрямую, минуя этап автоматической транскрипции. Для классификации можно использовать модели поверх эмбеддингов предложений (типа того же MuTox), а для перевода - имеющийся текстовый декодер.
2) Автоматический матчинг устных предложений с их переводами или транскрипцией - то, как мы собирали SeamlessAlign и несколько подобных датасетов.

Ну и поскольку польза от этого вроде как есть, то сообщество просит дать им рецепт обучения энкодера речи для ещё одного языка. А раз просит - я попробовал сделать. С минимальными данными (используя только CommonVoice) и вычислительными ресурсами (два дня обучения на Colab Pro). На примере грузинского языка, потому что для него ещё нет энкодера речи, но есть, на каких данных оценить его качество и с чем сравнить.
Рецепт - в этом блокноте. Качество мне не очень нравится, так что я его ещё буду дорабатывать. Но фидбек хочется получить уже сейчас, так что если вам есть, что сказать по поводу этого блокнота - не стесняйтесь писать в комменты)
Возвращаясь к загадке с иероглифами: их последовательность можно прочитать как "СлонМухаЗмеяЛевНогаТеленок МухаБыкСлон", то есть "СМЗЛНТ МБС", что, конечно же, произносится как "самоизолента Мёбиуса".

Почему я решил использовать египетские иероглифы столь странным образом? Эта идея принадлежит не мне, а носителям ханаанских языков (родственных современному ивриту) где-то четыре тысячи лет назад. Они придумали читать иероглиф с головой быка как первый звук в слове "Алеф", значившим по-ханаански "бык"; иероглиф со схемой дома - как первый звук в слове "Беит", которое и означает "дом", и так далее. Таким образом, семитские купцы, вдохновившиеся египетской письменностью, смогли адаптировать её для своего языка, а заодно изобрели первую в мире систему письменности, в которой символы соответствуют не идеям, а звукам.

Система эта оказалась крайне популярна. Одна её ветвь через финикийский алфавит легла в основу греческой письменности, кириллицы, латиницы, и даже древнегерманских рун. Другая ветвь через арамейскую письменность эволюционировала в современные арабские и еврейские буквы, а также (скорее всего) повлияла на древнеиндийское письмо брахми, от которого произошли почти все азиатские алфавиты (кроме основанных на китайских иероглифах), от деванагари, который используется для написания хинди, до тайского и яванского скриптов. Более подробное родословное дерево алфавитов, если интересно, есть в Starkey Comics.

А у меня с этим связана вот какая история. Прошлым летом я купил плакат с разными алфавитами в историческом музее в Ницце, но забыл его в кафе, покидая город. Спустя пару месяцев я забрал плакат из этого кафе, но почти тут же продолбал снова, забыв в трамвае. И тогда я решил нарисовать свой собственный плакат, ещё лучше, который бы показывал не только сами алфавиты, но и генетические связи между ними.
̶с̶а̶м̶̶о̶изолента мёбиуса
Возвращаясь к загадке с иероглифами: их последовательность можно прочитать как "СлонМухаЗмеяЛевНогаТеленок МухаБыкСлон", то есть "СМЗЛНТ МБС", что, конечно же, произносится как "самоизолента Мёбиуса". Почему я решил использовать египетские иероглифы столь…
На прошлых выходных я таки дорисовал этот постер. Его версию, пригодную для распечатки, можно приобрести в etsy. Для большей части алфавитов нашлись готовые юникодные изображения, но некоторые, типа старой кириллицы, я перерисовал от руки. Непривычное для меня упражнение, но как времяпрепровождение, альтернативное всем этим вашим нашим NLP, заходит хорошо 🙃
Проект Open Language Data Initiative, про который я рассказывал недавно, заведует не только тестовым датасетом FLORES+, но и обучающим датасетом NLLB-seed.
Это 6К предложений из английской Википедии на разнообразные темы, часто на какую-то сложную научную тематику. Мои коллеги в своё время организовали перевод этого датасета на 39 малоресурсных языков, и показали, что включение этих текстов в обучающий датасет для модели-переводчика значительно улучшает её качество.

Сейчас проект oldi.org принимает переводы этого датасета и на другие языки тоже. Но проблема в том, что кроме английского, этот датасет сейчас существует только на редких языках, переводить с которых будет ещё сложнее чем с английского (хотя для переводов на тюркские языки, наверное, можно подглядывать в крымскотатарскую версию).

Чтобы решить эту проблему, я сделал бота @crowd_translate_bot для сбора и проверки человеческих переводов* с английского на русский (с тем, чтобы потом с русского было проще переводить на другие языки нашего региона). Будет здорово, если воспользуетесь этим ботом и поучаствуете в коллективном переводе датасета 🙃

* Хотя многие модели уже очень хорошо переводят между английским и русским, важно собирать именно человеческие переводы, потому что это всё-таки чуть надёжнее, и потому, что если собрать переводы от нескольких людей, они будут разнообразнее по стилю, чем машинно переведёные.

Нас тут 2К в этом чате, и если каждый третий из нас переведёт по 10 предложений (и проверит где-то по 25, включая намайненные мной возможные переводы из Википедии и двойную проверку переводов других людей), то перевод NLLB-Seed на русский будет собран, и можно будет переходить к более интересным языкам.
За последние 5 дней мы собрали в @crowd_translate_bot около 200 англо-русских переводов, то есть 3% от корпуса NLLB-Seed.
Если пойдем дальше тем же темпом, то закончим работу к концу лета. Но мне, конечно, хотелось бы ускориться)

На основе вашего фидбека я уже внёс в бота несколько корректировок:
- скрывать подробные инструкции после отработки нескольких предложений, чтобы не загромождать экран;
- задавать вопрос от связности текста, только если точность перевода удовлетворительная;
- более подробное объяснять суть вопроса про связность;
- показывать progress bar для текущего задания.

На очереди ещё несколько правок:
- кнопка для пропуска текущего предложения
- кнопка undo, чтобы переделать (одно) последнее действие
- более понятные инструкции о том, что задания на неинтересные/сложные темы можно не делать, а брать вместо них другие.

Каких бы ещё улучшений в боте вам хотелось?
̶с̶а̶м̶̶о̶изолента мёбиуса
Оказывается, есть проект https://panlex.org по сбору общего словаря для всех языков мира (сейчас там представлены 6 тысяч языков). Так что (как советуют Artexte et al, 2020), не говорите, что для вашего малоресурсного языка совсем нет параллельных данных…
Про проект Panlex.org, собравший перевод слов для тысяч языков, я узнал почти два года назад.
Но воспользоваться этими данными для машинного обучения никак не доходили руки, просто потому, что лень было скачивать и расковыривать дамп их базы данных.
Сейчас я таки расковырял его, разрезал на отдельные языки, и выложил на HF: https://huggingface.co/datasets/cointegrated/panlex-meanings.
Если вам внезапно понадобились словари для кучи малоресурсных языков в единообразном формате, может быть полезно.

Помимо этого ресурса, порекомендую ещё, пользуясь случаем, недавний датасет Gatitos с похожей мотивацией; там 4000 слов/фраз/коротких предложений, переведенные на 173 языка.
̶с̶а̶м̶̶о̶изолента мёбиуса
За последние 5 дней мы собрали в @crowd_translate_bot около 200 англо-русских переводов, то есть 3% от корпуса NLLB-Seed. Если пойдем дальше тем же темпом, то закончим работу к концу лета. Но мне, конечно, хотелось бы ускориться) На основе вашего фидбека…
Ещё несколько обновлений в @crowd_translate_bot:
- больше объяснений про пропуск заданий
- возможность посмотреть статистику проекта командой /stats
- команда /skip для пропуска текущего предложения
- добавил варианты перевода из Яндекс.Переводчика, чтобы тратить меньше времени на перевод вручную, и больше – на проверку

Сейчас в боте собрано уже около 15% от перевода NLLB-Seed на русский язык, но с вариантами от Яндекса работа должна пойти быстрее.
̶с̶а̶м̶̶о̶изолента мёбиуса
Ещё несколько обновлений в @crowd_translate_bot: - больше объяснений про пропуск заданий - возможность посмотреть статистику проекта командой /stats - команда /skip для пропуска текущего предложения - добавил варианты перевода из Яндекс.Переводчика, чтобы…
И ещё пара обновлений бота для сбора переводов:

1) Исходные тексты и варианты перевода теперь выделены моноширинным шрифтом, чтобы копировать их в буфер обмена по клику.

2) Я переделал вопрос про связность: теперь там три уровня, "несвязный перевод", "умеренно связный", и "связный и беглый". То есть, если вас полностью устраивает перевод по смыслу, но он звучит не очень естественно, это можно обозначить.

3) Опубликовал исходный код бота: https://github.com/slone-nlp/seed_translate_bot. Теперь, при желании, вы можете запустить собственного аналогичного бота для сбора переводов. Но в целом, если бы вы хотели организовать собственный проект по переводу, то лучше напишите мне – и мы разместим его в этом боте.
Я давно подумываю о создании софта для изучения языков людьми, а не машинами – и теперь, кажется, почти дозрел об этом писать. А ещё мне иногда хочется поделиться чем-то чисто лингвистическим, не имеющим отношения к технологиям.
Вопрос к аудитории: хотелось бы вам это видеть в данном канале, или лучше Изоленту оставить чисто под NLP, а под все остальные языковые штуки завести новый?

Ставьте 🐳, если хотели бы новый канал под не-NLPшные темы; 🍓– если готовы их видеть в этом канале, 💩 – если хотели бы читать про LLM и AGI, а вся эта мура про иероглифы и миноритарные языки вас уже задолбала.
В апреле я побывал в гостях в Университете Тарту. И одна из свежих штук, которую мне там показали - это эстонская LLaMA, названная llammas (по-эстонски баран, ибо модель получилась весьма упрямая 🐏). Вот статья про неё.

Что её авторы сделали:
1. До-предобучили Llama-2-7B на 5B токенов: 75% эстонских и 25% английских (чтобы английский не забывался).
1. Сгенерировали с помощью GPT-3.5-turbo датасет, аналогичный Alpaca, на эстонском (50K примеров).
1. Взяли кучу открытых шумных датасетов для перевода между английским и эстонским, и сконвертировали их в формат инструкций (1М примеров). Дополнительно взяли ещё 2К более чистых примеров для перевода.
1. Дообучили эту модель: сначала опционально на полном датасете перевода (1М примеров), потом на чистом переводе и английских и эстонских инструкциях (100К примеров из английской и эстонской альпак, и ещё 25К из более качественных английских инструкций).
1. Оценили модель на задачах question answering, choice of plausible alternative, grammatical error correction, и перевода.

Что выяснили:
- Для большинства задач (кроме CoPA) большая часть эффекта от продолженного предобучения на эстонском была достигнута уже на 1B токенов.
- Если дообучать сначала на полном датасете для перевода, а потом на инструкциях, то перевод и исправление ошибок даются модели лучше, а логика и ответы на вопросы - хуже, чем если дообучать сразу на инструкциях.
- Модели, дообученные на инструкциях, в принципе способны поддерживать осмысленную беседу на эстонском, хоть они и не всегда звучат естественно.
- Модель переводит между эстонским и английским достаточно близко к уровню SOTA (типа NLLB).
- На большинстве английских бенчмарков модель, которую до-предобучили на смеси эстонского с английским, не очень сильно падает в качестве по сравнению с исходной.
- Нужно ли дообучаться на большом датасете для перевода, и нужно ли это делать вперемешку с инструкциями или до них, не вполне понятно (разные задачи дают разные сигналы). Но в целом нет сильных свидетельств, что реально много параллельных текстов для такой модели нужно.

Из этого, казалось бы, можно сделать вывод, что для адаптации LLM к новому языку не очень-то и нужно иметь много хороших параллельных данных для этого языка; достаточно иметь большой моноязычный датасет для продолженного предобучения (хотя бы 1B токенов, при том что токенайзер LLaMA даёт для эстонского в среднем вдвое больше токенов на предложение, чем для английского) и умеренно большой датасет с инструкциями.
Но как раз наличие датасета с инструкциями и представляет из себя большое "но": он был получен благодаря магии GPT, который уже каким-то чудом знает эстонский достаточно хорошо. А значит, для языков, на которых GPT работает не так классно, такой датасет нужно будет ли собирать вручную с нуля, или переводить с других языков. Так что я думаю, что без этапа создания хорошего машинного перевода - а значит, и сбора хороших параллельных корпусов - всё-таки не обойтись.

Ну и да, основной позитивный сингал: если таки вы нашли данные, то даже такую англоцентричную модель, как LLaMA 2, можно адаптировать на такой нишевой язык, как эстонский, за где-то 1300 GPU-часов (как это сделали TartuNLP), или даже, скажем, всего за 300 (если предобучаться на 1 млрд токенов, а не на 5, что уже тоже даёт неплохой результат). То есть: doable даже в домашних условиях.
Please open Telegram to view this post
VIEW IN TELEGRAM
Для тех, кто всё ещё не прочитал статью No Language Left Behind, потому что там 200 страниц: сегодня, почти два года спустя, вышла её краткая версия.
И не где-то, а в Nature!