DeepPavlov za razvijalce: #1 orodja za NLP in razvoj klepetalnih robotov

Pozdravljeni vsi! Odprli smo cikel člankov, posvečenih reševanju praktičnih nalog, povezanih z obdelavo naravnega jezika (Natural Language Processing ali preprosto NLP) in ustvarjanjem dialognih agentov (klepetalnih robotov) s pomočjo odprtokodne knjižnice DeepPavlov, ki jo razvija naša ekipa laboratorija nevronov in globokega učenja na MFTI. Glavni cilj cikla je seznaniti širok spekter razvijalcev z DeepPavlov in pokazati, kako lahko rešujemo aplikativne naloge NLP, ne da bi pri tem imeli globoke znanje strojnega učenja ali doktorat iz matematike.

NLP naloge vključujejo določanje tonality besedila, razpoznavanje imenovanih entitet, ugotavljanje, kaj od vašega robota želi sogovornik: naročiti pico ali pridobiti informacije in še več. Več o nalogah in metodah NLP lahko preberete tukaj.

V tem članku bomo razložili, kako zagnati REST strežnik s predhodno usposobljenimi modeli NLP, ki so pripravljeni za uporabo brez dodatnega nastavitev ali učenja.

DeepPavlov za razvijalce: #1 orodja za NLP in razvoj klepetalnih robotov

Namestitev DeepPavlova

Tukaj in naprej bodo podana navodila za Linux. Za Windows si oglejte našo dokumentacijo

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

Zagon REST strežnika z modelom DeepPavlov

Preden prvič zaženemo strežnik z modelom DeepPavlov, bo koristno, da predstavimo nekatere značilnosti arhitekture knjižnice.

Vsak model v DP je sestavljen iz:

  • Koda v Pythonu;
  • Prenesenih komponent — serializirani rezultati usposabljanja na specifičnih podatkih (embeddingi, teže nevronskih mrež itd.);
  • Konfiguracijske datoteke (nadalje — konfig), v kateri so informacije o razredih modela, URL-ji prenesenih komponent, odvisnostih Pythona itd.

Več o tem, kaj se skriva v ozadju DeepPavlova, bomo razpravljali v naslednjih člankih, zaenkrat pa nam je dovolj, da vemo:

  • Vsak model v DeepPavlov se identificira z imenom svojega konfiga;
  • Za zagon modela je potrebno prenesti njegove komponente s strežnikov DeepPavlov;
  • Prav tako je za zagon modela potrebno namestiti knjižnice Python, ki jih uporablja.

Prva modela koju ćemo pokrenuti biće višejezična Named Entity Recognition (NER). Model klasifikuje reči u tekstu prema tipu imenovanih entiteta kojima pripadaju (imena, geografska imena, nazivi valuta i drugi). Ime konfiguracije za najnoviju verziju NER:

ner_ontonotes_bert_mult

Pokrećemo REST server s modelom:

  1. Instaliramo zavisnosti modela navedene u njegovoj konfiguraciji u aktivnom virtuelnom okruženju:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Preuzimamo serializovane komponente modela sa DeepPavlov servera:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Serializovane komponente će biti preuzete u domaći direktorijum DeepPavlov-a, koji se po default-u nalazi

    ~/ .deeppavlov

    Tokom preuzimanja, heš već preuzetih komponenti se proverava sa hešovima komponenti koje se nalaze na serveru. U slučaju podudaranja, preuzimanje se preskoči i koriste se već postojeći fajlovi. Veličine preuzetih komponenata mogu varirati u proseku od 0.5 do 8 Gb, a u nekim slučajevima nakon raspakivanja dostižu 20 Gb.

  3. Pokrećemo REST server s modelom:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Kao rezultat izvršavanja ove komande biće pokrenut REST server sa modelom na 5005 portu host mašine (podrazumevani port je 5000).

Nakon inicijalizacije modela, Swagger sa dokumentacijom API i mogućnošću testiranja moći će se pronaći na URL-u http://127.0.0.1:5005. Testiraćemo model slanjem na endpoint http://127.0.0.1:5005/model POST zahtev sa sledećim JSON sadržajem:

{
  "x": [
    "U MFTI se može doći električkom vozom sa Savjolovskog Vokzala.",
    "U jugozapadnoj Rusiji stog žita procenjen je na 15 grivni"
  ]
}

U odgovoru treba da dobijemo ovakav JSON:

[
  [
    ["U", "MFTI", "se", "može", "doći", "električkom", "vozom", "sa", "Savjolovskog", "Vokzala", "."],
    ["O", "B-FAC", "O", "O", "O", "O", "O", "B-FAC", "I-FAC", "O"]
  ],
  [
    ["U", "jugozapadnoj", "Rusiji", "stog", "žita", "procenjen", "je", "na", "15", "grivni"],
    ["O", "B-LOC", "I-LOC", "I-LOC", "I-LOC", "O", "O", "O", "O", "B-MONEY", "I-MONEY"]
  ]
]

Na ovim primerima razmotrićemo REST API DeepPavlov.

API DeepPavlov

Svaki model DeepPavlov ima barem jedan ulazni argument. U REST API-ju, argumenti su imenovani, njihova imena su ključevi ulaznog rečnika. U većini slučajeva, argument je tekst koji treba obraditi. Više informacija o argumentima i vrednostima koje modeli vraćaju može se naći u odeljku MODEL-a dokumentacije. DeepPavlov

V primeru je bila v argument x posredovana lista dveh nizov, za vsak od katerih je bila izdana ločena razporeditev. V DeepPavlov vse modele sprejemajo seznam (batch) vrednosti, ki se obdelujejo neodvisno.

Termin “batch” se nanaša na področje strojnega učenja in pomeni paket neodvisnih vhodnih vrednosti, ki jih algoritem ali nevronska mreža obdeluje hkrati. Ta pristop omogoča znatno zmanjšanje časa obdelave enega elementa v batchu v primerjavi s tem, ko je ta vrednost posredovana ločeno. Vendar pa se rezultat obdelave doseže šele po obdelavi vseh elementov. Zato bo pri oblikovanju vhodnega batcha potrebno upoštevati hitrost delovanja modela in zahtevano časovno obdobje obdelave vsakega njegovega posameznega elementa.

V primeru, da ima model DeepPavlov več argumentov, se v vsak od njih posreduje svoj batch vrednosti, na izhodu pa model vedno izdaja en batch odgovorov. Elementi izhajajočega batcha so rezultati obdelave elementov vhodnih batchov z enakim indeksom.

V prikazanem primeru je bil rezultat delovanja modela razdelitev vsakega niza na tokene (besede in ločila) ter klasifikacija tokena glede na poimenovano entiteto (ime organizacije, valuta), ki jo predstavlja. Trenutno model ner_ontonotes_bert_mult zmore prepoznati 18 vrst poimenovanih entitet, podroben opis pa je mogoče najti tukaj.

Druge out-of-the-box modele DeepPavlov

Poleg NER so v DeepPavlov ob času pisanja članka na voljo naslednji out-of-the-box modeli:

Text Question Answering

Odgovor na vprašanje k besedilu z delom tega besedila. Konfiguracija modela: squad_ru_bert_infer

Primer zahteve:

{
  "context_raw": [
    "DeepPavlov razvija laboratorij MIPT.",
    "Na jugozahodni Rusiji je bil kup žita ocenjen na 15 grivn.
  ],
  "question_raw": [
    "Kdo razvija DeepPavlov?",
    "Koliko je stala kup žita v Rusiji?"
  ]
}

Rezultat:

[
  ["laboratorij MIPT", 27, 31042.484375],
  ["15 grivn", 39, 1049.598876953125]
]

Insult Detection

Ugotavljanje prisotnosti žaljivke osebi, kateri je besedilo namenjeno (ob času pisanja članka - le 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"]
]

Sentiment Analysis

Klasifikacija tonalitete besedila (pozitivna, nevtralna, negativna). Konfiguracija modela: rusentiment_elmo_twitter_cnn

Primer zahteve:

{
  "x": [
    "Všechny knihovny DeepPavlov se mi líbí.",
    "Slyšel jsem o knihovně DeepPavlov.",
    "Otravují mě trollové a anonymové."
  ]
}

Rezultat:

[
  ["pozitivní"],
  ["neutrální"],
  ["negativní"]
]

Detekce parafrází

Určení, zda mají dva různé texty stejný význam. Konfigurace modelu: stand_paraphraser_ru

Dotaz:

{
  "text_a": [
    "Město upadá do spánku, probouzí se mafie.",
    "Prezident USA pohrozil vypovězením smlouvy s Německem."
  ],
  "text_b": [
    "Nastává noc, všichni obyvatelé města šli spát, a zločinci se probudili.",
    "Německo se nehodlá podvolit hrozbám USA."
  ]
}

Rezultat:

[
  [1],
  [0]
]

Aktuální seznam všech out-of-the-box modelů DeepPavlov lze vždy nalézt ovde.

Zaključek

V tomto článku jsme se seznámili s API DeepPavlov a některými možnostmi knihovny pro zpracování textu, které jsou poskytovány "z krabice". Je třeba mít na paměti, že pro jakýkoliv úkol NLP bude nejlepšího výsledku dosaženo trénováním modelu na datovém souboru odpovídajícím oblasti tématu (doméně) úkolu. Kromě toho není možné přetrénovat ještě více modelů na všechny možné situace.

V následujících článcích se podíváme na další nastavení knihovny, spuštění DeepPavlov z Dockeru, a poté se přesuneme k trénování modelů. A nezapomeňte, že DeepPavlov má forum – kladte své dotazy ohledně knihovny a modelů. Děkujeme za pozornost!

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster