AI Translation пропускает локаль португальского языка (pt) — пост переведён на все языки, кроме португальского

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

Особая благодарность Ричарду из Communiteq за его коммуникацию, компетентность и особенно за предложение использовать подход Data Explorer — именно благодаря SQL-запросам мне наконец удалось выявить все три проблемы. Большое уважение.


Проблема 1: Неверное определение локали LLM

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

Пример: Сообщение с заголовком «Выставка WA Ханамаро Чаки открылась в крепости Сан-Жуан-ду-Пики» написано полностью на английском. Однако детектор локали классифицировал его как pt-BR — вероятно, из-за португальских названий мест в тексте («крепость Сан-Жуан-ду-Пики», «Дом культуры Санта-Крус»).

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

Это особенно проблематично в многоязычных сообществах, где сообщения на одном языке часто содержат названия мест или собственные имена на другом языке.

Предлагаемое решение: Использовать более мощную модель для определения локали (например, Mistral Large), которая лучше понимает контекст и различает язык основного текста и собственные имена, встроенные в него.


Проблема 2: Ошибки 503 от API Mistral, приводящие к сбоям заданий в середине пакета

Mistral периодически возвращает ошибки 503 unreachable_backend. Хотя функция доукомплектования (backfill) в конечном итоге повторяет некоторые из этих попыток, задание Jobs::LocalizeTopics прерывается посередине выполнения при возникновении ошибки 503 — в результате оставшиеся темы в пакете остаются без перевода до следующего запланированного запуска.

Это создает непредсказуемую картину отсутствия переводов для случайных локалей в случайных темах.

Данные из логов:

DiscourseAi::Translation: Переведено 13 тем на de
[сбой в localize_topics.rb:57]

Задание перевело 13 тем, затем произошло прерывание. Оставшиеся темы не получили немецкий перевод до следующего цикла доукомплектования.


Проблема 3: Целевые категории для перевода ИИ — непоследовательное автоматическое заполнение подкатегорий

В моем случае я никогда вручную не добавлял категории в настройку «Целевые категории для перевода ИИ» — они, казалось, добавлялись автоматически. Однако две подкатегории (Viewpoints и Beaches) не были автоматически добавлены, хотя существовали и содержали контент.

Моя гипотеза: система автоматически добавляет подкатегорию в целевой список только тогда, когда в ней создается новый пост после включения перевода. Поскольку Viewpoints и Beaches были заполнены до включения перевода, они никогда не были автоматически добавлены и, следовательно, никогда не переводились.

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


Итог

Все три проблемы возникли одновременно, что крайне затруднило диагностику. Сообщение могло остаться без перевода из-за ошибочного определения локали, сбоя с кодом 503 или просто потому, что его категория отсутствовала в целевом списке — и не было способа различить эти случаи без глубокого анализа логов и SQL-запросов.

Запрос Data Explorer, предложенный Ричардом, стал ключом к расследованию. Надеюсь, эта подробная разбивка будет полезна команде. Готов предоставить дополнительные логи или примеры, если потребуется.

Спасибо команде за активность в этой теме!

1 лайк