DeepPavlov för utvecklare: #1 NLP-verktyg och skapande av chatbot

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 DeepPavlov, som utvecklas av vårt team vid MIPT Laboratory of Neural Systems and Deep Learning. Huvudmålet med serien är att introducera DeepPavlov för ett brett spektrum av utvecklare och visa hur du kan lösa tillämpade NLP-problem utan att ha djupa kunskaper i maskininlärning och doktorsexamen i matematik.

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 här.

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.

DeepPavlov för utvecklare: #1 NLP-verktyg och skapande av chatbot

Installation av DeepPavlov

Här och nedan kommer instruktioner för Linux att ges. För Windows, se vår dokumentation

  • 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:

  1. Vi installerar modellberoendena som anges i dess konfiguration i den aktiva virtuella miljön:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. 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.

  3. 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 DeepPavlov

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 här.

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 här.

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 forumet – ställ dina frågor angående biblioteket och modellerna. Tack för din uppmärksamhet!

Källa: will.com

Lägg en kommentar