DeepPavlov иштеп чыгуучулар үчүн: №1 NLP куралдары жана чатбот түзүү

Баарына салам! Табигый тилди иштетүү (Natural Language Processing же жөн гана NLP) жана ачык булактуу китепкананы колдонуу менен диалог агенттерин (чатботтор) түзүүгө байланыштуу практикалык маселелерди чечүүгө арналган макалалардын сериясын ачып жатабыз. ДепПавловMIPT Нейрондук системалар жана терең үйрөнүү лабораториясында биздин команда тарабынан иштелип чыккан. Сериянын негизги максаты - DeepPavlovду иштеп чыгуучулардын кеңири чөйрөсүнө тааныштыруу жана машинаны үйрөнүү жана математика боюнча PhD боюнча терең билимге ээ болбостон, колдонмо NLP маселелерин кантип чечсе болорун көрсөтүү.

NLP тапшырмаларына тексттин маанайын аныктоо, аталган объекттерди талдоо, маектешиңиз сиздин ботуңуздан эмне кааларын аныктоону камтыйт: пиццага заказ бериңиз же маалымат алуу жана башка көптөгөн нерселер. Сиз NLP милдеттери жана ыкмалары жөнүндө көбүрөөк окуй аласыз бул жерде.

Бул макалада биз эч кандай кошумча конфигурациясыз же машыгуусуз колдонууга даяр, алдын ала үйрөтүлгөн NLP моделдери менен REST серверин кантип иштетүү керектигин көрсөтөбүз.

DeepPavlov иштеп чыгуучулар үчүн: №1 NLP куралдары жана чатбот түзүү

DeepPavlov орнотуу

Бул жерде жана төмөндө Linux үчүн нускамалар берилет. Windows үчүн биздин караңыз документтештирүү

  • Учурдагы колдоого алынган Python версиясы менен виртуалдык чөйрөнү түзүңүз жана иштетиңиз:
    virtualelnv env -p python3.7
    source env/bin/activate
  • DeepPavlovду виртуалдык чөйрөдө орнотуу:
    pip install deeppavlov
    

DeepPavlov модели менен REST серверин ишке киргизүү

DeepPavlov модели менен серверди биринчи жолу ишке киргизүүдөн мурун китепкананын архитектурасынын кээ бир өзгөчөлүктөрү жөнүндө сөз кылуу пайдалуу болот.

DP ар кандай модели турат:

  • Python коду;
  • Жүктөлүп алынуучу компоненттер - белгилүү бир маалыматтар боюнча сериялаштырылган окутуу натыйжалары (киргизүү, нейрон тармактарынын салмагы ж.б.);
  • Конфигурация файлы (мындан ары - конфигурация), анда модель колдонгон класстар, жүктөлүп алынган компоненттердин URL даректери, Python көз карандылыктары ж.б.

Биз төмөнкү макалаларда DeepPavlov капотунун астында эмне жөнүндө көбүрөөк айтып берем, азыр биз үчүн бул жетиштүү:

  • DeepPavlovдогу ар кандай модель анын конфигурациясынын аты менен аныкталат;
  • Моделди иштетүү үчүн анын компоненттерин DeepPavlov серверлеринен жүктөө керек;
  • Ошондой эле, моделди иштетүү үчүн, ал колдонгон Python китепканаларын орнотуу керек.

Биз ишке киргизе турган биринчи модель көп тилдүү Named Entity Recognition (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
    

Бул буйрукту аткаруунун натыйжасында, хост машинасынын 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до бардык моделдер өз алдынча иштетилген баалуулуктардын тизмесин (партиясын) киргизүү катары кабыл алышат.

"Партия" термини машина үйрөнүү тармагын билдирет жана бир эле учурда алгоритм же нейрон тармагы тарабынан иштетилген көз карандысыз киргизүү баалуулуктарынын партиясын билдирет. Бул ыкма киргизүүгө өзүнчө берилген ошол эле мааниге салыштырганда, моделдин партиянын бир элементин иштетүү убактысын кыскартууга (көбүнчө олуттуу) мүмкүндүк берет. Бирок кайра иштетүү натыйжасы бардык элементтер иштетилгенден кийин гана чыгарылат. Ошондуктан, келип түшкөн партияны түзүүдө моделдин ылдамдыгын жана анын жеке элементтеринин ар бири үчүн талап кылынган иштетүү убактысын эске алуу зарыл.

Эгерде 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 моделдеринин учурдагы тизмесин ар дайым табууга болот бул жерде.

жыйынтыктоо

Бул макалада биз DeepPavlov API жана кутудан тышкары берилген китепкананын кээ бир текстти иштетүү мүмкүнчүлүктөрү менен тааныштык. Ар кандай NLP тапшырмасы үчүн тапшырманын предметтик аймагына (доменине) туура келген маалыматтар топтому боюнча моделди окутууда эң жакшы натыйжага жетээрин эстен чыгарбоо керек. Мындан тышкары, андан да көп моделдер, негизинен, бардык жагдайлар үчүн окутуу мүмкүн эмес.

Кийинки макалаларда биз китепкананын кошумча жөндөөлөрүн карап чыгабыз, DeepPavlovду Dockerден ишке киргизип, андан кийин окутуу моделдерине өтөбүз. ДипПавлов да бар экенин унутпаңыз Суперстан – китепкана жана моделдер боюнча суроолоруңузду бериңиз. Конул бурганын учун рахмат!

Source: www.habr.com

Комментарий кошуу