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

> Розжиг костров, выгул собак, отлов рыбы, отстрел дичи, выпас и выгон скота, а также выполз змей, выпорос свиней, выжереб коней и выкобыл кобыл, вымет икры, вылуп птиц из яиц, выкукол бабочек и выхухол выхухолей, выкур курей и выпрыг кенгурей, обгад ромашек, обдир ягод, выруб леса и вылом веток, выслеж зайца, выпуг тетерева, выхлоп газов, выкидыш мусора, выродок людей и выводок гусей, выплав стали и выплыв сели, выклянч денег, выдох вдоха, вытрус половиков, выпор детей, выпуч глаз, вычих насморка, выкусь накоси и накось выкуси, загляд и залаз в дупла с выкуром оттуда пчёл и распробом мёда запрещён и прекращён в связи с отказом их от высоса нектара после выщипа цветов и выдирга травы.

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

Ну и оказывается, что языковые модели (даже "маленькие") это отлично делают, если их правильно спросить. И нет, "правильно спросить" это не про промпт-инжиниринг, а про правильное применение математики.

Как проверить, что фраза "выпрыг кенгурей" составлена логично? Языковые модели умеют измерять вероятность любого текста, но для данного текста эта вероятность будет очень низка, ибо он составлен из очень странных слов. Но если мы поделим вероятность текста на индивидуальные вероятности слов, входящих в него (или вычтем, если в логарифмах), мы получим меру того, насколько текст менее менее странен, чем совокупность отдельных входящих в него слов.

Эта идея - весьма бородата, принадлежит едва ли не Клоду Шеннону, и называется mutual information. Но почему-то её всё ещё приходится переоткрывать.

Прикол данного переоткрытия в том, что вместо подсчёта вероятностей слов и их сочетаний по большому корпусу русского языка, мы вытаскиваем эти вероятности из нейросети. То есть - заменяем огромный объект "все тексты русского языка, включая ещё не написанные" на его приблизительную упрощённую модель, позволяющую ускорить вычисления. На... языковую модель. Да, их смысл именно в этом. А не AGI вот этот ваш всякий.
̶с̶а̶м̶̶о̶изолента мёбиуса
Чем отличается мой канал от канала Татьяны Шавриной? Правильный ответ: Кали постит по воскресеньям музыку, а я нынче пощу поэзию. Точнее, хочется запостить бессмертный белый стих Андрея Кнышева: > Розжиг костров, выгул собак, отлов рыбы, отстрел дичи, выпас…
Я попробовал поиграться с оценкой сочетаемости слов при помощи rugpt-small. Прикол про "выпрыг кенгурей" она не вкурила, но животную сущность "кенгурей" вполне осознала, присвоив им ту же семантическую валентность, что и для "собак" и "курей".

Потыкать код можно тут.
̶с̶а̶м̶̶о̶изолента мёбиуса
Собрал тьюториал по дообучению NLLB-200 для перевода на новые языки, на примере русско-тувинского перевода. В комплекте: - предобработка текстов (неочевидная) - добавление токенов для нового языка (муторное) - собственно training loop (очевидный) - докеризованное…
Маленький апдейт от меня по дообучению NLLB (можно рассматривать как дополнение к тьюториалу на примере тувинского).

Если вам для чего-то понадобилось обучить маленькую (по современным меркам) модель для машинного перевода, но при этом вы не хотите обучать её с нуля, то как вариант, за базу можно взять вот такую модельку: https://huggingface.co/slone/nllb-pruned-6L-512d-finetuned.
Это вчетверо уменьшенная NLLB-200-600M, дистиллированная для 175 языков мира. Между всеми этими языками она переводит плохо (думаю, тупо не хватает параметров, чтобы хорошо понимать их все), но при дальнейшем дообучении на 2-3 языка ведёт себя вроде бы прилично.
Перед дообучением рекомендуется выпилить из словаря модели все токены, которые в ваших целевых языках не используются; это позволит уменьшить модель ещё минимум в пару раз и здорово ускорит дообучение и инференс.
Ну и если язык для модели новый, то его токены модель стоит, наоборот, добавить - как в том же тувинском примере.
Моя команда в Meta выкатила новые модели Seamless для перевода устной речи!

По сравнению с августовской версией SeamlessM4T, новая версия переводит чуть точнее. Плюс добавили давно ожидаемые фичи:

1) перевод в потоковом режиме (задержка в среднем 2 секунды, как у живых синхронных переводчиков);

2) выразительность: близость голоса, эмоций, интонации и ритма речи к исходным.

Попробовать онлайн демо и почитать 100-страничную статью можно тут: https://ai.meta.com/blog/seamless-communication.
Тут народ жалуется, что мы цензурируем грубые слова в нашем переводе речи.
Прошу заметить, что это не так: мы не даём модели сквернословить без причины, но если на вход подать действительно оскорбительное аудио, то модель его переведёт, передав всю глубину чувств и нужную степень непристойности 😈

Вот пара видосов (осторожно, там грязные выражения!), которые я записал в нашей выразительной демке (там правда 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 на русский язык, но с вариантами от Яндекса работа должна пойти быстрее.