【悪用禁止!】機械翻訳検出ソフト作成【ポストエディットのコツも紹介】

translation_imagePython

どうも電☆砲です。

今回は機械翻訳の訳文をプログラムで見抜ける(検出できる)かどうか気になったので、自分でプログラムを組んでみました。
というのも、最近翻訳の副業をしており、基本は

自動Google翻訳されたTradosファイル(こちらの記事参照)+自分の脳みそで文法や表現等を修正

といった感じでやっているのですが、ふと

  • 「この翻訳って機械翻訳だとバレるのでは…?」
  • 「機械翻訳と自分の訳文の違いを数値化できないか?」

と思い、ちょっと気になったので調べてみました。

こちらの記事 に書いてあるように、機械翻訳された文章と人間が機械翻訳を頼らずに1から訳しあげた文章には特定の差があり、それは「文章間の類似度」を計算することで、ある程度は見抜けるようです。

また、こちら のウェブページでは、オンライン上で2つの文章を入力すると、自動でその文章間の類似度を計算してくれます。
0.7以上の類似度が出れば、Google翻訳などの機械翻訳の可能性が高いことを示します。これは超便利ですね。

しかし、原理を調べながら、あとで自分でカスタマイズできるように、自分専用の機械翻訳を見抜くプログラムが欲しかったので、今回は調べながら自分で作ってみました。

開発環境

  • Windows 10 x64
  • Anaconda 5.2.0
  • Python 3.8.5

今回はPythonライブラリである MeCab を使うので、事前にお使いのPython環境へインストールして使えるようにしておいてください。
AnacondaへのMeCabのインストール方法については、こちら に詳しいインストール手順が記載されていますので、参考にしてください。

文章間の類似度とは?

「文章間の類似度」とは何ぞや?とい疑問をお持ちの方。
こちらの記事 が詳しく解説していますので、参考にしてみてください(私もこちら記事で勉強しました)。

機械翻訳を検出するプログラム

こちらのGitHubレポジトリ に置いておきました。
ファイルをZIPでダウンロードして、バッチファイルをたたくと、以下のようなサンプルファイルが出力されます。

赤枠内が機械翻訳された文章、青枠内が自分が修正した文章などの機械翻訳された文章との類似度を計算した文章(複数可)、緑枠内が計算された類似度(青枠内の文章の並びと同じ順に類似度が出力されています)です。
参考までに、私が色々試してみたところ、文章の種類にもよりますが、類似度が0.65~0.7以上の場合は機械翻訳(Google翻訳)の可能性が高くなるようです。

機械翻訳のポストエディットのコツ

  • 「機械翻訳がプログラムで大体は見抜けるってことは分かったけど、じゃあ機械翻訳ってバレないような訳文に修正するにはどうすればいの??」

と思っている方のために、私の翻訳経験も交えながら、以下で色々検証を行ってみましたので参考にしてください。

以下に、例文(機械翻訳と訳文例(顧客からOKをもらっている訳文))を一つ挙げますので、これを実際に機械翻訳→機械翻訳だとバレない翻訳に修正していってみましょう。

機械翻訳(原文)訳文例(顧客からOKをもらっている訳文)類似度
ユーザーは、ソフトウェアのデータ、またはソフトウェアの実行中に端末デバイスのメモリにリリースされたデータ、およびソフトウェアの実行中にクライアントとサーバー間で生成されたインタラクティブデータをコピー、変更、または変更してはなりません。 または、プラグインを使用してソフトウェアを実行するか、プラグイン、許可されていないサードパーティのツール/サービスを介したソフトウェアおよび関連システムへのアクセスを含むがこれらに限定されない、あらゆる形式の派生物を作成します。 ユーザーは、本ソフトウェアのいかなるデータ、または本ソフトウェアを実行中に端末のメモリに公開されたいかなるデータ、および本ソフトウェアの実行中にクライアントとサーバーの間で生成されたインタラクティブなデータについても、複製、変更、または改変を行ってはなりません。また、本ソフトウェアをプラグインと共に実行すること、プラグインなど、いかなる形態であっても派生的著作物を作成すること、承認されていない第三者のツール/サービスを通じて本ソフトウェアおよび関連システムにアクセスすることは、してはなりません。 0.73

① 単語を変える

機械翻訳とバレないようにするためのポイントとして一番大きい要素は、重要な形態素(例えば、動詞、名詞、形容詞、形容動詞など)の単語を機械翻訳のものとは異なる別の単語や表現に意図的に変えることです。
というのも、上記のプラグラムの文章の類似度計算では、これらの動詞、名詞、形容詞、形容動詞を重要な形態素として捉えているからです。
ですので、これらの単語を意図的に変えてしまえば(ただし、変えた後も意味が同じである必要がありますが)、基本的には類似度は下がります。

以下で例文(適当な利用規約の文章の一部)を見てみましょう。

機械翻訳(原文)①を考慮して修正した訳文類似度
ユーザーは、ソフトウェアのデータ、またはソフトウェアの実行中に端末デバイスのメモリにリリースされたデータ、およびソフトウェアの実行中にクライアントとサーバー間で生成されたインタラクティブデータをコピー、変更、または変更してはなりません。 または、プラグインを使用してソフトウェアを実行するか、プラグイン、許可されていないサードパーティのツール/サービスを介したソフトウェアおよび関連システムへのアクセスを含むがこれらに限定されない、あらゆる形式の派生物を作成します。 ユーザーは、ソフトウェアのデータ、またはソフトウェアの実行中に端末デバイスのメモリに保存されたデータ、およびソフトウェアの実行中にクライアントとサーバー間で生成されたインタラクティブデータについて、複製、改ざん、または修正してはなりません。あるいは、プラグインを使用して本ソフトウェアを実行したり、プラグインや未許可のサードパーティのツール/サービスを利用したソフトウェアおよび関連システムへのアクセスを含むがこれらに限定されないなど、あらゆる形式の派生物を作成してはなりません 0.82

赤字は修正箇所です。
単純に単語やちょっとした助詞等を変更しただけでは、類似度は0.8を超えてしまっています。これではきっと機械翻訳だとすぐにバレてしまいますね。
ちなみに、単純に語順を入れ替えただけのものも、重要な形態素(動詞、名詞、形容詞、形容動詞)が変わっていないため、類似度は全く同じなので注意してください。

もう少し訳文を工夫してみましょう。

② 読みやすくする

単語だけでなく表現も変えてみましょう。以下のように頑張って表現も変えてみました。

機械翻訳(原文)①、②を考慮して修正した訳文類似度
ユーザーは、ソフトウェアのデータ、またはソフトウェアの実行中に端末デバイスのメモリにリリースされたデータ、およびソフトウェアの実行中にクライアントとサーバー間で生成されたインタラクティブデータをコピー、変更、または変更してはなりません。 または、プラグインを使用してソフトウェアを実行するか、プラグイン、許可されていないサードパーティのツール/サービスを介したソフトウェアおよび関連システムへのアクセスを含むがこれらに限定されない、あらゆる形式の派生物を作成します。 ユーザーは、ソフトウェアのあらゆるデータ、または(本ソフトウェアの実行中に端末デバイスのメモリに保存されたデータ、およびや本ソフトウェアの実行中にクライアントとサーバー間で生成されたインタラクティブデータの複製、改ざん、修正してはなりません。あるいは、プラグインを使用し本ソフトウェア実行したり、プラグインや未認可の他社製のツール/サービスを利用したソフトウェアおよび関連システムへのアクセスを含むがこれらに限定されないなど(ただしこれらに限定されない)あらゆるいかなる形式の派生物作成も禁止されています 0.77

「機械翻訳では2文になっていたけど、さらに修正して1文にまとめたし、読み手が分かりやすくなるように()括弧を使って整理したし、これだけ修正すれば機械翻訳だとバレないだろう!」

と思ったあなた。残念ですが、あなたの訳文は類似度がまだ0.77もあるので、プログラム的には「機械翻訳の確率が大」となっています。

なぜでしょうか?

もう一度思い出してほしいのですが、機械翻訳だとバレないようにするために大切なことは、

  • 重要な形態素(例えば、動詞、名詞、形容詞、形容動詞など)の単語を機械翻訳のものとは異なる別の単語や表現に意図的に変えること

です。1文か2文か、括弧()で括ってあるかないか、読みやすいかどうかは、機械翻訳だとバレないようにするための対策としては有効ではありません。

では、ここから最後にもうひと踏ん張りして、機械翻訳との差をさらに広げてみましょう。

③ 表現を変える

上記「①、②を考慮して修正した訳文」から変更した箇所を、以下で赤字にしています。

機械翻訳(原文)①、②、③を考慮して修正した訳文類似度
ユーザーは、ソフトウェアのデータ、またはソフトウェアの実行中に端末デバイスのメモリにリリースされたデータ、およびソフトウェアの実行中にクライアントとサーバー間で生成されたインタラクティブデータをコピー、変更、または変更してはなりません。 または、プラグインを使用してソフトウェアを実行するか、プラグイン、許可されていないサードパーティのツール/サービスを介したソフトウェアおよび関連システムへのアクセスを含むがこれらに限定されない、あらゆる形式の派生物を作成します。 ユーザーは、本ソフトウェアのあらゆるデータ(本ソフトウェアを実行中にデバイスのメモリに保存されたデータや本ソフトウェアの実行中にクライアントとサーバー間の通信で生成された中間データ)の複製、改ざん、変更、あるいは、プラグインを使用した本ソフトウェアの実行や、プラグインや未認可の他社製ツールやサービスを利用した本ソフトウェアや関連システムへの不正アクセスなど(ただしこれらに限定されない)、いかなる形態の派生物の製作も禁止されています。 0.64

なんということでしょう。たったの5カ所の表現を修正しただけで、機械翻訳との類似度が0.77から0.64まで下がりました!
これなら、校閲者が主観的に見て

「これは機械翻訳だ!」

とか

「文型がGoogle翻訳に似ている!」

とかいちゃもんを付けてきても、プログラム的には機械翻訳の確率が低くなっているので、こちらも負けずに人間が翻訳したと主張できますね。

ただし、翻訳チェックの際は、機械翻訳との類似度が低いことだけでなく、文章の言わんとしていることの意味が同じかどうか、文法がおかしくないかなどを確認するようにしてください。
また、顧客によっては翻訳メモリ(TM)がある場合があるので、その場合は、類似度が高くなったとしても、顧客の指定している訳語を用いて訳文を整えましょう。

表現を変えるために、どのような個所や表現に注目して、どのように修正すればよいだろうか?

と思われている方向けに、私の経験に基づいて、以下にいくつか修正例を挙げますので参考にしてみてください。

機械翻訳
この製品は、身体的、感覚的、精神的能力が低下している、または経験や知識が不足している人(子供を含む)が、安全の責任者から製品の使用に関する監督または指示を受けていない限り、使用することを目的としていません。

何かのユーザーマニュアルの文章ですが、言い回しがおかしかったり、表現がやや堅苦しい感じになっているので、これらを順を追って修正していきます。

修正後の訳文注目した箇所類似度
製品は、身体的、感覚的、精神的能力が低下している、または経験や知識が不足しているお子様を含む)が、安全の責任者から本製品の使用に関する監督または説明を受けていない限り、使用しないようにしてください ユーザーマニュアルのような取説特有の表現(例:本製品、方、お子様)に変え、表現上違和感のある部分を若干修正(例:使用することを目的としていません)して、読みやすくした 0.78
本製品は、身体的、感覚的、精神的能力が乏しい、または経験や知識が不足している方(お子様を含む)が、安全上の責任者から本製品の使用に関する監督または説明を受けていない限り、使用しないようにしてください。 「低下している」から「乏しい」に単語を変えた 0.74
身体的、感覚的、精神的能力が乏しい、または経験や知識が不足している方(お子様を含みます)が本製品をご使用になる際は、必ず安全上の責任者から本製品の使用に関する監督や説明を受けるようにしてください。表現を変えて、読んだ際にスムーズになるようにするだけでなく、新しい重要な形態素(「含み」、「なる」、「際」、「受ける」)を盛り込んだ。
ヒント:「含みます」は「含み」と「ます」に分割され、「含む」と「含み」は異なる単語として類似度計算されます。同様に「受けていない」は「受け」「て」「い」「ない」に分割され、動詞「受け」と「受ける」は異なる単語として類似度計算されます。
0.59

このように表現を変える際に、新しい形態素も一緒に盛り込むことで、同時に類似度も下げることができる。私がよくやる応用が訊きやすいのは、肯定文⇔否定文の入れ替えである(上記例文でもこの手法を使っている)。
これをすることで、形態素の活用形(例:終止形⇔連用形)や形態素自体が変化(例:新しい⇔古い(対義語))するのに加え、前後に新しい形態素を入れやすくなる

もう一つ紹介します。

機械翻訳
充電ドックを熱(暖房用通気口など)から遠ざけてください。

この文章もさきほどと同じユーザーマニュアルの一部から取ってきたものです。ちなみにこの文章では、客先から「チャージドック」という訳語を使うように指示があります。

修正後の訳文注目した箇所類似度
チャージドックを熱(暖房用通気口など)から遠ざけてください。 顧客指定訳語への置換後。 0.89
チャージドックを熱(排気口など)から遠ざけてください。 「暖房用通気口」が意味不明なので修正します。これは「暖房」「用」「通気」「口」と4つの形態素に分割できますので、これらをまったく異なる形態素で表現でき、かつ原文と同じ意味を表現できればパーフェクト!まずは単純に「排気口」(「排気」「口」)としてみます。 0.63
チャージドックを熱(高温の排気など)から遠ざけてください。 元々の機械翻訳にあった「口」を削除し、新たに「高温」、「部」という形態素を導入した。 0.47
チャージドックを熱(高温になった排気部など)から遠ざけてください。 文章が全体的に長くなりすぎない程度に、ダメ押しで、「なっ」(動詞「なる」の連用形)を導入した。 0.44
チャージドックを熱(高温になった排気部など)から遠ざけてください。 今回MeCabで使用した辞書では、「熱」と「熱源」が異なる単語として分割されていた。 0.33
チャージドックを熱源(高温になった排気部など)に近づけないようにしてください。 肯定文⇔否定文の入れ替えによって、「遠ざけてください」(重要な形態素「遠ざけ」「ください」)から「近づけないようにしてください」(重要な形態素「近づけ」「よう」「し」「ください」)に変更して、さらに新たに2つの形態素「よう」「し」を導入した。ここまでくれば、もう誰が見ても機械翻訳だとは思われないだろう。 0.20

皆さまの参考になれば幸いです。

まとめ

以上をまとめて、「機械翻訳だとバレないようにするための」翻訳後のチェックリストを作成しましたので、ご活用ください。
すべて「O」だった場合は、機械翻訳だと特定される確率は非常に低くなると予測されます

翻訳後のチェックリストO/X
類似度が0.65~0.7未満である
正しい文法を使っている(てにをは等)
原文の意味をしっかりと理解しており、訳文が原文と同じ意味になっている(翻訳漏れや誤訳がない)
顧客の指定する訳語(TMの単語)を使用している

今後アップデートがあれば、こちらの記事を更新していきます。

参考

Google 翻訳 + ポストエディットを見抜けるか

文章類似度算出(速攻ハック版)

形態素解析エンジン MeCabをPythonで利用する

Pythonで始める自然言語処理の基礎の基礎

PythonとMeCabで文章を解析する方法【頻出度カウント】

タイトルとURLをコピーしました