DeepPavlov әзірлеушілерге арналған: №1 NLP құралдары және чатбот құру

Бәріңе сәлем! Біз табиғи тілді өңдеуге (Natural Language Processing немесе жай ғана NLP) қатысты практикалық мәселелерді шешуге және ашық бастапқы кітапхананы пайдалана отырып диалог агенттерін (чат-боттар) жасауға арналған мақалалар сериясын ашамыз. Терең ПавловMIPT нейрондық жүйелер және терең оқыту зертханасында біздің команда әзірлеп жатыр. Серияның негізгі мақсаты - DeepPavlov-ты әзірлеушілердің кең ауқымымен таныстыру және машиналық оқыту және математика саласындағы PhD докторы бойынша терең білімсіз қолданбалы NLP мәселелерін қалай шешуге болатынын көрсету.

NLP тапсырмаларына мәтіннің сезімін анықтау, аталған нысандарды талдау, әңгімелесушінің сіздің боттан не қалайтынын анықтау: пиццаға тапсырыс беру немесе фондық ақпарат алу және т.б. кіреді. NLP тапсырмалары мен әдістері туралы көбірек оқи аласыз осында.

Бұл мақалада біз сізге REST серверін қосымша конфигурациясыз немесе оқытусыз пайдалануға дайын алдын ала дайындалған NLP үлгілерімен қалай іске қосу керектігін көрсетеміз.

DeepPavlov әзірлеушілерге арналған: №1 NLP құралдары және чатбот құру

DeepPavlov орнату

Мұнда және төменде Linux үшін нұсқаулар беріледі. Windows үшін біздің құжаттама

  • Қолдау көрсетілетін Python нұсқасымен виртуалды ортаны жасаңыз және белсендіріңіз:
    virtualelnv env -p python3.7
    source env/bin/activate
  • DeepPavlov виртуалды ортада орнатыңыз:
    pip install deeppavlov
    

DeepPavlov үлгісімен REST серверін іске қосу

DeepPavlov үлгісімен серверді алғаш рет іске қоспас бұрын, кітапхана архитектурасының кейбір мүмкіндіктері туралы айту пайдалы болады.

DP кез келген модельден тұрады:

  • Python коды;
  • Жүктелетін құрамдас бөліктер – нақты деректер бойынша серияланған оқыту нәтижелері (енгізулер, нейрондық желілердің салмақтары және т.б.);
  • Үлгі пайдаланатын сыныптар, жүктеп алынған компоненттердің URL мекенжайлары, Python тәуелділіктері және т.б. туралы ақпаратты қамтитын конфигурация файлы (бұдан әрі - конфигурация).

Біз сізге ДипПавловтың астында не бар екендігі туралы келесі мақалаларда толығырақ айтып береміз, әзірге бізге мұны білу жеткілікті:

  • DeepPavlov ішіндегі кез келген модель оның конфигурациясының атымен анықталады;
  • Модельді іске қосу үшін оның құрамдастарын DeepPavlov серверлерінен жүктеп алу керек;
  • Сондай-ақ, үлгіні іске қосу үшін ол пайдаланатын Python кітапханаларын орнату қажет.

Біз іске қосатын бірінші модель көптілді атауы бар нысанды тану (NER) болады. Модель мәтіндік сөздерді олар жататын атаулы тұлғалардың түріне қарай жіктейді (жалпы атаулар, географиялық атаулар, валюталардың атаулары және т.б.). NER ағымдағы ең соңғы нұсқасы үшін конфигурация атауы:

ner_ontonotes_bert_mult

Біз REST серверін үлгімен іске қосамыз:

  1. Біз оның конфигурациясында көрсетілген модель тәуелділіктерін белсенді виртуалды ортаға орнатамыз:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. DeepPavlov серверлерінен серияланған үлгі құрамдастарын жүктеп алыңыз:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Сериялық құрамдас бөліктер әдепкі бойынша орналасқан DeepPavlov үй каталогына жүктеледі

    ~/.deeppavlov

    Жүктеп алу кезінде жүктелген құрамдастардың хэштері серверде орналасқан компоненттердің хэштерімен салыстырылады. Сәйкестік болса, жүктеп алу өткізіліп, бар файлдар пайдаланылады. Жүктеп алынған компоненттердің өлшемдері орташа есеппен 0.5-тен 8 Гб-қа дейін өзгеруі мүмкін, кейбір жағдайларда ықшамдаудан кейін 20 Гб жетеді.

  3. Біз REST серверін үлгімен іске қосамыз:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Осы пәрменді орындау нәтижесінде хост машинасының 5005 портында үлгісі бар REST сервері іске қосылады (әдепкі порт 5000).

Модельді инициализациялаудан кейін API құжаттамасы бар Swagger және тестілеу мүмкіндігін URL мекенжайынан табуға болады http://127.0.0.1:5005. Модельді соңғы нүктеге жіберу арқылы сынап көрейік http://127.0.0.1:5005/model Келесі JSON мазмұны бар POST сұрауы:

{
  "x": [
    "В МФТИ можно добраться на электричке с Савёловского Вокзала.",
    "В юго-западной Руси стог жита оценен в 15 гривен"
  ]
}

Жауап ретінде біз келесі JSON алуымыз керек:

[
  [
    ["В", "МФТИ", "можно", "добраться", "на", "электричке", "с", "Савёловского", "Вокзала", "."],
    ["O", "B-FAC", "O", "O", "O", "O", "O", "B-FAC", "I-FAC", "O"]
  ],
  [
    ["В", "юго", "-", "западной", "Руси", "стог", "жита", "оценен", "в", "15", "гривен"],
    ["O", "B-LOC", "I-LOC", "I-LOC", "I-LOC", "O", "O", "O", "O", "B-MONEY", "I-MONEY"]
  ]
]

Осы мысалдарды пайдалана отырып, біз DeepPavlov REST API талдаймыз.

API DeepPavlov

Әрбір DeepPavlov үлгісінде кемінде бір кіріс аргументі бар. REST API-де аргументтер аталды, олардың атаулары кіріс сөздіктің кілттері болып табылады. Көп жағдайда аргумент өңдеуді қажет ететін мәтін болып табылады. Үлгілер қайтаратын аргументтер мен мәндер туралы қосымша ақпаратты құжаттаманың МҮЛГІЛЕР бөлімінде табуға болады Терең Павлов

Мысалда екі жолдың тізімі х аргументіне жіберілді, олардың әрқайсысына жеке белгілеу берілді. DeepPavlov-те барлық модельдер дербес өңделетін мәндердің тізімін (партиясын) кіріс ретінде қабылдайды.

«Пакет» термині машиналық оқыту саласына қатысты және бір уақытта алгоритм немесе нейрондық желі арқылы өңделетін тәуелсіз кіріс мәндерінің партиясын білдіреді. Бұл тәсіл кіріске бөлек берілген бірдей мәнмен салыстырғанда модельдің партияның бір элементін өңдеу уақытын қысқартуға (көбінесе айтарлықтай) мүмкіндік береді. Бірақ өңдеу нәтижесі барлық элементтер өңделгеннен кейін ғана шығарылады. Сондықтан, кіріс партиясын құру кезінде модельдің жылдамдығын және оның әрбір жеке элементі үшін қажетті өңдеу уақытын ескеру қажет болады.

Егер DeepPavlov моделіне бірнеше аргументтер болса, олардың әрқайсысы өз мәндер партиясын алады, ал шығу кезінде модель әрқашан жауаптардың бір партиясын шығарады. Шығатын партияның элементтері бірдей индексі бар кіріс партияларының элементтерін өңдеу нәтижелері болып табылады.

Жоғарыда келтірілген мысалда үлгінің нәтижесі әрбір жолды таңбалауыштарға (сөздер мен тыныс белгілері) бөлу және таңбалауышты ол көрсететін аталған нысанға (ұйым атауы, валюта) қатысты жіктеу болды. Қазіргі уақытта модель ner_ontonotes_bert_mult аталған нысандардың 18 түрін тануға қабілетті, толық сипаттамасын табуға болады осында.

ДипПавловтың басқа қораптан тыс үлгілері

NER-ге қосымша, жазбаны жазу кезінде DeepPavlov-та келесі қораптан тыс үлгілер бар:

Мәтіндік сұраққа жауап беру

Осы мәтіннің фрагменті арқылы мәтінге сұраққа жауап беріңіз. Үлгі конфигурациясы: squad_ru_bert_infer

Мысал сұрау:

{
  "context_raw": [
    "DeepPavlov разрабатывается лабораторией МФТИ.",
    "В юго-западной Руси стог жита оценен в 15 гривен."
  ],
  "question_raw": [
    "Кем разрабатывается DeepPavlov?",
    "Сколько стоил стог жита на Руси?"
  ]
}

нәтижесі:

[
  ["лабораторией МФТИ", 27, 31042.484375],
  ["15 гривен", 39, 1049.598876953125]
]

Қорлауды анықтау

Мәтін жіберілген адамға қорлаудың болуын анықтау (жазу кезінде – тек ағылшын тілі үшін). Үлгі конфигурациясы: insults_kaggle_conv_bert

Мысал сұрау:


{
  "x": [
    "Money talks, bullshit walks.",
    "You are not the brightest one."
  ]
}

нәтижесі:

[
  ["Not Insult"],
  ["Insult"]
]

Сезім талдауы

Мәтіндік сезімнің жіктелуі (жағымды, бейтарап, теріс). Үлгі конфигурациясы: rusentiment_elmo_twitter_cnn

Мысал сұрау:

{
  "x": [
    "Мне нравится библиотека DeepPavlov.",
    "Я слышал о библиотеке DeepPavlov.",
    "Меня бесят тролли и анонимусы."
  ]
}

нәтижесі:

[
  ["positive"],
  ["neutral"],
  ["negative"]
]

Парафразаны анықтау

Екі түрлі мәтіннің мағынасы бірдей екенін анықтау. Үлгі конфигурациясы: stand_paraphraser_kz

Сұраныс:

{
  "text_a": [
    "Город погружается в сон, просыпается Мафия.",
    "Президент США пригрозил расторжением договора с Германией."
  ],
  "text_b": [
    "Наступает ночь, все жители города пошли спать, а преступники проснулись.",
    "Германия не собирается поддаваться угрозам со стороны США."
  ]
}

нәтижесі:

[
  [1],
  [0]
]

Барлық дайын DeepPavlov үлгілерінің ағымдағы тізімін әрқашан табуға болады осында.

қорытынды

Бұл мақалада біз DeepPavlov API және қораптан тыс берілген кітапхананың кейбір мәтінді өңдеу мүмкіндіктерімен таныстық. Кез келген NLP тапсырмасы үшін тапсырманың пәндік аймағына (доменіне) сәйкес деректер жиынында модельді оқыту кезінде ең жақсы нәтижеге қол жеткізілетінін есте ұстаған жөн. Сонымен қатар, одан да көп модельдерді, негізінен, барлық жағдайларға үйрету мүмкін емес.

Келесі мақалаларда біз Docker-тен DeepPavlov-ты іске қоса отырып, кітапхананың қосымша параметрлерін қарастырамыз, содан кейін оқыту үлгілеріне көшеміз. ДипПавловта бар екенін ұмытпаңыз форум – кітапхана мен үлгілерге қатысты сұрақтарыңызды қойыңыз. Назарларыңызға рахмет!

Ақпарат көзі: www.habr.com

пікір қалдыру