DeepPavlov pou devlopè: #1 zouti NLP ak kreyasyon chatbot

Bonjou tout moun! Nou ap louvri yon seri de atik konsakre nan rezoud pwoblèm pratik ki gen rapò ak pwosesis lang natirèl (Natural Language Processing oswa tou senpleman NLP) ak kreye ajan dyalòg (chatbots) lè l sèvi avèk yon bibliyotèk sous louvri. DeepPavlov, ki ap devlope pa ekip nou an nan laboratwa MIPT nan sistèm neral ak aprantisaj pwofon. Objektif prensipal seri a se prezante DeepPavlov nan yon pakèt devlopè epi montre kouman ou ka rezoud pwoblèm NLP aplike san yo pa gen konesans pwofon nan Aprantisaj Machin ak PhD nan Matematik.

Travay NLP yo enkli detèmine santiman tèks la, analize antite yo nonmen, detèmine sa entèrlokuteur a vle nan men bot ou a: kòmande pitza oswa jwenn enfòmasyon background, ak plis ankò. Ou ka li plis sou travay ak metòd NLP isit la.

Nan atik sa a, nou pral montre w kouman pou w kouri yon sèvè REST ak modèl NLP ki deja antrene, pare pou itilize san okenn konfigirasyon oswa fòmasyon adisyonèl.

DeepPavlov pou devlopè: #1 zouti NLP ak kreyasyon chatbot

Enstalasyon DeepPavlov

Isit la ak anba a, yo pral bay enstriksyon pou Linux. Pou Windows, gade nou an dokimantasyon

  • Kreye ak aktive yon anviwònman vityèl ak vèsyon aktyèl la sipòte nan Python:
    virtualelnv env -p python3.7
    source env/bin/activate
  • Enstale DeepPavlov nan yon anviwònman vityèl:
    pip install deeppavlov
    

Lanse yon sèvè REST ak modèl DeepPavlov

Anvan nou lanse yon sèvè ak modèl DeepPavlov la pou premye fwa, li pral itil pou pale sou kèk karakteristik nan achitekti bibliyotèk la.

Nenpòt modèl nan DP konsiste de:

  • Kòd Python;
  • Konpozan telechaje yo - rezilta fòmasyon seri sou done espesifik (embeddings, pwa nan rezo neral, elatriye);
  • Yon dosye konfigirasyon (ki refere yo kòm konfigirasyon an), ki gen enfòmasyon sou klas yo itilize pa modèl la, URL nan konpozan telechaje, depandans Python, elatriye.

Nou pral di ou plis sou sa ki anba kapo DeepPavlov nan atik sa yo, pou kounye a li ase pou nou konnen sa:

  • Nenpòt modèl nan DeepPavlov idantifye pa non an nan konfigirasyon li yo;
  • Pou kouri modèl la, ou bezwen telechaje eleman li yo nan sèvè DeepPavlov yo;
  • Epitou, pou kouri modèl la, ou bezwen enstale bibliyotèk Python li itilize yo.

Premye modèl nou pral lanse a pral plizyè lang Rekonesans antite ki rele (NER). Modèl la klase mo tèks yo dapre kalite antite ki gen non yo fè pati (non pwòp, non jeyografik, non lajan, ak lòt moun). Non konfigirasyon pou vèsyon ki pi resan aktyèl la nan NER:

ner_ontonotes_bert_mult

Nou lanse sèvè REST la ak modèl la:

  1. Nou enstale depandans modèl ki espesifye nan konfigirasyon li yo nan anviwònman vityèl aktif la:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Telechaje konpozan modèl seri soti nan serveurs DeepPavlov:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Konpozan seri yo pral telechaje nan anyè lakay DeepPavlov, ki sitiye pa default

    ~/.deeppavlov

    Lè w ap telechaje, yo tcheke hash nan eleman ki deja telechaje yo ak hash yo nan eleman ki sitiye sou sèvè a. Si gen yon match, download la sote epi yo itilize dosye ki egziste deja. Gwosè konpozan telechaje yo ka varye an mwayèn ant 0.5 a 8 Gb, nan kèk ka rive nan 20 Gb apre yo fin dekonpoze.

  3. Nou lanse sèvè REST la ak modèl la:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Kòm yon rezilta nan egzekite lòd sa a, yo pral lanse yon sèvè REST ak yon modèl sou pò 5005 nan machin lame a (pò default la se 5000).

Apre inisyalize modèl la, Swagger ak dokiman API ak kapasite nan tès ka jwenn nan URL la http://127.0.0.1:5005. Ann teste modèl la pa voye li nan pwen final la http://127.0.0.1:5005/model POST demann ak kontni JSON sa a:

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

Kòm repons nou ta dwe resevwa JSON sa a:

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

Sèvi ak egzanp sa yo, nou pral analize DeepPavlov REST API la.

API DeepPavlov

Chak modèl DeepPavlov gen omwen yon agiman opinyon. Nan REST API a, agiman yo nonmen, non yo se kle yo nan diksyonè a fèk ap rantre. Nan pifò ka yo, agiman an se tèks la ki bezwen trete. Ou ka jwenn plis enfòmasyon sou agiman ak valè modèl yo retounen nan seksyon MODELS nan dokiman an. DeepPavlov

Nan egzanp lan, yo te pase yon lis de fisèl nan agiman x, yo chak nan yo te bay yon mak separe. Nan DeepPavlov, tout modèl pran kòm opinyon yon lis (pakèt) nan valè ki trete poukont yo.

Tèm "pakèt la" refere a jaden an nan aprantisaj machin ak refere a yon pakèt valè opinyon endepandan trete pa yon algorithm oswa rezo neral ansanm. Apwòch sa a pèmèt ou diminye (souvan siyifikativman) tan modèl la trete yon eleman nan yon pakèt konpare ak menm valè a pase nan opinyon an separeman. Men, rezilta pwosesis la bay sèlman apre tout eleman yo te trete. Se poutèt sa, lè jenere yon pakèt fèk ap rantre, li pral nesesè yo pran an kont vitès la nan modèl la ak tan an pwosesis obligatwa pou chak nan eleman endividyèl li yo.

Si gen plizyè agiman nan modèl la DeepPavlov, chak nan yo resevwa pwòp pakèt valè li yo, ak nan pwodiksyon an modèl la toujou pwodui yon pakèt repons. Eleman yo nan lo sortan an se rezilta yo nan pwosesis eleman yo nan lo yo fèk ap rantre ak endèks la menm.

Nan egzanp ki pi wo a, rezilta modèl la se te kraze chak fisèl an siy (mo ak mak ponktiyasyon) epi klasifye siy la anrapò ak antite yo te rele (non òganizasyon, lajan) ke li reprezante. Kounye a modèl la ner_ontonotes_bert_mult ki kapab rekonèt 18 kalite antite non, ou ka jwenn yon deskripsyon detaye isit la.

Lòt modèl ki soti nan bwat pa DeepPavlov

Anplis de sa nan NER, modèl ki soti nan bwat sa yo disponib nan DeepPavlov nan moman sa yo ekri:

Tèks Kesyon Reponn

Reponn kesyon an nan tèks la ak yon fragman nan tèks sa a. Konfigirasyon modèl: squad_ru_bert_infer

Egzanp demann:

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

Rezilta:

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

Deteksyon joure

Deteksyon prezans yon joure pou moun ki adrese tèks la (nan moman ekri a - sèlman pou angle). Modèl konfigirasyon: insults_kaggle_conv_bert

Egzanp demann:


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

Rezilta:

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

Analiz santiman

Klasifikasyon nan santiman tèks (pozitif, net, negatif). Konfigirasyon modèl: rusentiment_elmo_twitter_cnn

Egzanp demann:

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

Rezilta:

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

Parafraz Deteksyon

Detèmine si de tèks diferan gen menm siyifikasyon an. Konfigirasyon modèl: stand_paraphraser_ru

Demann:

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

Rezilta:

[
  [1],
  [0]
]

Ou ka toujou jwenn lis aktyèl la nan tout modèl DeepPavlov ki soti nan bwat la isit la.

Konklizyon

Nan atik sa a, nou te fè konesans ak DeepPavlov API a ak kèk nan kapasite pwosesis tèks nan bibliyotèk la bay soti nan bwat la. Li ta dwe sonje ke pou nenpòt travay NLP, pi bon rezilta a pral reyalize lè fòmasyon modèl la sou yon seri done ki koresponn ak sijè a (domèn) nan travay la. Anplis de sa, menm plis modèl pa ka, nan prensip, dwe resevwa fòmasyon pou tout sitiyasyon.

Nan atik sa yo nou pral gade lòt anviwònman bibliyotèk la, lanse DeepPavlov soti nan Docker, ak Lè sa a, nou pral ale nan modèl fòmasyon. Epi pa bliye ke DeepPavlov genyen форум – poze kesyon ou konsènan bibliyotèk la ak modèl yo. Mèsi pou atansyon ou!

Sous: www.habr.com

Add nouvo kòmantè