Разметка юридических документов: как делать это правильно
Разметка юридических документов в Potato — договоров, судебных материалов и нормативных текстов: разметка спанов, извлечение сущностей и развёртывание у себя с приоритетом приватности.
Юридический текст — отдельный вид задачи для разметки. Структура плотная, лексика специальная, а ошибка в метке может иметь настоящие юридические последствия. В этом руководстве — как размечать его хорошо.
Чем сложна юридическая разметка
Одна только терминология означает, что нужны обученные разметчики, а не случайные исполнители с краудсорсинговой площадки. Документы длинные — договоры порой тянутся на сотни страниц, — а разделы постоянно ссылаются друг на друга. Точность здесь важнее обычного: небрежно поставленный спан может изменить смысл пункта. И значительная часть этого смысла зависит от типа документа и юрисдикции, так что контекст никогда не бывает необязательным.
Механика разметки спанов и текста описана в исходной документации.
Сегментация документов
Разбиение длинных документов
{
"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"
}Разметка на уровне разделов
instance_display:
fields:
- key: section_title
type: text
- key: text
type: textРаспознавание юридических сущностей
Сущности, специфичные для договоров
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"Выявление обязательств
- 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Классификация пунктов
Типы договорных пунктов
- 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Оценка рисков
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"Разметка судебных документов
Извлечение сведений о деле
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
Структура аргументации
keyword_highlights_file: data/legal_terms.csvПодсветка юридических терминов
keyword_highlight_settings:
keyword_probability: 0.8 # show 80% of matched keywords
random_word_probability: 0.05 # highlight ~5% of other words as distractorsКонтроль качества в юридических задачах
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Полная конфигурация юридической разметки
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Как писать инструкции для разметчиков
Хорошая инструкция для юридической задачи проговаривает границы работы (какие документы, какие юрисдикции) и включает глоссарий, чтобы разметчики понимали термины так же, как вы. Прямо опишите неоднозначные формулировки и то, когда перекрёстную ссылку нужно размечать, а когда игнорировать. И скажите, что считается верной границей спана, — в этой области «примерно так» почти никогда не годится.
Рекомендации
Берите разметчиков, знающих предметную область: без этого юридическая разметка не работает. Разбивайте длинные документы на разделы, которые человек способен удержать в голове. Подсвечивайте юридические формулировки, несущие вес, чтобы их не проскакивали глазами. Держите высокую избыточность — цена ошибки высока. Добавьте слой экспертной проверки, где спорные случаи разбирают юристы. Определяйте каждую метку точно. И давайте разметчикам окружающую структуру и связанные разделы, потому что пункт в отрыве от контекста может ввести в заблуждение.
Полная документация — в схемах разметки.