Skip to content
Guides6 min read

Разметка юридических документов: как делать это правильно

Разметка юридических документов в Potato — договоров, судебных материалов и нормативных текстов: разметка спанов, извлечение сущностей и развёртывание у себя с приоритетом приватности.

Potato Team

Юридический текст — отдельный вид задачи для разметки. Структура плотная, лексика специальная, а ошибка в метке может иметь настоящие юридические последствия. В этом руководстве — как размечать его хорошо.

Чем сложна юридическая разметка

Одна только терминология означает, что нужны обученные разметчики, а не случайные исполнители с краудсорсинговой площадки. Документы длинные — договоры порой тянутся на сотни страниц, — а разделы постоянно ссылаются друг на друга. Точность здесь важнее обычного: небрежно поставленный спан может изменить смысл пункта. И значительная часть этого смысла зависит от типа документа и юрисдикции, так что контекст никогда не бывает необязательным.

Механика разметки спанов и текста описана в исходной документации.

Сегментация документов

Разбиение длинных документов

yaml
annotation_task_name: "Legal Document Annotation"
 
display:
  # Segment by section
  segmentation:
    enabled: true
    method: section_headers
    pattern: '^\d+\.\s+[A-Z]'
 
  # Show document context
  context:
    show_previous_section: true
    show_section_hierarchy: true
 
  # Navigation
  navigation:
    show_outline: true
    jump_to_section: true

Разметка на уровне разделов

yaml
data_files:
  - contracts.json
 
item_properties:
  id_key: id
  text_key: text
 
preprocessing:
  segment_by: sections
  preserve_metadata: true
  include_section_number: true
 
# Each section becomes an annotation item
# {
#   "id": "contract_001_section_3.2",
#   "text": "The Licensor grants...",
#   "section_number": "3.2",
#   "section_title": "License Grant",
#   "document_id": "contract_001"
# }

Распознавание юридических сущностей

Сущности, специфичные для договоров

yaml
annotation_schemes:
  - annotation_type: span
    name: legal_entities
    labels:
      - name: PARTY
        color: "#FECACA"
        description: "Contracting parties (Licensor, Licensee, Company, etc.)"
 
      - name: DEFINED_TERM
        color: "#FDE68A"
        description: "Defined terms (usually capitalized)"
 
      - name: DATE
        color: "#BBF7D0"
        description: "Dates and time periods"
 
      - name: MONETARY
        color: "#C4B5FD"
        description: "Dollar amounts, fees, penalties"
 
      - name: OBLIGATION
        color: "#BFDBFE"
        description: "Must, shall, will obligations"
 
      - name: CONDITION
        color: "#FED7AA"
        description: "If, unless, provided that conditions"
 
      - name: REFERENCE
        color: "#E0E7FF"
        description: "References to other sections or documents"

Выявление обязательств

yaml
annotation_schemes:
  - annotation_type: multiselect
    name: obligation_type
    description: "What type of obligation is this?"
    labels:
      - name: performance
        label: "Performance Obligation"
        description: "Party must do something"
 
      - name: payment
        label: "Payment Obligation"
        description: "Party must pay"
 
      - name: restriction
        label: "Restriction/Prohibition"
        description: "Party must not do something"
 
      - name: condition
        label: "Conditional Obligation"
        description: "Obligation triggered by condition"
 
      - name: warranty
        label: "Warranty/Representation"
        description: "Statement of fact or promise"

Классификация пунктов

Типы договорных пунктов

yaml
annotation_schemes:
  - annotation_type: radio
    name: clause_type
    description: "What type of clause is this?"
    labels:
      - name: definitions
        label: "Definitions"
      - name: grant
        label: "Grant of Rights/License"
      - name: consideration
        label: "Consideration/Payment"
      - name: term
        label: "Term and Termination"
      - name: representations
        label: "Representations & Warranties"
      - name: indemnification
        label: "Indemnification"
      - name: limitation
        label: "Limitation of Liability"
      - name: confidentiality
        label: "Confidentiality"
      - name: ip
        label: "Intellectual Property"
      - name: dispute
        label: "Dispute Resolution"
      - name: boilerplate
        label: "Boilerplate/Miscellaneous"

Оценка рисков

yaml
annotation_schemes:
  - annotation_type: likert
    name: risk_level
    description: "Rate the risk level of this clause for [Party]"
    min_label: "Low Risk"
    max_label: "High Risk"
    size: 5
 
  - annotation_type: text
    name: risk_notes
    description: "Explain the risk factors"
    rows: 4

Разметка судебных документов

Извлечение сведений о деле

yaml
annotation_schemes:
  - annotation_type: span
    name: case_entities
    labels:
      - name: CASE_NUMBER
        description: "Case identifier"
 
      - name: COURT
        description: "Court name and jurisdiction"
 
      - name: JUDGE
        description: "Presiding judge"
 
      - name: PLAINTIFF
        description: "Plaintiff/Petitioner"
 
      - name: DEFENDANT
        description: "Defendant/Respondent"
 
      - name: ATTORNEY
        description: "Attorneys/Legal representatives"
 
      - name: LEGAL_CITATION
        description: "Citations to cases, statutes, regulations"
 
      - name: RULING
        description: "Court's ruling or order"

Структура аргументации

yaml
annotation_schemes:
  - annotation_type: span
    name: argument_structure
    labels:
      - name: CLAIM
        color: "#FECACA"
        description: "Main claim or assertion"
 
      - name: PREMISE
        color: "#BBF7D0"
        description: "Supporting premise"
 
      - name: EVIDENCE
        color: "#BFDBFE"
        description: "Evidence cited"
 
      - name: REBUTTAL
        color: "#FED7AA"
        description: "Counter-argument"
 
      - name: CONCLUSION
        color: "#E0E7FF"
        description: "Conclusion drawn"

Подсветка юридических терминов

yaml
display:
  keyword_highlighting:
    enabled: true
 
    categories:
      - name: obligation_words
        color: "#FEE2E2"
        keywords:
          - shall
          - must
          - will
          - agrees to
          - is required to
          - is obligated to
 
      - name: permission_words
        color: "#D1FAE5"
        keywords:
          - may
          - is permitted to
          - has the right to
          - is entitled to
 
      - name: prohibition_words
        color: "#FEF3C7"
        keywords:
          - shall not
          - must not
          - may not
          - is prohibited from
 
      - name: condition_words
        color: "#DBEAFE"
        keywords:
          - if
          - unless
          - provided that
          - subject to
          - contingent upon
          - in the event that

Контроль качества в юридических задачах

yaml
quality_control:
  # Require legal training
  qualification:
    required_training: legal_annotation_training
    training_accuracy: 0.85
 
  # Domain expertise check
  attention_checks:
    enabled: true
    items:
      - text: |
          "Notwithstanding any provision herein to the contrary,
          Licensee shall indemnify Licensor against all claims."
        expected:
          obligation_type: indemnification
          obligated_party: "Licensee"
        type: domain_knowledge
 
  # High agreement required
  redundancy:
    annotations_per_item: 3
    agreement_threshold: 0.8
    on_disagreement: expert_review
 
  # Expert review layer
  expert_review:
    enabled: true
    review_threshold: 0.7
    expert_users: [legal_expert_1, legal_expert_2]

Полная конфигурация юридической разметки

yaml
annotation_task_name: "Contract Clause Analysis"
 
display:
  text_display: html
 
  # Section context
  context:
    show_document_metadata: true
    show_section_hierarchy: true
 
  # Legal term highlighting
  keyword_highlighting:
    enabled: true
    categories:
      - name: obligations
        color: "#FEE2E2"
        keywords: [shall, must, will, agrees]
      - name: conditions
        color: "#DBEAFE"
        keywords: [if, unless, provided that, subject to]
      - name: defined_terms
        pattern: '\b[A-Z][a-zA-Z]+(?:\s+[A-Z][a-zA-Z]+)*\b'
        color: "#FEF3C7"
 
annotation_schemes:
  # Clause type
  - annotation_type: radio
    name: clause_type
    description: "Classify this clause"
    labels:
      - name: license_grant
        label: "License Grant"
      - name: payment
        label: "Payment/Consideration"
      - name: term
        label: "Term/Termination"
      - name: indemnification
        label: "Indemnification"
      - name: limitation
        label: "Limitation of Liability"
      - name: confidentiality
        label: "Confidentiality"
      - name: other
        label: "Other"
 
  # Entity spans
  - annotation_type: span
    name: entities
    labels:
      - name: PARTY
        color: "#FECACA"
      - name: DEFINED_TERM
        color: "#FDE68A"
      - name: MONETARY
        color: "#C4B5FD"
      - name: DATE
        color: "#BBF7D0"
      - name: OBLIGATION
        color: "#BFDBFE"
 
  # Risk assessment
  - annotation_type: likert
    name: risk
    description: "Risk level for the receiving party?"
    size: 5
    min_label: "Low"
    max_label: "High"
 
  # Key issues
  - annotation_type: text
    name: issues
    description: "Note any unusual or problematic language"
    rows: 4
 
quality_control:
  redundancy:
 
  qualification:

Как писать инструкции для разметчиков

Хорошая инструкция для юридической задачи проговаривает границы работы (какие документы, какие юрисдикции) и включает глоссарий, чтобы разметчики понимали термины так же, как вы. Прямо опишите неоднозначные формулировки и то, когда перекрёстную ссылку нужно размечать, а когда игнорировать. И скажите, что считается верной границей спана, — в этой области «примерно так» почти никогда не годится.

Рекомендации

Берите разметчиков, знающих предметную область: без этого юридическая разметка не работает. Разбивайте длинные документы на разделы, которые человек способен удержать в голове. Подсвечивайте юридические формулировки, несущие вес, чтобы их не проскакивали глазами. Держите высокую избыточность — цена ошибки высока. Добавьте слой экспертной проверки, где спорные случаи разбирают юристы. Определяйте каждую метку точно. И давайте разметчикам окружающую структуру и связанные разделы, потому что пункт в отрыве от контекста может ввести в заблуждение.


Полная документация — в схемах разметки.