こんにちは、株式会社LegalOn TechnologiesのAIセクションチームです。LegalOn Technologiesでは、日本の法務分野における自然言語処理(NLP)のための包括的なベンチマークデータセット、LegalRikaiを作成しています。LegalRikaiは日本法に特化したさまざまなタスクを含むベンチマークデータセットで、法務NLPベンチマークデータセットの現状における重要なギャップを埋めることを目的としています。
この記事は、前回公開した記事の続編として、プレイブックに基づく契約書レビュータスクを紹介し、本タスクに対するモデルとPromptの性能検証を紹介します。
タスク紹介
法務実務では、契約を締結する前に、法的なリスクや不利益な内容がないかなどを確認・精査する作業(契約書レビュー)を行います。このプロセスを通じて、将来的なトラブルや予期せぬ損失を防ぎ、公正で安全な取引を実現することができます。
弊社のメインプロダクトである「LegalOn」では、契約書レビューを自動で行う機能をいくつか提供しており、その中の一つに「プレイブックに基づく契約書レビュー」があります。プレイブックとは、契約書審査における顧客特有のチェック基準のことです。例えば、A社は秘密保持契約を締結する際、契約書がある基準を満たすべきだ、というようなA社特有の基準があります。そのような基準の集合を「プレイブック」と呼んでいます。「プレイブックに基づく契約書レビュー」では、各顧客が定義するプレイブックに含まれる基準を、レビュー対象の契約書が満たしているかをチェックします。
各基準のレビュー結果には以下のフィールドを含みます。
- アラート (bool): 契約書が基準を満たさない場合True, 満たす場合False
- 根拠箇所 (list[str]): アラートの判定の根拠となる契約書の部分文字列。複数可。
- 理由文 (str): アラートの判定の理由を示す文。ユーザがレビュー結果を理解するのに役立ちます。
💡法務観点からのプレイブックの説明は弊社メディアの記事を参照ください。ここでは、技術的側面からのタスク説明に限ります。
評価データセット
評価データセットは弁護士をはじめとする法務開発グループとともに作成しました。「LegalOn」では英語・日本語の契約書レビューを行う機能を提供していますが、ここでは日本語のユースケースに限定します。
データセットは、契約書12件・各契約書に対してプレイブック2種類・各プレイブックに基準約20件を含み、(契約書, 基準)の組は500件を超える規模になります。
データ例
ここで秘密保持契約書の例を以下に示します。
契約書: 秘密保持契約書(一方開示_開示者有利)
秘密保持契約書(一方開示_開示者有利) ●●(以下「開示者」という。)と●●(以下「受領者」という。)とは、当事者間において●●に関する検討(以下「本目的」という。)をするため、開示者が開示又は提供する秘密情報の保持につき、次のとおり秘密保持契約(以下「本契約」という。)を締結する。 ... 第 12 条 (損害賠償) 前条の規定にかかわらず、開示者又は受領者は、相手方が本契約の条項に違反したことにより自己が損害を被った場合には、相手方に対して、当該損害の一切(逸失利益、弁護士費用その他の訴訟関連費用を含む。)の賠償を請求することができる。 ...
この契約書に対し、「賠償の範囲に、特別損害や弁護士費用のいずれもが含まれていること」という基準を満たしているか判定します。第12条に弁護士費用を含む旨の規定はあるが、特別損害については記載がないため、契約書は基準を満たしていないと判断されます。
評価指標
Alert F1/Acc
アラートを出す(=基準を満たさない)またはアラートを出さない(=基準を満たす)の二値分類に対するF1-scoreとAccuracy。根拠箇所の正否は不問です。アラートを出す場合をpositive exampleと考えます。
EvidenceCoverage-Gated Alert F1/Acc(略称: Coverage-Gated F1/Acc)
positive exampleに対してアラートを出す/出さないの予測が正しい時、正解根拠箇所Rが予測根拠箇所Pに含まれる(R ⊆ P)場合のみTPとみなすF1-scoreとAccuracy。根拠箇所の予測に漏れがないかどうかを考慮した指標です。
EvidenceExact-Gated Alert F1/Acc(略称: Exact-Gated F1/Acc)
positive exampleに対してアラートを出す/出さないの予測が正しい時、正解根拠箇所Rと予測根拠箇所Pが条文単位で完全一致(R = P)の場合のみTPとみなすF1-scoreとAccuracy。過剰に根拠箇所を提示することを許容しない厳格な指標です。
💡例えば、positive exampleに対してアラートを出す/出さないの予測が正しいを考えます。正解根拠箇所Rが第1条のみで、予測根拠箇所Pが第一条と第二条の時は、以下のように判定された上でF1-scoreやAccuracyの計算がされます。
- Coverage-Gated F1/Acc: R ⊆ PなのでTP
- Exact-Gated F1/Acc: R ≠ PなのでFN
💡ただし、F1-scoreやAccuracyの計算時には、契約書と基準のペアを1件としてmicro averageを用いています。
手法
本ブログで扱う手法では、プレイブックに含まれる複数の基準をそれぞれ独立にレビューします。下図に手法の流れを示しました。
各基準の判定には、以下の6種類のモデルとそれぞれのPromptの検証を行います。
- GPT-4o-2024-11-20(略: GPT-4o)
- GPT-4.1-2025-04-14(略: GPT-4.1)
- GPT-5-2025-08-07(略: GPT-5)
- Claude-3.5-Sonnet-v2
- Claude-3.7-Sonnet
- Gemini-2.5-Pro
Promptの文面を公開することはできませんが、以下の2つの特性の組み合わせを検証します。
- Prompt Language
- Promptがどの言語で記述されるか。本ブログで扱う契約書と基準は日本語で記述されたものですが、Promptも日本語に合わせるべきか英語の方が品質が良いかを検証します。
- 選択肢
- 日本語
- 英語
- Input order
- Promptの構成要素である契約書と基準をどの順序でPromptに挿入するかの違いを検証します。さらに、順番が性能に影響を与えるのかを観察するとともに、Prompt Cachingの効果も確認します。プレイブックに基づく契約書レビューでは、1つの契約書に対して、20件程度の基準に対して契約書レビューを独立に行います。Prompt Cachingに対応したモデルにリクエストを送る場合、各リクエストに共通の情報(本タスクでは契約書)を先に書くことで、Prompt Cachingの効果を大きく得られます。契約書は基本的に長いテキストですが、先に入力すると契約書テキストまでPrompt Cachingが有効になるため、コストの節約とlatencyの改善が期待できます。
- 選択肢
- contract-first: 契約書, 基準の順に入力する
- contract-later: 基準, 契約書の順に入力する
結果
GPT-4oにおける性能比較
| Model | Prompt Language | Input order | Alert F1/Acc | Coverage-Gated F1/Acc | Exact-Gated F1/Acc |
|---|---|---|---|---|---|
| GPT-4o | 日本語 | contract-first | 81.7 / 89.9 | 74.7 / 86.8 | 60.2 / 81.3 |
| GPT-4o | 日本語 | contract-later | 89.5 / 94.4 | 85.2 / 92.4 | 69.1 / 86.1 |
| GPT-4o | 英語 | contract-first | 85.2 / 92.4 | 83.6 / 91.7 | 65.8 / 85.0 |
| GPT-4o | 英語 | contract-later | 90.1 / 94.6 | 87.5 / 93.3 | 71.5 / 86.6 |
Prompt Languageに依らず、contract-laterが性能が良い傾向となりました。アラートの判定・根拠抽出ともに一貫して性能が向上しています。Coverage-Gated F1では、日本語の場合+10.5、英語の場合+3.9となり、日本語の方が顕著に差があらわれています。英語の方が安定した性能が出ている可能性が示唆されます。
GPT-4.1における性能比較
| Model | Prompt Language | Input order | Alert F1/Acc | Coverage-Gated F1/Acc | Exact-Gated F1/Acc |
|---|---|---|---|---|---|
| GPT-4.1 | 日本語 | contract-first | 83.9 / 90.9 | 82.4 / 90.2 | 65.2 / 83.2 |
| GPT-4.1 | 日本語 | contract-later | 82.7 / 89.7 | 80.9 / 88.8 | 65.0 / 81.9 |
| GPT-4.1 | 英語 | contract-first | 86.9 / 92.8 | 86.6 / 92.6 | 70.9 / 85.9 |
| GPT-4.1 | 英語 | contract-later | 84.5 / 90.9 | 83.4 / 90.4 | 68.6 / 83.9 |
GPT-4.1はGPT-4oと異なり、Prompt Languageに依らずcontract-firstの方が性能が良い傾向となりました。一方、英語の方が高い性能を出している点はGPT-4oと同じです。
また、英語かつcontract-firstの時、Alert F1/AccとCoverage-Gated F1/Accが近い値を取っていることから、根拠箇所を漏れなく提示する能力が高いことを意味します。
GPT-5における性能比較
GPT-5については英語のPromptのみ実験を行い、reasoning effortをminimalとmediumで検証しています。
| Model | Prompt Language | Input order | Alert F1/Acc | Coverage-Gated F1/Acc | Exact-Gated F1/Acc |
|---|---|---|---|---|---|
| GPT-5 (reasoning: minimal) |
英語 | contract-first | 84.8 / 91.3 | 70.9 / 85.1 | 63.2 / 82.2 |
| GPT-5 (reasoning: minimal) |
英語 | contract-later | 83.4 / 90.8 | 82.6 / 90.4 | 43.0 / 76.4 |
| GPT-5 (reasoning: medium) |
英語 | contract-first | 86.5 / 93.3 | 86.5 / 93.3 | 66.1 / 85.7 |
| GPT-5 (reasoning: medium) |
英語 | contract-later | 87.1 / 93.5 | 86.2 / 93.1 | 67.5 / 86.0 |
GPT-5ではreasoningをminimalよりもmediumにした方が良い結果が得られています。特にreasoning effortがmediumで英語かつcontract-firstの場合Alert F1/AccとCoverage-Gated F1/Accが同じスコアとなっており、reasoningによる整合性の確認が取れたことが影響していると考えられます。
また、reasoningがminimalの場合は、Input orderによって根拠箇所の予測に違いが表れています。contract-firstではCoverage-Gated F1/Accが低くExact-Gated F1/Accが高いことから根拠箇所の誤予測が少なく、contract-laterではその反対で根拠箇所提示の抜け漏れが少ないことが示唆されます。同じモデルでもInput orderを変えただけで予測の性質に違いが表れていることから、Promptの些細な差異でも検証することが重要なことがわかります。
Claude-3.5-Sonnet-v2における性能比較
| Model | Prompt Language | Input order | Alert F1/Acc | Coverage-Gated F1/Acc | Exact-Gated F1/Acc |
|---|---|---|---|---|---|
| Claude-3.5-Sonnet-v2 | 日本語 | contract-first | 88.9 / 94.2 | 88.5 / 94.0 | 54.5 / 81.9 |
| Claude-3.5-Sonnet-v2 | 日本語 | contract-later | 78.9 / 87.5 | 78.5 / 87.3 | 39.0 / 72.8 |
| Claude-3.5-Sonnet-v2 | 英語 | contract-first | 86.1 / 92.9 | 85.7 / 92.8 | 68.3 / 86.1 |
| Claude-3.5-Sonnet-v2 | 英語 | contract-later | 89.7 / 94.6 | 88.5 / 94.0 | 72.0 / 87.3 |
日本語かつcontract-laterの時のみ、全ての指標で性能がかなり落ちています。また、Input orderに依らず日本語の場合は、Coverage-Gated F1/AccからExact-Gated F1/Accへのスコア低下が顕著(contract-firstの場合-34.0、contract-laterの場合-39.5)なことから、根拠箇所の提示が冗長であることがわかります。
日本語の場合の性能が不安定なことに対して、英語の場合はExact-Gated F1/Accまで含めて性能が高い結果となりました。
Claude-3.7-Sonnetにおける性能比較
| Model | Prompt Language | Input order | Alert F1/Acc | Coverage-Gated F1/Acc | Exact-Gated F1/Acc |
|---|---|---|---|---|---|
| Claude-3.7-Sonnet | 日本語 | contract-first | 89.1 / 94.4 | 87.5 / 93.7 | 56.4 / 82.6 |
| Claude-3.7-Sonnet | 日本語 | contract-later | 83.4 / 90.8 | 82.6 / 90.4 | 43.0 / 76.4 |
| Claude-3.7-Sonnet | 英語 | contract-first | 86.5 / 93.3 | 86.5 / 93.3 | 66.1 / 85.7 |
| Claude-3.7-Sonnet | 英語 | contract-later | 87.1 / 93.5 | 86.2 / 93.1 | 67.5 / 86.0 |
Claude-3.7-SonnetはClaude-3.5-Sonnet-v2と同様に、日本語の場合におけるCoverage-Gated F1/AccからExact-Gated F1/Accへのスコア低下が顕著(contract-firstの場合-31.1、contract-laterの場合-39.6)に表れており、英語の場合はInput orderに関わらず性能が安定しています。
各モデルの性能比較
GPT-4o, GPT-4.1, GPT-5, Claude-3.5-Sonnet-v2, Claude-3.7-Sonnetは上記検証から、それぞれで最良の結果を表に示します。Gemini-2.5-ProはPromptを比較していないため、英語かつcontract-firstの場合の結果を表に示します。
| Model | Prompt Language | Input order | Alert F1/Acc | Coverage-Gated F1/Acc | Exact-Gated F1/Acc |
|---|---|---|---|---|---|
| GPT-4o | 英語 | contract-later | 90.1 / 94.6 | 87.5 / 93.3 | 71.5 / 86.6 |
| GPT-4.1 | 英語 | contract-first | 86.9 / 92.8 | 86.6 / 92.6 | 70.9 / 85.9 |
| GPT-5 (reasoning: minimal) |
英語 | contract-later | 83.4 / 90.8 | 82.6 / 90.4 | 43.0 / 76.4 |
| GPT-5 (reasoning: medium) |
英語 | contract-first | 86.5 / 93.3 | 86.5 / 93.3 | 66.1 / 85.7 |
| Claude-3.5-Sonnet-v2 | 英語 | contract-later | 89.7 / 94.6 | 88.5 / 94.0 | 72.0 / 87.3 |
| Claude-3.7-Sonnet | 日本語 | contract-first | 89.1 / 94.4 | 87.5 / 93.7 | 56.4 / 82.6 |
| Gemini-2.5-Pro | 英語 | contract-first | 77.3 / 86.0 | 76.9 / 85.8 | 61.1 / 78.8 |
GPT-4oとClaude-3.5-Sonnet-v2は同等の性能で最も高い2つのモデルという結果になりました。
Prompt Languageの違いと性能の関係を検証したモデルのうちClaude-3.7-Sonnetを除く3つのモデル(GPT-4o, GPT-4.1, Claude-3.5-Sonnet-v2)で、英語の方が性能が高い結果となりました。契約書と基準が日本語にも関わらず英語でPromptを記述すると、Prompt内に英語と日本語が混ざることになりますが、LLMにとってはむしろ良い性能を出すことも可能ということは重要な結果です。法務をはじめとする専門領域におけるPromptは、翻訳が難しい専門用語などはそのままの言語で記述し、指示文などは学習データに多く含まれる英語で記述することが良い可能性が示唆されます。
一方で、Input orderに関してはモデルやPrompt Languageに依って性能の良し悪しが異なり、共通の傾向は見られませんでした。また、必ずしも後継のモデルが性能が良いわけではありませんでした。タスクによって、適切なモデル選択・Promptの調整が必要であることが示唆されます。
GPT-5におけるコストと速度の比較
GPT-5においてコストと推論速度の比較を行います。Average CostはGPT-5の現在の価格(input: $1.25 / 1M token, cache: $0.125 / 1M token, output: $10 / 1M token)を元に、1000回の推論をした時のコストを計算しています。
| Model | Prompt Language | Input order | Average Input Token | Average Cached Token | Average Output Token | Average Cost ($ / 1000 requests) | Average Latency (sec) |
|---|---|---|---|---|---|---|---|
| GPT-5 (reasoning: minimal) |
英語 | contract-first | 7604 | 6729 | 324 | 5.2 | 5.10 |
| GPT-5 (reasoning: minimal) |
英語 | contract-later | 7604 | 3809 | 336 | 8.6 | 7.25 |
| GPT-5 (reasoning: medium) |
英語 | contract-first | 7604 | 6729 | 1492 | 16.9 | 21.9 |
| GPT-5 (reasoning: medium) |
英語 | contract-later | 7604 | 2401 | 1607 | 22.9 | 29.5 |
契約書を先に挿入するPrompt(contract-first)の方が、cached tokenが多くなりlatencyも短くなっていることから、Prompt cachingが動作していることが確認できます。コストを考えると、Prompt cachingによりGPT-5 (reasoning: minimal)では約40%の節約(1000回の推論につき$8.6から$5.2へ減少)、GPT-5 (reasoning: medium)では約26%の節約(1000回の推論につき$22.9から$16.9へ減少)になります。
契約書レビューのユースケースでは、複数の異なる基準で同じ契約書に対して推論を行います。契約書の長さは基準や他のPromptの構成要素に比べて長いため、契約書にPrompt cachingを使えるとコスト・速度の面でメリットがあることがわかりました。
まとめ
本稿では、日本の法務分野NLPのための包括的なベンチマークデータセットLegalRikaiの続編として、プレイブックに基づく契約書レビュータスクにおける検証を報告しました。本タスクで高い性能を示すモデルは GPT-4o と Claude-3.5-Sonnet-v2 とわかりました。
また、例え日本語の契約書レビューであってもPromptを英語で記述することは問題なくむしろ性能を向上させる場合も多いという知見が得られました。この結果は特に翻訳の難しい専門用語が多く出現する領域のタスクで有益だと考えられます。Promptに入力する情報については一貫した傾向は見つけることができず、モデルごとにPromptを調整すべきことが示唆されました。さらに、LLMが持つRecency Bias(近接性バイアス)の影響なども気になります。例えば、第1条を根拠箇所とする場合と、第30条を根拠箇所とする場合で品質が異なるかもしれません。
今後も最新のモデルによる検証やさらなるタスクの追加などのLegalRikaiのアップデートを継続して行っていく予定です。弊社はLegalRikaiの継続的なアップデートを通じて、法務分野におけるAIの可能性と限界を明らかにし、NLPならびに法務実務に資する技術の発展に貢献していきます。
謝辞
本ブログの執筆にご協力いただいた楢木さん、データセットの構築にあたっては法務開発の白鳥さん、小林さん、ブログの校正は藤田さん、小林さん、真鍋さん、水谷さんにご協力いただきました。この場を借りて感謝申し上げます。