DeepPavlov arendajatele: #1 NLP tööriistad ja vestlusrobotite loomine

Tere kõigile! Avame artiklite sarja, mis on pühendatud loomuliku keele töötlemisega (loomuliku keele töötlemine või lihtsalt NLP) seotud praktiliste probleemide lahendamisele ja avatud lähtekoodiga teegi abil dialoogiagentide (vestlusbotite) loomisele. Sügav Pavlov, mida arendab meie meeskond MIPT närvisüsteemide ja süvaõppe laboris. Sarja põhieesmärk on tutvustada DeepPavlovit laiale ringile arendajatele ja näidata, kuidas saate lahendada rakenduslikke NLP probleeme ilma sügavate teadmisteta masinõppes ja doktorikraadita matemaatikas.

NLP-ülesannete hulka kuulub teksti sentimentide määramine, nimega üksuste sõelumine, vestluspartneri teie robotilt soovide määramine: pitsa tellimine või taustateabe hankimine ja palju muud. Täpsemalt saab lugeda NLP ülesannete ja meetodite kohta siin.

Selles artiklis näitame teile, kuidas käitada REST-serverit eelkoolitatud NLP-mudelitega, mis on kasutusvalmis ilma täiendava konfiguratsiooni või koolituseta.

DeepPavlov arendajatele: #1 NLP tööriistad ja vestlusrobotite loomine

DeepPavlovi paigaldamine

Siin ja allpool antakse juhised Linuxi jaoks. Windowsi jaoks vaadake meie dokumentatsioon

  • Looge ja aktiveerige virtuaalne keskkond Pythoni praeguse toetatud versiooniga:
    virtualelnv env -p python3.7
    source env/bin/activate
  • Installige DeepPavlov virtuaalsesse keskkonda:
    pip install deeppavlov
    

REST-serveri käivitamine DeepPavlovi mudeliga

Enne DeepPavlovi mudeliga serveri esmakordset käivitamist on kasulik rääkida mõnest raamatukogu arhitektuuri funktsioonist.

Iga DP mudel koosneb:

  • Pythoni kood;
  • Allalaaditavad komponendid - jadapõhised treeningtulemused konkreetsetel andmetel (manused, närvivõrkude kaalud jne);
  • Konfiguratsioonifail (edaspidi konfiguratsioon), mis sisaldab teavet mudelis kasutatavate klasside, allalaaditud komponentide URL-ide, Pythoni sõltuvuste jms kohta.

Sellest, mis DeepPavlovi kapoti all on, räägime teile lähemalt järgmistes artiklites, praegu piisab meile sellest, kui teaksime:

  • Kõik mudelid DeepPavlovis tuvastatakse selle konfiguratsiooni nime järgi;
  • Mudeli käitamiseks peate selle komponendid DeepPavlovi serveritest alla laadima;
  • Mudeli käitamiseks peate installima ka Pythoni teegid, mida see kasutab.

Esimene mudel, mille käivitame, on mitmekeelne nimega üksuse tuvastamine (NER). Mudel liigitab tekstisõnad vastavalt sellele, mis tüüpi nimega üksustesse need kuuluvad (pärisnimed, geograafilised nimed, valuutade nimed ja muud). NER-i praeguse uusima versiooni konfiguratsiooninimi:

ner_ontonotes_bert_mult

Käivitame REST-serveri mudeliga:

  1. Installime selle konfiguratsioonis määratud mudelisõltuvused aktiivsesse virtuaalkeskkonda:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Laadige alla DeepPavlovi serveritest seeriaviisilised mudelikomponendid:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Serialiseeritud komponendid laaditakse alla DeepPavlovi kodukataloogi, mis asub vaikimisi

    ~/.deeppavlov

    Allalaadimisel kontrollitakse juba allalaaditud komponentide räsi serveris asuvate komponentide räsidega. Sobivuse korral jäetakse allalaadimine vahele ja kasutatakse olemasolevaid faile. Allalaaditud komponentide suurus võib varieeruda keskmiselt 0.5–8 Gb, mõnel juhul ulatudes pärast lahtipakkimist 20 Gb-ni.

  3. Käivitame REST-serveri mudeliga:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Selle käsu täitmise tulemusena käivitatakse hostmasina pordis 5005 mudeliga REST-server (vaikimisi port on 5000).

Pärast mudeli lähtestamist leiate Swaggeri koos API dokumentatsiooni ja testimisvõimalusega URL-ilt http://127.0.0.1:5005. Testime mudelit, saates selle lõpp-punkti http://127.0.0.1:5005/model POSTITUStaotlus järgmise JSON-sisuga:

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

Vastuseks peaksime saama järgmise JSON-i:

[
  [
    ["В", "МФТИ", "можно", "добраться", "на", "электричке", "с", "Савёловского", "Вокзала", "."],
    ["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"]
  ]
]

Nende näidete abil analüüsime DeepPavlov REST API-t.

API DeepPavlov

Igal DeepPavlovi mudelil on vähemalt üks sisendargument. REST API-s on argumendid nimed, nende nimed on sissetuleva sõnastiku võtmed. Enamasti on argumendiks tekst, mida tuleb töödelda. Lisateavet mudelite poolt tagastatud argumentide ja väärtuste kohta leiate dokumentatsiooni jaotisest MUDELID Sügav Pavlov

Näites anti kahest stringist koosnev loend argumendile x, millest igaühele anti eraldi märgistus. DeepPavlovis võtavad kõik mudelid sisendiks loendi (partii) väärtustest, mida töödeldakse iseseisvalt.

Mõiste "partii" viitab masinõppe valdkonnale ja viitab sõltumatute sisendväärtuste partiile, mida töötleb algoritm või närvivõrk samaaegselt. See lähenemine võimaldab teil vähendada (sageli oluliselt) aega, mille jooksul mudel töötleb üht partii elementi, võrreldes sama väärtusega, mis edastatakse sisendisse eraldi. Kuid töötlemise tulemus väljastatakse alles pärast kõigi elementide töötlemist. Seetõttu on sissetuleva partii loomisel vaja arvestada mudeli kiirust ja iga selle üksiku elemendi jaoks vajalikku töötlemisaega.

Kui DeepPavlovi mudelil on mitu argumenti, saab igaüks neist oma väärtuste partii ja väljundis annab mudel alati ühe partii vastuseid. Väljamineva partii elemendid on sama indeksiga sissetulevate partiide elementide töötlemise tulemused.

Ülaltoodud näites oli mudeli tulemuseks iga string jagamine märkideks (sõnadeks ja kirjavahemärkideks) ning märgi liigitamine nimetatud olemi (organisatsiooni nimi, valuuta) suhtes, mida see esindab. Hetkel mudel ner_ontonotes_bert_mult mis suudab ära tunda 18 tüüpi nimega üksusi, leiate üksikasjaliku kirjelduse siin.

Teised DeepPavlovi karbist valmistatud mudelid

Lisaks NER-ile on DeepPavlovis selle kirjutamise ajal saadaval järgmised kasutusvalmis mudelid:

Tekst Küsimusele vastamine

Vastake küsimusele teksti fragmendiga sellest tekstist. Mudeli konfiguratsioon: squad_ru_bert_infer

Taotluse näidis:

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

Tulemus:

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

Solvamise tuvastamine

Isiku solvangu tuvastamine, kellele tekst on adresseeritud (kirjutamise ajal - ainult inglise keeles). Mudeli konfiguratsioon: insults_kaggle_conv_bert

Taotluse näidis:


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

Tulemus:

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

Sentimentide analüüs

Teksti sentimentide klassifikatsioon (positiivne, neutraalne, negatiivne). Mudeli konfiguratsioon: rusentiment_elmo_twitter_cnn

Taotluse näidis:

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

Tulemus:

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

Parafraaside tuvastamine

Määrake, kas kahel erineval tekstil on sama tähendus. Mudeli konfiguratsioon: stand_paraphraser_et

Taotlus:

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

Tulemus:

[
  [1],
  [0]
]

Kõikide karbist väljasolevate DeepPavlovi mudelite jooksva nimekirja leiate alati siin.

Järeldus

Selles artiklis tutvusime DeepPavlov API-ga ja mõne komplekti kuuluva teegi tekstitöötlusvõimalusega. Tuleb meeles pidada, et iga NLP ülesande puhul saavutatakse parim tulemus mudeli treenimisel ülesande ainevaldkonnale (domeenile) vastaval andmekogumil. Lisaks ei saa põhimõtteliselt kõikideks olukordadeks treenida isegi rohkem mudeleid.

Järgmistes artiklites vaatleme teegi lisaseadeid, käivitades Dockerist DeepPavlovi, ja seejärel liigume edasi koolitusmudelite juurde. Ja ärge unustage, et DeepPavlovil on foorum – esitage oma küsimusi raamatukogu ja mudelite kohta. Täname tähelepanu eest!

Allikas: www.habr.com

Lisa kommentaar