광범위한 조사를 거쳐, 하나의 번역 문제로 보였던 것이 실제로는 동시에 발생하는 세 가지 별개의 문제임을 파악했습니다. 이로 인해 상당한 혼란이 발생했습니다.
Communiteq의 Richard에게 소통과 전문성, 특히 Data Explorer 접근법을 제안해 준 점에 대해 특별히 감사드립니다. SQL 쿼리를 통해 마침내 세 가지 문제를 모두 정확히 파악할 수 있었습니다. 큰 존경의 말씀을 드립니다.
문제 1: LLM의 잘못된 로케일(locale) 감지
로케일 감지에 사용되는 LLM은 영어로 작성되었지만 포르투갈어 지명을 포함하는 게시물을 잘못 분류하고 있습니다.
예: *“Hanamaro Chaki’s WA exhibition opens at Fortress of São João do Pico”*라는 제목의 게시물은 완전히 영어로 작성되었습니다. 그러나 로케일 감지기는 이를 pt-BR으로 분류했습니다 — 아마도 텍스트 내의 포르투갈어 지명(“Fortress of São João do Pico”, “Casa da Cultura de Santa Cruz”) 때문일 것입니다.
결과: 시스템이 해당 게시물이 이미 포르투갈어로 작성된 것으로 판단했기 때문에, 포르투갈어로 번역되지 않았습니다. 대신 영어로 번역되었는데, 영어를 “누락된” 언어로 간주했기 때문입니다.
이는 한 언어의 게시물이 다른 언어의 지명이나 고유 명사를 자주 참조하는 다국어 커뮤니티에서 특히 문제가 됩니다.
제안되는 수정 사항: 로케일 감지에 더 강력한 모델(예: Mistral Large)을 사용하여, 본문 텍스트의 언어와 그 안에 포함된 고유 명사 사이의 차이를 더 잘 이해하고 구별하도록 해야 합니다.
문제 2: Mistral API의 503 오류로 인한 배치 작업 중간 충돌
Mistral은 간헐적으로 503 unreachable_backend 오류를 반환합니다. 백필(backfill)이 일부 오류를 결국 재시도하긴 하지만, 503이 발생하면 Jobs::LocalizeTopics 작업이 실행 중에 충돌합니다 — 이로 인해 배치 내 나머지 주제들은 다음 예약 실행까지 번역되지 않은 상태로 남게 됩니다.
이로 인해 무작위 로케일에 대해 무작위 주제에서 번역이 누락되는 예측 불가능한 패턴이 발생합니다.
로그 증거:
DiscourseAi::Translation: Translated 13 topics to de
[crash in localize_topics.rb:57]
작업은 13개의 주제를 번역한 후 충돌했습니다. 나머지 주제들은 다음 백필 주기까지 독일어 번역을 받지 못했습니다.
문제 3: AI 번역 대상 카테고리 — 하위 카테고리의 일관성 없는 자동 입력\n
제 경우, AI translation target categories 설정에 카테고리를 수동으로 추가한 적이 없습니다 — 자동으로 추가된 것으로 보였습니다. 그러나 두 개의 하위 카테고리(Viewpoints와 Beaches)는 존재하고 콘텐츠를 포함하고 있었음에도 자동으로 추가되지 않았습니다.
저의 가설: 시스템은 번역이 활성화된 이후 해당 하위 카테고리에 새 게시물이 생성될 때만 대상 목록에 하위 카테고리를 자동으로 추가하는 것입니다. Viewpoints와 Beaches는 번역이 켜지기 전에 이미 콘텐츠가 채워져 있었기 때문에 자동으로 추가되지 않았고 — 따라서 번역되지도 않았습니다.
이는 혼란스러운 동작입니다. 자동 입력 로직이 존재한다면 일관되고 소급 적용되어야 하거나, UI에서 하위 카테고리를 수동으로 추가해야 한다는 점을 훨씬 명확하게 표시해야 합니다.
요약
세 가지 문제가 동시에 발생하여 진단이 매우 어려웠습니다. 게시물이 로케일 오감지, 503 충돌, 또는 대상 목록에서 카테고리가 누락되었기 때문에 번역되지 않았을 수 있으며, 심층 로그 분석과 SQL 쿼리 없이는 이 경우들을 구별할 방법이 없었습니다.
Richard가 제안한 Data Explorer 쿼리는 조사를 해결하는 열쇠였습니다. 이 상세한 분석이 팀에게 유용하길 바랍니다. 필요 시 추가 로그나 예시를 제공하겠습니다.
이 주제에 대해 활발하게 활동해 주신 팀에게 감사드립니다!
