AIの業務活用

AIが翻訳した業務文書の数値・単位・名前・否定表現を確認する方法

AI翻訳が自然に読めるかだけでなく、数値、単位、名前、否定表現、意味が原文どおり保たれているかを確認します。小さな合成例、逆翻訳のスポットチェック、Pythonによる確認方法を使います。

目次を表示

この翻訳はAIで作成しました。コード、単位、数値は原文と併せて確認してください。各言語のネイティブ話者による校閲は、まだ完了していません。 English

対象読者AIチャットアシスタントで業務文書を翻訳し、共有前に重要な情報が正しく維持されているか確認したい実務担当者向けです。

準備するもの
  • Python 3.12
  • 原文とAI翻訳文を保存したテキストファイル

01自然な翻訳でも間違っていることがある理由

AI翻訳は非常に自然に読めても、重要な事実が変わっていることがあります。小数点の位置が変わる、単位が消える、製品名が不要に翻訳される、否定命令が肯定的な意味に変わる、といったことがあります。特に技術、購買、日程、規制、運用文書では、小さな表現の違いが実際の作業指示を変える可能性があります。

以下は合成した例です。文学的な翻訳品質を評価することが目的ではありません。言語が変わっても維持されるべき重要情報が、本当に維持されているかを確認することが目的です。

02小さな合成業務文書から始める

架空の試験チーム向けに短い英語の作業指示があるとします。この例では、翻訳先の言語そのものより確認手順が重要です。

原文の項目原文
数量Prepare 12 samples.
トルクTighten Bolt A to 35 N·m.
温度Do not exceed 80 °C.
日付Send the report by October 14, 2026.
氏名Send the final file to Mina Park.
製品名Use the Alpha-X bracket.

したがって重要な値は12、35 N·m、80 °C、October 14, 2026、Mina Park、Alpha-Xです。また、'Do not exceed'という否定表現も重要です。否定が消えたり弱まったりすると、作業指示の意味そのものが変わります。

03保護すべき情報を維持するようAIに依頼する

翻訳を依頼するときは、どの項目をそのまま維持する必要があるか、どの内容を勝手に変更してはいけないかを明示します。

丁寧なプロンプトを書いても確認は必要です。良いプロンプトはリスクを下げますが、すべての重要情報が正しく維持されたことを証明するものではありません。

04数値、単位、名前、否定表現を1つずつ確認する

  1. 数値:数量、小数、割合、日付の構成要素、モデル番号、リビジョン番号をすべて原文と比較します。
  2. 単位:明示的に変換を依頼していない場合、35 N·mが35 N·mのまま、80 °Cが80 °Cのまま維持されているか確認します。
  3. 名前:人名、会社名、プロジェクト名、製品名を原文の正式表記と照合します。
  4. 否定表現:原文のnot、never、do not、cannot、except、withoutなどを探し、翻訳文でも同じ制限が維持されているか確認します。
  5. 義務の強さ:must、should、may、canを区別します。業務指示ではこれらを同じ意味として扱えません。
  6. 日付:日付の値だけでなく、その日付の役割も確認します。締切日が会議日や予定日に変わってはいけません。
翻訳上の問題確認結果
35 N·mが35 Nmに翻訳された意味は理解できる場合がありますが、文書で正確な単位表記が必要か確認してください。
80 °Cが80 °Fに翻訳された明示的な単位変換の依頼と確認がない場合は誤りです。
Mina Parkの表記が変更された正式な氏名表記と再確認する必要があります。
Do not exceed 80 °CがMaintain 80 °Cに翻訳された禁止の意味と作業条件が変わっているため誤りです。
Alpha-Xが説明的な一般語に翻訳されたAlpha-Xが正式な製品名なら誤りです。

05逆翻訳はスポットチェックとして使う

2つ目の確認方法として、翻訳文の一部を原文言語へ戻して翻訳できます。このとき元の文は見せません。特に否定指示、約束、締切、原文と大きく異なる表現になった文を確認するのに役立ちます。

たとえば逆翻訳の結果が'Do not exceed 80 °C'ではなく'Keep the temperature at 80 °C'になった場合、翻訳された作業指示を再確認する必要があります。一方、逆翻訳が原文と似ていても正確さが証明されたわけではありません。同じAIが以前の誤った解釈を再現する可能性があるためです。

06Pythonで保護対象のトークンを比較する

簡単なスクリプトを使うと、保護すべき情報の明らかな変化を見つけやすくなります。次の標準ライブラリだけを使う例では、source.txtとtranslation.txtを読み、数値と指定した保護文字列を取り出し、outputs/translation_check_report.txtに結果を書き出します。元のファイルは変更せず、outputsフォルダがすでに存在する場合は停止します。

python
from pathlib import Path
import re
import sys

SOURCE_PATH = Path("source.txt")
TRANSLATION_PATH = Path("translation.txt")
OUTPUT_DIR = Path("outputs")
REPORT_PATH = OUTPUT_DIR / "translation_check_report.txt"

if not SOURCE_PATH.is_file():
    sys.exit("Missing input file: source.txt")

if not TRANSLATION_PATH.is_file():
    sys.exit("Missing input file: translation.txt")

if OUTPUT_DIR.exists():
    sys.exit("Stop: outputs folder already exists. Remove or rename it manually first.")

source = SOURCE_PATH.read_text(encoding="utf-8")
translation = TRANSLATION_PATH.read_text(encoding="utf-8")

number_pattern = re.compile(r"(?<!\d)\d+(?:\.\d+)?(?!\d)")
source_numbers = number_pattern.findall(source)
translation_numbers = number_pattern.findall(translation)

protected_strings = [
    "N·m",
    "°C",
    "Mina Park",
    "Alpha-X",
]

lines = []
lines.append("AI TRANSLATION CHECK")
lines.append("====================")
lines.append("")
lines.append(f"Source numbers: {source_numbers}")
lines.append(f"Translation numbers: {translation_numbers}")

if source_numbers == translation_numbers:
    lines.append("PASS: number sequence matches")
else:
    lines.append("CHECK: number sequence differs")

lines.append("")
lines.append("Protected strings:")

for item in protected_strings:
    in_source = item in source
    in_translation = item in translation
    if in_source and in_translation:
        lines.append(f"PASS: {item}")
    elif in_source:
        lines.append(f"CHECK: missing or changed in translation -> {item}")

lines.append("")
lines.append("Manual checks still required:")
lines.append("- Verify negations and obligation strength sentence by sentence.")
lines.append("- Confirm that each number still refers to the same item.")
lines.append("- Check dates, names, units, and product names in context.")
lines.append("- Spot-check high-risk sentences with back-translation.")

OUTPUT_DIR.mkdir()
REPORT_PATH.write_text("\n".join(lines) + "\n", encoding="utf-8")
print(f"Created: {REPORT_PATH}")

2つのテキストを保存した後、python translation_check.pyを実行します。数値一覧が一致することは有用ですが、それだけでは十分ではありません。同じ数値が翻訳文にあっても誤った文に付いている可能性があるため、重要な項目は文脈まで直接確認してください。

07AI翻訳を確認するときによくあるミス

  • 翻訳文が自然に読めるかだけを確認します。
  • 小数点、マイナス記号、パーセント記号、単位の変更を見落とします。
  • 製品名やプロジェクト名を一般語として翻訳させてしまいます。
  • not、never、except、withoutなどが消えたことを見落とします。
  • must、should、may、canを同じ強さとして扱います。
  • 逆翻訳が原文に似ているという理由だけで正しいと判断します。
  • トークンが存在するかだけを見て、各数値や単位が正しい文に対応しているか確認しません。

自動チェックは目に見える不一致を見つけるのに強い一方、文の意図、範囲、例外、責任、法的効果が維持されているかを判断するのは苦手です。こうした点は文脈を直接読む必要があり、重要度の高い文書では専門的な確認が必要です。

08最終翻訳チェックリストを使う

  1. すべての数値、日付、割合、モデル番号、リビジョン番号を比較します。
  2. すべての単位を確認し、依頼していない変換が行われていないか確認します。
  3. 人名、会社名、プロジェクト名、製品名を正式表記と照合します。
  4. すべての否定表現と例外条件を原文と直接比較します。
  5. must、should、may、canなどの義務レベルを確認します。
  6. リスクの高い文を数文選び、原文を見せずに逆翻訳します。
  7. 自動トークンチェックだけに頼らず、最終翻訳文を全体の文脈で読みます。

実務では、AI翻訳を下書きとして扱い、重要な事実を独立して確認するのが適切です。契約、安全指示、規制文書、医療内容、その他影響の大きい資料では、簡単なAIとスクリプトの確認だけに頼らず、組織で求められる専門的な確認手順を使用してください。

実行・検証の記録

ChatGPT Python tool · Python 3.x · standard library pathlib, re, sys

  • 元のスクリプトは正常に実行され、outputs/translation_check_report.txt を作成した。
  • 有効な韓国語翻訳を使用した場合、元の正規表現は原文から ['12', '35', '80', '14', '2026'] を抽出したが、翻訳文からは ['35', '80', '14'] のみを抽出し、Unicode の単語境界動作による誤った不一致を示した。
  • 保護対象の4つの文字列 N·m、°C、Mina Park、Alpha-X はすべて PASS した。
  • 正規表現を (?<!\d)\d+(?:\.\d+)?(?!\d) に置き換えた後は、両ファイルとも ['12', '35', '80', '14', '2026'] を生成し、レポートは PASS: number sequence matches を返した。
  • source.txt と translation.txt はバイト単位で完全に同一のままだった。
  • 2回目の実行は outputs がすでに存在したため停止し、以前のレポートは上書きされなかった。
  • 2026-09-21にPython 3.12.14でローカル再検証しました。修正済みの例、元ファイルの保持、上書き防止の確認はすべて合格しました。
検証範囲の限界
  • 記事には完全な対象言語の translation.txt 例が1つに定まって提示されていないため、指定された保護情報を保持する忠実な韓国語翻訳を実行に使用した。
  • 修正版の正規表現でも、あらゆるローカライズされた数値表記、符号付き数値、桁区切り、ロケール固有の小数点表記を認識できるわけではない。
  • スクリプトは意味上の忠実性、否定表現、義務の強さ、または保持された数値が正しい文に対応しているかを検証できない。
  • Python 環境では無関係なスプレッドシートランタイムのウォームアップ警告が stderr に出力されたが、記事スクリプトや検証結果には影響しなかった。

参考資料

説明と例は独自に作成しました。関連する動作や概念は、以下の公式資料で確認できます。