/kontur_internship_ds_nlp_2023

Решение тестового задания на стажировку в Контур Data Science 2023

Primary LanguageJupyter Notebook

Введение

В Контуре мы много работаем с документами: арбитражные иски, госзакупки, исполнительные производства. В данном задании мы предлагаем вам сделать модель, которая поможет отделу госзакупок извлекать нужный кусок текста из документа для того, чтобы сформировать анкету заявки. То, какой именно фрагмент текста нужно извлечь, зависит от пункта анкеты, соответствующего документу. Всего в каждом документе, с которыми вы будет работать, есть 1 из 2-х пунктов анкеты, по которым необходимо извлекать кусочки из текста:

  • обеспечение исполнения контракта
  • обеспечение гарантийных обязательств

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

Данные

train.json

Данные для обучения в формате json имеют следующие поля:

  • id: int - id документа
  • text: str - текст документа, в котором может содержаться фрагмент текста, соответствующий пункту анкеты из поля label
  • label: str - название пункта анкеты. Может принимать одно из двух значений: обеспечение исполнения контракта или обеспечение гарантийных обязательств
  • extracted_part: dict следующего формата:
    {
        'text': [фрагмент текста из поля `text`, соответствующий пункту анкеты], 
        'answer_start': [индекс символа начала фрагмента текста в тексте документа],
        'answer_end': [индекс символа конца фрагмента текста в тексте документа]
    }
    

test.json

Для демонстрации работы модели используйте данные из файла test.json. В нем есть все те же поля, что и в файле train.json, кроме поля extracted_part - именно его вам и нужно будет добавить, для того, чтобы мы смогли оценить качество вашей модели.

Тестовое задание

Для выполнения тестового задания требуется разработать модель, которая будет способна по паре текст документа и пункт анкеты извлекать из текста документа нужный фрагмент текста. Обучив модель, добавьте в файл test.json поле extracted_part в том же формате, что и в файле train.json. Новый файл назовите predictions.json

Подсказка: изучив данные, вы можете заметить, что у части наблюдений отсутствует фрагмент текста к извлечению (пустая строка внутри поля extracted_part с answer_start и answer_end равными нулю). Это означает, что в тексте документа нет нужного фрагмента текста, соответствующего пункту анкеты. Учтите это в обучении вашей модели и при формировании файла с ответами.

Критерии оценки

  1. Для оценки финального решения будет использоваться метрика Accuracy: доля наблюдений, в которых извлеченный моделью фрагмент текста полностью соответствует фактически требуемому фрагменту.
  2. Чистота кода, оформление и понятность исследования.

Требования к решению

В качестве решения мы ожидаем 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 должно быть отражено исследование и весь код, необходимый для воспроизведения исследования.

Успехов!