Giter Club home page Giter Club logo

ds-cloud-test's Introduction

DS-Cloud-test

Решение тестового задания на позицию Data Scientist в Cloud.ru

Описание

Была обучена сеть для задачи Named Entity Recognition на датасете NERUS. В качестве модели была выбрана модель ruBERT. От неё я взял токенизатор и энкодер, добавив к ним классификатор для токенов. Поверх обучения использовался pytorch lightning, а для логирования - tensorboard.


Ноутбуки

Обучение модели

Отправка запросов к kserve


Архитектура решения

Сделал: this

Лучшее решение: best

Идеал: mama

Разъяснение по метрикам

Для оценки качества моделей в задаче Named Entity Recognition (NER) используют метрики:

  • Entity-Level Micro/Macro F1-score

В качестве метрики будем использовать её. В наших данных будет наблюдатсья сильный дизбаланс классов, т.к. сущностей с меткой 'O' будет больше всего. Micro F1-score рассчитывается на уровне всего набора данных, объединяя предсказания и истинные метки для каждой сущности. Это подразумевает, что все предсказанные и истинные метки рассматриваются как один большой класс. Macro F1-score рассчитывается, усредняя F1-score для каждой индивидуальной сущности. Так мы можем равномерно оценить качество извлечения для всех сущностей, даже если некоторые из них представлены в данных редко.

  • Exact Match

Измеряет процент точного совпадения между предсказанными и действительными именованными сущностями. Полезен, когда важно достичь точного соответствия.

  • IOB Metrics (IOB Precision, IOB Recall, IOB F1-score):

Рассматривает только те предсказанные именованные сущности, которые правильно начинаются и заканчиваются.

  • Span-Level Metrics

Span Precision, Span Recall, Span F1-score оценивают точность, полноту и F1-score, сосредотачиваясь на предсказанных именованных сущностях как на целых фрагментах текста.

Первая метрика была выбрана, потому что объединение всех именованных сущностей в единый показатель F1-score делает эту метрику всесторонней и информативной. Микроусреднение и макроусреднение обеспечивают учет качества предсказаний для каждого класса и предоставляют общую оценку производительности модели.

Метрика Exact Match оценивает только полное совпадение между предсказанными и истинными тегами. Это может быть слишком строгим условием, особенно когда модель делает небольшие ошибки в границах или несколько ошибок в предсказании.

Метрики IOB не обобщают оценку для всех классов, и, таким образом, могут предоставить неполное представление о производительности модели.

Span-Level метрики оценивают точность границ именованных сущностей, но, подобно IOB-метрикам, не учитывают их типы. Они не уделяют внимания полноте и точности для каждого класса.

Подсчитанные метрики для обученной модели:

precision recall f1-score общее количество экземпляров
LOC 0.98 0.97 0.97 19616
ORG 0.91 0.91 0.91 18305
PER 0.98 0.96 0.97 16157
micro avg 0.95 0.95 0.95 54078
macro avg 0.96 0.95 0.95 54078
weighted avg 0.95 0.95 0.95 54078

Запуск

Docker (local method)

Перед запуском убедитесь, что в системе установлен docker и docker-compose коомандами:

sudo docker --version
sudo docker-compose --version

Далее проверьте, запущен ли демон docker

sudo docker ps

Тогда можно поднимать сервис

git clone https://github.com/t041lk8/DS-Cloud-test.git
sudo docker compose up

K8S

kubectl apply -f ./manifests

Тестирование

Docker

Запрос

curl -X POST "http://localhost:8080/v1/models/NERtagger:predict" \
    -H "Content-Type: application/json" \
    -d '{"text": "Глава компании Apple Тим Кук осенью представил новый телефон в штаб квартире Apple Inc в Купертино"}'

Ответ

status_code: 200

{
    'entities': [
        {'text': 'глава', 'type': 'O', 'start': 0, 'end': 5},
        {'text': 'компании', 'type': 'O', 'start': 0, 'end': 14},
        {'text': 'apple', 'type': 'ORG', 'start': 6, 'end': 20},
        {'text': 'тим кук', 'type': 'PER', 'start': 18, 'end': 28},
        {'text': 'осенью', 'type': 'O', 'start': 27, 'end': 35},
        {'text': 'представил', 'type': 'O', 'start': 29, 'end': 46},
        {'text': 'новыи', 'type': 'O', 'start': 36, 'end': 52},
        {'text': 'телефон', 'type': 'O', 'start': 51, 'end': 60},
        {'text': 'в', 'type': 'O', 'start': 53, 'end': 62},
        {'text': 'штаб', 'type': 'O', 'start': 61, 'end': 67},
        {'text': 'квартире', 'type': 'O', 'start': 63, 'end': 76},
        {'text': 'apple inc', 'type': 'ORG', 'start': 68, 'end': 86},
        {'text': 'в', 'type': 'O', 'start': 83, 'end': 88},
        {'text': 'купертино', 'type': 'LOC', 'start': 87, 'end': 98}
    ],    
    'text': 'Глава компании Apple Тим Кук осенью представил новый телефон в штаб '   
         'квартире Apple Inc в Купертино'
}

Запрос

curl -X POST "http://<your_any_node_external_ip>:30180/v1/models/NERtagger:predict" \
    -H "Content-Type: application/json" \
    -d '{"text": "Глава компании Apple Тим Кук осенью представил новый телефон в штаб квартире Apple Inc в Купертино"}'

K8S

Ответ

status_code: 200

{
    'entities': [
        {'text': 'глава', 'type': 'O', 'start': 0, 'end': 5},
        {'text': 'компании', 'type': 'O', 'start': 0, 'end': 14},
        {'text': 'apple', 'type': 'ORG', 'start': 6, 'end': 20},
        {'text': 'тим кук', 'type': 'PER', 'start': 18, 'end': 28},
        {'text': 'осенью', 'type': 'O', 'start': 27, 'end': 35},
        {'text': 'представил', 'type': 'O', 'start': 29, 'end': 46},
        {'text': 'новыи', 'type': 'O', 'start': 36, 'end': 52},
        {'text': 'телефон', 'type': 'O', 'start': 51, 'end': 60},
        {'text': 'в', 'type': 'O', 'start': 53, 'end': 62},
        {'text': 'штаб', 'type': 'O', 'start': 61, 'end': 67},
        {'text': 'квартире', 'type': 'O', 'start': 63, 'end': 76},
        {'text': 'apple inc', 'type': 'ORG', 'start': 68, 'end': 86},
        {'text': 'в', 'type': 'O', 'start': 83, 'end': 88},
        {'text': 'купертино', 'type': 'LOC', 'start': 87, 'end': 98}
    ],    
    'text': 'Глава компании Apple Тим Кук осенью представил новый телефон в штаб '   
         'квартире Apple Inc в Купертино'
}

ds-cloud-test's People

Contributors

t041lk8 avatar

Stargazers

Gamatin Ilya avatar

Watchers

 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.