DeepPavlov izstrādātājiem: #1 NLP rīki un tērzēšanas robotu izveide

Sveiki visiem! Mēs atklājam rakstu sēriju, kas veltīta praktisku problēmu risināšanai, kas saistītas ar dabiskās valodas apstrādi (Natural Language Processing vai vienkārši NLP) un dialoga aģentu (tērzēšanas robotu) izveidi, izmantojot atvērtā koda bibliotēku. Dziļi Pavlovs, ko izstrādā mūsu komanda MIPT neironu sistēmu un dziļās mācīšanās laboratorijā. Sērijas galvenais mērķis ir iepazīstināt DeepPavlovu plašu izstrādātāju loku un parādīt, kā jūs varat atrisināt lietišķās NLP problēmas bez dziļām zināšanām mašīnmācībā un doktora grāda matemātikā.

NLP uzdevumi ietver teksta noskaņojuma noteikšanu, nosaukto entītiju parsēšanu, sarunu partnera noteikšanu no jūsu robotprogrammatūras: pasūtiet picu vai iegūstiet fona informāciju un daudz ko citu. Jūs varat lasīt vairāk par NLP uzdevumiem un metodēm šeit.

Šajā rakstā mēs parādīsim, kā palaist REST serveri ar iepriekš apmācītiem NLP modeļiem, kas ir gatavi lietošanai bez papildu konfigurācijas vai apmācības.

DeepPavlov izstrādātājiem: #1 NLP rīki un tērzēšanas robotu izveide

DeepPavlov uzstādīšana

Šeit un tālāk tiks sniegti norādījumi par Linux. Operētājsistēmā Windows skatiet mūsu dokumentācija

  • Izveidojiet un aktivizējiet virtuālo vidi ar pašreizējo atbalstīto Python versiju:
    virtualelnv env -p python3.7
    source env/bin/activate
  • Instalējiet DeepPavlov virtuālajā vidē:
    pip install deeppavlov
    

REST servera palaišana ar DeepPavlov modeli

Pirms mēs pirmo reizi palaižam serveri ar DeepPavlov modeli, būs noderīgi runāt par dažām bibliotēkas arhitektūras iezīmēm.

Jebkurš DP modelis sastāv no:

  • Python kods;
  • Lejupielādējamie komponenti - seriāli sagatavoti treniņu rezultāti uz konkrētiem datiem (iegulumi, neironu tīklu svari u.c.);
  • Konfigurācijas fails (turpmāk tekstā — konfigurācija), kurā ir informācija par modeļa izmantotajām klasēm, lejupielādēto komponentu URL, Python atkarībām utt.

Vairāk par to, kas atrodas zem DeepPavlova pārsega, pastāstīsim turpmākajos rakstos, pagaidām mums pietiek ar to zināt:

  • Jebkurš DeepPavlov modelis tiek identificēts pēc tā konfigurācijas nosaukuma;
  • Lai palaistu modeli, jums ir jālejupielādē tā komponenti no DeepPavlov serveriem;
  • Turklāt, lai palaistu modeli, ir jāinstalē tajā izmantotās Python bibliotēkas.

Pirmais modelis, ko laidīsim klajā, būs daudzvalodu Named Entity Recognition (NER). Modelis klasificē teksta vārdus pēc nosaukto entītiju veida, pie kurām tie pieder (īpašvārdi, ģeogrāfiskie nosaukumi, valūtu nosaukumi un citi). Pašreizējās jaunākās NER versijas konfigurācijas nosaukums:

ner_ontonotes_bert_mult

Mēs palaižam REST serveri ar modeli:

  1. Mēs instalējam tā konfigurācijā norādītās modeļa atkarības aktīvajā virtuālajā vidē:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Lejupielādējiet sērijveida modeļa komponentus no DeepPavlov serveriem:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Serializētie komponenti tiks lejupielādēti DeepPavlov mājas direktorijā, kas atrodas pēc noklusējuma

    ~/.deeppavlov

    Lejupielādējot, jau lejupielādēto komponentu jaucējvērtība tiek salīdzināta ar serverī esošo komponentu jaucējvērtībām. Ja tiek atrasta atbilstība, lejupielāde tiek izlaista un tiek izmantoti esošie faili. Lejupielādēto komponentu izmēri var svārstīties vidēji no 0.5 līdz 8 Gb, dažos gadījumos sasniedzot 20 Gb pēc izsaiņošanas.

  3. Mēs palaižam REST serveri ar modeli:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Šīs komandas izpildes rezultātā uz saimniekdatora porta 5005 tiks palaists REST serveris ar modeli (noklusējuma ports ir 5000).

Pēc modeļa inicializācijas Swagger ar API dokumentāciju un testēšanas iespēju var atrast vietnē URL http://127.0.0.1:5005. Pārbaudīsim modeli, nosūtot to galapunktam http://127.0.0.1:5005/model POST pieprasījums ar šādu JSON saturu:

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

Atbildot uz to, mums vajadzētu saņemt šādu 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"]
  ]
]

Izmantojot šos piemērus, mēs analizēsim DeepPavlov REST API.

API DeepPavlov

Katram DeepPavlov modelim ir vismaz viens ievades arguments. REST API argumenti tiek nosaukti, to nosaukumi ir ienākošās vārdnīcas atslēgas. Vairumā gadījumu arguments ir teksts, kas ir jāapstrādā. Plašāku informāciju par modeļu atgrieztajiem argumentiem un vērtībām var atrast dokumentācijas sadaļā MODEĻI Dziļi Pavlovs

Piemērā argumentam x tika nodots divu virkņu saraksts, katrai no kurām tika piešķirts atsevišķs marķējums. Programmā DeepPavlov visi modeļi kā ievadi izmanto vērtību sarakstu (partiju), kas tiek apstrādātas neatkarīgi.

Termins “pakete” attiecas uz mašīnmācības jomu un attiecas uz neatkarīgu ievades vērtību kopumu, ko vienlaikus apstrādā algoritms vai neironu tīkls. Šī pieeja ļauj samazināt (bieži vien ievērojami) laiku, kad modelis apstrādā vienu partijas elementu, salīdzinot ar to pašu vērtību, kas tiek nodota ievadei atsevišķi. Bet apstrādes rezultāts tiek izsniegts tikai pēc visu elementu apstrādes. Tāpēc, ģenerējot ienākošo partiju, būs jāņem vērā modeļa ātrums un nepieciešamais apstrādes laiks katram atsevišķam tā elementam.

Ja DeepPavlova modelim ir vairāki argumenti, katrs no tiem saņem savu vērtību partiju, un izejā modelis vienmēr rada vienu atbilžu partiju. Izejošās partijas elementi ir ienākošo partiju elementu apstrādes rezultāti ar vienādu indeksu.

Iepriekš minētajā piemērā modeļa rezultāts bija sadalīt katru virkni marķieros (vārdos un pieturzīmēs) un klasificēt marķieri attiecībā pret nosaukto entītiju (organizācijas nosaukumu, valūtu), ko tā pārstāv. Šobrīd modelis ner_ontonotes_bert_mult kas spēj atpazīt 18 nosaukto entītiju veidus, var atrast detalizētu aprakstu šeit.

Citi DeepPavlov gatavie modeļi

Papildus NER, rakstīšanas laikā DeepPavlov ir pieejami šādi sākotnējie modeļi:

Atbildes uz teksta jautājumiem

Atbildiet uz teksta jautājumu ar šī teksta fragmentu. Modeļa konfigurācija: squad_ru_bert_infer

Pieprasījuma piemērs:

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

Rezultāts:

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

Apvainojumu noteikšana

Apvainojuma klātbūtnes noteikšana personai, kurai teksts ir adresēts (rakstīšanas laikā - tikai angļu valodā). Modeļa konfigurācija: insults_kaggle_conv_bert

Pieprasījuma piemērs:


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

Rezultāts:

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

Sentimentu analīze

Teksta sentimenta klasifikācija (pozitīvs, neitrāls, negatīvs). Modeļa konfigurācija: rusentiment_elmo_twitter_cnn

Pieprasījuma piemērs:

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

Rezultāts:

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

Pārfrāzes noteikšana

Noteikt, vai diviem dažādiem tekstiem ir vienāda nozīme. Modeļa konfigurācija: stand_paraphraser_ru

Pieprasīt:

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

Rezultāts:

[
  [1],
  [0]
]

Visu DeepPavlov modeļu pašreizējo sarakstu vienmēr var atrast šeit.

Secinājums

Šajā rakstā mēs iepazināmies ar DeepPavlov API un dažām bibliotēkas teksta apstrādes iespējām, kas tiek nodrošinātas jau no kastes. Jāpatur prātā, ka jebkuram NLP uzdevumam vislabākais rezultāts tiks sasniegts, apmācot modeli uz datu kopas, kas atbilst uzdevuma priekšmeta jomai (domēnai). Turklāt vēl vairāk modeļu principā nevar apmācīt visām situācijām.

Nākamajos rakstos mēs apskatīsim bibliotēkas papildu iestatījumus, palaižot DeepPavlov no Docker, un pēc tam pāriesim pie apmācības modeļiem. Un neaizmirstiet, ka DeepPavlovam ir forums – uzdodiet savus jautājumus par bibliotēku un modeļiem. Paldies par jūsu uzmanību!

Avots: www.habr.com

Pievieno komentāru