В Контуре мы много работаем с документами: арбитражные иски, госзакупки, исполнительные производства. В данном задании мы предлагаем вам сделать модель, которая поможет отделу госзакупок извлекать нужный кусок текста из документа для того, чтобы сформировать анкету заявки. То, какой именно фрагмент текста нужно извлечь, зависит от пункта анкеты, соответствующего документу. Всего в каждом документе, с которыми вы будет работать, есть 1 из 2-х пунктов анкеты, по которым необходимо извлекать кусочки из текста:
- обеспечение исполнения контракта
- обеспечение гарантийных обязательств
Соответственно, ваша модель, принимая на вход текст документа
и наименование одного из двух пунктов
, должна возвращать соответствующий кусочек текста из текста документа
.
Данные для обучения в формате json имеют следующие поля:
id
: int - id документаtext
: str - текст документа, в котором может содержаться фрагмент текста, соответствующий пункту анкеты из поляlabel
label
: str - название пункта анкеты. Может принимать одно из двух значений:обеспечение исполнения контракта
илиобеспечение гарантийных обязательств
extracted_part
: dict следующего формата:{ 'text': [фрагмент текста из поля `text`, соответствующий пункту анкеты], 'answer_start': [индекс символа начала фрагмента текста в тексте документа], 'answer_end': [индекс символа конца фрагмента текста в тексте документа] }
Для демонстрации работы модели используйте данные из файла test.json
. В нем есть все те же поля, что и в файле train.json
, кроме поля extracted_part
- именно его вам и нужно будет добавить,
для того, чтобы мы смогли оценить качество вашей модели.
Для выполнения тестового задания требуется разработать модель, которая будет способна по паре текст документа
и пункт анкеты
извлекать из текста документа нужный фрагмент текста.
Обучив модель, добавьте в файл test.json
поле extracted_part
в том же формате, что и в файле train.json
. Новый файл назовите predictions.json
Подсказка: изучив данные, вы можете заметить, что у части наблюдений отсутствует фрагмент текста к извлечению (пустая строка внутри поля extracted_part
с answer_start
и
answer_end
равными нулю). Это означает, что в тексте документа нет нужного фрагмента текста, соответствующего пункту анкеты. Учтите это в обучении вашей модели и при формировании
файла с ответами.
- Для оценки финального решения будет использоваться метрика
Accuracy
: доля наблюдений, в которых извлеченный моделью фрагмент текста полностью соответствует фактически требуемому фрагменту. - Чистота кода, оформление и понятность исследования.
В качестве решения мы ожидаем zip-архив со всеми *.py и *.ipynb файлами в папке solution и файлом predictions.json
в корне. Формат имени zip-архива: LastName_FirstName.zip (пример Ivanov_Ivan.zip).
Файл predictions.json
должен включать в себя колонки id
, text
, label
, содержащие те же данные, что и исходный файл test.json
, а также колонку extracted_part
в том же
формате, что и в файле train.json
Разметка тестового набора данных и включение его в обучение/валидацию запрещены.
В папке solution должно быть отражено исследование и весь код, необходимый для воспроизведения исследования.
Успехов!