英文の契約書・仕様書を訳すときに、過去の対訳と用語集から似た文を探し、社内の訳にそろえた訳文の案を根拠の対訳付きで返す
英文の契約書や仕様書を和訳するときに、原文の1文ごとに過去の承認済みの対訳と用語集から似た文を探し、社内でこれまで使ってきた訳にそろえた訳文の案を作ります。案には根拠にした過去の対訳が付きます。
- 生成AI
- Azure OpenAI Service/Claude/Gemini
- AIサービス
- Azure AI/Google Vertex AI/OpenSearch
- 対象業界
- IT・SaaS/商社/製造
- 対象部門
- 法務
- 対象業務
- 情報検索/書類作成
- 主な課題
- 属人化している/情報が見つからない/書類作成に時間がかかる
- AIで行う処理
- 翻訳
- 主な効果
- 品質標準化/工数削減/検索時間短縮
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 依頼のメールから英文の原文(Word または PDF)を受け取る
- 同じ取引先、同じ種類の契約で、過去に訳したものがないかをファイルサーバーで探す
- 見つかった過去の訳を開き、似た条項を目で探して、使えそうな訳を写す
- 用語集を開き、定義語・責任・保証などの語の決まった訳を確かめる
- 残りの文を訳し、全体を通して読み、定義語の訳が最初と最後で同じかを確かめる
- 上長が訳文を読み、気になる箇所を直して依頼者に返す
- 人依頼された原文を、和訳の受付フォルダに入れる
- 自動原文を文に分け、定義語の一覧と文番号を付ける
- 自動文ごとに、過去の対訳を単語の一致と意味の近さで探し、上位の候補を取る
- 自動文に含まれる語を用語集で引き、決まった訳と、使ってはいけない訳を取る
- 自動生成AIが、候補の対訳と用語に合わせて訳文の案を作り、根拠と訳し分けの理由を付ける
- 自動プログラムが、数値・日付・定義語の対応と、用語集との食い違いを検査する
- 人担当者が、「過去の訳と同じ」以外の文と、検査で引っかかった文を中心に直す
- 人上長が、新しく訳した文と訳し分けた文を中心に読み、依頼者に返す
- 自動承認された訳を文の対応付きで対訳の検索の索引に足す
各工程の詳しい説明を読む
- 依頼のメールから英文の原文(Word または PDF)を受け取る
- 同じ取引先、同じ種類の契約で、過去に訳したものがないかをファイルサーバーで探す
- 見つかった過去の訳を開き、似た条項を目で探して、使えそうな訳を写す
- 用語集を開き、定義語・責任・保証などの語の決まった訳を確かめる
- 残りの文を訳し、全体を通して読み、定義語の訳が最初と最後で同じかを確かめる
- 上長が訳文を読み、気になる箇所を直して依頼者に返す
(a)過去の訳が見つからない。 ファイルサーバーの検索は、ファイル名と本文の文字列の一致でしか探せません。「Limitation of Liability」と「Liability Cap」は同じ趣旨の条項ですが、文字列が違うので見つかりません。 結局、覚えている人に聞くことになります。
(b)同じ条項の訳がぶれる。 担当者ごとに、「indemnify」を「補償する」と訳す人、「損害を填補する」と訳す人がいます。稟議で読む役員は、訳が違えば中身も違うと受け取ります。
(c)用語集が使われない。 用語集はあっても、訳しながら毎回スプレッドシートを開く人は多くありません。開かれない用語集は、更新もされなくなります。
(d)見直しが全文になる。 どの文が過去の訳どおりで、どの文が新しく訳したものかが分からないので、上長は全文を読み直します。
- 【人】 依頼された原文を、和訳の受付フォルダに入れる
- 【自動】 原文を文に分け、定義語の一覧と文番号を付ける
- 【自動】 文ごとに、過去の対訳を単語の一致と意味の近さで探し、上位の候補を取る
- 【自動】 文に含まれる語を用語集で引き、決まった訳と、使ってはいけない訳を取る
- 【自動】 生成AIが、候補の対訳と用語に合わせて訳文の案を作り、根拠と訳し分けの理由を付ける
- 【自動】 プログラムが、数値・日付・定義語の対応と、用語集との食い違いを検査する
- 【人】 担当者が、「過去の訳と同じ」以外の文と、検査で引っかかった文を中心に直す
- 【人】 上長が、新しく訳した文と訳し分けた文を中心に読み、依頼者に返す
- 【自動】 承認された訳を文の対応付きで対訳の検索の索引に足す
7番目と8番目で、人が見る範囲が変わります。 過去の承認済みの訳とほぼ同じ文は、根拠の対訳と並べて確かめるだけで済みます。時間を使うのは、新しい文と、過去と違う訳にした文です。
9番目が、この構成を育てる工程です。 承認された訳だけを索引に足すので、使うほど、そろえる先が増えていきます。 承認前の訳を足すと、誤訳がそのまま次の訳の根拠になるので、足すのは承認後だけです。
02今回想定するシステム構成
英文の原文(契約書・覚書・仕様書) │ 受付フォルダに保存 ▼【トリガー】Amazon S3 への保存 AWS Lambda ── 文に分ける、定義語と数値を取り出す ▼ Amazon Titan Text Embeddings V2 ── 文ごとの埋め込み(意味の近さを数値にしたもの) ▼ Amazon OpenSearch Service ├── 対訳の索引:英文の単語の一致(BM25)+ 埋め込みの近さ(k-NN)のハイブリッド検索 └── 用語集の索引:英語の語と決まった訳・禁止する訳 ▼ Claude API ── 候補の対訳と用語にそろえた訳文の案と根拠 ▼ AWS Lambda ── 数値・日付・定義語・用語の検査 ▼ 【人が新しい文と訳し分けた文を中心に確認】 ▼ 承認後、対訳の索引に追加
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 検索基盤 | Amazon OpenSearch Service(ハイブリッドクエリと k-NN、Sudachi の日本語解析) | Azure AI Search、Vertex AI Search(Agent Search) |
| 埋め込み | Amazon Titan Text Embeddings V2(Amazon Bedrock) | Cohere Embed、OpenAI の埋め込みモデル |
| 生成AI | Claude API(候補の対訳にそろえた訳文の案と根拠) | Azure OpenAI(Microsoft Foundry)、Gemini API |
| 連携 | AWS Lambda(文の分割、検索、検査、索引への追加) | AWS Step Functions |
| 保管 | Amazon S3(原文、訳文、対訳の元データ) | 法務部のファイルサーバー |
土台は、Amazon OpenSearch Service のハイブリッド検索です。 ハイブリッドクエリは、複数の検索(ここでは単語の一致と埋め込みの近さ)の点数を1つにまとめて文書を並べます。点数をまとめるには、正規化の処理(normalization processor)を入れた検索パイプラインが要ります。 正規化の方法は min_max(既定)・l2・z_score、まとめ方は arithmetic_mean(既定)・geometric_mean・harmonic_mean から選べ、検索ごとの重みは合計が1.0になるように指定します。
単語の一致と意味の近さを両方使うのは、契約の文に両方の顔があるからです。 「Limitation of Liability」と「Liability Cap」は意味で近く、「Section 12.3」や「Incoterms」は文字列で一致させたい語です。どちらか一方だと、第3章の(a)が半分しか解けません。
埋め込みには Amazon Titan Text Embeddings V2 を使います。 入力は最大8,192トークン・50,000文字、出力は1,024次元(512・256も選べる)です。英語に最適化されたモデルで、日本語を含む多言語に対応しますが、言語をまたぐ検索は最適ではないとされています。そこで、検索は英文の原文どうしで行い、和訳は検索に使いません。
和訳の側を探すときには、Sudachi の日本語解析を使います。 Amazon OpenSearch Service では Sudachi が日本語向けに推奨されており、法務部が「この訳語を使っている対訳を全部出したい」と和訳の側から探すときに使います。
03どうやって実装するのか
処理の起点を決める
受付フォルダ(Amazon S3)に原文のファイルが保存されたことを起点にします。 依頼のメールから原文を保存するだけで、数分後に訳文の案が出ます。依頼は1件ずつ来るので、まとめ処理にはしません。依頼者は「明日の稟議に間に合わせたい」と言ってくることが多く、待たせる理由がありません。
もう1つの起点は、訳文の承認です。上長が承認した訳文を承認済みのフォルダに保存したとき、文の対応を付けて対訳の索引に足します。この2つ目の起点が無いと、索引は導入時のまま古くなります。
用語集の更新は、スプレッドシートの変更を週1回取り込みます。用語集の索引は小さいので、全件を入れ直すほうが単純です。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 新しい原文 | 英文の契約書・覚書・仕様書(Word または文字の取れる PDF) | 受付フォルダ |
| 過去の対訳 | 英文の1文と承認済みの和訳の組。契約の種類、取引先の区分、条項の種類、承認日、承認者 | 対訳の索引(OpenSearch) |
| 用語集 | 英語の語、決まった訳、使ってはいけない訳、注意書き | 用語集の索引(OpenSearch) |
| 原文の定義語 | 原文の定義条項で定義された語("Products"、"Territory" など) | 原文から取り出す |
質を決めるのは、2行目の「承認済み」です。 下書きや差し戻された訳を対訳に入れると、誤った訳が根拠として何度も出てきます。索引に入れるのは、上長が承認した訳だけです。
最初の対訳は、過去の訳から作ります。 過去3年分の契約書と和訳の組を、文の対応付きに直して入れます。これがこの構成でいちばん手間のかかる準備で、第14章の1〜2週目はほぼこの作業です。
データの取得方法を決める
| 取るもの | どこから | どう取るか |
|---|---|---|
| 似た英文と和訳 | 対訳の索引 | ハイブリッドクエリ(英文の match + 埋め込みの knn)、上位5件 |
| 完全に一致する英文 | 対訳の索引 | 正規化した英文のハッシュ値で term 検索 |
| 用語 | 用語集の索引 | 原文の文に含まれる語を match_phrase で引く |
| 原文の定義語 | 原文 | 定義条項の引用符で囲まれた語を取り出す |
ハイブリッドクエリには絞り込みを付けます。 対訳の索引には、契約の種類(売買・代理店・秘密保持・仕様書)、承認の状態、取引先の区分を持たせ、filter で「承認済み」に限ります。契約の種類で絞るかどうかは、件数を見て決めます。 種類で絞ると近い訳が出やすくなる一方、件数が少ない種類では候補が出なくなります。
重みは単語の一致0.4・埋め込み0.6から始めます。 合計1.0になるように決め、第8章の試行で、過去の訳が見つかった・見つからなかったの数を見ながら動かします。ハイブリッドクエリに入れられる検索は最大5つで、入れ子にはできず、最上位のクエリとして書く必要があります。
対訳の索引の1件は、次のような形にします。英文・和訳・埋め込み・絞り込みに使う属性を1つの文書に持たせます。
{
"tm_id": "TM-2025-0412-018",
"source_en": "Neither party shall be liable for any indirect or consequential damages.",
"target_ja": "いずれの当事者も、間接損害または結果損害について責任を負わない。",
"source_hash": "",
"source_vector": [0.0],
"contract_type": "distribution",
"clause_type": "limitation_of_liability",
"status": "approved",
"approved_on": "2025-04-12",
"access_group": "legal_all"
}
source_en は英語の解析、target_ja は Sudachi の解析、source_vector は1,024次元の k-NN の項目として定義します。access_group は、第13章の文書の単位の権限に使います。 契約の種類や条項の種類は、過去の契約から対訳を作るときに付けます。条項の種類は見出しから機械で付けられるものが多く、付かなかったものだけを人が付けます。
完全に一致する英文は、ハイブリッドクエリと別に引きます。一字一句同じ文なら、過去の訳をそのまま使えるので、点数で並べる必要がありません。
AIへ渡す前に整形する
- 文の分割 … ピリオドで単純に切らず、「Section 1.2」「Inc.」「e.g.」などの略記を例外にします
- 条項番号の分離 … 「12.3 Limitation of Liability.」のような見出しと本文を分けます
- 定義語の抽出 … 定義条項で引用符に囲まれた語と、本文で頭文字が大文字の定義語を一覧にします
- 数値と日付の抽出 … 金額、日数、パーセント、日付を、文番号付きで取り出します
- 正規化 … 空白、引用符の種類、改行を揃えたうえでハッシュ値を作ります
- 埋め込み … 文ごとに Titan Text Embeddings V2 で1,024次元の埋め込みを作ります
- 長すぎる文の扱い … 契約の1文は数百語になることがあります。入力の上限には余裕がありますが、検索の精度のために、セミコロンや項目の区切りで分けた単位も索引に持ちます
3番目と4番目は、生成AIに頼らずプログラムで取り出します。 後段の検査で、訳文の数値と定義語が原文と合っているかを照らすための材料です。訳した本人(AI)に照らさせると、同じ誤りを見逃します。
AIに処理させる
させるのは、文ごとに訳文の案を作り、どの対訳にそろえたかと、そろえなかった理由を書くことです。
| させること | 中身 |
|---|---|
| 対訳の採否 | 候補の対訳のうち、原文と趣旨が同じものを選ぶ。違う点があれば書く |
| 訳文の案 | 選んだ対訳の言い回しに合わせて訳す。違う部分だけを訳し変える |
| 用語の適用 | 用語集の決まった訳を使う。使ってはいけない訳を使わない |
| 定義語の統一 | 原文の定義語は、文書全体で同じ訳にする |
| 訳し分けの理由 | 過去の対訳と違う訳にした箇所と、その理由を書く |
| させないこと | 理由 |
|---|---|
| 条項の解釈・有利不利の評価 | 法務の判断。訳の作業と混ぜない |
| 原文に無い説明の追加 | 訳文に補足を足すと、原文に無い義務が書かれているように読める |
| 数値・日付の換算 | 「30 days」を「1か月」にしない。原文の単位のまま訳す |
| 根拠の無い対訳の引用 | 候補に無い対訳を「過去の訳」として示さない |
| 用語集の更新 | 新しい訳語の提案はしてよいが、決めるのは法務部 |
3行目が、契約の訳でいちばん怖い失敗です。 「within thirty (30) days」を「1か月以内」と訳すと、読みやすくなる代わりに期限が変わります。数値と単位は原文のまま訳させ、後段のプログラムでも照らします。
指示内容を固定する
あなたは商社の法務部で、英文の契約書・仕様書の社内向け和訳を作る担当です。
和訳は社内の稟議と理解のための参考訳で、契約の正文は英文です。
社内でこれまで承認された訳にそろえることを最優先にしてください。
【文ごとにやること】
1. 候補の対訳(過去に承認された英文と和訳の組)を読み、
原文と趣旨が同じものがあれば、その id を used_tm に入れてください。
2. 選んだ対訳の和訳の言い回しに合わせて訳してください。
原文と対訳の英文で違う部分だけを訳し変えてください。
3. 用語集の決まった訳を必ず使ってください。
使ってはいけない訳は使わないでください。
4. 原文の定義語は、文書全体で同じ訳にしてください。
5. 過去の対訳と違う訳にした箇所があれば、deviations に
どの語をどう変えたかと、その理由を書いてください。
【厳守事項】
- 数値・日付・期間・金額・通貨は、原文の単位のまま訳してください。
換算や言い換え(30 days → 1か月など)をしないでください。
- 原文に無い説明や補足を訳文に足さないでください。
- 条項の解釈、どちらに有利か、受け入れてよいかは書かないでください。
- 候補に無い対訳を、過去の訳として示さないでください。
- 趣旨が同じ候補が無い場合は used_tm を空にし、match を "new" にしてください。
- 訳に自信が無い箇所は、訳したうえで reviewer_note に理由を書いてください。
【原文の文】{segments}
【文ごとの候補の対訳(id、英文、和訳、契約の種類、承認日)】{tm_candidates}
【用語集(英語、決まった訳、使ってはいけない訳)】{glossary_hits}
【原文の定義語】{defined_terms}
「違う部分だけを訳し変える」が、この指示の要点です。 生成AIに似た対訳を見せて訳させると、自分の言い回しで訳し直してしまいがちです。それでは過去の訳にそろえた意味がなくなります。 対訳の言い回しを保ったまま、差分だけを変えるように指示します。
「候補に無い対訳を示さない」も明記します。 根拠として示された id は、後段のプログラムで候補の一覧と照らし、一覧に無い id が出たら、その文を要確認にします。
出力形式を固定する
次の形のJSONで受け取ります。 Claude API の構造化出力(output_config.format に JSON スキーマを渡す)を使います。Amazon Bedrock 上の Claude(Claude in Amazon Bedrock)では構造化出力が使えないため、Bedrock を使う場合は受け取った JSON を Lambda 側で検証します。
{
"doc_id": "",
"segments": [
{
"seg_no": 0,
"source": "",
"draft_ja": "",
"match": "exact | fuzzy | new",
"used_tm": [ { "tm_id": "", "score": 0 } ],
"glossary_applied": [ { "term": "", "ja": "" } ],
"deviations": [ { "what": "", "why": "" } ],
"reviewer_note": ""
}
],
"defined_terms": [ { "term": "", "ja": "" } ]
}
1つ目の理由は、match で人が見る順番を決められることです。 exact は過去の訳そのまま、fuzzy は似た対訳をもとに訳したもの、new は候補が無く新しく訳したものです。上長は new と、deviations のある fuzzy から読みます。
2つ目は、used_tm で根拠を開けることです。 訳文の横に過去の対訳の英文と和訳、承認日を並べて表示します。「去年の代理店契約でもこう訳した」が、画面の上で確かめられます。
3つ目は、後段の検査に使えることです。 検査はプログラムが行います。
| 検査 | 引っかかったときの扱い |
|---|---|
| 原文の数値・日付が訳文にすべてあるか | 要確認。どの数値が無いかを示す |
| 用語集の「使ってはいけない訳」が無いか | 要確認。該当の語を示す |
| 定義語の訳が文書全体で同じか | 要確認。ぶれた文番号を示す |
used_tm の id が候補の一覧にあるか | 要確認。根拠を消して new 扱いにする |
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受付フォルダ(S3) | 保存の通知で Lambda を起動 | 原文の保存を検知する |
| Amazon Bedrock | API呼び出し | 文ごとの埋め込みを作る |
| Amazon OpenSearch Service | 検索 API | 対訳のハイブリッド検索と用語の検索 |
| Claude API | API呼び出し | 訳文の案と根拠を作る |
| 訳文の出力 | Word の対訳表として保存 | 原文・訳文の案・根拠の対訳・検査結果を並べる |
| 承認済みフォルダ | 保存の通知で Lambda を起動 | 承認された訳を対訳の索引に足す |
訳文は、原文と並べた対訳表の Word ファイルで返します。 担当者は Word の上で直し、直したファイルを承認に回します。新しい画面を覚えてもらう必要がないことが、運用に乗るかどうかを分けます。
索引への追加は、承認済みのフォルダからだけ行います。 受付から出た案を直接足す経路は作りません。
人が確認する
担当者と上長は、match と検査結果で見る範囲を絞ります。
- 検査で引っかかった文を先に直す … 数値・定義語・禁止された訳語。ここは必ず直します
newの文を訳として読む … 候補が無かった文で、AI の訳がそのまま出ています。原文と照らして読みますdeviationsのあるfuzzyの文を読む … 過去と違う訳にした理由が妥当かを判断しますexactと、deviationsの無いfuzzyの文は根拠と並べて流し見る … 根拠の対訳と訳文が同じ言い回しかを確かめます- 用語集に足す語を決める … AI が
reviewer_noteで挙げた新しい語の訳を、法務部で決めます
2番目を省かないでください。 new の文は、過去の誰の目も通っていない訳です。索引に足されれば、次からは根拠として出てきます。 ここで誤りを残すと、その誤りが社内の標準になります。
目標は、80件をならして1件30分です。 過去の対訳が育つほど exact と fuzzy が増え、30分を下回ります。導入直後は対訳が少ないので、30分を超えます。
例外に対処する
| 起きること | 対応 |
|---|---|
| 原文が画像の PDF で文字が取れない | 文字の取れる版を依頼者に求める。取れない場合は対象外として人が訳す |
| 候補の対訳が1件も出ない | new として訳す。同じ種類の契約が索引に少ないことを記録する |
| 候補の対訳が古い(旧版の雛形の訳) | 承認日を表示し、新しい承認があるものを優先する |
| 用語集の訳と過去の対訳が食い違う | 用語集を優先し、deviations に書かせる。どちらが正しいかは法務部で決める |
| 定義語の訳がぶれる | 検査で拾い、定義条項の訳に揃える |
| 原文に英語以外の言語が混ざる | 混ざった部分を訳さず、reviewer_note に書く |
| 埋め込みや検索が応答しない | 処理を止め、受付フォルダに残す。キーワード検索だけで続けない |
| Sudachi の辞書を更新したのに効かない | 辞書の再関連付けは次のブルー/グリーン展開まで反映されない。新しい索引を作り直して切り替える |
| 承認済みの訳に誤りが見つかった | 索引の該当の対訳を「取り消し」にし、その対訳を根拠にした訳を一覧にする |
7行目の「キーワード検索だけで続けない」には理由があります。 片方の検索だけで出した案は、根拠の対訳の質が変わります。同じ見た目の案が、違う質で出るほうが危険です。
最後の行のために、どの訳がどの対訳を根拠にしたかを残します。 次の「保存・ログ」の3つ目です。
記録を残す
- 原文と、文の分割の結果、取り出した定義語・数値
- 文ごとの検索の結果(候補の対訳の id と点数、そのときの重みの設定)
- 訳文の案と
used_tm・deviations・検査の結果 - 担当者と上長が直した後の訳文と、直した箇所
- 索引に足した対訳と、その承認者・承認日
- 用語集の変更の履歴
3つ目の used_tm を残すのは、根拠の誤りをたどるためです。 承認済みの訳に誤りが見つかったとき、その対訳を根拠にした訳文を一覧にでき、直す範囲が決まります。
4つ目の「直した箇所」は、検索と指示の改善に使います。 毎回同じ語を直しているなら、用語集に足すべき語です。
04実装レベルの3段階
最小構成では、対訳を選ぶのが人です。 過去の訳を探す40分はほとんど減りません。確かめるための段階です。 半自動化で、1件90分が50分程度になります。 過去の訳を探す時間はほぼ無くなりますが、用語と数値の確かめは人が行います。本格構成で30分になり、この段階が本記事の想定です。 差が大きいのは、検査で引っかかった文と新しい文だけを見る形に変わるからです。 段階を飛ばさないでください。 半自動化で、どの種類の契約で候補が出やすく、どの種類で出にくいかが分かります。対訳の少ない種類を先に補ってから本格構成に進むほうが、new の文が減ります。
05工数削減シミュレーション
導入後 80件 × 30分 ÷ 60 = 40 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 海外の取引先と英文の売買契約・代理店契約・秘密保持契約・仕様書を毎月やり取りし、法務部が社内向けの和訳を作っている商社・製造業・IT企業。過去の和訳がファイルサーバーやメールに散らばり、同じ条項を担当者ごとに違う訳にしている場合。定義語や責任の範囲の訳がぶれて、社内の稟議で読み違いが起きたことがある場合。
- 英文の契約が年に数件しかない場合。過去の和訳が残っておらず、対訳を作る元が無い場合。和訳を正文として扱う契約(訳の誤りがそのまま契約上の義務になるもの)を、確認なしで訳したい場合。なお、契約の解釈や条項の受け入れ可否の判断は、この構成では代替できません。
07最小構成で試す方法
- 過去に訳した契約書から、同じ種類のものを5本選ぶ(例:代理店契約)
- そのうち4本の原文と和訳を、条項ごとに並べた表にする(これが小さな対訳になる)
- 残りの1本の原文を、条項ごとに手元のAIサービスに渡す
- 「次の過去の対訳の言い回しにそろえて訳してください。違う部分だけを訳し変え、どの対訳を使ったかと、違う訳にした理由を書いてください。数値は原文の単位のまま訳してください」と指示し、対訳の表を一緒に渡す
- 出てきた訳を、実際に承認された和訳と比べる
5本は必ずやってください。 検索の仕組みを作る前に、「似た対訳を見せれば、そろった訳になるのか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 承認された和訳とほぼ同じ言い回しになった | 検索の仕組みづくりに進む |
| 対訳を見せても自分の言い回しで訳し直す | 指示の書き方で直る。「違う部分だけを訳し変える」を強める |
| どの対訳を使ったかが的外れ | 検索で絞る必要がある。本格構成の意味がある |
| 数値が言い換えられる | 指示と後段の検査で防ぐ。検査は必ず作る |
手元のAIサービスに渡す契約書は、取引先との秘密保持の範囲を確かめてからにしてください。 試すだけなら、取引先名と金額を伏せた版で十分です。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 似た条項が見つからない | 単語の一致だけでなく埋め込みの近さも使う。ハイブリッドクエリで両方の点数をまとめる |
| 点数をまとめると順位がおかしい | 正規化の処理を入れた検索パイプラインが要る。重みは合計1.0にする |
| 和訳で検索すると近い対訳が出ない | Titan の埋め込みは言語をまたぐ検索が最適ではない。英文どうしで探す |
| 日本語の訳語で探すと漏れる | 和訳の側は Sudachi で解析する |
| 辞書を更新しても反映されない | Sudachi の辞書の再関連付けは次のブルー/グリーン展開まで反映されない。索引を作り直して別名で切り替える |
| AI が対訳の言い回しを崩す | 「違う部分だけを訳し変える」を指示に書く |
| 数値・期間が言い換えられる | 指示で禁じ、プログラムで原文の数値と照らす |
| 承認前の訳が根拠に出る | 索引に入れるのは承認済みだけ。filter で承認の状態を絞る |
| 見せてはいけない契約の訳が出る | 細かいアクセス制御で、文書の単位で見える範囲を絞る |
| 過去の対訳の文の対応がずれる | 機械で対応を付けた後、人が確かめる工程を置く |
上の3行が、検索の質を決めます。 検索が外れると、AI は無関係な対訳にそろえようとし、かえって訳が崩れます。 第8章の試行で外れが多いなら、生成AIの指示より先に検索を直してください。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 取引先との契約書の原文と和訳、取引条件(価格、数量、期間、責任の上限)、取引先の名称です。取引先との秘密保持の対象で、社内でも見てよい人が限られるものがあります。
- 契約ごとに見える範囲を分ける … Amazon OpenSearch Service の細かいアクセス制御(fine-grained access control)は、索引・文書・項目の単位で見える範囲を絞れます。企業買収や新規事業の契約など、特定の人しか見てはいけない契約の対訳は、文書の単位で見える役割を分けます。 有効にするには HTTPS・保存時の暗号化・ノード間の暗号化が要り、一度有効にすると無効に戻せません
- 生成AIに渡す範囲を絞る … 渡すのは訳す文と、その文の候補の対訳・用語だけです。契約書全体や、関係の無い契約の対訳を渡しません
- 訳文を正文として扱わない … この構成の訳は社内向けの参考訳です。和訳を正文とする契約や、取引先に出す訳には、必ず法務部の確認を通します
- 条項の評価を AI にさせない … 有利不利や受け入れ可否は法務の判断です。訳の作業の中に混ぜると、訳文に評価が紛れ込みます
- 取引先との秘密保持の条件を確かめる … 契約書を外部のサービスで処理してよいかは、契約の秘密保持の条項によります。処理する地域とデータの扱いを確かめてから使います
- 誤った対訳を取り消せるようにする … 承認済みの対訳に誤りが見つかったら、索引から外し、それを根拠にした訳を洗い出します
誤りが起きた場合のリスクは、数値や義務の範囲が違う訳が稟議に上がることと、見せてはいけない契約の訳が別の担当者に出ることの2つです。 前者は言い換えの禁止と数値の検査で、後者は文書の単位の権限で防ぎます。どちらも、AI の精度ではなく、仕組みで守る部分です。
10まず何から始めるか
1週目:対訳にする契約を選ぶ
過去3年分の英文の契約と和訳から、件数の多い種類(売買・代理店・秘密保持)を選び、承認済みの和訳が残っているものを一覧にします。最初は100本程度で十分です。
2週目:文の対応を付ける
選んだ契約の原文と和訳を文に分け、対応を付けます。機械で付けた後、ずれを人が確かめます。 あわせて、用語集のスプレッドシートを見直し、使ってはいけない訳の列を足します。
3週目:5本で試す
第8章の手順で、同じ種類の契約5本を使い、過去の対訳を見せて訳させます。数値の言い換えと、対訳の言い回しが崩れていないかを最優先で見ます。
4週目:OpenSearch に対訳を入れる
対訳の索引(英文の解析、埋め込みの k-NN、和訳の Sudachi)を作り、ハイブリッド検索の検索パイプラインを設定します。この時点では訳させず、新しい原文の文ごとに候補が出るかだけを見ます。
2か月目: 生成AIで訳文の案を作り、対訳表で返す流れを足します。担当者は全文を見て、match の付け方が合っているかを確かめます。3か月目以降: 用語集の索引と数値・定義語の検査、承認後の対訳の追加を足し、new と検査で引っかかった文を中心に見る運用に切り替えます。1件90分が何分になったかを実測し、exact と fuzzy の割合が月ごとに増えていくのを確かめられた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
ハイブリッドクエリが複数の検索の点数を1つにまとめること。検索は最大5つで、最上位のクエリとして書き、入れ子にできないこと。点数をまとめるには検索パイプラインが要ること。filter を付けられること | OpenSearch: Hybrid query | 2026-10-13 |
正規化の方法が min_max(既定)・l2・z_score、まとめ方が arithmetic_mean(既定)・geometric_mean・harmonic_mean であること。重みは0.0〜1.0で、検索の数と同じ長さで、合計が1.0であること | OpenSearch: Normalization processor | 2026-10-13 |
| Amazon OpenSearch Service に k-NN、Neural Search、Kuromoji、Sudachi(日本語向けに推奨)が用意されていること。Sudachi の辞書の再関連付けが次のブルー/グリーン展開まで反映されず、索引を作り直す方法があること | AWS: Plugins by engine version | 2026-10-13 |
| 細かいアクセス制御が索引・文書・項目の単位の制御を持つこと。HTTPS・保存時の暗号化・ノード間の暗号化が必要で、有効にした後は無効にできないこと | AWS: Fine-grained access control | 2026-10-13 |
| Titan Text Embeddings V2 の入力が最大8,192トークン・50,000文字、出力が1,024(512・256)次元であること。英語に最適化され、日本語を含む多言語に対応し、言語をまたぐ検索は最適ではないこと | AWS: Amazon Titan Text Embeddings models | 2026-10-13 |
構造化出力が output_config.format に JSON スキーマを渡す形であること。Claude API では使えるが、Claude in Amazon Bedrock では使えないこと | Claude: Structured outputs | 2026-10-13 |
和訳を正文として扱うか、取引先に出すかは、法務部で決めてください。 本記事の構成が出すのは、社内の承認済みの訳にそろえた参考訳の案です。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1351)についてのご相談はこちらから。
