dream

Форк
0

README.md

Description

Детектор интентов. Каждый utterance приходит разбитый на предложения с помощью sentseg, каждое предложение эмбеддится с помощью Universal sentence encoder (USE, https://arxiv.org/pdf/1803.11175.pdf). В файле src/detector.py лежат различные детекторы.

ВАЖНО:

Если вы заполняете фразы для интентов, пожалуйста, делайте это внимательно. Интенты не должны пересекаться, это плохо влияет на работу детектора. Добавлять фразы вроде "let's talk about something else" нужно в topic_switching, а не в lets_talk_about. Не нужно добавлять мусорные фразы, где интент был не ясен, или где речь была плохо распознана - это только усложнит работу детектора. Интенты детектятся по сегментам, поэтому пожалуйста, смотрите, на какакой сегмент скорее всего сработал интент, и добавляйте именно его, а не фразу целиком.

Описание детекторов:

  • USESimpleDetector: каждое предложение utterance сравнивается по метрике (cosine similarity) с предложениями интентов, берется максимум скора по всем предложениям и отсекается по трешхолду, вычисленному заранее.
  • USERegCombinedDetector: каждое предложение сначала прогоняется через regexp, если же ни один интент не замэтчился - отправляем предложение в USESimpleDetector.
  • ClassifierDetector: (линейный) классификатор, обученный поверх эмбеддингов USE.
  • ClassRegCombinedDetector (TBD): то же самое что и USERegCombinedDetector, только c ClassifierDetector.

TODO:

  • Code refactoring

Метрики

USERegCombinedDetector:

metrics/intentsexitrepeatwhat_is_your_namewhere_are_you_fromwhat_can_you_dowho_made_youwhat_is_your_job
precision0.9333697760.8194188690.9963636360.9581240980.8513215860.8767271990.92990404
recall0.6170790050.7318260070.8181031750.879841270.720.8774721770.905040404
f10.7354391530.7679645910.8937861620.9093118580.6704182190.8741621020.912530126

Linear classifier

metrics/intentcant_dodoing_welldont_understandexitlets_chat_aboutnoopinion_requestrepeatstupidtell_me_a_storytell_me_moretopic_switchingweather_forecast_intentwhat_can_you_dowhat_is_your_jobwhat_is_your_namewhat_timewhere_are_you_fromwho_made_youyes
precision0.9963708279302341.00.99631398953699140.9768483693991410.99801310166117290.982596409238630.99674766041240781.00.99152044839757341.01.00.99388373589143360.99814490570075020.94576198765214790.98344513457556940.99545454545454550.40.99792338010342550.98428516208625070.9989473684210527
recall0.97899070242980040.84186866097584570.96121282739471340.88520477119029870.78158162037585510.72925280549536110.99308527952503760.96061030415293090.93391793764987820.99541799887693240.70094420543336950.9750106322916020.98092290055999810.6808644621970540.77065812863606980.78320707070707060.108333333333333320.92683844771698410.96649578119455290.5560519627197736
f10.98759450582943990.91184117096305410.97838493176268670.92871654386883530.87614615614672320.83505429296717840.99491231307518060.97979549646710320.96174084749135040.99768241220781830.8198926895380170.98433077459418750.98945138796756970.78420915982555960.86060449277457230.87009514479949090.163690476190476220.9607585478798260.97465115359631780.711350597533756

MLP

metrics/intentcant_dodoing_welldont_understandexitlets_chat_aboutnoopinion_requestrepeatstupidtell_me_a_storytell_me_moretopic_switchingweather_forecast_intentwhat_can_you_dowhat_is_your_jobwhat_is_your_namewhat_timewhere_are_you_fromwho_made_youyes
precision1.00.9663376576437720.99417869499975260.99597370090985060.99767441860465110.99980619704825120.99595297929508440.99663343890615040.99559945295125310.97785031748163450.99576937344931460.99958268123801960.99450259906300130.94978479853479850.92935574229691890.99961255916875370.97454670139717660.9500234505441030.95904642458990290.9774537676284331
recall1.00.96142857142857140.98733766233766250.98251533742331290.99761904761904740.99973675319556270.98378378378378380.99528769841269860.99383215369059650.96773835920177360.99111842105263150.99946012748796660.99149659863945570.94615384615384610.890.99855334538878840.92905405405405410.89210526315789470.89750.9395348837209303
f11.00.96340787261010220.99071628748622740.9891577876428090.99761871013465640.99977146749084740.98973899137671140.9959583725273780.99471006600893350.97265672533385550.99338781819683140.9995213558033180.99299100607458230.94379425394417880.90287552246603950.99908260960332830.95084836021057480.91690757199535680.91982168837891790.9576263101054515

Getting started

Чтобы добавить интент, нужно:

  1. Вписать в <intent_data_path>/intent_phrases.json имя вашего интента, фразы/регекспы фраз, по которым будет идти матчинг, допустимые в этом случае знаки пунктуации, а также min_precision - минимально приемлимый precision для подбора трешхолда. \ Если вы хотите добавить фразу, чтобы на нее работал regexp (см RegMD), но сама модель на нее не обучалась (к примеру, let's play .*), то добавить ее нужно в отдельное поле reg_phrases в поле интента.
  2. Затем выполнить python3 create_data_and_train_model.py, чтобы обучить модель. Трешхолды будут сохранены в intent_data.json

Пример запуска внутри докера:

 python3 /data/create_data_and_train_model.py

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.