̶с̶а̶м̶̶о̶изолента мёбиуса
2.48K subscribers
14 photos
2 videos
1 file
194 links
Костыли и технологии для обработки естественных языков. Обзоры статей и личный опыт. by @cointegrated
Download Telegram
Энкодечка мёртв, да здравствует ruMTEB!

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

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

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

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

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

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

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


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

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

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

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

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

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

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

#crowd_translate
Как вы знаете, Мета недавно выпустила стадо моделей 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
А вот кто реально жжёт с точки зрения количества поддержанных языков, так это мои коллеги по FAIR из команды MMS.
По-хорошему, мне надо было написать про них год назад, когда они релизнули классификатор языков по аудио для почти 4000 языков, и распознавание и синтез речи - для 1000 (список языков; код). Но прикол в том, что они на этом не останавливаются, и недавно выпустили ещё одну статью, показывающую, как их подход к распознаванию речи можно адаптировать для языков, которых модель вообще не видела во время дообучения. То есть потенциально для любого из 4000 языков, для которых существует какая-то письменность.

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

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

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

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

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

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

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

Правильный ответ: просто «красное», в среднем роде 🍷
̶с̶а̶м̶̶о̶изолента мёбиуса
Всем привет! Я с ещё одной просьбой 🫣 А можете накидать примеров постов в соцсетях или блогах или статей (в идеале, на английском, но и на других языках тоже можно) с успешными примерами дообучения NLLB на новых языках? Если постов нет, но есть детальные карточки…
Помните, я спрашивал про список новых языков, добавленных кем-то в NLLB или другие открытые модели для машинного перевода?

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

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

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

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

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

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

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

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

#yalla
Кстати, к слову о транслитерации.
У меня есть миллион разных недоделанных микро-проектов.
Один из них - транслитерация в стиле "Лет ми спик фром май харт". Когда-то давно я решил, что эту задачу надо решать машинным обучением (инача у*ищную английскую орфографию не одолеть), но не генеративными моделям (ибо медленно учится, медленно применяется, и всё равно глючно), а по аналогии с распознаванием речи.
А тут чё-то в соседнем чатике спросили, и я решил обученной тогда миниатюрной моделькой-транслитератором поделиться.
Forwarded from David Dalé
Я пару лет назад пробовал обучать малюсенький 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))
# хэло Уорлд май нэйм из дэвид дэйл энд ёрз из скУорзэнэгжэр
А на Meta Connect тем временем показывают голосовой перевод рилзов на базе нашей технологии)
Примерно на 1:04, если смотреть стрим.
А потом ещё раз, уже на 1:12:30 - перевод речи во времени, приближенном к реальному (хотя на видео это не очень видно).
Кстати, о Мете!
Мы в FAIR на следующий год ищем research interns.
Если вы вдруг получили или в процессе получения PhD и готовы пожить 3-6 месяцев в следующем году в Париже и позаниматься исследованиями мультиязычного NLP (перевода и родственных ему задач) - то пишите мне!
(Дисклеймер: предполагается, что вы уже и хорошо шарите в NLP, и умеете делать research, то есть уровень требований повыше, чем обычно ассоциируется со словом "стажировка". Но и оплачивается это лучше.)
Официальную вакансию мы скоро выложим. Для референса - вот аналогичная вакансия для научных стажировок в США.
Сегодня, оказывается, отмечают International Translation Day.
С чем я всех из нас, так или иначе причастных к машинному переводу, и поздравляю 🙃
Обещанная ссылка на исследовательскую стажировку Меты в Париже.
Напоминаю про условия:
- нужно иметь степень PhD по NLP или какой-то из смежной областей computer science или быть в процессе получения;
- опыт исследовательской работы в этой области;
- продолжительность 3 или 6 месяцев (даты начала гибкие, начиная где-то с весны 2025);
- стажировка полностью в офисе (и нужно будет получать право на работу во Франции, если у вас его нет);
- должна неплохо оплачиваться (увы, вилку не могу озвучить).
Подаваться можно по ссылке.
Кину в вас в это воскресенье статьёй про переводчик для малоресурсного арумынского языка.
Статья: https://arxiv.org/abs/2410.17728
Интерфейс: https://arotranslate.com
В целом, технических инноваций там особо никаких, но мне понравилась, как написана именно часть про сбор и организацию ресурсов (переведённых текстов).
Вышли статьи WMT24.
Думаю, про них я ещё буду писать много отдельно, когда посещу конференцию.
А пока что упомяну только WMT 2024 Shared Task of the Open Language Data Initiative: задачу про переводу датасетов NLLB-Seed и FLORES на новые языки. В итоге поучаствовали 10 статей, покрыв 16 языков и создав, помимо перевода, ряд полезных побочных артефактов.
На первый взгляд, получилось вполне неплохо)

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