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

Hej alla! Vi inleder en serie artiklar som handlar om att lösa praktiska problem kopplade till bearbetning av naturligt sprÄk (Natural Language Processing eller bara NLP) och skapandet av dialogagenter (chatbots) med hjÀlp av ett open-source bibliotek DeepPavlov, som utvecklas av vÄrt team vid laboratoriet för neurala system och djupinlÀrning pÄ MIPT. HuvudmÄlet med serien Àr att introducera en bred krets av utvecklare till DeepPavlov och visa hur man kan lösa tillÀmpade NLP-uppgifter utan att ha djupa kunskaper inom maskininlÀrning och en doktorsexamen i matematik.

Till NLP-uppgifter hör att bestÀmma textens ton, parsning av namngivna entiteter, att faststÀlla vad din bots samtalspartner vill: bestÀlla pizza eller fÄ information, och mycket mer. Mer detaljerad information om uppgifter och metoder inom NLP kan du lÀsa ). Ett typiskt exempel pÄ anvÀndning:.

I denna artikel kommer vi att berÀtta hur man startar en REST-server med förtrÀnade NLP-modeller som Àr redo att anvÀndas utan nÄgon ytterligare konfiguration eller utbildning.

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

Installation av DeepPavlov

HÀr och framöver kommer instruktioner för Linux att ges. För Windows, se vÄr dokumentationen

  • Skapa och aktivera en virtuell miljö med den aktuella stödda versionen av Python:
    virtualenv env -p python3.7
    source env/bin/activate
  • Installera DeepPavlov i den virtuella miljön:
    pip install deeppavlov
    

Starta REST-servern med DeepPavlov-modellen

Innan vi kör servern med DeepPavlov-modellen för första gÄngen Àr det bra att nÀmna nÄgra funktioner i bibliotekets arkitektur.

Varje modell i DP bestÄr av:

  • Kod i Python;
  • Nedladdningsbara komponenter – serialiserade trĂ€ningsresultat pĂ„ specifika data (embeddingar, vikter för neurala nĂ€tverk osv.);
  • En konfigurationsfil (hĂ€danefter kallad konfig), som innehĂ„ller information om de klasser som modellen anvĂ€nder, URL:er för nedladdade komponenter, Python-beroenden och annat.

Mer information om vad som döljer sig bakom DeepPavlov kommer vi att ge i kommande artiklar, Àn sÄ lÀnge rÀcker det att veta att:

  • Varje modell i DeepPavlov identifieras med namnet pĂ„ sin konfig;
  • För att köra modellen mĂ„ste dess komponenter hĂ€mtas frĂ„n DeepPavlovs servrar;
  • Dessutom mĂ„ste de bibliotek som modellen anvĂ€nder installeras.

Den första modellen som vi kommer att lansera Àr en flersprÄkig Named Entity Recognition (NER). Modellen klassificerar orden i texten baserat pÄ typen av namngivna entiteter de tillhör (namn pÄ personer, geografiska platser, valutanamn och andra). Namnet pÄ konfigurationen för den senaste versionen av NER:

ner_ontonotes_bert_mult

Vi startar REST-servern med modellen:

  1. Vi installerar beroenden för modellen i den aktiva virtuella miljön som anges i dess konfiguration:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Vi laddar ner de serialiserade komponenterna av modellen frÄn DeepPavlov-servrarna:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    De serialiserade komponenterna kommer att laddas ner till DeepPavlovs hemkatalog, som som standard ligger pÄ

    ~/.deeppavlov

    NÀr man laddar ner jÀmförs hashkoden för redan nedladdade komponenter med hashkoderna för komponenter som finns pÄ servern. Om de matchar, hoppar vi över nedladdningen och anvÀnder redan existerande filer. Storleken pÄ de nedladdade komponenterna kan variera mellan 0.5 och 8 GB, och i vissa fall kan de efter uppackning nÄ upp till 20 GB.

  3. Vi startar REST-servern med modellen:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Som ett resultat av att denna kommando körs sÄ kommer en REST-server med modellen att startas pÄ port 5005 pÄ vÀrdmaskinen (standardporten Àr 5000).

Efter att modellen har initierats kan Swagger med API-dokumentation och testmöjligheter hittas via URL http://127.0.0.1:5005. Vi testar modellen genom att skicka en begÀran till slutpunkten http://127.0.0.1:5005/model en POST-begÀran med följande JSON-innehÄll:

{
  "x": [
    "I MFTI kan man ta sig dit med pendeltÄg frÄn Savyolovsky Station.",
    "I sydvÀstra Ryssland vÀrderas en halmstack till 15 hryvnias"
  ]
}

Som svar bör vi fÄ följande JSON:

[
  [
    ["I", "MFTI", "kan", "man", "ta", "sig", "dit", "med", "pendeltÄg", "frÄn", "Savyolovsky", "Station", "."],
    ["O", "B-FAC", "O", "O", "O", "O", "O", "B-FAC", "I-FAC", "O"]
  ],
  [
    ["I", "sydvÀstra", "-", "Ryssland", "vÀrderas", "en", "halmstack", "till", "15", "hryvnias"],
    ["O", "B-LOC", "I-LOC", "I-LOC", "I-LOC", "O", "O", "O", "O", "B-MONEY", "I-MONEY"]
  ]
]

Genom dessa exempel kommer vi att gÄ igenom REST API för DeepPavlov.

API för DeepPavlov

Varje DeepPavlov-modell har minst ett ingÄende argument. I REST API Àr argumenten namngivna och deras namn Àr nycklarna i den ingÄende ordboken. I de flesta fall Àr argumentet texten som behöver bearbetas. Mer om argumenten och de vÀrden som modellerna returnerar kan man lÀsa i avsnittet MODELS i dokumentationen. DeepPavlov

I exemplet skickades en lista med tvÄ strÀngar som argument x, och varje strÀng gavs en separat layout. I DeepPavlov tar alla modeller emot en lista (batch) av vÀrden som behandlas oberoende.

Termen "batch" hÀnvisar till omrÄdet för maskininlÀrning och avser ett paket av oberoende ingÄende vÀrden som behandlas av algoritmen eller neurala nÀtverket samtidigt. Denna metod gör det möjligt att minska (ofta avsevÀrt) behandlingstiden för enstaka element i batchen jÀmfört med samma vÀrde som skickas in separat. Men resultatet av behandlingen ges först efter att alla element har behandlats. DÀrför mÄste hastigheten pÄ modellens arbete och den tid som krÀvs för att bearbeta varje enskilt element beaktas vid bildandet av den ingÄende batchen.

Om DeepPavlov-modellen har flera argument, skickas varje argument en egen batch av vÀrden, och modellen ger alltid en batch av svar som utdata. Elementen i den utgÄende batchen Àr resultatet av bearbetningen av elementen i de ingÄende batcherna med samma index.

I det angivna exemplet var resultatet av modellens arbete uppdelningen av varje strÀng i tokens (ord och interpunktion) och klassificeringen av token i förhÄllande till den namngivna entiteten (organisationsnamn, valuta) som den representerar. För nÀrvarande kan modellen ner_ontonotes_bert_mult kÀnna igen 18 typer av namngivna entiteter, detaljerad beskrivning finns att hitta ). Ett typiskt exempel pÄ anvÀndning:.

Andra out-of-the-box-modeller frÄn DeepPavlov

Förutom NER Àr följande out-of-the-box-modeller frÄn DeepPavlov tillgÀngliga vid tidpunkten för artikelns skrivande:

Text Question Answering

Svar pÄ en frÄga frÄn texten med en del av denna text. Modellkonfiguration: squad_ru_bert_infer

Exempel pÄ begÀran:

{
  "context_raw": [
    "DeepPavlov utvecklas av MIPTs laboratorium.",
    "I sydvÀstra Ryssland bedömdes en hö av vete till 15 hryvnias."
  ],
  "question_raw": [
    "Vem utvecklar DeepPavlov?",
    "Hur mycket kostade högen av vete i Ryssland?"
  ]
}

Resultatet:

[
  ["MIPTs laboratorium", 27, 31042.484375],
  ["15 hryvnias", 39, 1049.598876953125]
]

Insult Detection

Identifiering av förekomsten av förolĂ€mpning riktad mot den person vars text avses (vid tidpunkten för artikelns skrivande — endast för engelska). Modellkonfiguration: insults_kaggle_conv_bert

Exempel pÄ begÀran:


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

Resultatet:

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

Sentiment Analysis

Klassificering av textens ton (positiv, neutral, negativ). Modellkonfiguration: rusentiment_elmo_twitter_cnn

Exempel pÄ begÀran:

{
  "x": [
    "Jag gillar biblioteket DeepPavlov.",
    "Jag har hört talas om biblioteket DeepPavlov.",
    "Jag stör mig pÄ troll och anonymus."
  ]
}

Resultatet:

[
  ["positiv"],
  ["neutral"],
  ["negativ"]
]

Parafrasering Detektion

Att avgöra om tvÄ olika texter har samma betydelse. Modellkonfiguration: stand_paraphraser_ru

FörfrÄgan:

{
  "text_a": [
    "Staden faller i sömn, Maffian vaknar.",
    "USA:s president hotade att sÀga upp avtalet med Tyskland."
  ],
  "text_b": [
    "Natten faller, alla invÄnare i staden har gÄtt till sÀngs, och brottslingarna har vaknat.",
    "Tyskland har ingen avsikt att ge efter för hot frÄn USA."
  ]
}

Resultatet:

[
  [1],
  [0]
]

Den aktuella listan över alla out-of-the-box modeller frÄn DeepPavlov gÄr alltid att hitta hÀr.

Slutsats

I denna artikel har vi bekantat oss med API:et för DeepPavlov och vissa funktioner för textbehandling som erbjuds "out-of-the-box". Det Àr viktigt att ha i Ätanke att för varje NLP-uppgift kommer bÀsta resultat att uppnÄs genom att trÀna en modell pÄ en datamÀngd som motsvarar ÀmnesomrÄdet för uppgiften. Dessutom gÄr det i princip inte att trÀna fler modeller för alla möjliga scenarier.

I kommande artiklar kommer vi att granska ytterligare instĂ€llningar av biblioteket, köra DeepPavlov frĂ„n Docker, och sedan gĂ„ vidare till att trĂ€na modeller. Och kom ihĂ„g att DeepPavlov har forum – stĂ€ll dina frĂ„gor angĂ„ende biblioteket och modeller. Tack för din uppmĂ€rksamhet!

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster