Skip to content
Руководства5 мин чтения

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

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

Potato Team

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

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

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

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

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

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

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"
}

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

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

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

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

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"

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

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

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

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

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

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

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"

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

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

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

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

yaml
keyword_highlights_file: data/legal_terms.csv

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

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

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

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

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

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

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

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

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

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


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