Developers အတွက် DeepPavlov- #1 NLP ကိရိယာများနှင့် chatbot ဖန်တီးခြင်း။

အားလုံးမင်္ဂလာပါ! ကျွန်ုပ်တို့သည် သဘာဝဘာသာစကားလုပ်ဆောင်ခြင်း (Natural Language Processing or NLP) နှင့် ဆက်စပ်သော လက်တွေ့ကျသောပြဿနာများကိုဖြေရှင်းရန်အတွက် ရည်ရွယ်ထားသော ဆောင်းပါးတွဲများကို ဖွင့်လှစ်ပြီး open-source စာကြည့်တိုက်ကို အသုံးပြု၍ ဒိုင်ယာလော့ဂ်အေးဂျင့်များ (chatbots) ဖန်တီးခြင်း DeepPavlovMIPT Laboratory of Neural Systems and Deep Learning မှ ကျွန်ုပ်တို့၏အဖွဲ့မှ တီထွင်ထုတ်လုပ်ထားပါသည်။ စီးရီး၏အဓိကရည်ရွယ်ချက်မှာ DeepPavlov ကို developer အများအပြားနှင့်မိတ်ဆက်ပေးပြီး Machine Learning နှင့် PhD တို့တွင် နက်နဲသောအသိပညာမရှိဘဲ အသုံးချ NLP ပြဿနာများကို သင်မည်ကဲ့သို့ဖြေရှင်းနိုင်ကြောင်းပြသရန်ဖြစ်သည်။

NLP လုပ်ဆောင်ချက်များတွင် စာသား၏ ခံစားချက်ကို ဆုံးဖြတ်ခြင်း၊ အမည်ပေးထားသော အရာများကို ခွဲခြမ်းစိတ်ဖြာခြင်း၊ သင်၏ bot မှ အပြန်အလှန်ပြောဆိုလိုသည်များကို ဆုံးဖြတ်ခြင်း- ပီဇာမှာယူခြင်း သို့မဟုတ် နောက်ခံအချက်အလက်ရယူခြင်းနှင့် အခြားအရာများစွာ ပါဝင်ပါသည်။ NLP လုပ်ငန်းများနှင့် နည်းလမ်းများအကြောင်း ပိုမိုဖတ်ရှုနိုင်ပါသည်။ ဒီမှာ.

ဤဆောင်းပါးတွင်၊ ကျွန်ုပ်တို့သည် အပိုဖွဲ့စည်းမှု သို့မဟုတ် လေ့ကျင့်မှုမလိုအပ်ဘဲ အသုံးပြုရန် အသင့်ဖြစ်နေသော ကြိုတင်လေ့ကျင့်ထားသော NLP မော်ဒယ်များဖြင့် REST ဆာဗာကို မည်သို့လုပ်ဆောင်ရမည်ကို သင့်အား ပြသပါမည်။

Developers အတွက် DeepPavlov- #1 NLP ကိရိယာများနှင့် chatbot ဖန်တီးခြင်း။

DeepPavlov တပ်ဆင်ခြင်း။

ဤနေရာနှင့် အောက်တွင် Linux အတွက် လမ်းညွှန်ချက်များ ပေးပါမည်။ Windows အတွက်၊ ကျွန်ုပ်တို့ကိုကြည့်ပါ။ စာရွက်စာတမ်း

  • လက်ရှိပံ့ပိုးပေးထားသော Python ဗားရှင်းဖြင့် ပကတိပတ်ဝန်းကျင်ကို ဖန်တီးပြီး အသက်သွင်းပါ-
    virtualelnv env -p python3.7
    source env/bin/activate
  • DeepPavlov ကို virtual ပတ်ဝန်းကျင်တွင် ထည့်သွင်းပါ-
    pip install deeppavlov
    

DeepPavlov မော်ဒယ်ဖြင့် REST ဆာဗာကို စတင်ခြင်း။

DeepPavlov မော်ဒယ်ဖြင့် ဆာဗာကို ပထမဆုံးအကြိမ် မဖွင့်မီ၊ စာကြည့်တိုက်၏ ဗိသုကာဆိုင်ရာ အင်္ဂါရပ်အချို့ကို ပြောပြရန် အသုံးဝင်ပါလိမ့်မည်။

DP တွင် မည်သည့်မော်ဒယ်မဆို ပါဝင်သည်-

  • Python ကုဒ်;
  • ဒေါင်းလုဒ်လုပ်နိုင်သော အစိတ်အပိုင်းများ - တိကျသောဒေတာ (မြှပ်နှံမှုများ၊ အာရုံကြောကွန်ရက်များ၏ အလေးများ စသည်) တွင် အမှတ်စဉ်အလိုက်လေ့ကျင့်မှုရလဒ်များ။
  • မော်ဒယ်မှအသုံးပြုသည့် အတန်းများ၊ ဒေါင်းလုဒ်လုပ်ထားသော အစိတ်အပိုင်းများ၏ URL များ၊ Python မှီခိုမှုစသည်ဖြင့် အချက်အလက်များပါရှိသော ဖွဲ့စည်းမှုပုံစံဖိုင် (နောင်တွင် config ဟုရည်ညွှန်းသည်)။

အောက်ပါ ဆောင်းပါးများတွင် DeepPavlov ၏ ပါးပြင်အောက်ရှိ အရာကို ကျွန်ုပ်တို့ သင့်အား ထပ်မံပြောပြပါမည်၊ ယခုအချိန်တွင် ကျွန်ုပ်တို့အတွက် လုံလောက်ပါပြီ-

  • DeepPavlov ရှိ မည်သည့်မော်ဒယ်ကိုမဆို ၎င်း၏ config အမည်ဖြင့် သတ်မှတ်သည်။
  • မော်ဒယ်ကိုလည်ပတ်ရန်၊ DeepPavlov ဆာဗာများမှ ၎င်း၏ အစိတ်အပိုင်းများကို ဒေါင်းလုဒ်လုပ်ရန် လိုအပ်သည်။
  • ထို့အပြင်၊ မော်ဒယ်ကိုလည်ပတ်ရန်၊ ၎င်းအသုံးပြုသည့် Python စာကြည့်တိုက်များကို ထည့်သွင်းရန် လိုအပ်သည်။

ကျွန်ုပ်တို့ စတင်ရောင်းချမည့် ပထမဆုံး မော်ဒယ်သည် ဘာသာပေါင်းစုံ အမည်ပေးထားသည့် Entity Recognition (NER) ဖြစ်သည်။ မော်ဒယ်သည် ၎င်းတို့ပိုင်ဆိုင်သည့် အမည်ပေးထားသည့်အရာများ (သင့်လျော်သောအမည်များ၊ ပထဝီဝင်အမည်များ၊ ငွေကြေးအမည်များနှင့် အခြား) အမျိုးအစားအလိုက် စာသားစကားလုံးများကို အမျိုးအစားခွဲခြားသည်။ NER ၏ လက်ရှိနောက်ဆုံးထွက်ဗားရှင်းအတွက် ပြင်ဆင်သတ်မှတ်အမည်-

ner_ontonotes_bert_mult

ကျွန်ုပ်တို့သည် မော်ဒယ်ဖြင့် REST ဆာဗာကို စတင်လိုက်သည်-

  1. ကျွန်ုပ်တို့သည် ၎င်း၏ config တွင် သတ်မှတ်ထားသော မော်ဒယ်မှီခိုမှုများအား တက်ကြွသော virtual ပတ်ဝန်းကျင်တွင် ထည့်သွင်းသည်-
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. DeepPavlov ဆာဗာများမှ နံပါတ်စဉ်တပ်ထားသော မော်ဒယ်အစိတ်အပိုင်းများကို ဒေါင်းလုဒ်လုပ်ပါ။
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    နံပါတ်စဉ်တပ်ထားသော အစိတ်အပိုင်းများကို မူရင်းအတိုင်းတည်ရှိသည့် DeepPavlov home directory သို့ ဒေါင်းလုဒ်လုပ်မည်ဖြစ်သည်။

    ~/.deeppavlov

    ဒေါင်းလုဒ်လုပ်သောအခါ၊ ဒေါင်းလုဒ်လုပ်ထားသော အစိတ်အပိုင်းများ၏ hash ကို ဆာဗာပေါ်တွင်ရှိသော အစိတ်အပိုင်းများ၏ hashes နှင့် ဆန့်ကျင်ပြီး စစ်ဆေးပါသည်။ ကိုက်ညီမှုရှိလျှင် ဒေါင်းလုဒ်ကို ကျော်သွားမည်ဖြစ်ပြီး ရှိပြီးသားဖိုင်များကို အသုံးပြုပါသည်။ ဒေါင်းလုဒ်လုပ်ထားသော အစိတ်အပိုင်းများ၏ အရွယ်အစားများသည် ပျမ်းမျှအားဖြင့် 0.5 မှ 8 Gb အထိ ကွဲပြားနိုင်ပြီး အချို့ကိစ္စများတွင် ဇစ်ဖွင့်ပြီးနောက် 20 Gb အထိ ရောက်ရှိနိုင်သည်။

  3. ကျွန်ုပ်တို့သည် မော်ဒယ်ဖြင့် REST ဆာဗာကို စတင်လိုက်သည်-
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

ဤအမိန့်ကို အကောင်အထည်ဖော်ခြင်း၏ရလဒ်အနေဖြင့်၊ မော်ဒယ်တစ်ခုပါရှိသော REST ဆာဗာကို လက်ခံသူစက်၏ ပို့တ် 5005 တွင် စတင်လိမ့်မည် (မူလဆိပ်ကမ်းသည် 5000)။

မော်ဒယ်ကို စတင်ပြီးနောက်၊ API စာရွက်စာတမ်းနှင့် စမ်းသပ်နိုင်စွမ်းပါသော Swagger ကို URL တွင် တွေ့နိုင်ပါသည်။ http://127.0.0.1:5005. အဆုံးမှတ်သို့ ပေးပို့ခြင်းဖြင့် မော်ဒယ်ကို စမ်းသပ်ကြည့်ကြပါစို့ http://127.0.0.1:5005/model အောက်ပါ JSON အကြောင်းအရာဖြင့် တောင်းဆိုချက်ကို ပို့စ်တင်ပါ-

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

တုံ့ပြန်မှုအနေဖြင့် ကျွန်ုပ်တို့သည် အောက်ပါ 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"]
  ]
]

ဤဥပမာများကိုအသုံးပြု၍ DeepPavlov REST API ကို ခွဲခြမ်းစိတ်ဖြာပါမည်။

API DeepPavlov

DeepPavlov မော်ဒယ်တစ်ခုစီတွင် အနည်းဆုံး ထည့်သွင်းသည့် အကြောင်းပြချက်တစ်ခုရှိသည်။ REST API တွင်၊ အကြောင်းပြချက်များကို အမည်ပေးထားပြီး ၎င်းတို့၏အမည်များသည် အဝင်အဘိဓာန်၏သော့များဖြစ်သည်။ ကိစ္စအများစုတွင်၊ အငြင်းအခုံသည် လုပ်ဆောင်ရန် လိုအပ်သော စာသားဖြစ်သည်။ မော်ဒယ်များမှ ပြန်ပေးသော အကြောင်းပြချက်များနှင့် တန်ဖိုးများအကြောင်း နောက်ထပ်အချက်အလက်များကို စာရွက်စာတမ်း၏ MODELS ကဏ္ဍတွင် တွေ့နိုင်သည် DeepPavlov

ဥပမာတွင်၊ လိုင်းနှစ်ခုစာရင်းကို argument x သို့ ကူးသွားသည်၊ ၎င်းတို့တစ်ခုစီကို သီးခြား markup ပေးထားသည်။ DeepPavlov တွင်၊ မော်ဒယ်များအားလုံးသည် သီးခြားလုပ်ဆောင်သည့် တန်ဖိုးများကို စာရင်း (အသုတ်) အဖြစ် ထည့်သွင်းသည်။

“အသုတ်” ဟူသော ဝေါဟာရသည် စက်သင်ယူမှုနယ်ပယ်ကို ရည်ညွှန်းပြီး အယ်လဂိုရီသမ် သို့မဟုတ် အာရုံကြောကွန်ရက်တစ်ခုမှ တပြိုင်နက်လုပ်ဆောင်သည့် လွတ်လပ်သောထည့်သွင်းမှုတန်ဖိုးများကို အသုတ်လိုက် ရည်ညွှန်းသည်။ ဤချဉ်းကပ်မှုသည် သင့်အား မော်ဒယ်တစ်ခု၏ အသုတ်တစ်ခု၏ ဒြပ်စင်တစ်ခုအား သီးခြားစီထည့်သွင်းသည့်တန်ဖိုးနှင့် နှိုင်းယှဉ်ပါက (မကြာခဏ သိသိသာသာ) လျှော့ချနိုင်စေသည်။ သို့သော် အစိတ်အပိုင်းအားလုံးကို လုပ်ဆောင်ပြီးမှသာ လုပ်ငန်းစဉ်ရလဒ်ကို ထုတ်ပြန်သည်။ ထို့ကြောင့်၊ အဝင်အသုတ်တစ်ခုကို ထုတ်ပေးသောအခါ၊ ၎င်းသည် မော်ဒယ်၏အမြန်နှုန်းနှင့် ၎င်း၏အစိတ်အပိုင်းတစ်ခုချင်းစီအတွက် လိုအပ်သောလုပ်ဆောင်မှုအချိန်ကို ထည့်သွင်းစဉ်းစားရန် လိုအပ်မည်ဖြစ်သည်။

DeepPavlov မော်ဒယ်အတွက် ငြင်းခုံမှုများစွာရှိနေပါက၊ ၎င်းတို့တစ်ဦးစီသည် ၎င်း၏ကိုယ်ပိုင်တန်ဖိုးများကို လက်ခံရရှိကြပြီး ထွက်လာသည့်ရလဒ်တွင် မော်ဒယ်သည် အမြဲတမ်းအဖြေတစ်ခုစီထုတ်ပေးပါသည်။ အထွက်အသုတ်၏ဒြပ်စင်များသည် တူညီသောအညွှန်းဖြင့် အထွက်အသုတ်၏ဒြပ်စင်များကိုလုပ်ဆောင်ခြင်း၏ရလဒ်များဖြစ်သည်။

အထက်ဖော်ပြပါ ဥပမာတွင်၊ မော်ဒယ်၏ရလဒ်သည် စာကြောင်းတစ်ခုစီကို တိုကင်များ (စကားလုံးများနှင့် သတ်ပုံအမှတ်အသားများ) အဖြစ် ပိုင်းခြားပြီး ၎င်းကိုကိုယ်စားပြုသည့် အမည်ပေးထားသော အဖွဲ့အစည်း (အဖွဲ့အစည်းအမည်၊ ငွေကြေး) နှင့် ဆက်စပ်သော တိုကင်ကို အမျိုးအစားခွဲခြားရန်ဖြစ်သည်။ လောလောဆယ် မော်ဒယ် ner_ontonotes_bert_mult အမည်ပေးထားသည့် အဖွဲ့အစည်း 18 မျိုးကို အသိအမှတ်ပြုနိုင်ပြီး အသေးစိတ်ဖော်ပြချက်ကို တွေ့ရှိနိုင်သည်။ ဒီမှာ.

DeepPavlov ၏ အခြားသော ကွက်လပ်မဟုတ်သော မော်ဒယ်များ

NER အပြင်၊ အောက်ဖော်ပြပါ ကွက်လပ်ပုံစံ မော်ဒယ်များကို DeepPavlov တွင် ရေးနေချိန်တွင် ရရှိနိုင်ပါသည်။

စာသားမေးခွန်းဖြေဆိုခြင်း။

ဤစာသားအပိုင်းတစ်ပိုင်းဖြင့် စာသားကို မေးခွန်းကို ဖြေပါ။ မော်ဒယ်ပုံစံပြင်ဆင်မှု- squad_ru_bert_infer

ဥပမာ တောင်းဆိုပါ

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

ရလဒ်:

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

စော်ကားမှုကို ထောက်လှမ်းခြင်း။

စာသားပေးပို့ခံရသူအား စော်ကားမှုရှိနေခြင်းကို ထောက်လှမ်းခြင်း (ရေးသားချိန်တွင် - အင်္ဂလိပ်ဘာသာအတွက်သာ)။ မော်ဒယ် config- insults_kaggle_conv_bert

ဥပမာ တောင်းဆိုပါ


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

ရလဒ်:

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

စိတ်ဓါတ်ခွဲခြမ်းစိတ်ဖြာ

စာသားခံစားချက် (အပြုသဘော၊ ကြားနေ၊ အနုတ်) အမျိုးအစားခွဲခြားခြင်း။ မော်ဒယ်ပုံစံပြင်ဆင်မှု- rusentiment_elmo_twitter_cnn

ဥပမာ တောင်းဆိုပါ

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

ရလဒ်:

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

စာပိုဒ်ထောက်လှမ်းခြင်း။

မတူညီသော စာသားနှစ်ခုသည် တူညီသော အဓိပ္ပါယ်ရှိမရှိကို ဆုံးဖြတ်ခြင်း။ မော်ဒယ်ပုံစံပြင်ဆင်မှု- stand_paraphraser_en

တောင်းဆိုချက်ကို:

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

ရလဒ်:

[
  [1],
  [0]
]

DeepPavlov မော်ဒယ်များအားလုံး၏ လက်ရှိစာရင်းကို အမြဲတွေ့နိုင်သည်။ ဒီမှာ.

ကောက်ချက်

ဤဆောင်းပါးတွင်၊ DeepPavlov API နှင့် ကွက်လပ်အတွင်းမှ ပေးထားသည့် စာကြည့်တိုက်၏ စာသားလုပ်ဆောင်နိုင်မှုအချို့ကို ကျွန်ုပ်တို့ သိလာခဲ့သည်။ NLP လုပ်ငန်းတိုင်းအတွက်၊ လုပ်ငန်းတာဝန်၏ ဘာသာရပ်နယ်ပယ် (domain) နှင့် သက်ဆိုင်သည့် ဒေတာအစုံကို မော်ဒယ်ကို လေ့ကျင့်ပေးသောအခါတွင် အကောင်းဆုံးရလဒ်ကို ရရှိမည်ဖြစ်ကြောင်း သတိပြုသင့်သည်။ ထို့အပြင်၊ အခြေအနေအားလုံးအတွက်မူအရ၊ နောက်ထပ်မော်ဒယ်များကိုပင် မလေ့ကျင့်နိုင်ပါ။

အောက်ပါဆောင်းပါးများတွင် Docker မှ DeepPavlov ကိုဖွင့်ကာ စာကြည့်တိုက်၏နောက်ထပ်ဆက်တင်များကို ကြည့်ရှုမည်ဖြစ်ပြီး၊ ထို့နောက် လေ့ကျင့်ရေးမော်ဒယ်များဆီသို့ ဆက်လက်သွားပါမည်။ DeepPavlov ရှိကြောင်း မမေ့ပါနှင့် ဖိုရမ် - စာကြည့်တိုက်နှင့် မော်ဒယ်များနှင့် ပတ်သက်သော သင့်မေးခွန်းများကို မေးပါ။ ဂရုစိုက်တဲ့အတွက်ကျေးဇူးတင်ပါတယ်!

source: www.habr.com

မှတ်ချက် Add