DeepPavlov por programistoj: n-ro 1 NLP-iloj kaj babilbot-kreado

Saluton al ĉiuj! Ni malfermas serion da artikoloj dediĉitaj al solvi praktikajn problemojn ligitajn al natura lingvoprilaborado (Naturlingva prilaborado aŭ simple NLP) kaj krei dialogagentojn (babilbots) uzante malfermfontan bibliotekon. ProfundePavlov, kiu estas disvolvita de nia teamo ĉe la MIPT Laboratorio de Neŭralaj Sistemoj kaj Profunda Lernado. La ĉefa celo de la serio estas prezenti DeepPavlov al larĝa gamo de programistoj kaj montri kiel vi povas solvi aplikatajn NLP-problemojn sen havi profundan scion pri Maŝina Lernado kaj PhD en Matematiko.

NLP-taskoj inkluzivas determini la senton de la teksto, analizi nomitajn entojn, determini kion la interparolanto volas de via bot: mendi picon aŭ ricevi fonajn informojn, kaj multe pli. Vi povas legi pli pri NLP-taskoj kaj metodoj tie.

En ĉi tiu artikolo, ni montros al vi kiel ruli REST-servilon kun antaŭtrejnitaj NLP-modeloj, pretaj por uzi sen iu plia agordo aŭ trejnado.

DeepPavlov por programistoj: n-ro 1 NLP-iloj kaj babilbot-kreado

Instalado de DeepPavlov

Ĉi tie kaj sube, instrukcioj por Linukso estos donitaj. Por Vindozo, vidu nian dokumentado

  • Kreu kaj aktivigu virtualan medion kun la nuna subtenata versio de Python:
    virtualelnv env -p python3.7
    source env/bin/activate
  • Instalu DeepPavlov en virtuala medio:
    pip install deeppavlov
    

Lanĉante REST-servilon kun la modelo DeepPavlov

Antaŭ ol ni lanĉos servilon kun la modelo DeepPavlov por la unua fojo, estos utile paroli pri iuj trajtoj de la arkitekturo de la biblioteko.

Ajna modelo en DP konsistas el:

  • Python-kodo;
  • Elŝuteblaj komponantoj - seriigitaj trejnaj rezultoj pri specifaj datumoj (enkonstruadoj, pezoj de neŭralaj retoj ktp.);
  • Agorda dosiero (ĉi-poste nomata agordo), kiu enhavas informojn pri la klasoj uzataj de la modelo, URL-ojn de elŝutitaj komponantoj, Python-dependecoj, ktp.

Ni rakontos al vi pli pri tio, kio estas sub la kapuĉo de DeepPavlov en la sekvaj artikoloj, nuntempe sufiĉas por ni scii tion:

  • Ajna modelo en DeepPavlov estas identigita per la nomo de sia agordo;
  • Por ruli la modelon, vi devas elŝuti ĝiajn komponantojn de la DeepPavlov-serviloj;
  • Ankaŭ, por ruli la modelon, vi devas instali la Python-bibliotekojn, kiujn ĝi uzas.

La unua modelo, kiun ni lanĉos, estos plurlingva Rekono de Nomita Ento (NER). La modelo klasifikas tekstovortojn laŭ la speco de nomitaj estaĵoj al kiuj ili apartenas (propraj nomoj, geografiaj nomoj, nomoj de valutoj kaj aliaj). Agorda nomo por la nuna plej lastatempa versio de NER:

ner_ontonotes_bert_mult

Ni lanĉas la REST-servilon kun la modelo:

  1. Ni instalas la modelajn dependecojn specifitajn en ĝia agordo en la aktivan virtualan medion:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Elŝutu seriigitajn modelkomponentojn de DeepPavlov-serviloj:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    La seriigitaj komponantoj estos elŝutitaj al la hejma dosierujo DeepPavlov, kiu troviĝas defaŭlte

    ~/.deeppavlov

    Dum elŝuto, la hash de jam elŝutitaj komponantoj estas kontrolita kontraŭ la hash de komponantoj situantaj sur la servilo. Se estas kongruo, la elŝuto estas preterlasita kaj ekzistantaj dosieroj estas uzataj. La grandecoj de elŝutitaj komponantoj povas varii averaĝe de 0.5 ĝis 8 Gb, en iuj kazoj atingante 20 Gb post malzipo.

  3. Ni lanĉas la REST-servilon kun la modelo:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Kiel rezulto de ekzekuto de ĉi tiu komando, REST-servilo kun modelo estos lanĉita sur la haveno 5005 de la gastiga maŝino (la defaŭlta haveno estas 5000).

Post komencado de la modelo, Swagger kun API-dokumentado kaj la kapablo testi troveblas ĉe la URL http://127.0.0.1:5005. Ni provu la modelon sendante ĝin al la finpunkto http://127.0.0.1:5005/model POST-peto kun la sekva JSON-enhavo:

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

Responde ni devus ricevi la jenan 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"]
  ]
]

Uzante ĉi tiujn ekzemplojn, ni analizos la DeepPavlov REST API.

API DeepPavlov

Ĉiu DeepPavlov-modelo havas almenaŭ unu enigargumenton. En la REST API, argumentoj estas nomitaj, iliaj nomoj estas la ŝlosiloj de la envenanta vortaro. Plejofte, la argumento estas la teksto, kiu devas esti prilaborita. Pliaj informoj pri argumentoj kaj valoroj redonitaj de modeloj troveblas en la sekcio MODELOJ de la dokumentado. ProfundePavlov

En la ekzemplo, listo de du ŝnuroj estis pasita al argumento x, ĉiu el kiuj ricevis apartan markadon. En DeepPavlov, ĉiuj modeloj prenas kiel enigon liston (aron) de valoroj, kiuj estas procesitaj sendepende.

La esprimo "aro" rilatas al la kampo de maŝinlernado kaj rilatas al aro de sendependaj enigvaloroj prilaboritaj per algoritmo aŭ neŭrala reto samtempe. Ĉi tiu aliro permesas redukti (ofte signife) la tempon, kiam la modelo prilaboras unu elementon de aro kompare kun la sama valoro pasigita al la enigo aparte. Sed la pretiga rezulto estas elsendita nur post kiam ĉiuj elementoj estas prilaboritaj. Tial, kiam vi generas envenantan aron, devos konsideri la rapidecon de la modelo kaj la bezonatan pretigtempon por ĉiu el ĝiaj individuaj elementoj.

Se estas pluraj argumentoj al la modelo DeepPavlov, ĉiu el ili ricevas sian propran aron da valoroj, kaj ĉe la eligo la modelo ĉiam produktas unu aron da respondoj. La elementoj de la eliranta aro estas la rezultoj de prilaborado de la elementoj de la envenantaj aroj kun la sama indekso.

En la supra ekzemplo, la rezulto de la modelo estis malkonstrui ĉiun ŝnuron en ĵetonojn (vortoj kaj interpunkciaj signoj) kaj klasifiki la ĵetonon relative al la nomita ento (organiza nomo, valuto) kiun ĝi reprezentas. Nuntempe la modelo ner_ontonotes_bert_mult kapabla rekoni 18 specojn de nomitaj entoj, detala priskribo troveblas tie.

Aliaj elkonstruitaj modeloj de DeepPavlov

Aldone al NER, la sekvaj elkonstruitaj modeloj estas disponeblaj en DeepPavlov en la momento de la skribado:

Teksta Demando Respondo

Respondu la demandon al la teksto per fragmento de ĉi tiu teksto. Modela agordo: squad_ru_bert_infer

Ekzempla peto:

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

Rezulto:

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

Detekto de insultoj

Malkovro de ĉeesto de insulto al la persono al kiu la teksto estas adresita (je la skribado - nur por la angla). Modela agordo: insults_kaggle_conv_bert

Ekzempla peto:


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

Rezulto:

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

Analizo de sentoj

Klasifiko de teksta sento (pozitiva, neŭtrala, negativa). Modela agordo: rusentiment_elmo_twitter_cnn

Ekzempla peto:

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

Rezulto:

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

Parafraza Detekto

Determini ĉu du malsamaj tekstoj havas la saman signifon. Modela agordo: stand_paraphraser_en

Peto:

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

Rezulto:

[
  [1],
  [0]
]

La nuna listo de ĉiuj el-ekzemple DeepPavlov-modeloj ĉiam troveblas tie.

konkludo

En ĉi tiu artikolo, ni konatiĝis kun la DeepPavlov API kaj iuj el la teksttraktadkapabloj de la biblioteko provizita el la skatolo. Oni devas memori, ke por iu ajn NLP-tasko, la plej bona rezulto estos atingita dum trejnado de la modelo sur datuma aro responda al la temo (domajno) de la tasko. Krome, eĉ pli da modeloj principe ne povas esti trejnitaj por ĉiuj situacioj.

En la sekvaj artikoloj ni rigardos pliajn agordojn de la biblioteko, lanĉante DeepPavlov de Docker, kaj poste ni pluiros al trejnado de modeloj. Kaj ne forgesu, ke DeepPavlov havas la forumo – faru viajn demandojn pri la biblioteko kaj modeloj. Dankon pro via atento!

fonto: www.habr.com

Aldoni komenton