සංවර්ධකයින් සඳහා DeepPavlov: #1 NLP මෙවලම් සහ chatbot නිර්මාණය

ආයුබෝවන් සියල්ලටම! අපි ස්වභාවික භාෂා සැකසුම් (ස්වාභාවික භාෂා සැකසීම හෝ සරලව NLP) සම්බන්ධ ප්‍රායෝගික ගැටලු විසඳීමට සහ විවෘත මූලාශ්‍ර පුස්තකාලයක් භාවිතයෙන් සංවාද නියෝජිතයන් (chatbots) නිර්මාණය කිරීමට කැප වූ ලිපි මාලාවක් විවෘත කරන්නෙමු. DeepPavlov, ස්නායු පද්ධති සහ ගැඹුරු ඉගෙනුම් පිළිබඳ MIPT රසායනාගාරයේ අපගේ කණ්ඩායම විසින් සංවර්ධනය කරනු ලැබේ. මාලාවේ ප්‍රධාන පරමාර්ථය වන්නේ පුළුල් පරාසයක සංවර්ධකයින්ට DeepPavlov හඳුන්වා දීම සහ යන්ත්‍ර ඉගෙනීම සහ ගණිතය පිළිබඳ ආචාර්ය උපාධිය පිළිබඳ ගැඹුරු දැනුමක් නොමැතිව ව්‍යවහාරික NLP ගැටළු විසඳිය හැකි ආකාරය පෙන්වීමයි.

NLP කර්තව්‍යයන් අතරට පෙළෙහි හැඟීම් නිර්ණය කිරීම, නම් කරන ලද ආයතන විග්‍රහ කිරීම, ඔබේ බොට් වෙතින් මැදිහත්කරුට අවශ්‍ය දේ තීරණය කිරීම: පීසා ඇණවුම් කිරීම හෝ පසුබිම් තොරතුරු ලබා ගැනීම සහ තවත් බොහෝ දේ ඇතුළත් වේ. ඔබට NLP කාර්යයන් සහ ක්‍රම ගැන වැඩිදුර කියවිය හැක මෙහි.

මෙම ලිපියෙන්, කිසිදු අමතර වින්‍යාසයකින් හෝ පුහුණුවකින් තොරව භාවිතා කිරීමට සුදානම්, පූර්ව පුහුණු NLP මාදිලි සමඟ REST සේවාදායකයක් ධාවනය කරන්නේ කෙසේදැයි අපි ඔබට පෙන්වන්නෙමු.

සංවර්ධකයින් සඳහා DeepPavlov: #1 NLP මෙවලම් සහ chatbot නිර්මාණය

DeepPavlov ස්ථාපනය කිරීම

මෙහි සහ පහතින්, Linux සඳහා උපදෙස් ලබා දෙනු ඇත. වින්ඩෝස් සඳහා, අපගේ බලන්න ලේඛනගත කිරීම

  • Python හි වත්මන් සහය දක්වන අනුවාදය සමඟ අතථ්‍ය පරිසරයක් සාදන්න සහ සක්‍රිය කරන්න:
    virtualelnv env -p python3.7
    source env/bin/activate
  • අතථ්‍ය පරිසරයක DeepPavlov ස්ථාපනය කරන්න:
    pip install deeppavlov
    

DeepPavlov ආකෘතිය සමඟ REST සේවාදායකයක් දියත් කිරීම

අපි පළමු වරට DeepPavlov ආකෘතිය සමඟ සේවාදායකයක් දියත් කිරීමට පෙර, පුස්තකාලයේ ගෘහ නිර්මාණ ශිල්පයේ සමහර විශේෂාංග ගැන කතා කිරීම ප්රයෝජනවත් වනු ඇත.

DP හි ඕනෑම ආකෘතියක් සමන්විත වන්නේ:

  • පයිතන් කේතය;
  • බාගත කළ හැකි සංරචක - නිශ්චිත දත්ත මත අනුක්රමික පුහුණු ප්රතිඵල (කාවැද්දීම, ස්නායු ජාල වල බර, ආදිය);
  • වින්‍යාස ගොනුවක් (මෙතැන් සිට වින්‍යාසය ලෙස හැඳින්වේ), ආකෘතිය විසින් භාවිතා කරන පන්ති, බාගත කළ සංරචකවල URL, පයිතන් පරායත්තතා ආදිය පිළිබඳ තොරතුරු අඩංගු වේ.

පහත ලිපි වලින් අපි DeepPavlov යට ඇති දේ ගැන වැඩි විස්තර ඔබට කියන්නෙමු, දැනට අපට එය දැන ගැනීමට ප්‍රමාණවත් වේ:

  • DeepPavlov හි ඕනෑම ආකෘතියක් එහි වින්යාසයේ නමෙන් හඳුනාගෙන ඇත;
  • ආකෘතිය ක්රියාත්මක කිරීම සඳහා, ඔබ DeepPavlov සේවාදායකයන්ගෙන් එහි සංරචක බාගත කළ යුතුය;
  • එසේම, ආකෘතිය ක්රියාත්මක කිරීම සඳහා, ඔබ එය භාවිතා කරන Python පුස්තකාල ස්ථාපනය කළ යුතුය.

අපි දියත් කරන පළමු මාදිලිය බහුභාෂා නම් කරන ලද ආයතන හඳුනාගැනීම (NER) වේ. ආකෘතිය ඔවුන් අයත් වන නම් කරන ලද ආයතන වර්ගය අනුව පෙළ වචන වර්ගීකරණය කරයි (නිසි නම්, භූගෝලීය නම්, මුදල්වල නම් සහ වෙනත්). NER හි වත්මන් නවතම අනුවාදය සඳහා වින්‍යාස නාමය:

ner_ontonotes_bert_mult

අපි ආකෘතිය සමඟ REST සේවාදායකය දියත් කරමු:

  1. අපි එහි වින්‍යාසයේ දක්වා ඇති ආදර්ශ පරායත්තතා සක්‍රීය අථත්‍ය පරිසරයට ස්ථාපනය කරමු:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. DeepPavlov සේවාදායකයන් වෙතින් අනුක්‍රමික ආකෘති සංරචක බාගන්න:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    අනුක්‍රමික සංරචක පෙරනිමියෙන් පිහිටා ඇති DeepPavlov ගෘහ නාමාවලිය වෙත බාගත කරනු ලැබේ.

    ~/.deeppavlov

    බාගත කිරීමේදී, දැනටමත් බාගත කර ඇති සංරචකවල හැෂ් සේවාදායකයේ ඇති සංරචකවල හැෂ් වලට එරෙහිව පරීක්ෂා කරනු ලැබේ. ගැළපීමක් තිබේ නම්, බාගත කිරීම මඟ හැරී ඇති අතර පවතින ගොනු භාවිතා කරනු ලැබේ. බාගත කළ සංරචකවල ප්‍රමාණය සාමාන්‍යයෙන් 0.5 සිට 8 Gb දක්වා වෙනස් විය හැක, සමහර අවස්ථාවලදී unzip කිරීමෙන් පසු 20 Gb දක්වා ළඟා වේ.

  3. අපි ආකෘතිය සමඟ REST සේවාදායකය දියත් කරමු:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

මෙම විධානය ක්රියාත්මක කිරීමේ ප්රතිඵලයක් ලෙස, ධාරක යන්ත්රයේ 5005 වරාය මත ආකෘතියක් සහිත REST සේවාදායකයක් දියත් කරනු ලැබේ (පෙරනිමි වරාය 5000).

ආකෘතිය ආරම්භ කිරීමෙන් පසු, API ලේඛනගත කිරීම් සමඟ Swagger සහ පරීක්ෂා කිරීමේ හැකියාව URL හි සොයාගත හැකිය http://127.0.0.1:5005. අපි එය අවසන් ලක්ෂ්‍යයට යැවීමෙන් ආකෘතිය පරීක්ෂා කරමු http://127.0.0.1:5005/model පහත JSON අන්තර්ගතය සමඟ POST ඉල්ලීම:

{
  "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

උදාහරණයේදී, තන්තු දෙකක ලැයිස්තුවක් x තර්කයට යවන ලද අතර, ඒ සෑම එකක්ම වෙන වෙනම සලකුණු කර ඇත. 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]
]

අපහාස හඳුනාගැනීම

පෙළ ආමන්ත්‍රණය කර ඇති පුද්ගලයාට අපහාසයක් ඇති බව හඳුනා ගැනීම (ලියන අවස්ථාවේදී - ඉංග්‍රීසි සඳහා පමණි). ආදර්ශ වින්‍යාසය: 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 කාර්යයක් සඳහා, කාර්යයේ විෂය ක්ෂේත්රයට (වසම්) අනුරූප දත්ත කට්ටලයක් මත ආකෘතිය පුහුණු කිරීමේදී හොඳම ප්රතිඵලය ලබා ගත හැකි බව මතක තබා ගත යුතුය. ඊට අමතරව, ඊටත් වඩා ආකෘති, ප්‍රතිපත්තිමය වශයෙන්, සියලු තත්වයන් සඳහා පුහුණු කළ නොහැක.

පහත ලිපිවල අපි පුස්තකාලයේ අතිරේක සැකසුම් දෙස බලමු, Docker වෙතින් DeepPavlov දියත් කිරීම, පසුව අපි පුහුණු ආකෘති වෙත යන්නෙමු. DeepPavlov සතුව ඇති බව අමතක නොකරන්න සංසදය - පුස්තකාලය සහ ආකෘති සම්බන්ධයෙන් ඔබේ ප්‍රශ්න අසන්න. ඔබගේ අවදානය පිළිබඳ ස්තූතියි!

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න