Git Product home page Git Product logo

agrocode2021's Introduction

AgroCode Data Science Cup

Private score: 0.7673505952640405

Score = 0.8*(1 - logloss) + 0.2*F1

Задача:

(Multilabel classification + NER)

Необходимо по текстовому описанию болезней:

  1. определить потенциальные болезни коров ("label")
  2. научиться автоматически выделять признаки заболеваний и симптомы болезней ("span")

label – вероятность каждого из 11 возможных заболеваний

span – индексы начала и конца размеченных признаков болезни

Пример текста:

У нетели болячки на вымени. Здравствуйте. Нетель на позднем сроке. Обнаружила, что все вымя покрылось маленькими болячками. Вымя массирую - стоит смирно. На фото - коричневые точки. Что это? Помогите, пожалуйста.

Дополнительные данные:

  1. The Russian Drug Reaction Corpus (RuDReC).

    Датасет для NER, содержит много симптомов с контекстом, что полезно для нашей задачи(остальные тэги из датасета мы не учитываем) https://github.com/natasha/corus

  2. labeled_train_by_hand.json

  3. labeled_by_hand_version_2.json

    Ручная разметка в label-studio, пытался соотвествовать логике разметки авторов разметки первых 30 сэмплов.

    Отличие второго файла от третьего:

    • Второй файл больше соотвествует разметке авторов.
    • В третьем файле добавлено больше подробностей, которые, как мне кажется, помогли бы при классификации.

Краткое описание решения:

NER

  • В ноутбуке NER стандартный процесс обучения, используются данные с ручной разметкой, как модель я использую cointegrated/rubert-tiny2.

  • Для полей теста, где модель выдала пустое предсказание, я использую простой бейзлайн для предсказания спанов:

    span_words.py состоит из слов, которые содержались в размеченных спанах для трейна.

    prediction = model(text)
    
        if len(prediction) == 0:
            text = text.lower()
            prediction = model(text)
    
    
        if len(prediction) == 0:
            spans = self.predict_spans_baseline(text)

MultiLabel Classification

  • Как модель также использую cointegrated/rubert-tiny2 от @avidale

  • Для обучения использую текст из спанов, которые разметил руками + полный текст из датасета(получил большой прирост):

    new_train_df['text'] = " ".join(span_text) +  " | " + new_train['text']
  • Для обучения использую LSEP Loss, его нет в PyTorch, но на MultiLabel классификации показывает лучший результат(в моих экспериментах это так).

    classification/lsep_loss.py содержит класс для использования в PyTorch.

    class LSEPLoss(nn.Module): 
        def __init__(self): 
            super(LSEPLoss, self).__init__()
            
        def forward(self, input, target): 
            return LSEP.apply(input.cpu(), target.cpu())

    Reference: Li+2017: https://arxiv.org/pdf/1704.03135.pdf

  • Для теста также используем текст из спанов, полученных после NER + полный текст из датасета.

  • Небольшая фишка с log-loss score:

    drawing

    Из-за особенностей метрики, если значения меньше, например, 0.01, то мы их оставляем равными 0.01, аналогично, если больше 0.94.

        np.clip(x, 0.01, 0.94)

    (Данный трюк не используется в лучшем сабмите, но докинул на паблике и привате в других случаях)

agrocode2021's People

Contributors

poteminr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.