На главную страницу

Портфолио

Образование

Резюме (pdf)

Контакты


Google Translate detected!

Использование ML для установления авторства: сравнение перевода, выполненного человеком и машиной

Навыки: подготовка и анализ данных с помощью библиотеки Pandas; нейронные сети – построение модели, оптимизаций гиперпараметров, оценка результатов (библиотека keras).

Ноутбук проекта можно скачать по ссылке.

"Google Translate detected!" – так говорят переводчики, обнаружив, что перевод сделан не человеком, а машиной (подразумевается, что сделан плохо и это бросается в глаза).

Сам много лет работал переводчиком. Часто, начинаю текст и сразу думаю: "Автор писал не сам, это перевод". И действительно потом оказывается, что текст переводной. Есть определенные признаки, отличающие хороший перевод от плохого. Есть также признаки, отличающие машинный перевод от "человеческого". По сути, это задача классификации текстов, поэтому было интересно посмотреть, как с этим справится машина.

Это учебный проект, в котором я равнивал перевод четырех книг Диккенса, выполненный людьми, с переводом Google Translate. Диккенса выбрал, т.к. большой объем, книги в открытом доступе, все четыре переведены теми же переводчиками. Книги: «Посмертные записки Пиквикского клуба», «Жизнь и приключения Оливера Твиста», «Дэвид Копперфилд» и «Николас Никльби».

Подготовка данных

Имел в наличии переводы, выполненные той же группой переводчиков (Ланн, Кривцова и др.). Также перевел каждый роман с помощью Google Translate.

Проверил вручную, чтобы имена, по крайней мере, главных героев были переведены одинаково. Привел имена героев в переводе Google в соответствие с "человеческим" переводом. Весь перевод, конечно, не читал. Искал с помощью поиска в MS Word. (Предварительный эксперимент на книгах разных авторов показал, что машина очень легко различает тексты по таким признакам.).

Каждая книга была сохранена в отдельном файле в формате txt с разбивкой по предложениям (по точке), т.к. каждое предложение – отдельный абзац. Для сравнения использовал отрезки текста длинной, не менее заданной (по числу символов). То есть в каждой книге предложения были соединены в отрезки текста с длиной не менее заданной, после чего файлы были объединены в один и добавлена колонка с указанием автора (0 – человек, 1 – Google Translate). После этого данные были разбиты на учебную и тестовую выборки.

Оптимизация гиперпараметров модели

Для начала была использована простая модель – нейронная сеть без скрытых слоев с сигмоидой в качестве функции активации. Векторизация была выполнена с помощью эмбеддинга.

Далее была выполнена оптимизация следующих гиперпараметров:

Наибольшее влияние на точность оказывает длина отрезка: при увеличении длины точность растет, несмотря на то, что уменьшается размер обучающей выборки за счет объединения отрезков. При подборе гиперпараметров побовал длины до 4096 символов. Для проверки на тестовом наборе выбрал разумную длину – 1800 символов (стандартная переводческая страница).

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

Результаты

При мин. длине отрезка 100 символов точность на тестовой выборке 85%, при длине 250 символов – 91%, и при длине 1800 символов (стандартная переводческая страница) – 99%.

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

Сравнение с человеком

Подготовил две выборки для сравнения: 40 отрывков длиной 100 символов и 25 отрывков длиной 250 символов. Попробовал сам отличить машинный перевод от человеческого.

На выборке длиной 100 символов моя точность 0,7, точность модели 0,85. На выборке длиной 250 символов у меня 0,84, у модели 0,76.

Однако согласно критерию Мак-Немара в обоих случаях отличия нельзя считать статистически значимыми (p100 = 0,18; p250 = 0,73).

Логично проверить мощность критерия. В Python такой функции не нашел, поэтому использовал R. Мощность недостаточна: в первом случае 0,35, во втором 0,09.

Ноутбук проверки на Python (без расчета мощности) можно скачать по ссылке; то же самое, но с расчетом мощности на R – по ссылке ссылке.

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