DeepPavlov барои таҳиягарон: №1 Асбобҳои NLP ва эҷоди чатбот

Салом ба ҳама! Мо як силсила мақолаҳоро мекушоем, ки ба ҳалли масъалаҳои амалии марбут ба коркарди забони табиӣ (Processing Natural Language Processing ё танҳо NLP) ва эҷоди агентҳои муколама (чатботҳо) бо истифода аз китобхонаи кушодаасос бахшида шудаанд. ДепПавлов, ки онро дастаи мо дар Лабораторияи MIPT системаҳои асаб ва омӯзиши амиқ таҳия мекунад. Мақсади асосии силсила ин муаррифии DeepPavlov ба доираи васеи таҳиягарон ва нишон додани он аст, ки чӣ гуна шумо метавонед мушкилоти амалии NLP-ро бидуни дониши амиқ дар омӯзиши мошинсозӣ ва PhD дар математика ҳал кунед.

Вазифаҳои NLP муайян кардани ҳисси матн, таҳлили объектҳои номбаршуда, муайян кардани он, ки ҳамсӯҳбат аз боти шумо чӣ мехоҳад: пицца фармоиш диҳед ё маълумоти замина гиред ва ғайра. Шумо метавонед дар бораи вазифаҳо ва усулҳои NLP бештар хонед дар ин ҷо.

Дар ин мақола, мо ба шумо нишон медиҳем, ки чӣ гуна сервери REST-ро бо моделҳои қаблан омӯзонидашудаи NLP, ки барои истифода бидуни конфигуратсия ё омӯзиши иловагӣ омода аст, идора кунед.

DeepPavlov барои таҳиягарон: №1 Асбобҳои NLP ва эҷоди чатбот

Монтажи ДипПавлов

Дар ин ҷо ва дар зер дастурҳо барои Linux дода мешаванд. Барои Windows, ба мо нигаред ҳуҷҷатҳо

  • Бо версияи ҳозираи дастгирӣшудаи Python муҳити виртуалӣ эҷод ва фаъол кунед:
    virtualelnv env -p python3.7
    source env/bin/activate
  • DeepPavlovро дар муҳити виртуалӣ насб кунед:
    pip install deeppavlov
    

Оғози сервери REST бо модели DeepPavlov

Пеш аз он ки мо серверро бо модели DeepPavlov бори аввал оғоз кунем, дар бораи баъзе хусусиятҳои меъмории китобхона сӯҳбат кардан муфид хоҳад буд.

Ҳар як модели DP аз инҳо иборат аст:

  • Рамзи Python;
  • Ҷузъҳои зеркашишаванда - натиҷаҳои силсилавии омӯзиш оид ба маълумоти мушаххас (ба дохилкунӣ, вазнҳои шабакаҳои нейрон ва ғайра);
  • Файли конфигуратсия (минбаъд конфигуратсия номида мешавад), ки дорои маълумот дар бораи синфҳои аз ҷониби модел истифодашаванда, URL-и ҷузъҳои зеркашидашуда, вобастагии Python ва ғайра.

Мо ба шумо дар бораи он чизе, ки дар зери сарпӯши ДипПавлов аст, дар мақолаҳои зерин ба шумо бештар нақл хоҳем кард, ҳоло барои мо донистани он кифоя аст:

  • Ҳар як модел дар 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 Гб фарқ кунанд, дар баъзе ҳолатҳо пас аз кушодан ба 20 Гб мерасад.

  3. Мо сервери REST-ро бо модел оғоз мекунем:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Дар натиҷаи иҷрои ин фармон сервери REST бо модел дар порти 5005-и мошини ҳост оғоз мешавад (порти пешфарз 5000 аст).

Пас аз оғоз кардани модел, Swagger бо ҳуҷҷатҳои API ва қобилияти санҷишро дар URL пайдо кардан мумкин аст http://127.0.0.1:5005. Биёед моделро тавассути фиристодани он ба нуқтаи ниҳоӣ санҷем http://127.0.0.1:5005/model Дархости POST бо мундариҷаи зерини 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 ҳуҷҷатҳо пайдо кардан мумкин аст ДепПавлов

Дар мисол, рӯйхати ду сатр ба аргументи x гузаронида шуд, ки ҳар яки онҳо аломати алоҳида дода шудааст. Дар DeepPavlov, ҳама моделҳо ҳамчун вуруд рӯйхати (партияи) арзишҳоеро мегиранд, ки мустақилона коркард мешаванд.

Истилоҳи "партия" ба соҳаи омӯзиши мошинҳо дахл дорад ва ба маҷмӯи арзишҳои мустақили вуруд, ки дар як вақт аз ҷониби алгоритм ё шабакаи нейронӣ коркард мешаванд, ишора мекунад. Ин равиш ба шумо имкон медиҳад, ки вақти коркарди модел як элементи партияро дар муқоиса бо ҳамон арзише, ки ба воридот алоҳида интиқол дода мешавад, кам кунед (аксаран ба таври назаррас). Аммо натиҷаи коркард танҳо пас аз коркарди ҳама унсурҳо дода мешавад. Аз ин рӯ, ҳангоми тавлиди партияи воридотӣ, суръати модел ва вақти коркарди заруриро барои ҳар як унсури алоҳидаи он ба назар гирифтан лозим аст.

Агар ба модели ДипПавлов якчанд далел мавҷуд бошад, ҳар кадоми онҳо маҷмӯи арзишҳои худро мегиранд ва дар натиҷа модел ҳамеша як гурӯҳи ҷавобҳоро истеҳсол мекунад. Элементҳои партияи содиротӣ натиҷаи коркарди элементҳои партияҳои воридотӣ бо ҳамон индекс мебошанд.

Дар мисоли дар боло овардашуда, натиҷаи модел тақсим кардани ҳар як сатр ба аломатҳо (калимаҳо ва аломатҳои пунктуатсия) ва тасниф кардани нишона нисбат ба объекти номбаршуда (номи ташкилот, асъор), ки он намояндагӣ мекунад, буд. Дар айни замон модели ner_ontonotes_bert_mult қодир аст, ки 18 намуди субъектҳои номбаршударо эътироф кунад, тавсифи муфассалро пайдо кардан мумкин аст дар ин ҷо.

Дигар моделҳои берун аз қуттии ДипПавлов

Илова ба 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ро ҳамеша пайдо кардан мумкин аст дар ин ҷо.

хулоса

Дар ин мақола, мо бо API DeepPavlov ва баъзе аз имкониятҳои коркарди матни китобхона, ки аз қуттӣ дода шудааст, шинос шудем. Бояд дар назар дошт, ки барои ҳама гуна вазифаи NLP натиҷаи беҳтарин ҳангоми омӯзиши модел дар маҷмӯаи додаҳо, ки ба мавзӯи (домени) вазифа мувофиқ аст, ба даст меояд. Илова бар ин, моделҳои бештаре наметавонанд, аслан барои ҳама ҳолатҳо омӯзонида шаванд.

Дар мақолаҳои зерин мо танзимоти иловагии китобхонаро дида мебароем, ки DeepPavlovро аз Docker оғоз мекунем ва сипас ба моделҳои таълимӣ мегузарем. Ва фаромӯш накунед, ки ДипПавлов дорад форум - саволҳои худро дар бораи китобхона ва моделҳо диҳед. Ба диққататон ташаккур!

Манбаъ: will.com

Илова Эзоҳ