Как стать автором
Обновить

Комментарии 59

Ой, у меня прям сравнимая работа вот здесь: https://github.com/janvarev/OneRingTranslator - универсальный REST-сервер для переводов с возможность подключения переводчиков плагинами, и автоматической оценкой их качества через BLEU.

Хочу обратить внимание - FB NLLB прямо-таки сравнима на небольших текстах с Google Translate и Deepl - правда, скорее по BLEU метрике.

Интересно, как большие языковые модели типа bloomz или opt на поприще перевода? как минимум bloomz можно до файнтюнить, мультиязычные и multitask начинается с 7b и 13b (ну а запускать 175B было бы слишком дорого), мало того, можно дофайнтюнить именно на перевод.


p.s. про llama тем более молчу, оно в multitask очевидно лучше себя ведет, а 65b даже с квантизацией 4b работает не на много хуже gpt35

Производные от LLAMA пока слабоваты: в репе предыдущего комментатора есть тесты alpaca7B-4bit и alpaca30B-4bit. На eng->rus у первой 14.19 BLEU, у второй - 24.0 BLEU - очень скромно. Основная проблема - у LLAMA обучающий сет большей частью был на английском, в другие языки она не очень может.

OpenAssistant на куче языков учат - вот его потестить на перевод было бы интересно.

7b llama нельзя использовать без finetuning под узкую задачу, почему берут самую слабую версию достаточно мощной модели, делают на ее основе мультизадачные тесты и получив закономерно плохой результат делают поспешные выводы?

Мне нравится использование мультизадачной языковой модели, в т.ч. для перевода, ей можно давать инструкции, корректирующие решение. Например варианты перевода (в примере ниже этого нет), стилистику, разрешить или запретить фантазировать и т.п.

p.s. я в качестве эксперимента настроил скрипты перевода фентезийного романа с английского на русский с помощью llama 65B, не скажу что результаты хорошие, там явно есть проблемы, но вполне пользоваться можно.
Достаточно плохой пример:
Forest. It was strangely calming to be in the presence of the woods, and Lumoof soon found himself taking a leisurely stroll through the woods. None of the animals approached us, though we could feel their eyes on Lumoof. Instead, they scurried away and ran as soon as we even approached.

llama65b:
Лес. Странно успокаивающе находиться в присутствии леса, и Лумуф скоро нашел себя в неспешной прогулке по лесу. Ни один из животных не подходил к нам, хотя мы могли чувствовать их глаза на Лумуфе. Вместо этого они скатывались и бежали, как только мы даже приблизились.

open assistent rlhv llama30b-2 7k:
Лес. Странно успокаивающе было быть в присутствии леса, и Люмоф быстро нашел себя делающим прогулку по лесу. Ни одно животное не подходило к нам, хотя мы чувствовали их взгляды на Люмофе. Им с трудом удавалось остаться на месте; они всегда отрывались от того места, где мы находились.


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


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

Не знаю, я бы 7B не тестил.

Но 30B выдает 24 BLEU, что все равно очень плохо.

Я автор репы выше.

На самом деле там довольно навороченные примеры перевода подаются на вход, поэтому у 30B такой невысокий результат. На простых фразах многие движки дают относительно нормальный перевод - и у Лламы это вообще круто, что она как-то дает перевод. Просто в сравнении с более сложными движками - а сейчас, видимо, самая продвинутая локальная это FB NLLB - она проигрывает. А FB NLLB на 1.3B можно запустить на 8Gb VRAM, а с квантизацией - и на 2 GB, и результат будет приближаться к Google Translate, вот что круто.

Мне самому было интересно, что выдают LLM, поэтому и гонял. На 7B - что выдает при приличной скорости? На 30B - что возможно при относительном максимуме? (на 65B не гонял, да) 30B и так давало 40 секунд на перевод, так что я ограничился небольшим тестом.

Но вообще - если будет время - можете скачать мою репу (там есть one click installer под Windows), и прогнать тест на модельку 65B. У меня есть коннектор к KoboldAPI/OpenAI API, так что если запускаете через text-generation-web или koboldcpp, то должно сконнектиться. Тесты на BLEU там запускаются одним файликом, ничего специально делать не надо, только настроить, на каком плагине его оценивать.

Жаль, что я про FB NLLB не знал. Лучше было nllb-200-3.3B взять в качестве бесплатной модели. Она тяжеловата, правда (зато обслуживает все языковые пары, не нужно отдельно модели качать).

Кстати, я делал мерялку - 3.3B практически не выигрывает у 1.3B (почему - не очень понятно). Так что можно взять 1.3B-distilled - она даже на видеокарту может нормально влезть, и дает около 1-2 перевода в секунду в этом случае.

Хм... да, может быть. Я-то рассматриваю больше с точки зрения практики - т.е. совокупности скорости перевода + качества; имхо, тут выигрыш маловат, к тому же, как вы правильно говорите, не всегда BLEU корректирует с качеством (как в примере с ChatGPT историей). Но так да, если нужно максимальное качество, наверное, имеет смысл взять 3.3B.

Не всегда BLEU корректирует с качеством

да, вот в этом большая проблема
у меня появилась идея, как еще можно измерить качество - что если попросить GPT-4 покритиковать перевод, а потом на основании ее критики попросить оценить численно (chain of thoughts)

в лучших традициях методологии RLHF тюнинга LLM, нужно обучить модель оценки перевода и использовать ее для оценки.

Народ делает следующий механизм - просит содержательно сравнить два перевода, дальше - оценить по 10-балльной шкале, и выявляет победителя.

Вот со странички Викуны: https://lmsys.org/blog/2023-03-30-vicuna/

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

Да, там прямо очень критично попросить модель "make the translation sound as natural as possible".

Добавил на скорую руку плагин локального запуска llama.cpp как приложение, использует модель llama-65b-q5_0.ggjt2
с запросом и --temp 0
You are text translator. Keep punctuation and quotes.### Instruction:

Translate from {from_lang} to {to_lang}.

### Input:

{text}

### Output:

Получил rus->eng 40.43, eng->rus 27.5

Я чувствую что если заниматься тюнингом запроса, причем не вручную а воспользоваться prompt tuning, то можно получить заметно лучше результаты.

И еще, различия в переводе, исходя из метрики BLEU не кажутся мне всегда плохими, но да оценить численно это сложно

Спасибо за тесты!

Да, userlang->en пара показывает обычно значительно лучше результаты, чем обратно (даже 7B дает 32). Мне было интересно именно на проблемной паре - перевод на язык.

Тюнингом, конечно, надо бы позаниматься - времени не было.

И еще, различия в переводе, исходя из метрики BLEU не кажутся мне всегда плохими, но да оценить численно это сложно

Да, согласен - про это в статье было - что GPT4 дает сравнимый BLEU, а по качеству ощущается лучше. Смысл в том, что за всякие допсимволы BLEU сильно наказывает, в то время как пользователем они не особо замечаются.

Смысл в том, что за всякие допсимволы BLEU сильно наказывает, в то время как пользователем они не особо замечаются.

Нет, дело не в этом. Я при измерении BLEU вообще удаляю почти всю пунктуацию. Я думаю, там причина в том, что ChatGPT более "дикая", она более машинно переводит (зато более правильно). Плюс data contamination у Google Translate (не знаю как с этим у DeepL), плюс оптимизация других моделей на BLEU.

Вот есть довольно интересная статья со сравнением переводов ChatGPT:

Large language models effectively leverage document-level context for literary translation, but critical errors persist

https://arxiv.org/pdf/2304.03245.pdf

Там используются вроде как более интересные метрики - Bleurt, Comet; но я не нашел быстро их программной реализации, чтобы прикрутить в проект.

Вот еще - примеры того, что BLEU не очень хорошо справляется с оценкой (но другого особо нет)

12 Critical Flaws of BLEU

Why you shouldn’t trust BLEU according to 37 studies published over 20 years

Неожиданно нашел нормальную библиотеку и прикрутил вычисление метрики COMET

Вот, кстати, пример OpenAssistant 30B. Визуально как-то не очень.

Translate the message below from English to Russian. Make the translation sound as natural as possible.

---

The data collection frontend now lives here. Log in and start taking on tasks. We want to collect a high volume of quality data. By submitting, ranking and labelling model prompts and responses you will be directly helping to improve the capabilities of Open Assistant.
---

(+ температуру выставил в 0)
Получилось

Сбор данных фронтенд теперь здесь. Войдите и начните выполнять задания. Мы хотим собрать высокую скорость качественных данных. Определяя, ранжируя и описывая запросы модели ответов вы непосредственно поможете улучшить возможности Открытого помощника.

У вас лучше по смыслу, у меня - правильнее по грамматике.
Согласен, OpenAssistant пока слабоват для перевода.

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

Про совсем сломался на японском - у меня сомнения. Кандзи действительно можно учить и запоминать и это не тождественные понятия, как можно учить и запоминать законы физики. Судя по ответу, имелось в виду именно запоминать и Гугол правильно, или может удачно, схватился за прямое значение.

На японском дело не в учить/запоминать, а в том, что Google Translate перевел только треть текста.

похоже на какой-то баг: переводится только то что в первой группе японских кавычек (「 」) и до конца абзаца/строки. Попробуйте добавить перевод строки после каждой закрывающей японской кавычки (」).

Гугл и от обычных кавычек в обычном английском часто мысль теряет:


"I am careful. That's why I'm doing this by hand. I can feel when the structure might lose integrity if I pull the wrong thing. If I use device, the piece would come away regardless and then we'd be in real trouble."
«Я осторожен. Вот почему я делаю это вручную. Я чувствую, когда структура может потерять целостность, если я потяну не ту вещь. беда."

Но внутреннее представление смысла в Google Translate скорее всего реализовано на английском языке. При переводе с русского на польский теряются род, окончания и вообще смысл.

Например, skrzynia biegów - это коробка передач. Но в переводе получаем "передача инфекции". Никак иначе, кроме как с английского "transmission", такой смысл не получить.

Раньше да, раньше у Гугла все работало через английский.

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

Для некоторых языков, например, для тайского Google Translate теряет часть текста даже если нет кавычек. По объему это бывает около трети абзаца.

Я был сильно впечатлён когда GPT-3.5 перевёл фразы с санскрита (сам определил).
Мало того что перевёл, но и описал смысл фразы (философский) и достаточно точно!
Проверял по Бхагавад-гита. Глава 2. Там представлен оригинальный текст на санскрите (оригинал в романской записи) и варианты переводов разных авторов.

P.S. "Стандартные" переводчики с санскрита не переводят.

Можно предложить, что в обучающей выборке GPT-3.5 было достаточно всего на санскрите с подробным описанием и толкованием текстов, да на разных языках, поэтому это скорее не перевод в традиционном смысле слова. Интереснее было бы попросить GPT перевести что-то на санскрит, а потом оценить качество полученного текста.

Я скорее про то, что тексты на санскрите в подавляющем большинстве религиозные, с вытекающим из этого большим количеством разборов, интерпретаций и переводов, а значит GPT могла просто "дословно" их выучить. С обратным переводом такое не выйдет. Кстати, пару дней назад задумался насколько GPT хорош в старославянском, вот тут точно хардкор.

Он даже небольшой словарь на шумерском выдает.

А как же Яндекс.Переводчик? У него очень хороший перевод местами), было бы интересно сравнить

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

Я больше полутора лет назад делал похожий тест с Яндексом (на другом датасете), вот нарыл график :) (везде перевод на английский)

Делал перевод для грузинских SMS. Самому было нужно, потому что они написаны транслитом, а его надо сначала просто в грузинский перевести. Тут основная проблема была в том что у большинства API нет грузинской модели, а если есть, то она просто ужасного качества. Единственным вариантом, который более-менее всё переварил, пока стал chatGPT. Если кому-то такой переводчик SMS нужен - заходите, пользуйтесь, делитесь фидбеком: https://myroute.ge/translate/
Периодически корректирую промпт, потому что нейросеть в некоторых ситуациях всё равно несёт ахинею, либо добавляет отсебятину. Два самых главных параметра в запросе - температура 0 и очень убедительно расхвалить нейросеть и попросить выдавать результат нормально) Не попросишь - не получишь.

Да, я тоже пришел к выводу, что "make the translation sound as natural as possible" сильно бустит BLEU.

Не поделитесь своим промтом?

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

You are professional translator and native speaker. You are reading Georgian SMS written using transliteration. Translate SMS text to Russian. Keep only Russian translation. Make text readable. Keep English words and links as is in English. ....

И после этого ещё несколько вариаций уточнений, которые пока меняю. Оптимальный перевод был, когда просил переводить сначала на английский, а оттуда уже на русский. Но в этом случае нейросеть постоянно теряет мысль и дробит перевод на странные куски (3.5 turbo). т.е. не получается добиться стабильности результата. Получается на 1-5 запросах прям отличный перевод, а на 2-3 каша. Иногда просто выдаёт что-то вроде "шдобиса мре аквибиси мадлоба хватули" т.е. нейросеть уносит в транслит русскими буквами грузинских букв. Транслит же? Транслит) Иногда выплёвывает результат на английском. Иногда какие-то части пропускает. Слишком много уточнений - путается. Слишком мало - фантазию проявляет. Ищу тот самый промпт, который отработает хорошо прям всегда)

  1. Не нужно мешать перевод и транслитерацию. Зачем нейронка для нормализации? Нормализуйте алгоритмом, переводите с нормального грузинского.

  2. У вас мегасложный и архидлинный промт, GPT-3.5 на таких плохо справляется. Возьмите мой (+ можно сказать, что сообщение - это SMS).

  1. Затем что есть в тексте английские слова, а есть грузинские. И те и другие написаны латинскими буквами. Отделить одно от другого пока только нейронка и может.
    2. Вот с таким как раз сыпется, когда встречает странные СМС. С такого и начал

Можно спарсить английский и грузинский словари и классифицировать каждое слово в один из языков; затем нормализировать только грузинские слова

Да, в первую очередь об этом подумал. Реализовать вменяемо и быстро не вышло. СМС - странная штука. Её мало что нормально парсит. Например, случайная СМС:
MBC-shi 50,000 Laramde Avto Sesxs 7%-mde Fasdaklebit miigeb! Dgesve, Shemosavlis Dadasturebis Gareshe!
Efeqturi 23.7%-dan
NO99999

плюс к тому ссылка и номер.

Можно посмотреть быстрые модели для распознавания языка (например, lid.176), и пихать туда фрагменты текста

Они в моих экспериментах плохо отрабатывали на отдельных словах и обрывках слов.
MBC-shi, 7%-mde, daibrune 2% cashback, NO91293, sesxze minus 4%. Языковая мешанина, плюс поправка на то что главный язык грузинский. С ним работает очень ограниченное число моделей и словарей в принципе.

Последнее время Google Translate (бесплатный) переводит некоторые тексты ужасно плохо - просто выкидывает части предложений, если текста много (много это скажем 6-8 предложений). Если уменьшить количество текста на входе (до 2-3 предложений), то перевод появляется...

Хорошее исследование! В закладки, однозначно!

Яндекс не сравнивал - не знаю, можно ли получить доступ к API с армянской картой. Но вообще он неплох, в 2021 он обгонял гугл на некоторых языках.

Майкрософт не смотрел. По отзывам - он довольно дерьмовый.

Какая замечательная статья, без шуток.

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

Интересно было бы насколько можно добиться буста по качеству и скорости. Ну то есть можно ли добиться x10 / x100 / x1000 по скорости, какого-то буста по качеству и нереального буста по цене за счет селф-хоста.

Спустя год и 3 месяца понимаю, насколько же статья устарела.

Сейчас рулит Claude 3.5 Sonnet и GPT-4o (в целом Sonnet немного лучше). Чаще всего они лучше DeepL, но не всегда. Gemini с правильным промтом на нескольких самых крупных языках тоже конкурентособна, но быстро скатывается с падением популярности языка + нереально зацензурена.

Вангую, что там у огромных сеток со скоростью и ценой беда?

Со скоростью есть проблемы, но вот GPT-4o уже довольно шустрая.

Что касается цены, то в профессиональном переводе себестоимость даже GPT-4o на пару порядков меньше стоимости труда кожаного мешка, так что гоняться за дешевизной никакого смысла нет. Если увеличение цены на порядок дает хотя бы мизерный прирост к качеству, то на такой трейдофф надо идти.

С интересом бы прочитал что-то похожее от автора но на тему сравнения перевода в конкретном домене (или доменах)

Этим я как раз и занимаюсь на работе (и эта статья поспособствовала моему переходу в NLP из generic DS), так что, увы, не имею права.

Ну раз занимаетесь, то видимо смысл есть. Но можно намекнуть =)

Да не, в селф-хосте маленькой модели все равно смысла нет.

Маленькая модель все равно не сможет в правильную грамматику и адекватную стилистику, сколько ее не натаскивай. Доменные термины запомнить может, а нормально говорить - нет. Язык - сложная штука, тут даже миллиарда параметров никогда не хватит для профессионального качества.

Увы, приходится тюнить проприетарщину, типа gpt-4o-mini, вот эта идея вполне работает.

Я бы ещё включил модели NLLB и MADLAD в подобный бенчмарк.
Это нечто промежуточное между моделями MarianMT (тоже локально запускается, тоже предназначена для перевода) и LLMками (относительно большие размеры модели, обучение на массовых данных из интернета, в том числе и не предназначенных специально для перевода).
Ну и наверное модель Claude Sonnet; для многих языковых пар она значительно обходит модели от OpenAI.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории