DeepPavlov kwa watengenezaji: Zana # 1 za NLP na uundaji wa gumzo

Salaam wote! Tunafungua mfululizo wa makala zinazotolewa kutatua matatizo ya vitendo yanayohusiana na usindikaji wa lugha asilia (Uchakataji wa Lugha Asilia au kwa urahisi NLP) na kuunda mawakala wa mazungumzo (chatbots) kwa kutumia maktaba ya chanzo huria. DeepPavlov, ambayo inatengenezwa na timu yetu katika Maabara ya MIPT ya Mifumo ya Neural na Mafunzo ya Kina. Kusudi kuu la safu hii ni kutambulisha DeepPavlov kwa anuwai ya watengenezaji na kuonyesha jinsi unavyoweza kutatua shida za NLP zilizotumika bila kuwa na maarifa ya kina katika Kujifunza kwa Mashine na PhD katika Hisabati.

Majukumu ya NLP ni pamoja na kubainisha hisia za maandishi, kuchanganua huluki zilizotajwa, kubainisha ni nini mpatanishi anataka kutoka kwa roboti yako: agiza pizza au upate maelezo ya usuli, na mengi zaidi. Unaweza kusoma zaidi kuhusu kazi na mbinu za NLP hapa.

Katika makala haya, tutakuonyesha jinsi ya kuendesha seva ya REST na miundo ya NLP iliyofunzwa awali, tayari kutumika bila usanidi au mafunzo yoyote ya ziada.

DeepPavlov kwa watengenezaji: Zana # 1 za NLP na uundaji wa gumzo

Ufungaji wa DeepPavlov

Hapa na chini, maagizo ya Linux yatatolewa. Kwa Windows, angalia yetu nyaraka

  • Unda na uwashe mazingira ya kawaida na toleo la sasa la Python linalotumika:
    virtualelnv env -p python3.7
    source env/bin/activate
  • Sakinisha DeepPavlov katika mazingira ya kawaida:
    pip install deeppavlov
    

Inazindua seva ya REST na mfano wa DeepPavlov

Kabla ya kuzindua seva na mfano wa DeepPavlov kwa mara ya kwanza, itakuwa muhimu kuzungumza juu ya vipengele vingine vya usanifu wa maktaba.

Muundo wowote katika DP una:

  • Msimbo wa Python;
  • Vipengele vinavyoweza kupakuliwa - matokeo ya mafunzo ya serialized kwenye data maalum (upachikaji, uzani wa mitandao ya neural, nk);
  • Faili ya usanidi (hapa inajulikana kama usanidi), ambayo ina maelezo kuhusu madarasa yanayotumiwa na modeli, URL za vipengee vilivyopakuliwa, utegemezi wa Python, n.k.

Tutakuambia zaidi juu ya kile kilicho chini ya kofia ya DeepPavlov katika makala zifuatazo, kwa sasa inatosha kwetu kujua kwamba:

  • Mfano wowote katika DeepPavlov unatambuliwa kwa jina la usanidi wake;
  • Ili kuendesha mfano, unahitaji kupakua vipengele vyake kutoka kwa seva za DeepPavlov;
  • Pia, ili kuendesha mfano, unahitaji kusanikisha maktaba ya Python inayotumia.

Muundo wa kwanza tutakaozindua utakuwa Utambuzi wa Huluki unaoitwa kwa lugha nyingi (NER). Mfano huo huainisha maneno ya maandishi kulingana na aina ya vyombo vilivyotajwa ambavyo vinahusika (majina sahihi, majina ya kijiografia, majina ya sarafu, na wengine). Sanidi jina la toleo la hivi karibuni la NER:

ner_ontonotes_bert_mult

Tunazindua seva ya REST na mfano:

  1. Tunasanikisha utegemezi wa mfano ulioainishwa katika usanidi wake katika mazingira ya kazi ya mtandaoni:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Pakua vipengee vya muundo wa serial kutoka kwa seva za DeepPavlov:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Vipengele vya serialized vitapakuliwa kwenye saraka ya nyumbani ya DeepPavlov, ambayo iko kwa default

    ~/.deeppavlov

    Wakati wa kupakua, heshi ya vipengele vilivyopakuliwa tayari huangaliwa dhidi ya heshi ya vipengele vilivyo kwenye seva. Ikiwa kuna mechi, upakuaji unarukwa na faili zilizopo hutumiwa. Ukubwa wa vipengele vilivyopakuliwa vinaweza kutofautiana kwa wastani kutoka Gb 0.5 hadi 8, katika baadhi ya matukio hufikia Gb 20 baada ya kufungua zipu.

  3. Tunazindua seva ya REST na mfano:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Kama matokeo ya kutekeleza amri hii, seva ya REST iliyo na modeli itazinduliwa kwenye bandari 5005 ya mashine mwenyeji (bandari chaguomsingi ni 5000).

Baada ya kuanzisha modeli, Swagger iliyo na hati za API na uwezo wa kujaribu inaweza kupatikana kwenye URL http://127.0.0.1:5005. Wacha tujaribu mfano kwa kuutuma hadi mwisho http://127.0.0.1:5005/model POST ombi na maudhui yafuatayo ya JSON:

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

Kwa kujibu tunapaswa kupokea JSON ifuatayo:

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

Kwa kutumia mifano hii, tutachambua API ya DeepPavlov REST.

API DeepPavlov

Kila mfano wa DeepPavlov una angalau hoja moja ya kuingiza. Katika REST API, hoja zimepewa majina, majina yao ndio funguo za kamusi inayoingia. Katika hali nyingi, hoja ni maandishi ambayo yanahitaji kushughulikiwa. Maelezo zaidi kuhusu hoja na maadili yanayorejeshwa na miundo yanaweza kupatikana katika sehemu ya MITINDO ya hati DeepPavlov

Katika mfano, orodha ya mifuatano miwili ilipitishwa kwa hoja x, ambayo kila moja ilipewa alama tofauti. Katika DeepPavlov, mifano yote huchukua kama pembejeo orodha (bechi) ya maadili ambayo huchakatwa kwa kujitegemea.

Neno "bechi" hurejelea uga wa kujifunza kwa mashine na hurejelea kundi la thamani huru za ingizo zinazochakatwa na algoriti au mtandao wa neva kwa wakati mmoja. Mbinu hii hukuruhusu kupunguza (mara nyingi kwa kiasi kikubwa) wakati ambao modeli huchakata kipengele kimoja cha kundi ikilinganishwa na thamani sawa iliyopitishwa kwa pembejeo tofauti. Lakini matokeo ya usindikaji hutolewa tu baada ya vipengele vyote kusindika. Kwa hiyo, wakati wa kuzalisha kundi linaloingia, itakuwa muhimu kuzingatia kasi ya mfano na wakati unaohitajika wa usindikaji kwa kila moja ya vipengele vyake vya kibinafsi.

Ikiwa kuna hoja kadhaa kwa mfano wa DeepPavlov, kila mmoja wao hupokea kundi lake la maadili, na kwa pato mfano daima hutoa kundi moja la majibu. Vipengele vya kundi linalotoka ni matokeo ya usindikaji wa vipengele vya batches zinazoingia na index sawa.

Katika mfano ulio hapo juu, matokeo ya modeli yalikuwa kuvunja kila kamba kuwa ishara (maneno na alama za uakifishaji) na kuainisha ishara inayohusiana na huluki iliyotajwa (jina la shirika, sarafu) ambayo inawakilisha. Hivi sasa mfano ner_ontonotes_bert_mult ina uwezo wa kutambua aina 18 za vyombo vilivyotajwa, maelezo ya kina yanaweza kupatikana hapa.

Mifano zingine za nje ya sanduku na DeepPavlov

Mbali na NER, mifano ifuatayo ya nje ya sanduku inapatikana katika DeepPavlov wakati wa kuandika:

Kujibu swali la maandishi

Jibu swali kwa maandishi na kipande cha maandishi haya. Usanidi wa mfano: kikosi_ru_bert_infer

Ombi la mfano:

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

Matokeo:

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

Ugunduzi wa Tusi

Kugundua uwepo wa matusi kwa mtu ambaye maandishi yanaelekezwa (wakati wa kuandika - tu kwa Kiingereza). Usanidi wa mfano: matusi_kaggle_conv_bert

Ombi la mfano:


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

Matokeo:

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

Uchanganuzi wa sentensi

Uainishaji wa hisia za maandishi (chanya, upande wowote, hasi). Usanidi wa mfano: rusentiment_elmo_twitter_cnn

Ombi la mfano:

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

Matokeo:

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

Utambuzi wa Paraphrase

Kuamua ikiwa maandishi mawili tofauti yana maana sawa. Usanidi wa mfano: stand_paraphraser_ru

Ombi:

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

Matokeo:

[
  [1],
  [0]
]

Orodha ya sasa ya mifano yote ya nje ya sanduku ya DeepPavlov inaweza kupatikana kila wakati hapa.

Hitimisho

Katika makala hii, tulifahamiana na API ya DeepPavlov na baadhi ya uwezo wa usindikaji wa maandishi wa maktaba iliyotolewa nje ya boksi. Inapaswa kukumbushwa katika akili kwamba kwa kazi yoyote ya NLP, matokeo bora yatapatikana wakati wa kufundisha mfano kwenye seti ya data inayofanana na eneo la somo (kikoa) cha kazi. Kwa kuongeza, hata mifano zaidi haiwezi, kwa kanuni, kufundishwa kwa hali zote.

Katika makala zifuatazo tutaangalia mipangilio ya ziada ya maktaba, kuzindua DeepPavlov kutoka Docker, na kisha tutaendelea kwenye mifano ya mafunzo. Na usisahau kwamba DeepPavlov ina jukwaa - uliza maswali yako kuhusu maktaba na mifano. Asante kwa umakini wako!

Chanzo: mapenzi.com

Kuongeza maoni