Hæ allir! Við erum að opna röð greina sem varið er til að leysa hagnýt vandamál sem tengjast náttúrulegri málvinnslu (Natural Language Processing eða einfaldlega NLP) og búa til samskiptamiðla (chatbots) með því að nota opið bókasafn
NLP verkefni fela í sér að ákvarða viðhorf textans, flokka nafngreindar einingar, ákvarða hvað viðmælandinn vill fá frá botni þínum: pantaðu pizzu eða fáðu bakgrunnsupplýsingar og margt fleira. Þú getur lesið meira um NLP verkefni og aðferðir
Í þessari grein munum við sýna þér hvernig á að keyra REST netþjón með fyrirfram þjálfuðum NLP gerðum, tilbúnar til notkunar án frekari uppsetningar eða þjálfunar.
Uppsetning DeepPavlov
Hér og hér að neðan verða leiðbeiningar fyrir Linux gefnar. Fyrir Windows, sjá okkar
- Búðu til og virkjaðu sýndarumhverfi með núverandi studdu útgáfu af Python:
virtualelnv env -p python3.7 source env/bin/activate
- Settu upp DeepPavlov í sýndarumhverfi:
pip install deeppavlov
REST netþjónn með DeepPavlov líkaninu
Áður en við ræsum netþjón með DeepPavlov líkaninu í fyrsta skipti, mun vera gagnlegt að tala um nokkra eiginleika arkitektúrs bókasafnsins.
Sérhver líkan í DP samanstendur af:
- Python kóða;
- Niðurhalanlegir íhlutir - raðgreinar þjálfunarniðurstöður á tilteknum gögnum (innfelling, þyngd tauganeta osfrv.);
- Stillingarskrá (hér eftir nefnd stillingin), sem inniheldur upplýsingar um flokka sem líkanið notar, vefslóðir niðurhalaðra íhluta, Python ósjálfstæði o.s.frv.
Við munum segja þér meira um hvað er undir hettunni á DeepPavlov í eftirfarandi greinum, í bili er nóg fyrir okkur að vita það:
- Sérhver líkan í DeepPavlov er auðkennd með nafni stillingar þess;
- Til að keyra líkanið þarftu að hlaða niður íhlutum þess frá DeepPavlov netþjónunum;
- Einnig, til að keyra líkanið, þarftu að setja upp Python bókasöfnin sem það notar.
Fyrsta líkanið sem við munum setja á markað verður fjöltyngd nafngreind einingaviðurkenning (NER). Líkanið flokkar textaorð eftir tegund nafngreindra eininga sem þau tilheyra (eiginheiti, landfræðileg heiti, heiti gjaldmiðla og fleira). Stillingarheiti fyrir nýjustu útgáfuna af NER:
ner_ontonotes_bert_mult
Við ræsum REST netþjóninn með líkaninu:
- Við setjum upp líkanaháðirnar sem tilgreindar eru í stillingum þess í virka sýndarumhverfið:
python -m deeppavlov install ner_ontonotes_bert_mult
- Hladdu niður raðbundnum gerðahlutum frá DeepPavlov netþjónum:
python -m deeppavlov download ner_ontonotes_bert_mult
Serialized íhlutunum verður hlaðið niður í DeepPavlov heimaskrána, sem er sjálfgefið
~/.deeppavlov
Við niðurhal er kjötkássa þegar niðurhalaðra íhluta athugað á móti kjötkássa íhluta sem staðsettir eru á þjóninum. Ef það er samsvörun er niðurhalinu sleppt og núverandi skrár notaðar. Stærðir niðurhalaðra íhluta geta verið breytilegar að meðaltali frá 0.5 til 8 Gb, í sumum tilfellum náð 20 Gb eftir að hafa verið teknar upp.
- Við ræsum REST netþjóninn með líkaninu:
python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
Sem afleiðing af framkvæmd þessarar skipunar verður REST netþjónn með fyrirmynd ræstur á höfn 5005 á hýsingarvélinni (sjálfgefin höfn er 5000).
Eftir að hafa frumstillt líkanið er Swagger með API skjölum og getu til að prófa að finna á vefslóðinni http://127.0.0.1:5005
. Prófum líkanið með því að senda það á endapunktinn http://127.0.0.1:5005/model
POST beiðni með eftirfarandi JSON efni:
{
"x": [
"В МФТИ можно добраться на электричке с Савёловского Вокзала.",
"В юго-западной Руси стог жита оценен в 15 гривен"
]
}
Sem svar ættum við að fá eftirfarandi 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"]
]
]
Með því að nota þessi dæmi munum við greina DeepPavlov REST API.
API DeepPavlov
Hvert DeepPavlov líkan hefur að minnsta kosti eina inntaksrök. Í REST API eru rökum nefndir, nöfn þeirra eru lyklar innkominnar orðabókar. Í flestum tilfellum eru rökin sá texti sem þarf að vinna úr. Frekari upplýsingar um rök og gildi sem líkön skila er að finna í MODELS hluta skjalanna
Í dæminu var listi með tveimur strengjum sendur yfir í viðfangsefni x, sem hver um sig fékk sérstaka merkingu. Í DeepPavlov taka allar gerðir sem inntak lista (lotu) yfir gildi sem eru unnin sjálfstætt.
Hugtakið „lotur“ vísar til sviði vélanáms og vísar til hóps óháðra inntaksgilda sem unnið er með reiknirit eða taugakerfi samtímis. Þessi nálgun gerir þér kleift að draga úr (oft verulega) þeim tíma sem líkanið vinnur úr einum þætti í lotu samanborið við sama gildi sem er sent til inntaksins sérstaklega. En vinnsluniðurstaðan er aðeins gefin út eftir að búið er að vinna úr öllum þáttum. Þess vegna, þegar þú býrð til komandi lotu, verður nauðsynlegt að taka tillit til hraða líkansins og nauðsynlegs vinnslutíma fyrir hvern einstakan þátt þess.
Ef það eru nokkur rök fyrir DeepPavlov líkaninu fær hvert þeirra sína eigin lotu af gildum og við úttakið framleiðir líkanið alltaf eina lotu af svörum. Þættirnir í útgefnu lotunni eru niðurstöður úr vinnslu á þáttum komandi lotunnar með sömu vísitölu.
Í dæminu hér að ofan var niðurstaða líkansins sú að sundurliða hvern streng í tákn (orð og greinarmerki) og flokka táknið miðað við nafngreinda einingu (heiti fyrirtækis, gjaldmiðill) sem það táknar. Eins og er fyrirmyndin ner_ontonotes_bert_mult sem er fær um að þekkja 18 tegundir nafngreindra aðila, nákvæma lýsingu er að finna
Aðrar gerðir út úr kassanum frá DeepPavlov
Auk NER eru eftirfarandi gerðir út úr kassanum fáanlegar í DeepPavlov þegar þetta er skrifað:
Svar við textaspurningum
Svaraðu spurningunni við textann með broti af þessum texta. Gerð stillingar: squad_ru_bert_infer
Dæmi um beiðni:
{
"context_raw": [
"DeepPavlov разрабатывается лабораторией МФТИ.",
"В юго-западной Руси стог жита оценен в 15 гривен."
],
"question_raw": [
"Кем разрабатывается DeepPavlov?",
"Сколько стоил стог жита на Руси?"
]
}
Niðurstaða:
[
["лабораторией МФТИ", 27, 31042.484375],
["15 гривен", 39, 1049.598876953125]
]
Móðgunarskynjun
Greining á tilvist móðgunar við þann sem textinn er stílaður á (þegar þetta er skrifað - aðeins fyrir ensku). Gerð stillingar: insults_kaggle_conv_bert
Dæmi um beiðni:
{
"x": [
"Money talks, bullshit walks.",
"You are not the brightest one."
]
}
Niðurstaða:
[
["Not Insult"],
["Insult"]
]
Tilfinningagreining
Flokkun textaviðhorfa (jákvæð, hlutlaus, neikvæð). Gerð stillingar: rusentiment_elmo_twitter_cnn
Dæmi um beiðni:
{
"x": [
"Мне нравится библиотека DeepPavlov.",
"Я слышал о библиотеке DeepPavlov.",
"Меня бесят тролли и анонимусы."
]
}
Niðurstaða:
[
["positive"],
["neutral"],
["negative"]
]
Umorðsgreining
Að ákvarða hvort tveir ólíkir textar hafi sömu merkingu. Gerð stillingar: standa_paraphraser_en
Beiðni:
{
"text_a": [
"Город погружается в сон, просыпается Мафия.",
"Президент США пригрозил расторжением договора с Германией."
],
"text_b": [
"Наступает ночь, все жители города пошли спать, а преступники проснулись.",
"Германия не собирается поддаваться угрозам со стороны США."
]
}
Niðurstaða:
[
[1],
[0]
]
Núverandi listi yfir allar útbúnar DeepPavlov gerðir er alltaf að finna
Ályktun
Í þessari grein kynntumst við DeepPavlov API og sumum textavinnslumöguleikum bókasafnsins sem er úthlutað úr kassanum. Hafa ber í huga að fyrir hvaða NLP verkefni sem er, næst besti árangurinn þegar líkanið er þjálfað á gagnasetti sem samsvarar efnissviði (léni) verkefnisins. Að auki er í grundvallaratriðum ekki hægt að þjálfa jafnvel fleiri gerðir fyrir allar aðstæður.
Í eftirfarandi greinum munum við skoða viðbótarstillingar bókasafnsins, ræsa DeepPavlov frá Docker og síðan munum við halda áfram í þjálfunarlíkön. Og ekki gleyma að DeepPavlov hefur
Heimild: www.habr.com