DeepPavlov garatzaileentzako: # 1 NLP tresnak eta txatbot sorkuntza

Kaixo guztioi! Lengoaia naturalaren prozesamenduarekin (Natural Language Processing edo, besterik gabe, NLP) eta kode irekiko liburutegi bat erabiliz elkarrizketa-eragileak (txatbot-ak) sortzen dituzten arazo praktikoak konpontzera zuzendutako artikulu sorta zabaltzen ari gara. DeepPavlov, gure taldeak MIPT Sistema Neuronalen eta Ikaskuntza Sakoneko Laborategian garatzen ari dena. Seriearen helburu nagusia DeepPavlov garatzaile ugariri aurkeztea da eta NLP aplikatutako problemak nola ebatzi ditzakezun erakustea Makina Ikaskuntzan eta Matematikan doktoretza ezagutza sakonik izan gabe.

NLP zereginen artean, testuaren sentimendua zehaztea, izendatutako entitateak analizatzea, solaskideak zure botetik zer nahi duen zehaztea: pizza eskatu edo atzeko planoko informazioa lortu eta askoz gehiago. NLP ataza eta metodoei buruzko informazio gehiago irakur dezakezu Hemen.

Artikulu honetan, aldez aurretik trebatutako NLP ereduekin REST zerbitzari bat nola exekutatu erakutsiko dizugu, inolako konfigurazio edo prestakuntza gehigarririk gabe erabiltzeko prest.

DeepPavlov garatzaileentzako: # 1 NLP tresnak eta txatbot sorkuntza

DeepPavlov-en instalazioa

Hemen eta behean, Linuxerako argibideak emango dira. Windows-erako, ikusi gure dokumentazioa

  • Sortu eta aktibatu ingurune birtual bat Python-en uneko onartzen den bertsioarekin:
    virtualelnv env -p python3.7
    source env/bin/activate
  • Instalatu DeepPavlov ingurune birtualean:
    pip install deeppavlov
    

REST zerbitzari bat abiarazten DeepPavlov ereduarekin

DeepPavlov eredua duen zerbitzari bat lehen aldiz abiarazi aurretik, erabilgarria izango da liburutegiaren arkitekturaren ezaugarri batzuei buruz hitz egitea.

DPko edozein eredu hauek osatzen dute:

  • Python kodea;
  • Deskargatu daitezkeen osagaiak - datu zehatzei buruzko serializatutako entrenamendu-emaitzak (txertaketak, neurona-sareen pisuak, etab.);
  • Konfigurazio fitxategi bat (aurrerantzean konfigurazioa deitzen zaio), ereduak erabiltzen dituen klaseei, deskargatutako osagaien URLei, Python-en mendekotasunei eta abarrei buruzko informazioa biltzen duena.

DeepPavlov-en kaputxoaren azpian dagoenari buruz gehiago esango dizugu hurrengo artikuluetan, oraingoz nahikoa da hori jakitea:

  • DeepPavlov-en edozein eredu bere konfigurazioaren izenarekin identifikatzen da;
  • Eredua exekutatzeko, bere osagaiak deskargatu behar dituzu DeepPavlov zerbitzarietatik;
  • Gainera, eredua exekutatzeko, erabiltzen dituen Python liburutegiak instalatu behar dituzu.

Abian jarriko dugun lehen eredua Eleaniztuna izango da Named Entity Recognition (NER). Ereduak testu-hitzak zein entitate izendun motaren arabera sailkatzen ditu (izen propioak, izen geografikoak, moneta izenak eta beste). NERren uneko azken bertsioaren konfigurazio izena:

ner_ontonotes_bert_mult

REST zerbitzaria abiarazten dugu ereduarekin:

  1. Bere konfigurazioan zehaztutako ereduen mendekotasunak ingurune birtual aktiboan instalatzen ditugu:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Deskargatu serieko ereduaren osagaiak DeepPavlov zerbitzarietatik:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Serializatutako osagaiak DeepPavlov hasierako direktoriora deskargatuko dira, lehenespenez kokatuta dagoena

    ~/.deeppavlov

    Deskargatzean, dagoeneko deskargatutako osagaien hash-a zerbitzarian kokatutako osagaien hashekin egiaztatzen da. Bat-etortzerik badago, deskarga saltatu eta lehendik dauden fitxategiak erabiltzen dira. Deskargatutako osagaien tamainak batez beste 0.5 eta 8 Gb bitartekoak izan daitezke, kasu batzuetan 20 Gb-ra iritsi arte deskonprimitu ondoren.

  3. REST zerbitzaria abiarazten dugu ereduarekin:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Komando hau exekutatzearen ondorioz, eredu bat duen REST zerbitzari bat abiaraziko da ostalari-makinaren 5005 atakan (ataka lehenetsia 5000 da).

Eredua hasieratu ondoren, Swagger API dokumentazioarekin eta probatzeko gaitasuna URLan aurki daiteke http://127.0.0.1:5005. Probatu dezagun eredua amaierako puntura bidaliz http://127.0.0.1:5005/model POST eskaera JSON eduki honekin:

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

Erantzun gisa JSON hau jaso beharko genuke:

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

Adibide hauek erabiliz, DeepPavlov REST APIa aztertuko dugu.

DeepPavlov APIa

DeepPavlov eredu bakoitzak sarrerako argumentu bat du gutxienez. REST APIan, argumentuak izendatzen dira, haien izenak sarrerako hiztegiaren gakoak dira. Kasu gehienetan, argumentua prozesatu behar den testua da. Ereduek itzultzen dituzten argudioei eta balioei buruzko informazio gehiago dokumentazioaren EREDUAK atalean aurki daiteke DeepPavlov

Adibidean, bi kate zerrenda bat pasatu zen x argumentuari, bakoitzari marka bereizia eman zitzaion. DeepPavlov-en, modelo guztiek modu independentean prozesatzen diren balioen zerrenda (sorta) hartzen dute sarrera gisa.

"Lote" terminoak ikaskuntza automatikoaren eremuari egiten dio erreferentzia eta algoritmo edo sare neuronal batek aldi berean prozesatutako sarrera-balio independenteen multzoari egiten dio erreferentzia. Ikuspegi honi esker, ereduak lote bateko elementu bat prozesatzen duen denbora murrizteko (askotan nabarmen) sarrerara bereizita pasatzen den balio berarekin alderatuta. Baina prozesatzeko emaitza elementu guztiak prozesatu ondoren bakarrik igortzen da. Hori dela eta, sarrerako lote bat sortzerakoan, beharrezkoa izango da ereduaren abiadura eta bere elementu bakoitzari dagokion prozesatzeko denbora kontuan hartzea.

DeepPavlov eredurako hainbat argumentu badaude, horietako bakoitzak bere balio sorta jasotzen du, eta irteeran ereduak erantzun sorta bat sortzen du beti. Irteerako lotearen elementuak indize berdina duten sarrerako loteen elementuak prozesatzearen emaitzak dira.

Goiko adibidean, ereduaren emaitza izan zen kate bakoitza tokenetan zatitzea (hitzak eta puntuazio-ikurrak) eta tokena izendatzen duen entitatearekiko (erakundearen izena, moneta) ordezkatzen duen aldean sailkatzea. Gaur egun eredua ner_ontonotes_bert_mult 18 entitate izendun mota ezagutzeko gai dena, deskribapen zehatza aurki daiteke Hemen.

DeepPavlov-ek kanpoko beste modelo batzuk

NERaz gain, deepPavlov-en eskuragarri daude eskuragarri dauden eredu hauek idazteko unean:

Testu Galdera Erantzuna

Erantzun testuari galderari testu honen zati batekin. Ereduaren konfigurazioa: squad_ru_bert_infer

Eskaera adibidea:

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

Emaitza:

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

Irainak detektatzeko

Testua zuzentzen zaion pertsonari irain baten presentzia antzematea (idazteko unean - ingeleserako bakarrik). Ereduaren konfigurazioa: insults_kaggle_conv_bert

Eskaera adibidea:


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

Emaitza:

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

Sentimenduen analisia

Testu-sentimenduaren sailkapena (positiboa, neutroa, negatiboa). Ereduaren konfigurazioa: rusentiment_elmo_twitter_cnn

Eskaera adibidea:

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

Emaitza:

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

Parafrasien detekzioa

Bi testu ezberdin esanahi bera duten zehaztea. Ereduaren konfigurazioa: stand_paraphraser_eu

Eskaera:

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

Emaitza:

[
  [1],
  [0]
]

DeepPavlov modelo guztien egungo zerrenda beti aurki daiteke Hemen.

Ondorioa

Artikulu honetan, DeepPavlov APIa eta kutxatik kanpo emandako liburutegiak testuak prozesatzeko gaitasun batzuk ezagutu ditugu. Kontuan izan behar da NLPko edozein atazatarako, eredua atazaren gai-arloari (domeinuari) dagokion datu-multzo batean entrenatzean lortuko dela emaitzarik onena. Gainera, are eredu gehiago ezin dira, printzipioz, egoera guztietarako trebatu.

Hurrengo artikuluetan liburutegiaren ezarpen osagarriak aztertuko ditugu, Docker-etik DeepPavlov abiaraziz, eta ondoren trebakuntza ereduetara pasatuko gara. Eta ez ahaztu DeepPavlovek duela foroa – Liburutegiari eta ereduei buruzko galderak egin. Eskerrik asko zure arretagatik!

Iturria: www.habr.com

Gehitu iruzkin berria