Hej alla! Vi öppnar en serie artiklar som ägnas åt att lösa praktiska problem relaterade till naturlig språkbehandling (Natural Language Processing eller helt enkelt NLP) och skapa dialogagenter (chatbots) med hjälp av ett bibliotek med öppen källkod
NLP-uppgifter inkluderar att bestämma känslan i texten, analysera namngivna enheter, bestämma vad samtalspartnern vill ha från din bot: beställ pizza eller få bakgrundsinformation och mycket mer. Du kan läsa mer om NLP-uppgifter och metoder
I den här artikeln visar vi dig hur du kör en REST-server med förutbildade NLP-modeller, redo att användas utan ytterligare konfiguration eller träning.
Installation av DeepPavlov
Här och nedan kommer instruktioner för Linux att ges. För Windows, se vår
- Skapa och aktivera en virtuell miljö med den nuvarande versionen av Python som stöds:
virtualelnv env -p python3.7 source env/bin/activate
- Installera DeepPavlov i en virtuell miljö:
pip install deeppavlov
Startar en REST-server med DeepPavlov-modellen
Innan vi lanserar en server med DeepPavlov-modellen för första gången, kommer det att vara användbart att prata om några funktioner i bibliotekets arkitektur.
Alla modeller i DP består av:
- Python-kod;
- Nedladdningsbara komponenter - serialiserade träningsresultat på specifika data (inbäddningar, vikter av neurala nätverk, etc.);
- En konfigurationsfil (hädanefter kallad konfigurationen), som innehåller information om de klasser som används av modellen, URL:er för nedladdade komponenter, Python-beroenden, etc.
Vi kommer att berätta mer om vad som finns under huven på DeepPavlov i följande artiklar, för nu räcker det för oss att veta det:
- Alla modeller i DeepPavlov identifieras med namnet på dess konfiguration;
- För att köra modellen måste du ladda ner dess komponenter från DeepPavlov-servrarna;
- För att köra modellen måste du också installera Python-biblioteken som den använder.
Den första modellen vi kommer att lansera kommer att vara multilingual Named Entity Recognition (NER). Modellen klassificerar textord efter vilken typ av namngivna enheter de tillhör (egennamn, geografiska namn, namn på valutor och annat). Konfigurationsnamn för den aktuella senaste versionen av NER:
ner_ontonotes_bert_mult
Vi startar REST-servern med modellen:
- Vi installerar modellberoendena som anges i dess konfiguration i den aktiva virtuella miljön:
python -m deeppavlov install ner_ontonotes_bert_mult
- Ladda ner serialiserade modellkomponenter från DeepPavlov-servrar:
python -m deeppavlov download ner_ontonotes_bert_mult
De serialiserade komponenterna kommer att laddas ner till DeepPavlovs hemkatalog, som finns som standard
~/.deeppavlov
Vid nedladdning kontrolleras hash för redan nedladdade komponenter mot hash för komponenter som finns på servern. Om det finns en matchning hoppas nedladdningen över och befintliga filer används. Storleken på nedladdade komponenter kan variera i genomsnitt från 0.5 till 8 Gb, i vissa fall upp till 20 Gb efter uppackning.
- Vi startar REST-servern med modellen:
python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
Som ett resultat av att köra detta kommando kommer en REST-server med en modell att startas på port 5005 på värddatorn (standardporten är 5000).
Efter initialisering av modellen kan Swagger med API-dokumentation och möjlighet att testa hittas på URL:en http://127.0.0.1:5005
. Låt oss testa modellen genom att skicka den till slutpunkten http://127.0.0.1:5005/model
POST-begäran med följande JSON-innehåll:
{
"x": [
"В МФТИ можно добраться на электричке с Савёловского Вокзала.",
"В юго-западной Руси стог жита оценен в 15 гривен"
]
}
Som svar bör vi få följande 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"]
]
]
Med hjälp av dessa exempel kommer vi att analysera DeepPavlov REST API.
API DeepPavlov
Varje DeepPavlov-modell har minst ett inmatningsargument. I REST API namnges argument, deras namn är nycklarna till den inkommande ordboken. I de flesta fall är argumentet den text som behöver bearbetas. Mer information om argument och värden som returneras av modeller finns i avsnittet MODELLER i dokumentationen
I exemplet skickades en lista med två strängar till argument x, som var och en fick separat markering. I DeepPavlov tar alla modeller som indata en lista (batch) med värden som bearbetas oberoende.
Termen "batch" hänvisar till området för maskininlärning och hänvisar till en sats av oberoende ingångsvärden som behandlas av en algoritm eller ett neuralt nätverk samtidigt. Detta tillvägagångssätt låter dig minska (ofta avsevärt) den tid som modellen bearbetar ett element i en batch jämfört med samma värde som skickas till ingången separat. Men bearbetningsresultatet utfärdas först efter att alla element har bearbetats. Därför, när du genererar en inkommande batch, kommer det att vara nödvändigt att ta hänsyn till modellens hastighet och den nödvändiga bearbetningstiden för vart och ett av dess individuella element.
Om det finns flera argument till DeepPavlov-modellen får var och en av dem sin egen grupp med värden, och vid utgången producerar modellen alltid en grupp svar. Elementen i den utgående batchen är resultatet av bearbetningen av elementen i de inkommande batcherna med samma index.
I exemplet ovan var resultatet av modellen att dela upp varje sträng i tokens (ord och skiljetecken) och klassificera token i förhållande till den namngivna enheten (organisationens namn, valuta) som den representerar. Just nu modellen ner_ontonotes_bert_mult som kan känna igen 18 typer av namngivna enheter, kan en detaljerad beskrivning hittas
Andra out-of-the-box-modeller från DeepPavlov
Förutom NER finns följande out-of-the-box-modeller tillgängliga i DeepPavlov i skrivande stund:
Svara på textfrågor
Besvara frågan till texten med ett fragment av denna text. Modellkonfiguration: squad_ru_bert_infer
Exempelbegäran:
{
"context_raw": [
"DeepPavlov разрабатывается лабораторией МФТИ.",
"В юго-западной Руси стог жита оценен в 15 гривен."
],
"question_raw": [
"Кем разрабатывается DeepPavlov?",
"Сколько стоил стог жита на Руси?"
]
}
Resultat:
[
["лабораторией МФТИ", 27, 31042.484375],
["15 гривен", 39, 1049.598876953125]
]
Förolämpningsdetektering
Detektering av förekomsten av en förolämpning mot den person som texten är riktad till (i skrivande stund - endast för engelska). Modellkonfiguration: insults_kaggle_conv_bert
Exempelbegäran:
{
"x": [
"Money talks, bullshit walks.",
"You are not the brightest one."
]
}
Resultat:
[
["Not Insult"],
["Insult"]
]
Sentimentanalys
Klassificering av textsentiment (positiv, neutral, negativ). Modellkonfiguration: rusentiment_elmo_twitter_cnn
Exempelbegäran:
{
"x": [
"Мне нравится библиотека DeepPavlov.",
"Я слышал о библиотеке DeepPavlov.",
"Меня бесят тролли и анонимусы."
]
}
Resultat:
[
["positive"],
["neutral"],
["negative"]
]
Parafrasdetektering
Att avgöra om två olika texter har samma innebörd. Modellkonfiguration: stand_paraphraser_en
fråga:
{
"text_a": [
"Город погружается в сон, просыпается Мафия.",
"Президент США пригрозил расторжением договора с Германией."
],
"text_b": [
"Наступает ночь, все жители города пошли спать, а преступники проснулись.",
"Германия не собирается поддаваться угрозам со стороны США."
]
}
Resultat:
[
[1],
[0]
]
Den aktuella listan över alla färdiga DeepPavlov-modeller kan alltid hittas
Slutsats
I den här artikeln bekantade vi oss med DeepPavlov API och några av bibliotekets textbehandlingsfunktioner som tillhandahålls direkt. Man bör komma ihåg att för varje NLP-uppgift uppnås det bästa resultatet när man tränar modellen på en datamängd som motsvarar uppgiftens ämnesområde (domän). Dessutom kan ännu fler modeller i princip inte tränas för alla situationer.
I följande artiklar kommer vi att titta på ytterligare inställningar för biblioteket, lansera DeepPavlov från Docker, och sedan går vi vidare till träningsmodeller. Och glöm inte att DeepPavlov har
Källa: will.com