DeepPavlov vir ontwikkelaars: #1 NLP-nutsmiddels en Chatbot-skepping

Hi almal! Ons open 'n reeks artikels wat gewy is aan die oplossing van praktiese probleme wat verband hou met natuurlike taalverwerking (Natural Language Processing of net NLP) en die skep van gespreksagente (chat-bots) met behulp van 'n oopbron-biblioteek DeepPavlov, wat ontwikkel word deur ons span by die MIPT Laboratorium vir Neurale Stelsels en Diep Leer. Die hoofdoel van die siklus is om 'n wye reeks ontwikkelaars aan DeepPavlov bekend te stel en te wys hoe jy toegepaste NLP-probleme kan oplos sonder om diepgaande kennis van Masjienleer en PhD in Wiskunde te hê.

NLP-take sluit in om die sentiment van die teks te bepaal, genoemde entiteite te ontleed, te bepaal wat die gespreksgenoot van jou bot wil hê: bestel pizza of kry agtergrondinligting, en nog baie meer. U kan meer lees oor NLP-take en -metodes hier.

In hierdie artikel sal ons jou wys hoe om 'n REST-bediener te bestuur met vooraf-opgeleide NLP-modelle wat gereed is om te gebruik sonder enige bykomende konfigurasie of opleiding.

DeepPavlov vir ontwikkelaars: #1 NLP-nutsmiddels en Chatbot-skepping

Die installering van DeepPavlov

Instruksies vir Linux sal hier en hieronder gegee word. Vir Windows sien ons dokumentasie

  • Skep en aktiveer 'n virtuele omgewing met die huidige ondersteunde weergawe van Python:
    virtualelnv env -p python3.7
    source env/bin/activate
  • Installeer DeepPavlov in 'n virtuele omgewing:
    pip install deeppavlov
    

Begin 'n REST-bediener met die DeepPavlov-model

Voordat ons die bediener vir die eerste keer met die DeepPavlov-model begin, sal dit nuttig wees om oor sommige kenmerke van die biblioteekargitektuur te praat.

Enige model in DP bestaan ​​uit:

  • Python-kode;
  • Aflaaibare komponente - geserialiseerde leeruitkomste op spesifieke data (inbeddings, neurale netwerkgewigte, ens.);
  • 'n Konfigurasielêer (hierna verwys as config), wat inligting bevat oor die klasse wat deur die model gebruik word, URL's van afgelaaide komponente, Python-afhanklikhede, en meer.

Ons sal jou meer vertel oor wat onder die kap van DeepPavlov is in die volgende artikels, want nou is dit genoeg vir ons om dit te weet:

  • Enige model in DeepPavlov word geïdentifiseer deur die naam van sy konfigurasie;
  • Om die model te laat loop, moet jy sy komponente van die DeepPavlov-bedieners aflaai;
  • Om die model te laat loop, moet jy ook die Python-biblioteke installeer wat daardeur gebruik word.

Die eerste model wat ons sal gebruik, sal meertalige Name Entity Recognition (NER) wees. Die model klassifiseer die woorde van die teks volgens die tipe benoemde entiteite waaraan hulle behoort (eienname, geografiese name, geldeenheidname, en ander). Stel naam vir die mees onlangse weergawe van NER:

ner_ontonotes_bert_mult

Ons begin die REST-bediener met die model:

  1. Installeer die modelafhanklikhede wat in sy konfigurasie gespesifiseer is in die aktiewe virtuele omgewing:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Laai reeksmodelkomponente van DeepPavlov-bedieners af:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Die geserialiseerde komponente sal afgelaai word na die DeepPavlov-tuisgids, wat by verstek geleë is

    ~/.deeppavlov

    Wanneer dit afgelaai word, word die hash van reeds afgelaaide komponente vergelyk met die hashes van die komponente wat op die bediener geleë is. As daar 'n passing is, word die aflaai oorgeslaan en bestaande lêers word gebruik. Die groottes van afgelaaide komponente kan gemiddeld wissel van 0.5 tot 8 Gb, in sommige gevalle bereik dit 20 Gb nadat dit uitgepak is.

  3. Ons begin die REST-bediener met die model:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

As gevolg van die uitvoering van hierdie opdrag, sal die REST-bediener met die model op poort 5005 van die gasheermasjien geloods word (die verstekpoort is 5000).

Nadat die model geïnisialiseer is, kan Swagger met API-dokumentasie en die vermoë om te toets by die URL gevind word http://127.0.0.1:5005. Kom ons toets die model deur dit na die eindpunt te stuur http://127.0.0.1:5005/model POST-versoek met die volgende JSON-inhoud:

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

In reaksie hierop behoort ons die volgende JSON te ontvang:

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

Deur hierdie voorbeelde te gebruik, sal ons die DeepPavlov REST API ontleed.

DeepPavlov API

Elke DeepPavlov-model het ten minste een invoerargument. In die REST API word die argumente benoem, hul name is die sleutels van die inkomende woordeboek. In die meeste gevalle is die argument die teks wat verwerk moet word. Meer inligting oor argumente en waardes wat deur modelle teruggegee word, kan gevind word in die MODELLE-afdeling van die dokumentasie. DeepPavlov

In die voorbeeld is 'n lys van twee stringe na die x-argument oorgedra, waarvan elkeen 'n aparte opmaak gekry het. In DeepPavlov neem alle modelle 'n lys (batch) waardes wat onafhanklik verwerk word as invoer.

Die term "batch" verwys na die veld van masjienleer en verwys na 'n bondel onafhanklike insetwaardes wat terselfdertyd deur 'n algoritme of neurale netwerk verwerk word. Hierdie benadering laat jou toe om die verwerkingstyd van een bondelelement deur die model (dikwels aansienlik) te verminder in vergelyking met dieselfde waarde wat afsonderlik na die insette gestuur word. Maar die resultaat van verwerking word eers gegee na verwerking van alle elemente. Daarom, wanneer 'n inkomende bondel gegenereer word, sal dit nodig wees om die spoed van die model en die vereiste verwerkingstyd vir elk van sy individuele elemente in ag te neem.

As daar verskeie argumente van die DeepPavlov-model is, ontvang elkeen van hulle sy eie bondel waardes, en by die uitset lewer die model altyd een bondel antwoorde. Die elemente van die uitgaande bondel is die resultate van die verwerking van die elemente van die inkomende bondels met dieselfde indeks.

In die voorbeeld hierbo was die resultaat van die model die verdeling van elke reël in tekens (woorde en leestekens) en die klassifikasie van die teken relatief tot die genoemde entiteit (organisasienaam, geldeenheid) wat dit verteenwoordig. Op die oomblik is die model ner_ontonotes_bert_mult 18 tipes benoemde entiteite kan herken, kan 'n gedetailleerde beskrywing gevind word hier.

Ander uit-die-boks DeepPavlov-modelle

Benewens NER, is die volgende out-of-the-box-modelle beskikbaar in DeepPavlov ten tyde van die skryf hiervan:

Teksvraag beantwoord

Die antwoord op die vraag aan die teks is 'n fragment van hierdie teks. Model konfigurasie: squad_en_bert_infer

Versoek voorbeeld:

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

Gevolg:

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

Beroerte-opsporing

Identifikasie van die teenwoordigheid van 'n belediging vir die persoon aan wie die teks gerig is (ten tyde van hierdie skrywe - slegs vir Engels). Modelopstelling: insults_kaggle_conv_bert

Versoek voorbeeld:


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

Gevolg:

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

Sentimentanalise

Klassifikasie van die sentiment van die teks (positief, neutraal, negatief). Model konfigurasie: rusentiment_elmo_twitter_cnn

Versoek voorbeeld:

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

Gevolg:

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

Parafraseer opsporing

Bepaal of twee verskillende tekste dieselfde betekenis het. Model konfigurasie: stand_paraphraser_en

Versoek:

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

Gevolg:

[
  [1],
  [0]
]

'n Opgedateerde lys van alle DeepPavlov-out-of-the-box-modelle kan altyd gevind word hier.

Gevolgtrekking

In hierdie artikel het ons kennis gemaak met die DeepPavlov API en sommige van die teksverwerkingskenmerke van die biblioteek wat uit die boks verskaf word. Terselfdertyd moet in gedagte gehou word dat vir enige NLP-taak die beste resultaat behaal sal word wanneer die model opgelei word op 'n datastel wat ooreenstem met die vakgebied (domein) van die taak. Daarbenewens kan selfs meer modelle in beginsel nie vir alle geleenthede opgelei word nie.

In die volgende artikels sal ons kyk na bykomende instellings van die biblioteek, wat DeepPavlov vanaf Docker bekendstel, en dan sal ons voortgaan na opleidingsmodelle. En moenie vergeet dat DeepPavlov het nie форум - vra jou vrae oor die biblioteek en modelle. Dankie vir jou aandag!

Bron: will.com

Voeg 'n opmerking