Coder Social home page Coder Social logo

bert_nlu's Introduction

Проект по курсу ММОТ 2023

Сидоров Леонид 617 ВМК МГУ

Темой моего проекта было Обучение BERT классификации с информацией из базы знаний, постановка задачи заключается в следующем

Найти датасет с текстами, содержащими большое число именованых сущностей 
(можно найти готовый или разметить сущности самому, на основе базы знаний).
Провести эксперименты:
оценить качество классификации на сырых документах
оценить качество классификации при одновременном обучении разметке и классификации текстов
оценить качество классификации, когда нужные слова в тексте помечаются "маркерами"

В поисках подходящего набора данных я решил немного переформулирвать задачу и свёл её к задаче NLU. В ней есть два таргета:

  1. интент пользователя, то есть его основное намеренние (задача multi label классификации);
  2. слоты, то есть важные смысловые части запроса, которые важны для реализации интента (задача тегирования последовательности, NER).

Выделять слоты можно различными способами, но было выбрано тегирование: исходные слоты переводятся в BIO-разметку, по которой решается задача NER.

Одно наблюдение имеет следующий вид

{
    "text": "Yes, from 25 past 23 on",
    "intents": [
      "affirm"
    ],
    "slots": {
      "time_from": {
        "text": "25 past 23",
        "span": [
          10,
          20
        ],
        "value": {
          "hour": 23,
          "minute": 25
        }
      }
    }
  },

В общем случае интентов может быть больше одного, в нашем примере это affirm, то есть подтверждение. Слотов в одном тексте также может быть много, нас интересует не конкретное его значение, а тип и расположение по токенам. То есть слотовую разметку данного текста можно представить в виде

O O B-time_from I-time_from I-time_from O

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

План работ

В ходе выполнения проекта были исследованы три подхода:

  1. Раздельная классификация интентов и поиск слотов;
  2. Одновременная классификация и поиск слотов в рамках одной модели (BERT с двумя головами);
  3. Для задачи классификации теги подаются как дополнительные признаки (газетиры).

Газетиры (gazetteers) - это фактически добавление каких-то дополнительных признаков к токенам или их эмбедингам. Существует несколько вариантов такого добавления, классические описаны в [2].

Ясно, что при использовании BERT модификация эмбедингов сломает претрейн модели, поэтому в нашем случае стоит добавлять признаки уже к выходным эмбедингам берта (подробнее об этом можно почитать в [3]).


Для всех трёх вариантов качество замеряется на 10 наборах для обучения и валидации, как было предложено авторами набора данных здесь. Выборка делится на 20 фолдов, после чего последовательно 2 подряд идущих фолда используется для валидации, а все остальные для обучения, итого получаем 10 наборов данных для обучения и валидации.

Все основные модули реализованы поверх библиотеки HuggingFace. В файлах data_loader.py, metrics.py, multitask_model.py и gazetteers_model.py реализована вся внутренняя логика по сбору данных, обучению моделей и их архитектуре, а в experiments.ipynb все описанные выше эксперименты и более подробное описание решаемой задачи. Поставить необходимое окружение и повторить эксперименты можно с помощью команды poetry install.

Литература

  1. NLU++: A Multi-Label, Slot-Rich, Generalisable Dataset for Natural Language Understanding in Task-Oriented Dialogue. В статье описывается используемый набор данных и методика разбиения на фолды для оценивания результатов.

  2. Named Entity Recognition with Bidirectional LSTM-CNNs и How to Use Gazetteers for Entity Recognition with Neural Models Статьи об использовании газетиров и базовой постановке задачи, примеры на LSTM.

  3. Improving Neural Named Entity Recognition with Gazetteers и GEMNET: Effective Gated Gazetteer Representations for Recognizing Complex Entities in Low-context Input. Использование газетиров вместе с BERT.

bert_nlu's People

Contributors

sidl419 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.