DeepPavlov za programere: #1 NLP alati i kreiranje chatbota

Bok svima! Otvaramo seriju članaka posvećenih rješavanju praktičnih problema vezanih uz obradu prirodnog jezika (Natural Language Processing ili jednostavno NLP) i kreiranje agenata za dijalog (chatbot) pomoću knjižnice otvorenog koda DeepPavlov, koji razvija naš tim u MIPT Laboratoriju za neuronske sustave i duboko učenje. Glavni cilj serije je predstaviti DeepPavlov širokom spektru programera i pokazati kako možete riješiti primijenjene probleme NLP-a bez dubokog znanja o strojnom učenju i doktoratu matematike.

NLP zadaci uključuju određivanje osjećaja teksta, raščlanjivanje imenovanih entiteta, određivanje što sugovornik želi od vašeg bota: naručiti pizzu ili dobiti pozadinske informacije i još mnogo toga. Možete pročitati više o NLP zadacima i metodama ovdje.

U ovom ćemo vam članku pokazati kako pokrenuti REST poslužitelj s prethodno obučenim NLP modelima, spremnim za korištenje bez dodatne konfiguracije ili obuke.

DeepPavlov za programere: #1 NLP alati i kreiranje chatbota

Instalacija DeepPavlova

Ovdje i dolje bit će dane upute za Linux. Za Windows pogledajte naš dokumentacija

  • Stvorite i aktivirajte virtualno okruženje s trenutno podržanom verzijom Pythona:
    virtualelnv env -p python3.7
    source env/bin/activate
  • Instalirajte DeepPavlov u virtualnom okruženju:
    pip install deeppavlov
    

Pokretanje REST poslužitelja s modelom DeepPavlov

Prije nego što prvi put pokrenemo poslužitelj s modelom DeepPavlov, bilo bi korisno razgovarati o nekim značajkama arhitekture knjižnice.

Svaki model u DP-u sastoji se od:

  • Python kod;
  • Komponente koje se mogu preuzeti - serijalizirani rezultati obuke na određenim podacima (ugrađivanja, težine neuronskih mreža itd.);
  • Konfiguracijska datoteka (u daljnjem tekstu config), koja sadrži informacije o klasama koje koristi model, URL-ove preuzetih komponenti, ovisnosti o Pythonu itd.

Reći ćemo vam više o tome što se nalazi ispod haube DeepPavlova u sljedećim člancima, za sada nam je dovoljno znati da:

  • Svaki model u DeepPavlovu identificiran je imenom svoje konfiguracije;
  • Da biste pokrenuli model, morate preuzeti njegove komponente s poslužitelja DeepPavlov;
  • Također, da biste pokrenuli model, morate instalirati Python biblioteke koje koristi.

Prvi model koji ćemo pokrenuti bit će višejezično prepoznavanje imenovanih entiteta (NER). Model klasificira tekstualne riječi prema vrsti imenovanih entiteta kojima pripadaju (vlastita imena, zemljopisni nazivi, nazivi valuta i drugo). Naziv konfiguracije za najnoviju verziju NER-a:

ner_ontonotes_bert_mult

Pokrećemo REST poslužitelj s modelom:

  1. Instaliramo ovisnosti modela navedene u njegovoj konfiguraciji u aktivno virtualno okruženje:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Preuzmite komponente serijaliziranog modela s poslužitelja DeepPavlov:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Serializirane komponente bit će preuzete u početni direktorij DeepPavlov, koji se nalazi prema zadanim postavkama

    ~/.deeppavlov

    Prilikom preuzimanja, hash već preuzetih komponenti provjerava se s hashovima komponenti koje se nalaze na poslužitelju. Ako postoji podudaranje, preuzimanje se preskače i koriste se postojeće datoteke. Veličine preuzetih komponenti mogu u prosjeku varirati od 0.5 do 8 Gb, u nekim slučajevima dosežu 20 Gb nakon raspakiranja.

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

Kao rezultat izvršavanja ove naredbe, REST poslužitelj s modelom bit će pokrenut na portu 5005 glavnog računala (zadani port je 5000).

Nakon inicijalizacije modela, Swagger s API dokumentacijom i mogućnošću testiranja može se pronaći na URL-u http://127.0.0.1:5005. Testirajmo model slanjem na krajnju točku http://127.0.0.1:5005/model POST zahtjev sa sljedećim JSON sadržajem:

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

Kao odgovor trebali bismo primiti sljedeći 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"]
  ]
]

Koristeći ove primjere, analizirat ćemo DeepPavlov REST API.

API DeepPavlov

Svaki DeepPavlov model ima najmanje jedan ulazni argument. U REST API-ju, argumenti su imenovani, njihova imena su ključevi dolaznog rječnika. U većini slučajeva argument je tekst koji treba obraditi. Više informacija o argumentima i vrijednostima koje vraćaju modeli možete pronaći u odjeljku MODELI u dokumentaciji DeepPavlov

U primjeru je popis od dva niza proslijeđen argumentu x, od kojih je svaki dobio zasebnu oznaku. U DeepPavlovu, svi modeli uzimaju kao ulaz popis (seriju) vrijednosti koje se neovisno obrađuju.

Izraz "serija" odnosi se na polje strojnog učenja i odnosi se na seriju neovisnih ulaznih vrijednosti koje istovremeno obrađuje algoritam ili neuronska mreža. Ovaj vam pristup omogućuje smanjenje (često značajno) vremena koje model obrađuje jedan element serije u usporedbi s istom vrijednošću odvojeno proslijeđenom ulazu. Ali rezultat obrade izdaje se tek nakon što su svi elementi obrađeni. Stoga će pri generiranju ulazne serije biti potrebno voditi računa o brzini modela i potrebnom vremenu obrade za svaki njegov pojedinačni element.

Ako postoji više argumenata za DeepPavlov model, svaki od njih dobiva svoju skupinu vrijednosti, a na izlazu model uvijek proizvodi jednu skupinu odgovora. Elementi odlaznog paketa su rezultati obrade elemenata ulaznih paketa s istim indeksom.

U gornjem primjeru, rezultat modela bio je raščlanjivanje svakog niza na tokene (riječi i interpunkcijske znakove) i klasificiranje tokena u odnosu na imenovani entitet (naziv organizacije, valuta) koji predstavlja. Trenutno model ner_ontonotes_bert_mult sposoban prepoznati 18 vrsta imenovanih entiteta, detaljan opis se može pronaći ovdje.

Ostali gotovi modeli DeepPavlova

Uz NER, sljedeći modeli dostupni su u DeepPavlovu u vrijeme pisanja ovog teksta:

Odgovaranje na tekstualno pitanje

Odgovorite na pitanje teksta ulomkom ovog teksta. Konfiguracija modela: squad_ru_bert_infer

Primjer zahtjeva:

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

Rezultat:

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

Detekcija uvreda

Detekcija prisutnosti uvrede za osobu kojoj je tekst upućen (u trenutku pisanja - samo za engleski). Konfiguracija modela: insults_kaggle_conv_bert

Primjer zahtjeva:


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

Rezultat:

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

Analiza osjećaja

Klasifikacija sentimenta teksta (pozitivan, neutralan, negativan). Konfiguracija modela: rusentiment_elmo_twitter_cnn

Primjer zahtjeva:

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

Rezultat:

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

Detekcija parafraze

Utvrđivanje imaju li dva različita teksta isto značenje. Konfiguracija modela: stand_paraphraser_en

Zahtjev:

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

Rezultat:

[
  [1],
  [0]
]

Aktualni popis svih DeepPavlov modela izvan kutije uvijek se može pronaći здесь.

Zaključak

U ovom smo se članku upoznali s DeepPavlov API-jem i nekim od mogućnosti obrade teksta biblioteke koja se isporučuje iz kutije. Treba imati na umu da će se za bilo koji NLP zadatak najbolji rezultat postići treniranjem modela na skupu podataka koji odgovara predmetnom području (domeni) zadatka. Osim toga, još više modela se u načelu ne može osposobiti za sve situacije.

U sljedećim člancima ćemo pogledati dodatne postavke knjižnice, pokretanje DeepPavlova iz Dockera, a zatim ćemo prijeći na modele obuke. I ne zaboravite da DeepPavlov ima na forumu – postavite svoja pitanja u vezi s knjižnicom i modelima. Hvala na pozornosti!

Izvor: www.habr.com

Dodajte komentar