DeepPavlov kūrėjams: #1 NLP įrankiai ir pokalbių roboto kūrimas

Sveiki visi! Pradedame straipsnių seriją, skirtą praktinių problemų, susijusių su natūralios kalbos apdorojimu (Natural Language Processing arba tiesiog NLP) sprendimu ir dialogo agentų (pokalbių robotų) kūrimu naudojant atvirojo kodo biblioteką. Gilus Pavlovas, kurią kuria mūsų komanda MIPT Neuroninių sistemų ir giluminio mokymosi laboratorijoje. Pagrindinis serijos tikslas yra supažindinti DeepPavlov platų kūrėjų ratą ir parodyti, kaip galite išspręsti taikomąsias NLP problemas neturėdami gilių mašininio mokymosi žinių ir matematikos mokslų daktaro laipsnio.

NLP užduotys apima teksto nuotaikos nustatymą, įvardintų objektų analizę, nustatymą, ko pašnekovas nori iš jūsų roboto: užsisakyti picą ar gauti pagrindinės informacijos ir daug daugiau. Daugiau apie NLP užduotis ir metodus galite perskaityti čia.

Šiame straipsnyje parodysime, kaip paleisti REST serverį su iš anksto paruoštais NLP modeliais, paruoštais naudoti be jokios papildomos konfigūracijos ar mokymo.

DeepPavlov kūrėjams: #1 NLP įrankiai ir pokalbių roboto kūrimas

DeepPavlov montavimas

Čia ir toliau bus pateiktos Linux instrukcijos. Jei naudojate „Windows“, žr dokumentacija

  • Sukurkite ir suaktyvinkite virtualią aplinką naudodami dabartinę palaikomą Python versiją:
    virtualelnv env -p python3.7
    source env/bin/activate
  • Įdiekite „DeepPavlov“ virtualioje aplinkoje:
    pip install deeppavlov
    

REST serverio paleidimas naudojant DeepPavlov modelį

Prieš paleidžiant serverį su DeepPavlov modeliu pirmą kartą, bus naudinga pakalbėti apie kai kurias bibliotekos architektūros ypatybes.

Bet kurį DP modelį sudaro:

  • Python kodas;
  • Parsisiunčiami komponentai – nuoseklūs mokymo rezultatai pagal konkrečius duomenis (įterpimai, neuroninių tinklų svoriai ir kt.);
  • Konfigūracijos failas (toliau – konfigūracija), kuriame pateikiama informacija apie modelio naudojamas klases, atsisiųstų komponentų URL, Python priklausomybės ir kt.

Daugiau apie tai, kas yra po DeepPavlov gaubtu, papasakosime šiuose straipsniuose, kol kas mums pakanka žinoti:

  • Bet kuris DeepPavlov modelis identifikuojamas pagal konfigūracijos pavadinimą;
  • Norėdami paleisti modelį, turite atsisiųsti jo komponentus iš DeepPavlov serverių;
  • Be to, norėdami paleisti modelį, turite įdiegti jo naudojamas Python bibliotekas.

Pirmasis modelis, kurį pristatysime, bus daugiakalbis vardinių objektų atpažinimas (NER). Modelis klasifikuoja tekstinius žodžius pagal įvardintų objektų, kuriems jie priklauso, tipą (tikrieji vardai, geografiniai pavadinimai, valiutų pavadinimai ir kt.). Dabartinės naujausios NER versijos konfigūracijos pavadinimas:

ner_ontonotes_bert_mult

Paleidžiame REST serverį su modeliu:

  1. Į aktyvią virtualią aplinką įdiegiame jo konfigūracijoje nurodytas modelio priklausomybes:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Atsisiųskite serijinius modelio komponentus iš DeepPavlov serverių:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Serijiniai komponentai bus atsisiųsti į DeepPavlov namų katalogą, kuris yra pagal numatytuosius nustatymus

    ~/.deeppavlov

    Atsisiunčiant, jau atsisiųstų komponentų maišos yra tikrinamos su komponentų, esančių serveryje, maišais. Jei yra atitiktis, atsisiuntimas praleidžiamas ir naudojami esami failai. Atsisiunčiamų komponentų dydžiai gali svyruoti vidutiniškai nuo 0.5 iki 8 Gb, kai kuriais atvejais po išpakavimo gali siekti 20 Gb.

  3. Paleidžiame REST serverį su modeliu:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Vykdant šią komandą, pagrindinio kompiuterio 5005 prievade bus paleistas REST serveris su modeliu (numatytasis prievadas yra 5000).

Inicijuojus modelį, Swagger su API dokumentacija ir galimybe išbandyti galima rasti adresu URL http://127.0.0.1:5005. Išbandykime modelį nusiųsdami jį į galinį tašką http://127.0.0.1:5005/model POST užklausa su šiuo JSON turiniu:

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

Atsakydami turėtume gauti šį 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"]
  ]
]

Naudodamiesi šiais pavyzdžiais, mes analizuosime DeepPavlov REST API.

API DeepPavlov

Kiekvienas DeepPavlov modelis turi bent vieną įvesties argumentą. REST API argumentai yra pavadinti, jų pavadinimai yra gaunamo žodyno raktai. Daugeliu atvejų argumentas yra tekstas, kurį reikia apdoroti. Daugiau informacijos apie modelių grąžintus argumentus ir vertes rasite dokumentacijos skiltyje MODELIAI Gilus Pavlovas

Pavyzdyje argumentui x buvo perduotas dviejų eilučių sąrašas, kurių kiekvienai buvo suteiktas atskiras žymėjimas. „DeepPavlov“ visi modeliai kaip įvestį įveda verčių, kurios apdorojamos atskirai, sąrašą (partiją).

Terminas „paketas“ reiškia mašininio mokymosi sritį ir reiškia nepriklausomų įvesties reikšmių, kurias vienu metu apdoroja algoritmas arba neuroninis tinklas, paketą. Šis metodas leidžia sutrumpinti (dažnai žymiai) laiką, kurį modelis apdoroja vieną paketo elementą, palyginti su ta pačia verte, perduodama įvesties atskirai. Tačiau apdorojimo rezultatas išduodamas tik apdorojus visus elementus. Todėl, generuojant gaunamą partiją, reikės atsižvelgti į modelio greitį ir reikiamą apdorojimo laiką kiekvienam atskiram jo elementui.

Jei DeepPavlov modelio argumentai yra keli, kiekvienas iš jų gauna savo reikšmių paketą, o išvestyje modelis visada pateikia vieną atsakymų paketą. Išeinančios partijos elementai yra gaunamų paketų su tuo pačiu indeksu elementų apdorojimo rezultatai.

Aukščiau pateiktame pavyzdyje modelio rezultatas buvo suskaidyti kiekvieną eilutę į žetonus (žodžius ir skyrybos ženklus) ir suskirstyti žetoną pagal įvardytą objektą (organizacijos pavadinimą, valiutą), kurį ji atstovauja. Šiuo metu modelis ner_ontonotes_bert_mult galintis atpažinti 18 įvardintų subjektų tipų, galima rasti išsamų aprašymą čia.

Kiti „DeepPavlov“ modeliai

Be NER, rašymo metu DeepPavlov galimi šie jau paruošti modeliai:

Atsakymas į tekstinį klausimą

Atsakykite į klausimą į tekstą šio teksto fragmentu. Modelio konfigūracija: squad_ru_bert_infer

Prašymo pavyzdys:

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

Rezultatas:

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

Įžeidimo aptikimas

Asmens, kuriam skirtas tekstas, įžeidimo aptikimas (rašymo metu – tik anglų kalba). Modelio konfigūracija: insults_kaggle_conv_bert

Prašymo pavyzdys:


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

Rezultatas:

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

Sentimentų analizė

Teksto sentimentų klasifikacija (teigiamas, neutralus, neigiamas). Modelio konfigūracija: rusentiment_elmo_twitter_cnn

Prašymo pavyzdys:

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

Rezultatas:

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

Parafrazės aptikimas

Nustatyti, ar du skirtingi tekstai turi tą pačią reikšmę. Modelio konfigūracija: stand_paraphraser_lt

Prašymas:

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

Rezultatas:

[
  [1],
  [0]
]

Visuomet galite rasti dabartinį visų išimtų DeepPavlov modelių sąrašą čia.

išvada

Šiame straipsnyje susipažinome su DeepPavlov API ir kai kuriomis bibliotekos teikiamomis teksto apdorojimo galimybėmis. Reikėtų nepamiršti, kad atliekant bet kurią NLP užduotį geriausias rezultatas bus pasiektas treniruojant modelį duomenų rinkinyje, atitinkančiame užduoties dalykinę sritį (domeną). Be to, dar daugiau modelių iš principo negali būti apmokyti visoms situacijoms.

Tolesniuose straipsniuose apžvelgsime papildomus bibliotekos nustatymus, paleisdami DeepPavlov iš Docker, o tada pereisime prie mokymo modelių. Ir nepamirškite, kad DeepPavlov turi forumas – užduokite klausimus apie biblioteką ir modelius. Ačiū už dėmesį!

Šaltinis: www.habr.com

Добавить комментарий