自由に働くスタッフのブログ
機械翻訳の落とし穴
2022.02.7
日々プログラムをしていると、言語に関する公式ドキュメントなど、英語の文書を参照することがよくあります。
ただ、原文のまま読むのはしんどいので、基本的には日本語訳された(した)ものを参照していて、今回はそんな機械翻訳で遭遇した出来事についてのお話です。
プログラムをしていれば数値処理は良く扱うので、ほとんどの言語には数学系のクラスやライブラリがあります。
今回話題にする「切り捨て」「切り上げ」の処理も必ず(と言っていいほど)用意されていて、かつ、どの言語も同じメソッド名
切り捨て:floor
切り上げ:ceil
が使われています。
Apexも例外ではなく、数学系のMathクラスがあり、そこに切り上げ・切り捨てのメソッドも用意されているのですが、
最近、開発ドキュメントを参照したところ以下の様に記載されていました。
(https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_methods_system_math.htm)
ceil
最も小さい (負の無限大に最も近い) double を返します。
…あれ?切り上げじゃないの?「最も小さい」ってことはまさかの切り捨て?
ただし、続く文には、
引数より大きく、数学的整数と等しい値になります。
とあり、「引数より大きく」ということはやはり切り上げであってる?
因みにfloorも同じ感じでした。
最も大きい (正の無限大に最も近い) double を返します。引数より小さく、数学的整数と等しい値になります。
こちらも、文の最初と最後で内容が矛盾しているような…?
念のためとドキュメントを確認したのに余計に無駄に迷う結果に。
「もう試したほうが速い」ということで実際に動作を確認したところ、
やはりceilが切り上げ、floorが切り捨てであっていました。
そこで「もしや」と原文の方を確認した結果がこちら。
(https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_methods_system_math.htm)
ceil
Returns the smallest (closest to negative infinity) Double that is not less than the argument and is equal to a mathematical integer.
雑な訳:「少なくとも引数よりは大きい、最小(負の無限大に最も近い)の整数と同じ値のdoubleを返します」
これなら切り上げの説明として意味が通じますね。
切り捨ての方も
floor
Returns the largest (closest to positive infinity) Double that is not greater than the argument and is equal to a mathematical integer.
雑な訳:「少なくとも引数よりは小さい、最大(正の無限大に最も近い)の整数と同じ値のdoubleを返します」
どちらも「that」で文が区切られてしまったために、よく分からない訳になってしまったようです。
実は、これ以外にもいくつか似た事例があって、中には意味が完全に真逆になってしまっているものも…。
また、機械翻訳で人気の「DeepL翻訳」でも似たような事例に遭遇しました。
機械翻訳の分野はどんどん進歩していますが、中でも「DeepL翻訳」は群を抜いて精度が良く、普段からお世話になっています。
言語ごとの微妙なニュアンスなどもパラメータとして学習することで自然な翻訳をしているのだとか。
とても精度がいいのでつい無条件に信じてしまうのですが、以前遭遇した事例では、原文に記述されている「row(行)」と「column(列)」の翻訳結果が入れ替わっていました。
しかも厄介なことに、文としては全く違和感がなく…。結果、文の意味は分かるけど自分の持つ前提知識と全く合わない、という事態になりました。
このときは、読んでいたのが勉強中の内容だったこともあり「前提の理解が間違っているのか?」と再度前提部分から理解し直したのですが、やはりその部分の理解に間違いはなさそうだと。
ここでやっと翻訳結果を怪しんで(←遅い)原文を読んでみたら、行と列に対する記述が逆転していることに気付きました。
(実は翻訳結果を怪しんだのも「この記述が逆なら合うんだけどなぁ」と思ったからでした)
機械翻訳は便利ではあるのですが、過信していると時折ひどいデバフ(混乱)を付与してくるので注意が必要です。
…今後ともよろしくお願いいたします。
スタッフK