Skip to content
Leitfäden5 Min. Lesezeit

Rechtsdokumente annotieren: bewährte Vorgehensweisen

Rechtsdokumente in Potato annotieren, also Verträge, Gerichtsakten und Regulierungstexte, mit Span-Labeling, Entitätsextraktion und selbst gehostetem Betrieb mit Datenschutz an erster Stelle.

Potato Team

Juristische Texte sind ein Annotationsproblem für sich. Die Struktur ist dicht, das Vokabular ist Fachsprache, und ein falsches Label kann echte rechtliche Folgen haben. Dieser Leitfaden zeigt, wie man solche Texte gut annotiert.

Was die Annotation von Rechtstexten schwer macht

Allein der Fachjargon führt dazu, dass du geschulte Annotierende brauchst und keine beliebig ausgewählten Crowd-Arbeitenden. Die Dokumente sind lang, Verträge reichen mitunter über hunderte Seiten, und die Abschnitte verweisen ständig aufeinander. Präzision zählt mehr als sonst, denn ein unsauber gesetzter Span kann die Bedeutung einer Klausel verschieben. Und ein großer Teil dieser Bedeutung hängt an Dokumenttyp und Rechtsordnung, Kontext ist hier also nie optional.

Zur Mechanik hinter Span- und Textannotation siehe die Quelldokumentation.

Dokumente segmentieren

Lange Dokumente aufteilen

json
{
  "id": "contract_001_section_3.2",
  "text": "The Licensor grants to the Licensee a non-exclusive, non-transferable license...",
  "section_number": "3.2",
  "section_title": "License Grant",
  "document_id": "contract_001"
}

Annotation auf Abschnittsebene

yaml
instance_display:
  fields:
    - key: section_title
      type: text
    - key: text
      type: text

Juristische Entitäten erkennen

Vertragsspezifische Entitäten

yaml
annotation_schemes:
  - annotation_type: span
    name: legal_entities
    description: "Mark the parties, defined terms, dates, amounts and obligations."
    labels:
      - name: PARTY
        color: "#FECACA"
        tooltip: "Contracting parties, including Licensor, Licensee and named companies"
      - name: DEFINED_TERM
        color: "#FDE68A"
        tooltip: "A term given a specific meaning by the definitions section"
      - name: DATE
        color: "#BBF7D0"
        tooltip: "Dates and time periods, including notice and cure periods"
      - name: MONETARY
        color: "#C4B5FD"
        tooltip: "Amounts, fees, penalties and caps"
      - name: OBLIGATION
        color: "#BFDBFE"
        tooltip: "Language creating a duty, such as shall, must or agrees to"
      - name: CONDITION
        color: "#FED7AA"
        tooltip: "Language making a duty conditional, such as if, unless or provided that"
      - name: REFERENCE
        color: "#E0E7FF"
        tooltip: "A cross-reference to another section or document"

Pflichten erkennen

yaml
  - annotation_type: radio
    name: clause_type
    description: "What type of clause is this?"
    labels:
      - Definitions
      - Grant of rights
      - Consideration and payment
      - Term and termination
      - Representations and warranties
      - Indemnification
      - Limitation of liability
      - Confidentiality
      - Intellectual property
      - Dispute resolution
      - Boilerplate

Klauseln klassifizieren

Arten von Vertragsklauseln

yaml
  - annotation_type: multiselect
    name: obligation_type
    description: "Which kinds of obligation does this clause create?"
    labels:
      - Performance
      - Payment
      - Restriction
      - Conditional obligation
      - Warranty
 
  - annotation_type: likert
    name: risk
    description: "How much risk does this clause carry for the receiving party?"
    size: 5
    min_label: "Low risk"
    max_label: "High risk"
 
  - annotation_type: text
    name: risk_notes
    description: "Explain the risk factors you identified."
    rows: 4
    min_chars: 20

Risiken einschätzen

yaml
annotation_schemes:
  - annotation_type: span
    name: case_entities
    description: "Mark case metadata and the parties to the proceeding."
    labels:
      - name: CASE_NUMBER
        tooltip: "The docket or case identifier"
      - name: COURT
        tooltip: "Court name and jurisdiction"
      - name: JUDGE
      - name: PLAINTIFF
      - name: DEFENDANT
      - name: ATTORNEY
      - name: LEGAL_CITATION
        tooltip: "Citations to cases, statutes and regulations"
      - name: RULING
 
  - annotation_type: span
    name: argument_structure
    description: "Mark the claim, its support, and the court's conclusion."
    labels:
      - name: CLAIM
        color: "#FECACA"
      - name: PREMISE
        color: "#BBF7D0"
      - name: EVIDENCE
        color: "#BFDBFE"
      - name: REBUTTAL
        color: "#FED7AA"
      - name: CONCLUSION
        color: "#E0E7FF"

Gerichtsdokumente annotieren

Angaben zum Verfahren extrahieren

text
keyword,label,schema,color
shall,OBLIGATION,legal_entities,#FEE2E2
must,OBLIGATION,legal_entities,#FEE2E2
agrees to,OBLIGATION,legal_entities,#FEE2E2
may,permission,legal_entities,#D1FAE5
unless,CONDITION,legal_entities,#DBEAFE
provided that,CONDITION,legal_entities,#DBEAFE
notwithstand*,CONDITION,legal_entities,#DBEAFE

Aufbau der Argumentation

yaml
keyword_highlights_file: data/legal_terms.csv

Juristische Formulierungen hervorheben

yaml
keyword_highlight_settings:
  keyword_probability: 0.8       # show 80% of matched keywords
  random_word_probability: 0.05  # highlight ~5% of other words as distractors

Qualitätskontrolle im juristischen Bereich

yaml
num_annotators_per_item: 3
 
gold_standards:
  enabled: true
  items_file: data/gold_clauses.json
  mode: mixed
  frequency: 20
  accuracy:
    min_threshold: 0.85
    evaluation_count: 10
  feedback:
    show_correct_answer: true
    show_explanation: true

Vollständige Konfiguration für juristische Annotation

yaml
annotation_task_name: "Contract Clause Analysis"
task_description: "Classify contract clauses and mark the entities they refer to."
 
data_files:
  - data/contract_sections.json
 
item_properties:
  id_key: id
  text_key: text
 
instance_display:
  fields:
    - key: section_title
      type: text
    - key: text
      type: text
 
annotation_schemes:
  - annotation_type: radio
    name: clause_type
    description: "What type of clause is this?"
    labels:
      - Grant of rights
      - Consideration and payment
      - Term and termination
      - Indemnification
      - Limitation of liability
      - Confidentiality
      - Other
 
  - annotation_type: span
    name: legal_entities
    description: "Mark the parties, defined terms, dates, amounts and obligations."
    labels:
      - name: PARTY
        color: "#FECACA"
      - name: DEFINED_TERM
        color: "#FDE68A"
      - name: MONETARY
        color: "#C4B5FD"
      - name: DATE
        color: "#BBF7D0"
      - name: OBLIGATION
        color: "#BFDBFE"
 
  - annotation_type: likert
    name: risk
    description: "How much risk does this clause carry for the receiving party?"
    size: 5
    min_label: "Low risk"
    max_label: "High risk"
 
  - annotation_type: text
    name: issues
    description: "Note any unusual or problematic language."
    rows: 4
    min_chars: 20
 
num_annotators_per_item: 3
 
gold_standards:
  enabled: true
  items_file: data/gold_clauses.json
  mode: mixed
  frequency: 20
  accuracy:
    min_threshold: 0.85
    evaluation_count: 10
 
agreement_metrics:
  enabled: true
  min_overlap: 2
 
output_annotation_dir: annotation_output

Richtlinien für die Annotierenden schreiben

Gute Richtlinien für eine juristische Aufgabe legen den Rahmen fest, also welche Dokumente und welche Rechtsordnungen, und enthalten ein Glossar, damit alle die Fachbegriffe so lesen wie du. Sag klar, was bei mehrdeutigen Formulierungen gilt und wann ein Querverweis annotiert wird und wann nicht. Und halte fest, wann eine Span-Grenze richtig gesetzt ist, denn ungefähr richtig reicht in diesem Bereich selten.

Bewährte Vorgehensweisen

Setz Annotierende ein, die das Fachgebiet wirklich kennen, denn ohne dieses Wissen funktioniert juristisches Labeln nicht. Teil lange Dokumente in Abschnitte auf, die man im Kopf behalten kann. Heb die juristischen Formulierungen hervor, auf die es ankommt, damit sie nicht überlesen werden. Halte die Redundanz hoch, weil ein Fehler hier teuer ist. Bau eine Prüfebene ein, auf der Jurist:innen die Grenzfälle entscheiden. Definier jedes Label genau. Und gib den Annotierenden die umgebende Struktur und die zugehörigen Abschnitte mit, denn eine Klausel für sich allein kann in die Irre führen.


Vollständige Dokumentation unter Annotationsschemata.