Loading...
    • 開発者ガイド
    • API リファレンス
    • MCP
    • リソース
    • リリースノート
    Search...
    ⌘K
    リソース
    概要用語集システムプロンプト
    概要チケットルーティングカスタマーサポートエージェントコンテンツモデレーション法的要約
    Console
    Log in
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...

    Solutions

    • AI agents
    • Code modernization
    • Coding
    • Customer support
    • Education
    • Financial services
    • Government
    • Life sciences

    Partners

    • Amazon Bedrock
    • Google Cloud's Vertex AI

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Company

    • Anthropic
    • Careers
    • Economic Futures
    • Research
    • News
    • Responsible Scaling Policy
    • Security and compliance
    • Transparency

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Help and security

    • Availability
    • Status
    • Support
    • Discord

    Terms and policies

    • Privacy policy
    • Responsible disclosure policy
    • Terms of service: Commercial
    • Terms of service: Consumer
    • Usage policy
    ユースケース

    法律文書の要約

    このガイドでは、Claudeの高度な自然言語処理機能を活用して法律文書を効率的に要約し、重要な情報を抽出してリーガルリサーチを迅速化する方法を説明します。Claudeを使用することで、契約書のレビュー、訴訟準備、規制関連業務を効率化し、法務プロセスの時間を節約しながら正確性を確保できます。

    Claudeを使用した法律文書要約の実装例については、要約クックブックをご覧ください。

    Claudeで構築する前に

    法律文書の要約にClaudeを使用するかどうかを判断する

    法律文書の要約にClaudeのようなLLMを採用すべき主な指標を以下に示します:

    要約で抽出したい詳細を決定する

    どの文書にも唯一の正しい要約というものはありません。明確な指示がなければ、Claudeがどの詳細を含めるべきか判断するのは困難です。最適な結果を得るために、要約に含めたい具体的な情報を特定してください。

    例えば、サブリース契約を要約する場合、以下の要点を抽出したいと考えるかもしれません:

    details_to_extract = [
        'Parties involved (sublessor, sublessee, and original lessor)',
        'Property details (address, description, and permitted use)', 
        'Term and rent (start date, end date, monthly rent, and security deposit)',
        'Responsibilities (utilities, maintenance, and repairs)',
        'Consent and notices (landlord\'s consent, and notice requirements)',
        'Special provisions (furniture, parking, and subletting restrictions)'
    ]

    成功基準を確立する

    要約の品質評価は、非常に困難なタスクとして知られています。他の多くの自然言語処理タスクとは異なり、要約の評価には明確で客観的な指標が欠けていることが多いです。このプロセスは非常に主観的であり、読者によって要約の異なる側面を重視します。Claudeの法律文書要約のパフォーマンスを評価する際に考慮すべき基準を以下に示します。

    詳細については、成功基準の確立に関するガイドをご覧ください。


    Claudeを使用して法律文書を要約する方法

    適切なClaudeモデルを選択する

    法律文書を要約する際、モデルの精度は極めて重要です。Claude Opus 4.6は、このような高い精度が求められるユースケースに最適な選択肢です。文書のサイズと量が大きく、コストが懸念される場合は、Claude Haiku 4.5のような小型モデルの使用も検討できます。

    これらのコストを見積もるために、SonnetとHaikuの両方を使用して1,000件のサブリース契約を要約するコストの比較を以下に示します:

    • コンテンツサイズ

      • 契約書数:1,000
      • 契約書あたりの文字数:300,000
      • 総文字数:3億
    • 推定トークン数

      • 入力トークン:8,600万(1トークンあたり3.5文字と仮定)
      • 要約あたりの出力トークン:350
      • 総出力トークン:350,000
    • Claude Opus 4.6の推定コスト

      • 入力トークンコスト:86 MTok * $5.00/MTok = $430
      • 出力トークンコスト:0.35 MTok * $25.00/MTok = $8.75
      • 総コスト:$430.00 + $8.75 = $438.75
    • Claude Haiku 3の推定コスト

      • 入力トークンコスト:86 MTok * $0.25/MTok = $21.50
      • 出力トークンコスト:0.35 MTok * $1.25/MTok = $0.44
      • 総コスト:$21.50 + $0.44 = $21.96
    実際のコストはこれらの見積もりと異なる場合があります。これらの見積もりは、プロンプト作成のセクションで紹介した例に基づいています。

    文書をClaudeが処理できる形式に変換する

    文書の要約を開始する前に、データを準備する必要があります。これには、PDFからのテキスト抽出、テキストのクリーニング、Claudeで処理できる状態にすることが含まれます。

    サンプルPDFでのこのプロセスのデモンストレーションを以下に示します:

    from io import BytesIO
    import re
    
    import pypdf
    import requests
    
    def get_llm_text(pdf_file):
        reader = pypdf.PdfReader(pdf_file)
        text = "\n".join([page.extract_text() for page in reader.pages])
    
        # Remove extra whitespace
        text = re.sub(r'\s+', ' ', text) 
    
        # Remove page numbers
        text = re.sub(r'\n\s*\d+\s*\n', '\n', text) 
    
        return text
    
    
    # Create the full URL from the GitHub repository
    url = "https://raw.githubusercontent.com/anthropics/anthropic-cookbook/main/skills/summarization/data/Sample Sublease Agreement.pdf"
    url = url.replace(" ", "%20")
    
    # Download the PDF file into memory
    response = requests.get(url)
    
    # Load the PDF from memory
    pdf_file = BytesIO(response.content)
    
    document_text = get_llm_text(pdf_file) 
    print(document_text[:50000]) 

    この例では、まず要約クックブックで使用されているサンプルサブリース契約のPDFをダウンロードします。この契約書は、sec.govウェブサイトで公開されているサブリース契約から取得したものです。

    pypdfライブラリを使用してPDFの内容を抽出し、テキストに変換します。その後、余分な空白やページ番号を削除してテキストデータをクリーニングします。

    強力なプロンプトを構築する

    Claudeはさまざまな要約スタイルに適応できます。プロンプトの詳細を変更することで、Claudeをより詳細またはより簡潔に、より多くまたはより少ない専門用語を含めるように、あるいは対象のコンテキストについてより高レベルまたはより低レベルの要約を提供するように導くことができます。

    サブリース契約を分析する際に、生成される要約が一貫した構造に従うようにするプロンプトの作成例を以下に示します:

    import anthropic
    
    # Initialize the Anthropic client
    client = anthropic.Anthropic()
    
    def summarize_document(text, details_to_extract, model="claude-opus-4-6", max_tokens=1000):
    
        # Format the details to extract to be placed within the prompt's context
        details_to_extract_str = '\n'.join(details_to_extract)
        
        # Prompt the model to summarize the sublease agreement
        prompt = f"""Summarize the following sublease agreement. Focus on these key aspects:
    
        {details_to_extract_str}
    
        Provide the summary in bullet points nested within the XML header for each section. For example:
    
        <parties involved>
        - Sublessor: [Name]
        // Add more details as needed
        </parties involved>
        
        If any information is not explicitly stated in the document, note it as "Not specified". Do not preamble.
    
        Sublease agreement text:
        {text}
        """
    
        response = client.messages.create(
            model=model,
            max_tokens=max_tokens,
            system="You are a legal analyst specializing in real estate law, known for highly accurate and detailed summaries of sublease agreements.",
            messages=[
                {"role": "user", "content": prompt},
                {"role": "assistant", "content": "Here is the summary of the sublease agreement: <summary>"}
            ],
            stop_sequences=["</summary>"]
        )
    
        return response.content[0].text
    
    sublease_summary = summarize_document(document_text, details_to_extract)
    print(sublease_summary)

    このコードは、Claudeを使用してサブリース契約の内容を要約するsummarize_document関数を実装しています。この関数は、テキスト文字列と抽出する詳細のリストを入力として受け取ります。この例では、前のコードスニペットで定義したdocument_textとdetails_to_extract変数を使用して関数を呼び出しています。

    関数内では、要約する文書、抽出する詳細、文書を要約するための具体的な指示を含むプロンプトがClaude用に生成されます。プロンプトは、XMLヘッダー内にネストされた各抽出詳細の要約で応答するようClaudeに指示します。

    要約の各セクションをタグ内に出力することにしたため、各セクションは後処理ステップとして簡単にパースできます。このアプローチにより、ユースケースに適応できる構造化された要約が可能になり、各要約が同じパターンに従うようになります。

    プロンプトを評価する

    プロンプトは、本番環境に対応するためにテストと最適化が必要になることが多いです。ソリューションの準備状況を判断するために、定量的方法と定性的方法を組み合わせた体系的なプロセスを使用して要約の品質を評価してください。定義した成功基準に基づいた強力な実証的評価を作成することで、プロンプトを最適化できます。実証的評価に含めたい指標を以下に示します:

    プロンプトをデプロイする

    ソリューションを本番環境にデプロイする際に留意すべき追加の考慮事項を以下に示します。

    1. 責任の排除を確保する: 要約のエラーが組織やクライアントに法的責任をもたらす可能性がある法的影響を理解してください。要約がAIによって生成されたものであり、法律専門家によるレビューが必要であることを明確にする免責事項や法的通知を提供してください。

    2. 多様な文書タイプに対応する: このガイドでは、PDFからテキストを抽出する方法について説明しました。実際の環境では、文書はさまざまな形式(PDF、Word文書、テキストファイルなど)で提供される場合があります。受け取ることが予想されるすべてのファイル形式をデータ抽出パイプラインで変換できるようにしてください。

    3. ClaudeへのAPI呼び出しを並列化する: トークン数が多い長い文書では、Claudeが要約を生成するのに最大1分かかる場合があります。大規模な文書コレクションの場合、合理的な時間枠内で要約を完了できるように、ClaudeへのAPI呼び出しを並列で送信することをお勧めします。並列で実行できるAPI呼び出しの最大数を確認するには、Anthropicのレート制限を参照してください。


    パフォーマンスの改善

    複雑なシナリオでは、標準的なプロンプトエンジニアリング手法を超えた追加の戦略を検討することが有用な場合があります。以下にいくつかの高度な戦略を示します:

    メタ要約を実行して長い文書を要約する

    法律文書の要約では、Claudeのコンテキストウィンドウを超えるような長い文書や多数の関連文書を一度に扱うことがよくあります。このユースケースに対応するために、メタ要約と呼ばれるチャンキング手法を使用できます。この手法では、文書をより小さく管理しやすいチャンクに分割し、各チャンクを個別に処理します。その後、各チャンクの要約を組み合わせて、文書全体のメタ要約を作成できます。

    メタ要約の実行方法の例を以下に示します:

    import anthropic
    
    # Initialize the Anthropic client
    client = anthropic.Anthropic()
    
    def chunk_text(text, chunk_size=20000):
        return [text[i:i+chunk_size] for i in range(0, len(text), chunk_size)]
    
    def summarize_long_document(text, details_to_extract, model="claude-opus-4-6", max_tokens=1000):
    
        # Format the details to extract to be placed within the prompt's context
        details_to_extract_str = '\n'.join(details_to_extract)
    
        # Iterate over chunks and summarize each one
        chunk_summaries = [summarize_document(chunk, details_to_extract, model=model, max_tokens=max_tokens) for chunk in chunk_text(text)]
        
        final_summary_prompt = f"""
        
        You are looking at the chunked summaries of multiple documents that are all related. 
        Combine the following summaries of the document from different truthful sources into a coherent overall summary:
    
        <chunked_summaries>
        {"".join(chunk_summaries)}
        </chunked_summaries>
    
        Focus on these key aspects:
        {details_to_extract_str})
    
        Provide the summary in bullet points nested within the XML header for each section. For example:
    
        <parties involved>
        - Sublessor: [Name]
        // Add more details as needed
        </parties involved>
        
        If any information is not explicitly stated in the document, note it as "Not specified". Do not preamble.
        """
    
        response = client.messages.create(
            model=model,
            max_tokens=max_tokens,
            system="You are a legal expert that summarizes notes on one document.",
            messages=[
                {"role": "user",  "content": final_summary_prompt},
                {"role": "assistant", "content": "Here is the summary of the sublease agreement: <summary>"}
    
            ],
            stop_sequences=["</summary>"]
        )
        
        return response.content[0].text
    
    long_summary = summarize_long_document(document_text, details_to_extract)
    print(long_summary)

    summarize_long_document関数は、先ほどのsummarize_document関数を基に、文書をより小さなチャンクに分割し、各チャンクを個別に要約します。

    このコードは、元の文書内の20,000文字ごとのチャンクにsummarize_document関数を適用することでこれを実現します。個々の要約が結合され、これらのチャンク要約から最終的な要約が作成されます。

    サンプルPDFの場合、文書全体がClaudeのコンテキストウィンドウ内に収まるため、summarize_long_document関数は厳密には必要ありません。ただし、Claudeのコンテキストウィンドウを超える文書や、複数の関連文書をまとめて要約する場合には不可欠になります。いずれにしても、このメタ要約手法は、先ほどの単一要約アプローチでは見落とされていた追加の重要な詳細を最終要約で捉えることが多いです。

    要約インデックス付き文書を使用して大規模な文書コレクションを探索する

    LLMで文書コレクションを検索するには、通常、検索拡張生成(RAG)が使用されます。ただし、大規模な文書を扱う場合や、正確な情報検索が重要な場合、基本的なRAGアプローチでは不十分な場合があります。要約インデックス付き文書は、従来のRAG手法よりも少ないコンテキストで文書の関連性をランク付けする、より効率的な方法を提供する高度なRAGアプローチです。このアプローチでは、まずClaudeを使用してコーパス内の各文書の簡潔な要約を生成し、次にClaudeを使用して各要約と質問されているクエリとの関連性をランク付けします。コードベースの例を含むこのアプローチの詳細については、要約クックブックの要約インデックス付き文書セクションをご覧ください。

    データセットから学習するためにClaudeをファインチューニングする

    Claudeの要約生成能力を向上させるもう一つの高度な手法は、ファインチューニングです。ファインチューニングでは、法律文書の要約ニーズに特化したカスタムデータセットでClaudeをトレーニングし、Claudeがユースケースに適応するようにします。ファインチューニングの実行方法の概要を以下に示します:

    1. エラーを特定する: まず、Claudeの要約が不十分な事例を収集します。これには、重要な法的詳細の欠落、コンテキストの誤解、不適切な法律用語の使用などが含まれます。

    2. データセットをキュレーションする: これらの問題を特定したら、問題のある例のデータセットを編集します。このデータセットには、元の法律文書と修正された要約を含め、Claudeが望ましい動作を学習できるようにします。

    3. ファインチューニングを実行する: ファインチューニングでは、キュレーションされたデータセットでモデルを再トレーニングし、重みとパラメータを調整します。この再トレーニングにより、Claudeは法律ドメインの特定の要件をよりよく理解し、基準に従って文書を要約する能力が向上します。

    4. 反復的な改善: ファインチューニングは一度きりのプロセスではありません。Claudeが要約を生成し続ける中で、パフォーマンスが不十分だった新しい例を反復的に追加し、能力をさらに洗練させることができます。時間の経過とともに、この継続的なフィードバックループにより、法律文書の要約タスクに高度に特化したモデルが得られます。

    ファインチューニングは現在、Amazon Bedrockを通じてのみ利用可能です。詳細については、AWSのローンチブログをご覧ください。
    要約クックブック

    Claudeを使用して契約書を要約する方法の完全に実装されたコードベースの例をご覧ください。

    引用クックブック

    情報の正確性と説明可能性を確保する方法に関するガイダンスについて、引用クックブックレシピをご覧ください。

    Was this page helpful?

    • Claudeで構築する前に
    • 法律文書の要約にClaudeを使用するかどうかを判断する
    • Claudeを使用して法律文書を要約する方法
    • 適切なClaudeモデルを選択する
    • 文書をClaudeが処理できる形式に変換する
    • データセットから学習するためにClaudeをファインチューニングする