DeepPavlov para sa mga developer: #1 NLP tool at paggawa ng chatbot

Kamusta kayong lahat! Binubuksan namin ang isang serye ng mga artikulo na nakatuon sa paglutas ng mga praktikal na problema na may kaugnayan sa natural na pagpoproseso ng wika (Natural Language Processing o simpleng NLP) at paglikha ng mga dialog agent (chatbots) gamit ang isang open-source na library DeepPavlov, na binuo ng aming team sa MIPT Laboratory of Neural Systems at Deep Learning. Ang pangunahing layunin ng serye ay ipakilala ang DeepPavlov sa isang malawak na hanay ng mga developer at ipakita kung paano mo malulutas ang mga inilapat na problema sa NLP nang walang malalim na kaalaman sa Machine Learning at PhD sa Mathematics.

Kasama sa mga gawain ng NLP ang pagtukoy sa damdamin ng text, pag-parse ng mga pinangalanang entity, pagtukoy kung ano ang gusto ng kausap mula sa iyong bot: mag-order ng pizza o kumuha ng background na impormasyon, at marami pa. Maaari kang magbasa nang higit pa tungkol sa mga gawain at pamamaraan ng NLP dito.

Sa artikulong ito, ipapakita namin sa iyo kung paano magpatakbo ng isang REST server na may mga pre-trained na modelo ng NLP, na handang gamitin nang walang anumang karagdagang configuration o pagsasanay.

DeepPavlov para sa mga developer: #1 NLP tool at paggawa ng chatbot

Pag-install ng DeepPavlov

Dito at sa ibaba, ibibigay ang mga tagubilin para sa Linux. Para sa Windows, tingnan ang aming dokumentasyon

  • Lumikha at mag-activate ng virtual na kapaligiran gamit ang kasalukuyang sinusuportahang bersyon ng Python:
    virtualelnv env -p python3.7
    source env/bin/activate
  • I-install ang DeepPavlov sa isang virtual na kapaligiran:
    pip install deeppavlov
    

Paglulunsad ng REST server na may modelong DeepPavlov

Bago kami maglunsad ng server na may modelong DeepPavlov sa unang pagkakataon, magiging kapaki-pakinabang na pag-usapan ang ilang mga tampok ng arkitektura ng library.

Ang anumang modelo sa DP ay binubuo ng:

  • Python code;
  • Nada-download na mga bahagi - serialized na mga resulta ng pagsasanay sa partikular na data (mga pag-embed, timbang ng mga neural network, atbp.);
  • Isang configuration file (mula rito ay tinutukoy bilang config), na naglalaman ng impormasyon tungkol sa mga klase na ginagamit ng modelo, mga URL ng mga na-download na bahagi, mga dependency ng Python, atbp.

Sasabihin namin sa iyo ang higit pa tungkol sa kung ano ang nasa ilalim ng hood ng DeepPavlov sa mga sumusunod na artikulo, sa ngayon ay sapat na para sa amin na malaman iyon:

  • Ang anumang modelo sa DeepPavlov ay nakikilala sa pamamagitan ng pangalan ng config nito;
  • Upang patakbuhin ang modelo, kailangan mong i-download ang mga bahagi nito mula sa mga server ng DeepPavlov;
  • Gayundin, upang patakbuhin ang modelo, kailangan mong i-install ang mga aklatan ng Python na ginagamit nito.

Ang unang modelong ilulunsad namin ay ang multilingual na Named Entity Recognition (NER). Inuuri ng modelo ang mga text na salita ayon sa uri ng mga pinangalanang entity kung saan kabilang ang mga ito (mga wastong pangalan, heograpikal na pangalan, pangalan ng mga pera, at iba pa). Pangalan ng config para sa kasalukuyang pinakabagong bersyon ng NER:

ner_ontonotes_bert_mult

Inilunsad namin ang REST server na may modelo:

  1. Ini-install namin ang mga dependency ng modelo na tinukoy sa config nito sa aktibong virtual na kapaligiran:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Mag-download ng mga serialized na bahagi ng modelo mula sa mga server ng DeepPavlov:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Ang mga serialized na bahagi ay mada-download sa DeepPavlov home directory, na matatagpuan bilang default

    ~/.deeppavlov

    Kapag nagda-download, ang hash ng na-download na mga bahagi ay sinusuri laban sa mga hash ng mga bahagi na matatagpuan sa server. Kung may tugma, lalaktawan ang pag-download at gagamitin ang mga kasalukuyang file. Ang mga laki ng mga na-download na bahagi ay maaaring mag-iba sa average mula 0.5 hanggang 8 Gb, sa ilang mga kaso ay umaabot sa 20 Gb pagkatapos i-unzip.

  3. Inilunsad namin ang REST server na may modelo:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Bilang resulta ng pagpapatupad ng command na ito, ang isang REST server na may modelo ay ilulunsad sa port 5005 ng host machine (ang default na port ay 5000).

Pagkatapos simulan ang modelo, ang Swagger na may dokumentasyon ng API at ang kakayahang sumubok ay makikita sa URL http://127.0.0.1:5005. Subukan natin ang modelo sa pamamagitan ng pagpapadala nito sa endpoint http://127.0.0.1:5005/model POST na kahilingan na may sumusunod na nilalaman ng JSON:

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

Bilang tugon, dapat nating matanggap ang sumusunod na 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"]
  ]
]

Gamit ang mga halimbawang ito, susuriin namin ang DeepPavlov REST API.

API DeepPavlov

Ang bawat modelo ng DeepPavlov ay may kahit isang input argument. Sa REST API, ang mga argumento ay pinangalanan, ang kanilang mga pangalan ay ang mga susi ng papasok na diksyunaryo. Sa karamihan ng mga kaso, ang argumento ay ang teksto na kailangang iproseso. Higit pang impormasyon tungkol sa mga argumento at halaga na ibinalik ng mga modelo ay matatagpuan sa seksyong MODELS ng dokumentasyon DeepPavlov

Sa halimbawa, isang listahan ng dalawang string ang ipinasa sa argumento x, bawat isa ay binigyan ng hiwalay na markup. Sa DeepPavlov, ang lahat ng mga modelo ay kumukuha bilang input ng isang listahan (batch) ng mga halaga na pinoproseso nang nakapag-iisa.

Ang terminong "batch" ay tumutukoy sa larangan ng machine learning at tumutukoy sa isang batch ng mga independiyenteng halaga ng input na pinoproseso ng isang algorithm o neural network nang sabay-sabay. Binibigyang-daan ka ng diskarteng ito na bawasan (madalas nang malaki) ang oras na pinoproseso ng modelo ang isang elemento ng isang batch kumpara sa parehong halaga na ipinasa sa input nang hiwalay. Ngunit ang resulta ng pagproseso ay ibinibigay lamang pagkatapos maproseso ang lahat ng mga elemento. Samakatuwid, kapag bumubuo ng isang papasok na batch, kakailanganing isaalang-alang ang bilis ng modelo at ang kinakailangang oras ng pagproseso para sa bawat isa sa mga indibidwal na elemento nito.

Kung mayroong ilang mga argumento sa modelo ng DeepPavlov, ang bawat isa sa kanila ay tumatanggap ng sarili nitong batch ng mga halaga, at sa output ang modelo ay palaging gumagawa ng isang batch ng mga sagot. Ang mga elemento ng papalabas na batch ay ang mga resulta ng pagproseso ng mga elemento ng mga papasok na batch na may parehong index.

Sa halimbawa sa itaas, ang resulta ng modelo ay hatiin ang bawat string sa mga token (mga salita at punctuation mark) at uriin ang token na nauugnay sa pinangalanang entity (pangalan ng organisasyon, currency) na kinakatawan nito. Sa kasalukuyan ang modelo ner_ontonotes_bert_mult may kakayahang makilala ang 18 uri ng mga pinangalanang entity, makikita ang isang detalyadong paglalarawan dito.

Iba pang mga out-of-the-box na modelo ni DeepPavlov

Bilang karagdagan sa NER, ang mga sumusunod na out-of-the-box na mga modelo ay available sa DeepPavlov sa oras ng pagsulat:

Pagsagot sa Tanong sa Teksto

Sagutin ang tanong sa teksto gamit ang isang fragment ng tekstong ito. Config ng modelo: squad_ru_bert_infer

Halimbawa ng kahilingan:

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

Resulta:

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

Insulto Detection

Ang pagtuklas ng pagkakaroon ng isang insulto sa taong tinutugunan ng teksto (sa oras ng pagsulat - para lamang sa Ingles). Config ng modelo: insults_kaggle_conv_bert

Halimbawa ng kahilingan:


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

Resulta:

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

Pagtatasa ng sentimyento

Pag-uuri ng damdamin ng teksto (positibo, neutral, negatibo). Config ng modelo: rusentiment_elmo_twitter_cnn

Halimbawa ng kahilingan:

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

Resulta:

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

Paraphrase Detection

Pagtukoy kung ang dalawang magkaibang teksto ay may parehong kahulugan. Config ng modelo: stand_paraphraser_en

Humiling ng:

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

Resulta:

[
  [1],
  [0]
]

Ang kasalukuyang listahan ng lahat ng out-of-the-box na mga modelo ng DeepPavlov ay palaging makikita dito.

Konklusyon

Sa artikulong ito, nakilala namin ang DeepPavlov API at ang ilan sa mga kakayahan sa pagpoproseso ng teksto ng library na ibinigay sa labas ng kahon. Dapat tandaan na para sa anumang gawain ng NLP, ang pinakamahusay na resulta ay makakamit kapag sinasanay ang modelo sa isang set ng data na naaayon sa lugar ng paksa (domain) ng gawain. Bilang karagdagan, kahit na higit pang mga modelo ay hindi maaaring, sa prinsipyo, ay sanayin para sa lahat ng mga sitwasyon.

Sa mga sumusunod na artikulo titingnan natin ang mga karagdagang setting ng library, paglulunsad ng DeepPavlov mula sa Docker, at pagkatapos ay magpapatuloy tayo sa mga modelo ng pagsasanay. At huwag kalimutan na mayroon ang DeepPavlov ang forum – tanungin ang iyong mga katanungan tungkol sa aklatan at mga modelo. Salamat sa iyong atensyon!

Pinagmulan: www.habr.com

Magdagdag ng komento