DeepPavlov fyrir forritara: #1 NLP verkfæri og sköpun spjallbotna

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 DeepPavlov, sem er þróað af teymi okkar á MIPT Laboratory of Neural Systems and Deep Learning. Meginmarkmið seríunnar er að kynna DeepPavlov fyrir fjölmörgum forriturum og sýna hvernig þú getur leyst beitt NLP vandamál án þess að hafa djúpa þekkingu í vélanámi og doktorsgráðu í stærðfræði.

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 hér.

Í þ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.

DeepPavlov fyrir forritara: #1 NLP verkfæri og sköpun spjallbotna

Uppsetning DeepPavlov

Hér og hér að neðan verða leiðbeiningar fyrir Linux gefnar. Fyrir Windows, sjá okkar skjöl

  • 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:

  1. Við setjum upp líkanaháðirnar sem tilgreindar eru í stillingum þess í virka sýndarumhverfið:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. 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.

  3. 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 DeepPavlov

Í 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 hér.

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 hér.

Á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 форум - spurðu spurninga þinna varðandi bókasafnið og módel. Takk fyrir athyglina!

Heimild: www.habr.com

Bæta við athugasemd