Yandex Translate

💡 Translate — это сервис машинного перевода от Яндекса. Он позволяет переводить текст на более чем 100 языков и определять язык исходного текста. Этот сервис можно использовать в следующих сценариях:

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

💡 Translate предоставляется в виде API (gRPC и REST), единица тарификации — один символ, включая пробелы.

Начало работы

Любое начало работы с сервисом начинается с авторизации. Translate не исключение. Далее вы изучите первые шаги для старта работы.1️⃣ Выберите удобный способ авторизации: IAM-токен или API-ключ и получите его в консоли облака.2️⃣ Получите идентификатор любого каталога, для которого у вашего аккаунта есть рольai.translate.user или выше. Идентификатор каталога должен передаваться в теле каждого запроса в поле folderId.

Перевод текста

Сервис Translate поддерживает три типа операций:

  • перевод текста — метод translate;
  • определение языка текста — метод detectLanguage;
  • получение списка поддерживаемых языков — метод listLanguages.

Посмотрите на пример, где требуется перевести на русский язык две строки с текстом: Hello и World. Язык исходного текста будет определён автоматически.1️⃣ Создайте файл с телом запроса, например body.py:

**import** requests

IAM_TOKEN = '<IAM-токен>'
folder_id = '<идентификатор_каталога>'
target_language = 'ru'
texts = ["Hello", "World"]

body = {
    "targetLanguageCode": target_language,
    "texts": texts,
    "folderId": folder_id,
}

headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer {0}".format(IAM_TOKEN)
}

response = requests.post('https://translate.api.cloud.yandex.net/translate/v2/translate',
    json = body,
    headers = headers
)

print(response.text) 

2️⃣ В ответ сервис вернёт переведённые строки текста:

  • Результат
{
"translations": [
{
"text": "Привет",
"detectedLanguageCode": "en"
},
{
"text": "Мир",
"detectedLanguageCode": "en"
}
]
} 

💡 Translate также умеет переводить текст в формате HTML с сохранением разметки. Для этого в теле запроса нужно указать параметр "format": “HTML”. Он является необязательным, значение по умолчанию “PLAIN_TEXT”.

Особенности сервиса

У Translate есть установленные квоты и лимиты.Квоты можно увеличить через обращение в техническую поддержку:

  • количество символов на перевод в час — 1 000 000 000;
  • количество запросов к сервису в секунду — 20.

Лимиты, которые нельзя изменить:

  • количество передаваемых глоссарных пар в одном запросе — 50;
  • количество символов в одном запросе — 20 000, по 10 000 для исходного и для переведённого текста.

Ещё три важные детали:1️⃣ Translate не поддерживает перевод мультиязычных текстов. Если необходимо перевести текст, написанный на нескольких языках, следует разбить его на несколько частей, отдельных для каждого языка, и отправлять на перевод по частям.💡 Для повышения точности определения языка не рекомендуется отправлять слишком короткие сегменты текста: одиночные слова и короткие словосочетания. Иногда они содержат одинаковые значения в некоторых языках, и метод может вернуть неправильный результат.3️⃣ Список языков, которые поддерживает сервис, можно получить не только через API, но и посмотреть на сайте.

Повышение точности перевода текста

Качество перевода можно улучшить с помощью следующих инструментов:

  1. Экранирование текста
  2. Проверка текста на опечатки
  3. Глоссарии

Предлагаем разобраться с каждым из них подробнее!

Экранирование текста

Инструмент позволяет оставлять без перевода определённые фрагменты текста. Это полезно, например, для имён собственных. Для этого нужно передать текст на перевод с указанием “format”: “HTML” и экранировать нужный фрагмент текста.Пример кода

{
"format": "HTML",
"texts": [
"The e-mail has been changed. The new password is **<span translate=no>**%\$Qvd14aa2NMc**</span>**"
]
} 

Проверка текста на опечатки

Слова с опечатками могут быть переведены неправильно или транслитерированы. Например, слово Hellas переводится как Эллада. Это же слово, написанное с ошибкой — helas, будет переводиться как хелас. Чтобы проверить правильность написания слов, используйте параметр speller.Пример кода

{
"sourceLanguageCode": "en"
"targetLanguageCode": "ru",
"texts": [
"helas"
],
"folderId": "<идентификатор_каталога>",
"speller": true
} 

Глоссарии

💡 Глоссарий — это словарь слов и словосочетаний с определёнными вариантами перевода. Он передаётся вместе с текстом внутри API-запроса и позволяет повысить точность перевода текстов со специфической тематикой и лексикой, например медицинских или юридических. В запросе глоссарий выглядит следующим образом:Пример кода

body = {
    "targetLanguageCode": target_language,
    "sourceLanguageCode": source_language,
    "texts": texts,
    "folderId": folder_id,
    "glossaryConfig": {
    "glossaryData": {
      "glossaryPairs": [
        {
          "sourceText": "table",
          "translatedText": "таблицы",
        },
        {
          "sourceText": "frame",
          "translatedText": "фрейм"
        }
      ]
    }
  },
} 

💡 Глоссарий — это скорее рекомендация для модели, как именно переводить тот или иной фрагмент текста. В некоторых случаях она может не учитывать указанный в глоссариях вариант и использовать свой.Для языков ar, bg, cs, de, en, es, fr, it, kk, pl, ru, tr, tt, uk работают дополнительные инструменты:

  • Нейроглоссарии. В отличие от обычных глоссариев, которые привязываются к конкретной форме слова, нейроглоссарии автоматически учитывают возможные формы слов, падеж и род.

Например, если в глоссарии указать, что чёрный переводится как dark, то фраза самая чёрная комната будет переведена как the darkest room.

  • Мультиглоссарии. Это возможность передать в одном запросе разные варианты перевода (род и падеж) одного и того же слова или фразы. Нейросеть сама выберет наиболее подходящий вариант. Важно, что это должны быть разные варианты одного и того же перевода, а не совсем разные значения. Например, передавать в одном глоссарии, что letterбуква и letter — письмо, не следует.

Параметр exact позволяет задать однозначный перевод определённого глоссарного термина. Например:Запрос

target_language = 'ru'
source_language = 'en'
texts = ["It is a table.", "It is a frame"]

body = {
    "targetLanguageCode": target_language,
    "sourceLanguageCode": source_language,
    "texts": texts,
    "folderId": folder_id,
    "glossaryConfig": {
    "glossaryData": {
      "glossaryPairs": [
        {
          "sourceText": "table",
          "translatedText": "таблицы",
          "exact": True
        },
        {
          "sourceText": "frame",
          "translatedText": "фрейм"
        }
      ]
    }
  },
} 

Ответ

{
"translations": [
{
"text": "Это таблицы."
},
{
"text": "Это фрейм"
}
]
} 

Капитализация перевода с использованием глоссария

Перевод глоссарных терминов учитывает капитализацию переданного перевода. При определении капитализации используются правила:

  • Если термин написан строчными буквами, то его капитализация определяется автоматически по исходному тексту.
  • Если термин начинается или полностью написан заглавными буквами, то его капитализация в переводе совпадает с заданной в глоссарии.
  • Если в термине есть и заглавные, и строчные буквы, но он начинается со строчной, будет найдена максимальная общая подстрока у термина и сгенерированного перевода. Капитализация в переводе будет скопирована из термина, а остальные символы будут строчными.

Пример:Исходный текст: I saw a KITTEN.

  • Глоссарий: kittenкотенок Перевод: Я видел КОТЕНКА
  • Глоссарий: kittenКотенок Перевод: Я видел Котенка
  • Глоссарий: kittenКОТЕНОК Перевод: Я видел КОТЕНКА
  • Глоссарий: kittenКотЕнОк Перевод: Я видел КотЕнка

❗️ Ограничения при работе с глоссариями: обязательно передавать параметры source_language и target_language; максимальное количество глоссарных пар в одном запросе — 50.

Дообучение модели перевода

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

Какие данные требуются для дообучения

Для дообучения требуются сегменты в виде оригинал — перевод в ТМХ-формате. Для получения значимого эффекта необходимы как минимум 15 000 таких сегментов. Если требуется переводить только определённые термины, то лучше использовать глоссарии.

Как дообучить модель

1️⃣ Оставьте обращение в техническую поддержку2️⃣ Специалисты Yandex Cloud отправят вам инструкцию, по которой вы сможете дообучить модель в сервисе Yandex DataSphere3️⃣ Для использования модели укажите её идентификатор в параметре model при отправке запросаДля лучшего результата дообучения данные должны быть связаны с определённой тематикой: медицина, юриспруденция, IT, нефтегазовая сфера и т. д.

💻 Практика. Работа с Translate

Теперь, когда вы освоили всю основную теорию о сервисе Translate, можно переходить к практике.❗️Практическая часть курса предполагает использование облачных ресурсов, которые вы оплачиваете самостоятельно. Курс разработан так, чтобы расходы были минимальными, — часть из них покроет стартовый грант.Чтобы избежать лишних трат:— останавливайте ВМ в перерывах между практиками (это не снизит потребление до нуля, но заметно сократит расходы);— настройте бюджет и уведомления в разделе Биллинг;— удаляйте ресурсы после завершения курса;— необязательно выполнять все практики — сосредоточьтесь на релевантных.Выполните следующие операции:

  • переведите произвольный текст с английского языка на русский;
  • переведите тот же текст с использованием глоссариев, добавив туда несколько пар, попробуйте использовать параметры exact, speller и поменять капитализацию некоторых глоссарных терминов.

Ссылка: https://practicum.yandex.ru/learn/yc-ml-services/courses/7617ab7d-f316-4d9a-9939-c7158759a3e9/sprints/932316/topics/df8ac0ff-0fdf-4dee-8391-e20c78d01ed3/lessons/5ee06382-d494-4641-a70c-3376571406af/

Рубрики: Uncategorized

0 комментариев

Добавить комментарий

Заполнитель аватара

Ваш адрес email не будет опубликован.