̶с̶а̶м̶̶о̶изолента мёбиуса @izolenta_mebiusa Channel on Telegram

̶с̶а̶м̶̶о̶изолента мёбиуса

@izolenta_mebiusa


Костыли и технологии для обработки естественных языков. Обзоры статей и личный опыт. by @cointegrated

самоизолента мёбиуса (Russian)

Добро пожаловать в Telegram-канал "самоизолента мёбиуса"! Здесь вы найдете информацию о костылях и технологиях для обработки естественных языков. Канал предлагает обзоры статей и личный опыт в данной области от @cointegrated. Если вы интересуетесь языками и их обработкой, то этот канал станет для вас ценным источником информации. Узнавайте последние тенденции и новинки в области обработки естественных языков, делитесь своими идеями и опытом с другими участниками канала. Присоединяйтесь к нам прямо сейчас и расширьте свои знания в этой увлекательной области!

̶с̶а̶м̶̶о̶изолента мёбиуса

08 Nov, 15:37


Мы релизнули модели BLASER 2.0 для оценки качества перевода текста и речи между любыми языками больше года назад, но только в этом году дошли руки написать про них полноценную статью.
А на следующей неделе я еду в Майами, презентовать эту статью на конференции EMNLP.
Если вы тоже там будете, буду рад увидеться)

̶с̶а̶м̶̶о̶изолента мёбиуса

29 Oct, 20:26


Вышли статьи WMT24.
Думаю, про них я ещё буду писать много отдельно, когда посещу конференцию.
А пока что упомяну только WMT 2024 Shared Task of the Open Language Data Initiative: задачу про переводу датасетов NLLB-Seed и FLORES на новые языки. В итоге поучаствовали 10 статей, покрыв 16 языков и создав, помимо перевода, ряд полезных побочных артефактов.
На первый взгляд, получилось вполне неплохо)

P.S. Сам дополненный FLORES+ в обозримом будущем, полагаю, выложат туть.

̶с̶а̶м̶̶о̶изолента мёбиуса

27 Oct, 14:28


Кину в вас в это воскресенье статьёй про переводчик для малоресурсного арумынского языка.
Статья: https://arxiv.org/abs/2410.17728
Интерфейс: https://arotranslate.com
В целом, технических инноваций там особо никаких, но мне понравилась, как написана именно часть про сбор и организацию ресурсов (переведённых текстов).

̶с̶а̶м̶̶о̶изолента мёбиуса

06 Oct, 13:06


Обещанная ссылка на исследовательскую стажировку Меты в Париже.
Напоминаю про условия:
- нужно иметь степень PhD по NLP или какой-то из смежной областей computer science или быть в процессе получения;
- опыт исследовательской работы в этой области;
- продолжительность 3 или 6 месяцев (даты начала гибкие, начиная где-то с весны 2025);
- стажировка полностью в офисе (и нужно будет получать право на работу во Франции, если у вас его нет);
- должна неплохо оплачиваться (увы, вилку не могу озвучить).
Подаваться можно по ссылке.

̶с̶а̶м̶̶о̶изолента мёбиуса

30 Sep, 08:09


Сегодня, оказывается, отмечают International Translation Day.
С чем я всех из нас, так или иначе причастных к машинному переводу, и поздравляю 🙃

̶с̶а̶м̶̶о̶изолента мёбиуса

26 Sep, 16:57


Кстати, о Мете!
Мы в FAIR на следующий год ищем research interns.
Если вы вдруг получили или в процессе получения PhD и готовы пожить 3-6 месяцев в следующем году в Париже и позаниматься исследованиями мультиязычного NLP (перевода и родственных ему задач) - то пишите мне!
(Дисклеймер: предполагается, что вы уже и хорошо шарите в NLP, и умеете делать research, то есть уровень требований повыше, чем обычно ассоциируется со словом "стажировка". Но и оплачивается это лучше.)
Официальную вакансию мы скоро выложим. Для референса - вот аналогичная вакансия для научных стажировок в США.

̶с̶а̶м̶̶о̶изолента мёбиуса

25 Sep, 17:42


А на Meta Connect тем временем показывают голосовой перевод рилзов на базе нашей технологии)
Примерно на 1:04, если смотреть стрим.
А потом ещё раз, уже на 1:12:30 - перевод речи во времени, приближенном к реальному (хотя на видео это не очень видно).

̶с̶а̶м̶̶о̶изолента мёбиуса

24 Sep, 19:37


Кстати, к слову о транслитерации.
У меня есть миллион разных недоделанных микро-проектов.
Один из них - транслитерация в стиле "Лет ми спик фром май харт". Когда-то давно я решил, что эту задачу надо решать машинным обучением (инача у*ищную английскую орфографию не одолеть), но не генеративными моделям (ибо медленно учится, медленно применяется, и всё равно глючно), а по аналогии с распознаванием речи.
А тут чё-то в соседнем чатике спросили, и я решил обученной тогда миниатюрной моделькой-транслитератором поделиться.

̶с̶а̶м̶̶о̶изолента мёбиуса

24 Sep, 19:37


Я пару лет назад пробовал обучать малюсенький BERT решать задачу транслитерации с английского на русский как sequence tagging.

Идея такая:
1) Разбиваем английское предложение на буквы
2) Вставляем между буквами по нескольку пробелов, чтобы точно хватило символов на всё
3) Обучаем модель на выходе предсказывать последовательность букв для алфавита, используя в качестве функции потерь CTC (как для распознавания речи)
4) Во время инференса просто удаляем лишние пробелы между буквами и дублирующиеся буквы обратно
5) ???
6) PROFIT

Обучал на англо-русских разговорниках и транслитерированных названиях статей, намайненных из Википедии.

Моделька тут:
https://huggingface.co/cointegrated/bert-char-ctc-en-ru-translit-v0
Запускается так
import torch
from transformers import BertForMaskedLM, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("cointegrated/bert-char-ctc-en-ru-translit-v0", trust_remote_code=True)
model = BertForMaskedLM.from_pretrained("cointegrated/bert-char-ctc-en-ru-translit-v0")

text = 'Hello world! My name is David Dale, and yours is Schwarzenegger?'

with torch.inference_mode():
batch = tokenizer(text, return_tensors='pt', spaces=1, padding=True).to(model.device)
logits = torch.log_softmax(model(**batch).logits, axis=-1)
print(tokenizer.decode(logits[0].argmax(-1), skip_special_tokens=True))
# хэло Уорлд май нэйм из дэвид дэйл энд ёрз из скУорзэнэгжэр

̶с̶а̶м̶̶о̶изолента мёбиуса

24 Sep, 14:29


Наткнулся на страничку Ульфа Хермъякоба, чувака, сделавшего транслитератор uroman для любого языка мира (но только на латиницу).

И оказалось, что он автор и других мультиязычных приколов, в частности, статьи Translating a Language You Don’t Know In the Chinese Room. Идея вдохновлена мысленным экспериментом Сёрля, задавшим философский вопрос: если поместить человека, не знающего китайский, в комнату с инструкциями, какими последовательностями иероглифов отвечать на какие, то, если этот человек пройдёт тест Тьюринга на китайском, можно ли считать, что он понимает китайский?

Хермъякоб такими глубокими вопросами не задавался, но заинтересовался практической стороной вопроса: как помочь человеку, вооружённому лишь простыми ресурсами типа словарей, переводить предложения с языка, который он не знает?

С помощью "простых ресурсов" оказалось реалистично предложить всевозможные варианты глоссирования для каждого слова: какие у него могут быть начальные формы, как они переводятся, какие у слова есть грамматические модификации и что они могут означать. Юзеру предлагается сначала выбрать для каждого из слов предложения правильную глоссу (или вписать собственную догадку), а потом - на их основе написать уже грамматичный перевод всего предложения.

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

Забавный побочный эффект: проведя некоторое время в "китайской комнате", люди начинали потихоньку овладевать знаниями словаря и грамматики исходного языка. Это немножко похоже на Дуолинго: люди учат язык без объяснений, опираясь чисто на небольшие подсказки. Но, в отличие от Дуолинго, учебной программы тут никто не выстраивал: в неподготовленных людей тупо кидают произвольные real-world предложения. И ничего, они справляются и потихонечку что-то начинают понимать.

Кажется, для многих из наших малоресурсных языков такая "комната" может оказаться полезной. Думаю, я скоро выкачу "эрзянскую комнату", чтобы тоже немножко поэкспериментировать 🙃

#yalla

̶с̶а̶м̶̶о̶изолента мёбиуса

23 Sep, 20:38


Вот например на днях ребята лезгинский добавили)

̶с̶а̶м̶̶о̶изолента мёбиуса

23 Sep, 20:38


А мы сегодня запустили первую версию переводчика на лезгинский язык и обратно, можете потыкать прям тут

̶с̶а̶м̶̶о̶изолента мёбиуса

18 Sep, 08:20


Помните, я спрашивал про список новых языков, добавленных кем-то в NLLB или другие открытые модели для машинного перевода?

Я решил поддерживать этот список в обновляемом состоянии, в формате "awesome" репозитория. Вот он:
https://github.com/slone-nlp/awesome-new-languages-in-machine-translation

Призыва к действию два:
1) Ставьте звёздочки 🌟 (не обязательно)
2) Если вы знаете ещё про какие-то инициативы (к примеру, ваши знакомые дообучили NLLB манскийскому 😏), пожалуйста, добавьте их к списку! 🙏

̶с̶а̶м̶̶о̶изолента мёбиуса

03 Sep, 21:04


Яндекс.Переводчик переводит "red" с английского как "красный".
Вопрос с подвохом: как он переводит с французского аналогичное слово "rouge"?

(Да, это ещё и традиционная метрика качества суммаризации, но к моему вопросу это отношения не имеет)

Правильный ответ: просто «красное», в среднем роде 🍷

̶с̶а̶м̶̶о̶изолента мёбиуса

25 Aug, 12:41


В прошлом году я выкладывал тьюториал по добавлению новых языков в модель NLLB.
Насколько мне известно, он повлиял на создание версий NLLB где-то для семи новых языков (если вы знаете примеры, которых нет в этом списке - добавляйте, пожалуйста), то есть оказался довольно результативным.

За год с тех пор произошло следующее:
1. Код transformer эволюционировал, и не поддерживает хаки, которыми я делился год назад, а требует новых хаков.
2. Мои старые хаки оказались несовместимыми с ctranslate2 - наиболее юзабельным ускорителем и квантизатором моделей для перевода.
3. Я успешно научился делать многоэтапное дообучение, уменьшая катастрофическое забывание моделью старых языков. И этим тоже может иметь смысл поделиться.

В связи с этим кажется уместным этой выложить обновлённую версию тьюториала.
И раз я уж это делаю, хочется собрать в комментариях ваши мнения: что вам в этом тьюториале нравится и не нравится, чего не хватает, чего хотели бы видеть там ещё?

̶с̶а̶м̶̶о̶изолента мёбиуса

23 Aug, 09:48


А вот кто реально жжёт с точки зрения количества поддержанных языков, так это мои коллеги по FAIR из команды MMS.
По-хорошему, мне надо было написать про них год назад, когда они релизнули классификатор языков по аудио для почти 4000 языков, и распознавание и синтез речи - для 1000 (список языков; код). Но прикол в том, что они на этом не останавливаются, и недавно выпустили ещё одну статью, показывающую, как их подход к распознаванию речи можно адаптировать для языков, которых модель вообще не видела во время дообучения. То есть потенциально для любого из 4000 языков, для которых существует какая-то письменность.

Их рецепт адаптирован из статьи ASR2K 2022 года: обучить на куче языков акустическую модель, которая бы транскрибировала речь в какую-то более-менее универсальную фонемную запись, а потом декодировать её в текст на целевом языке, используя модель произношения для этого языка (соответствие между буквами и фонемами; авторы используют transphone) и статистическую языковую модель KenLM для него (какие комбинации букв часто встречаются вместе). То есть пайплайн такой: 🔉-> "ispadvɨpodverta" -> "из-под выподверта".

Узким местом в этом схеме является модель произношения: она построена преимущественно на транскрипциях слов из Википедии, и может не очень хорошо охватывать то, как реально произносятся предложения в языках. Поэтому в статье про MMS 0-shot фонетическую модель предложили заменить на пакет uroman, который тупо по простым правилам превращает всё в латиницу. Типа 🔉-> "iz-pod vypodverta" -> "из-под выподверта". И оказалось, что такой наивный пайплайн делает вдвое меньше ошибок! Видимо, за счёт того, что модель uroman хоть и более тупая, зато более предсказуемая.

Так что теперь, если вы хотите для какого-нибудь страшно редкого языка сделать распознавание речи, это довольно просто сделать, вообще не обучая никаких моделей для него. Достаточно собрать некоторое количество текстов на этом языке (хотя бы просто слов из словаря типа panlex.org), латинизировать их с помощью uroman, и подать это в алгоритм декодирования с уже обученной акустической моделью, плюс опционально с языковой моделью для вашего языка (более подробные инструкции тут).

По-моему, это прикольно.
#asr

̶с̶а̶м̶̶о̶изолента мёбиуса

21 Aug, 15:23


Как вы знаете, Мета недавно выпустила стадо моделей LLaMA 3.1, которые побили ряд рекордов среди опенсорсных LLM и приблизились по качеству к проприетарным типа GPT-4o и Claude.
Я не буду пересказывать весь 70-страничный отчёт (если вы интересуетесь деланием LLM, его стоит прочитать самостоятельно), отмечу лишь часть, наиболее интересную лично мне – про мультиязычность (раздел 4.3.2).

Для предобучения LLaMA 3 выбрали микс датасетов, состоящий на 75% из английского, на 8% из других естественных языков, и на 17% из кода. 8% - это немного, но не когда за 100% взяты 15 триллионов, так что языкам модель, насколько я могу судить, предобучилась неплохо.

Для дообучения модели на мультиязычных данных, авторы LLaM'ы наотбирали хорошие варианты среди её собственных ответов, плюс перевели некоторые датасеты с английского, плюс воспользовались уже имеющимися датасетами для разных задач, включая перевод. И вот тут я хочу похвастаться: данные для перевода они фильтровали с помощью моей модели BLASER 2.0 (рассказывал тут), которая в том числе для таких штук и предназначена.

Оценивали мультиязычные способности модели на двух датасетах: Multilingual MMLU (вопросы в духе экзаменов) и MGSM (задачки по математике), и на восьми языках (English, German, French, Italian, Portuguese, Hindi, Spanish, Thai). Утверждают, что самая большая LLaMA (405B) перформит на этих бенчмарках на одном уровне с GPT-4o и Claude Sonnet, да и 70B модель не очень сильно отстаёт.

Курс на мультиязычность - это очень хорошо. Восьми официально поддержанных языков, конечно, очень мало. Но кто знает, может быть, на самом деле и сотни других языков модель уже тоже понимает неплохо. Надо будет как-нибудь попробовать.

#llm

̶с̶а̶м̶̶о̶изолента мёбиуса

09 Aug, 21:20


Что ж, благодаря вашей работе и благодаря всем, кто репостил, мы уже отсмотрели в @crowd_translate_bot около 4000 переводов! И помощь все ещё ожидается 🙂

Я уже писал про этот проект (1, 2, 3, 4, 5, 6). Но возможно, стоит еще раз напомнить, зачем вообще понадобилось вручную проверять англо-русский перевод 6000 предложений из Википедии.

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

Во-вторых, зачем нам перевод на русский с идеально выверенным качеством: чтобы использовать его как «мостик» для обучения машинного перевода для новых пар языков. С одной стороны этого мостика – десятки других языков, от абазинского до якутского, носители которых чаще всего готовы переводить только с русского. С другой стороны – английский язык и все другие языки мира, на которые датасет NLLB-Seed уже переведён или будет переведён с английского (напрямую или опосредованно через другие языки типа испанского в Америках и французского в западной Африке). И если мы хотим, чтобы все эти десятки (а позже и сотни) языковых версий соответствовали друг другу, важно минимизировать ошибки на каждом шаге цепочки переводов. Поэтому – двойная ручная проверка.

В-третьих, почему понадобилось переводить именно сложный датасет NLLB-Seed: потому что мы и машинный перевод в конечном итоге хотим иметь сложный, способный переводить не только на бытовые темы (хотя и это очень важно и заслуживает своего параллельного датасета!), но и на темы нетривиальные, включая энциклопедические и научные. Конечно, к датасету Seed можно придираться: и выбор предложений там не всегда удачный, и подборка тем, возможно, излишне англоцентричная. Но всё-таки это пока наилучший из массово параллельных обучающих датасетов, которые у нас (MT сообщества) на данный момент есть.

Поэтому, если у вас иногда бывает свободное время, в которое вы готовы проверять англо-русские переводы предложений, то заглядывайте, пожалуйста, в @crowd_translate_bot – этим вы вложитесь в развитие машинного перевода, в том числе, для языков коренных народов РФ. Ну и если у вас есть канал, куда вы можете репостнуть этот призыв – будет очень и очень здорово.

Большое спасибо всем, кто уже приложил руку к переводу Seed, и заранее спасибо всем остальным! ❤️

#crowd_translate

̶с̶а̶м̶̶о̶изолента мёбиуса

29 Jul, 13:33


Друзья!
Мне очень нужно в ближайшее время завершить перевод NLLB-seed с английского на русский в @crowd_translate_bot (зачем это, я рассказывал тут).
Как вы думаете, как можно сподвигнуть достаточно много людей потратить по полчаса своего времени во имя науки?

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


Заранее спасибо большое за любой вклад, котоорый у вас получится внести!

̶с̶а̶м̶̶о̶изолента мёбиуса

25 Jul, 10:01


Энкодечка мёртв, да здравствует ruMTEB!

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

Спустя некоторое время появился бенчмарк MTEB, выполнявший похожую роль для английского. В отличие от Энкодечки, MTEB не особо интересуется размером и быстродействием моделей, но в эпоху, когда нейросети с семью миллиардами параметров считаются "маленькими", это вроде как никому особо и не нужно. Благодаря хорошему покрытию задач и простоте добавления моделей, MTEB стал популярен, и в него стали постепенно просачиваться и другие языки (вдобавок к нескольким мультиязычным задачам, включённым туда с самого начала).

И вот совсем недавно что ребята из Сбера добавили в MTEB большую пачку русскоязычных задач (17 новых, вдобавок к 6 мультиязычным задачам из MTEB, где и так уже был включён русский). Это новое двадцатитрёхзадачаное русскоязычное подмножество MTEB достаточно хорошо охватывает все типы задач, присутствовавшие в Encodechka (кроме NER, которое вообще-то не про эмбеддинги предложений, и которое я прилепил сбоку чисто по приколу), плюс покрывает поиск и переранжирование документов - то, чего в энкодечке не было (потому что он фокусировался на отдельных предложениях). В общем, нармальна.

Этот новый бенчмарк совершенно логично прозвали ruMTEB, и отныне рулить будет он.
Динамического лидерборда отдельно по русскоязычным задачам там пока нет, но в обозримом будущем должен появиться. Upd: теперь есть русская вкладка в основном лидерборде MTEB.
Добавлять новые модели в репо энкодечки всё ещё можно, но каких-то серьёзных обновлений я больше не планирую.

Поддерживать популярные проекты приятно. Но когда их можно больше не поддерживать, приятно тоже 🙃

#sentence_encoders

̶с̶а̶м̶̶о̶изолента мёбиуса

22 Jul, 21:41


Закончил сегодня курс французского на Дуолинго.
– Проходил курс на английском языке: он сделан сильно качественнее, чем на русском.
– Заняло это два года ежедневного залипания.
– По итогу я более-менее прокачал знания грамматики и некоторую лексику, плюс базовый навык письма (который я больше вообще нигде не тренирую).
– Для лексики Дуолинго оказалось мало (скорость добавления слов – медленная, выбор тем – очень спорный, гибкость – нулевая), и я года полтора назад завёл себе anki-подобные карточки, куда регулярно загружаю часто встречающиеся слова из интересных мне в очередной момент доменов.
– Для аудирования Дуолинго тоже оказалось мало, ибо тамошние синтетические реплики – сильно проще, чем та речь, которую ты слышишь в повседневности и медиа. Компенсировал подкастами, которые до сих пор слушаю в большом количестве (например, Journal en français facile и Easy French).
– Говорить меня Дуолинго худо-бедно научил, но пока я говорю слишком медленно, чтобы поддерживать полноценные диалоги со всеми, кроме самых неторопливых собеседников. Но тут уж ничего не поделаешь: настоящую разговорную практику не заменят никакие приложения.
– Из-за большого количества повторений и не очень сложных заданий довольно быстро стало скучно, и я продолжал курс только потому, что доверял его программе (в целом она составлена неплохо по покрытию грамматических и лексических тем) и хотел её пойти до конца.
– Таким образом, качественно составленная людьми учебная программа оказалась хорошим фактором удержания. Но она же – и главный фактор раздражения; в каждую главу там обычно заложена одна грамматическая и одна смысловая тема (слабо связанные друг с другом), и если что-то одно из этого мне неинтересно, то скипать всю главу не хочется, чтобы не упустить второе, и приходится скучать.

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

#yalla

̶с̶а̶м̶̶о̶изолента мёбиуса

22 Jul, 14:13


Всем привет! Я с ещё одной просьбой 🫣
А можете накидать примеров постов в соцсетях или блогах или статей (в идеале, на английском, но и на других языках тоже можно) с успешными примерами дообучения NLLB на новых языках? Если постов нет, но есть детальные карточки на huggingface или github, тоже пойдёт.
Хотим сделать обзор для воркшопа LoResMT.

Upd текущий список кем-либо добавленных языков тут.

̶с̶а̶м̶̶о̶изолента мёбиуса

21 Jul, 10:23


Друзья, привет!
Помните бота @crowd_translate_bot, которого я сделал для сбора и проверки переводов предложений?
Так вот, задача перевода NLLB-seed всё ещё актуальна.
Могу ли я попросить вас выполнить хотя бы по одному заданию в боте (это в среднем около десятка предложений)?
Мне бы очень хотелось доделать перевод NLLB-seed на русский в течение ближайших нескольких недель.
Тогда, во-первых, я успею подать мини-статью про него на WMT shared task, и во-вторых, можно будет начать экспериментировать с его переводом на другие языки через русский.