DeepPavlov za razvijalce: #1 NLP orodja in ustvarjanje chatbotov

Pozdravljeni vsi skupaj! Odpiramo serijo člankov, posvečenih reševanju praktičnih problemov, povezanih z obdelavo naravnega jezika (Natural Language Processing ali preprosto NLP) in ustvarjanju pogovornih agentov (chatbotov) z uporabo odprtokodne knjižnice DeepPavlov, ki ga razvija naša ekipa v Laboratoriju za nevronske sisteme in globoko učenje MIPT. Glavni cilj serije je predstaviti DeepPavlov širokemu krogu razvijalcev in pokazati, kako lahko rešite uporabne probleme NLP brez poglobljenega znanja o strojnem učenju in doktoratu iz matematike.

Naloge NLP vključujejo določanje sentimenta besedila, razčlenjevanje poimenovanih entitet, določanje, kaj sogovornik želi od vašega bota: naroči pico ali pridobi osnovne informacije in še veliko več. Več o NLP nalogah in metodah si lahko preberete tukaj.

V tem članku vam bomo pokazali, kako zagnati strežnik REST z vnaprej usposobljenimi modeli NLP, ki so pripravljeni za uporabo brez dodatne konfiguracije ali usposabljanja.

DeepPavlov za razvijalce: #1 NLP orodja in ustvarjanje chatbotov

Namestitev DeepPavlov

Tukaj in spodaj bodo podana navodila za Linux. Za Windows glejte naše dokumentacijo

  • Ustvarite in aktivirajte virtualno okolje s trenutno podprto različico Pythona:
    virtualelnv env -p python3.7
    source env/bin/activate
  • Namestite DeepPavlov v virtualnem okolju:
    pip install deeppavlov
    

Zagon strežnika REST z modelom DeepPavlov

Preden prvič zaženemo strežnik z modelom DeepPavlov, bo koristno spregovoriti o nekaterih značilnostih arhitekture knjižnice.

Vsak model v DP je sestavljen iz:

  • koda Python;
  • Prenosljive komponente - serijski rezultati usposabljanja na določenih podatkih (vdelave, uteži nevronskih mrež itd.);
  • Konfiguracijska datoteka (v nadaljnjem besedilu config), ki vsebuje informacije o razredih, ki jih uporablja model, URL-jih prenesenih komponent, odvisnostih Pythona itd.

Več o tem, kaj je pod pokrovom DeepPavlov, vam bomo povedali v naslednjih člankih, za zdaj pa je dovolj, da vemo, da:

  • Vsak model v DeepPavlov je identificiran z imenom njegove konfiguracije;
  • Za zagon modela morate njegove komponente prenesti s strežnikov DeepPavlov;
  • Poleg tega morate za zagon modela namestiti knjižnice Python, ki jih uporablja.

Prvi model, ki ga bomo lansirali, bo večjezično prepoznavanje imenovanih entitet (NER). Model razvršča besedilne besede glede na vrsto poimenovanih entitet, ki jim pripadajo (lastna imena, zemljepisna imena, imena valut in drugo). Ime konfiguracije za trenutno najnovejšo različico NER:

ner_ontonotes_bert_mult

Strežnik REST zaženemo z modelom:

  1. V aktivno virtualno okolje namestimo odvisnosti modela, navedene v njegovi konfiguraciji:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Prenesite komponente serializiranega modela s strežnikov DeepPavlov:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Serializirane komponente bodo prenesene v domači imenik DeepPavlov, ki se nahaja privzeto

    ~/.deeppavlov

    Pri prenosu se zgoščenost že prenesenih komponent primerja z zgoščenostjo komponent, ki se nahajajo na strežniku. Če obstaja ujemanje, se prenos preskoči in uporabijo se obstoječe datoteke. Velikosti prenesenih komponent se lahko v povprečju razlikujejo od 0.5 do 8 Gb, v nekaterih primerih dosežejo 20 Gb po razpakiranju.

  3. Strežnik REST zaženemo z modelom:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Kot rezultat izvedbe tega ukaza bo strežnik REST z modelom zagnan na vratih 5005 gostiteljskega računalnika (privzeta vrata so 5000).

Po inicializaciji modela lahko Swagger z dokumentacijo API-ja in zmožnostjo testiranja najdete na naslovu URL http://127.0.0.1:5005. Preizkusimo model tako, da ga pošljemo na končno točko http://127.0.0.1:5005/model Zahteva POST z naslednjo vsebino JSON:

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

Kot odgovor bi morali prejeti naslednji 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"]
  ]
]

Z uporabo teh primerov bomo analizirali API DeepPavlov REST.

API DeepPavlov

Vsak model DeepPavlov ima vsaj en vhodni argument. V REST API so argumenti poimenovani, njihova imena so ključi dohodnega slovarja. V večini primerov je argument besedilo, ki ga je treba obdelati. Več informacij o argumentih in vrednostih, ki jih vrnejo modeli, najdete v razdelku MODELI v dokumentaciji DeepPavlov

V primeru je bil argumentu x posredovan seznam dveh nizov, od katerih je vsak dobil ločeno oznako. V DeepPavlovu vsi modeli vzamejo kot vhod seznam (paket) vrednosti, ki se obdelujejo neodvisno.

Izraz "serija" se nanaša na področje strojnega učenja in se nanaša na serijo neodvisnih vhodnih vrednosti, ki jih hkrati obdeluje algoritem ali nevronska mreža. Ta pristop vam omogoča, da skrajšate (pogosto znatno) čas, ko model obdeluje en element paketa v primerjavi z isto vrednostjo, ki je ločeno posredovana vhodu. Toda rezultat obdelave se izda šele, ko so vsi elementi obdelani. Zato bo treba pri generiranju dohodnega paketa upoštevati hitrost modela in potreben čas obdelave vsakega njegovega posameznega elementa.

Če je več argumentov modela DeepPavlov, vsak od njih prejme svoj paket vrednosti, na izhodu pa model vedno proizvede en paket odgovorov. Elementi odhodnega paketa so rezultati obdelave elementov dohodnih paketov z istim indeksom.

V zgornjem primeru je bil rezultat modela razčlenitev vsakega niza na žetone (besede in ločila) in razvrstitev žetona glede na imenovano entiteto (ime organizacije, valuta), ki jo predstavlja. Trenutno model ner_ontonotes_bert_mult je sposoben prepoznati 18 vrst poimenovanih entitet, podroben opis najdete tukaj.

Drugi že pripravljeni modeli DeepPavlov

Poleg NER so v DeepPavlovu v času pisanja na voljo naslednji modeli, ki so že pripravljeni:

Odgovarjanje na besedilno vprašanje

Odgovorite na vprašanje besedila z odlomkom tega besedila. Konfiguracija modela: squad_ru_bert_infer

Primer zahteve:

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

Rezultat:

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

Zaznavanje žalitev

Zaznavanje prisotnosti žalitve osebe, ki ji je besedilo namenjeno (v času pisanja - samo za angleščino). Konfiguracija modela: insults_kaggle_conv_bert

Primer zahteve:


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

Rezultat:

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

Analiza občutka

Razvrstitev sentimenta besedila (pozitivno, nevtralno, negativno). Konfiguracija modela: rusentiment_elmo_twitter_cnn

Primer zahteve:

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

Rezultat:

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

Odkrivanje parafraze

Ugotavljanje, ali imata dve različni besedili enak pomen. Konfiguracija modela: stand_paraphraser_ru

Zahteva:

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

Rezultat:

[
  [1],
  [0]
]

Trenutni seznam vseh že pripravljenih modelov DeepPavlov lahko vedno najdete tukaj.

Zaključek

V tem članku smo se seznanili z API-jem DeepPavlov in nekaterimi zmožnostmi obdelave besedila knjižnice, ki je na voljo takoj. Zavedati se je treba, da bo za katero koli NLP nalogo najboljši rezultat dosežen, če bomo model učili na podatkovnem nizu, ki ustreza predmetnemu področju (domeni) naloge. Poleg tega še več modelov načeloma ni mogoče usposobiti za vse situacije.

V naslednjih člankih si bomo ogledali dodatne nastavitve knjižnice, zagon DeepPavlov iz Dockerja, nato pa bomo prešli na modele usposabljanja. In ne pozabite, da ima DeepPavlov forum – postavite vprašanja o knjižnici in modelih. Hvala za vašo pozornost!

Vir: www.habr.com

Dodaj komentar