DeepPavlov ar gyfer datblygwyr: #1 offer NLP a chreu chatbot

Helo pawb! Rydym yn agor cyfres o erthyglau wedi'u neilltuo i ddatrys problemau ymarferol sy'n ymwneud â phrosesu iaith naturiol (Prosesu Iaith Naturiol neu'n syml NLP) a chreu asiantau deialog (chatbots) gan ddefnyddio llyfrgell ffynhonnell agored DeepPavlov, sy'n cael ei ddatblygu gan ein tîm yn Labordy Systemau Niwral a Dysgu Dwfn MIPT. Prif nod y gyfres yw cyflwyno DeepPavlov i ystod eang o ddatblygwyr a dangos sut y gallwch ddatrys problemau NLP cymhwysol heb fod â gwybodaeth ddofn mewn Dysgu Peiriant a PhD mewn Mathemateg.

Mae tasgau NLP yn cynnwys pennu teimlad y testun, dosrannu endidau a enwir, penderfynu beth mae'r cydgysylltydd ei eisiau gan eich bot: archebu pizza neu gael gwybodaeth gefndir, a llawer mwy. Gallwch ddarllen mwy am dasgau a dulliau NLP yma.

Yn yr erthygl hon, byddwn yn dangos i chi sut i redeg gweinydd REST gyda modelau NLP sydd wedi'u hyfforddi ymlaen llaw, yn barod i'w defnyddio heb unrhyw ffurfweddiad na hyfforddiant ychwanegol.

DeepPavlov ar gyfer datblygwyr: #1 offer NLP a chreu chatbot

Gosod DeepPavlov

Yma ac isod, rhoddir cyfarwyddiadau ar gyfer Linux. Ar gyfer Windows, gweler ein dogfennaeth

  • Creu ac actifadu amgylchedd rhithwir gyda'r fersiwn gyfredol o Python a gefnogir:
    virtualelnv env -p python3.7
    source env/bin/activate
  • Gosod DeepPavlov mewn amgylchedd rhithwir:
    pip install deeppavlov
    

Lansio gweinydd REST gyda'r model DeepPavlov

Cyn i ni lansio gweinydd gyda'r model DeepPavlov am y tro cyntaf, bydd yn ddefnyddiol siarad am rai o nodweddion pensaernïaeth y llyfrgell.

Mae unrhyw fodel yn DP yn cynnwys:

  • cod Python;
  • Cydrannau y gellir eu lawrlwytho - canlyniadau hyfforddiant cyfresol ar ddata penodol (ymgorfforiadau, pwysau rhwydweithiau niwral, ac ati);
  • Ffeil ffurfweddu (y cyfeirir ati o hyn ymlaen fel y config), sy'n cynnwys gwybodaeth am y dosbarthiadau a ddefnyddir gan y model, URLau cydrannau wedi'u llwytho i lawr, dibyniaethau Python, ac ati.

Byddwn yn dweud mwy wrthych am yr hyn sydd o dan gwfl DeepPavlov yn yr erthyglau canlynol, am y tro mae'n ddigon inni wybod hynny:

  • Mae unrhyw fodel yn DeepPavlov yn cael ei nodi gan enw ei ffurfwedd;
  • I redeg y model, mae angen i chi lawrlwytho ei gydrannau o'r gweinyddwyr DeepPavlov;
  • Hefyd, i redeg y model, mae angen i chi osod y llyfrgelloedd Python y mae'n eu defnyddio.

Y model cyntaf y byddwn yn ei lansio fydd Cydnabod Endid a Enwir (NER) amlieithog. Mae'r model yn dosbarthu geiriau testun yn ôl y math o endidau a enwir y maent yn perthyn iddynt (enwau priodol, enwau daearyddol, enwau arian cyfred, ac eraill). Enw ffurfweddu ar gyfer y fersiwn diweddaraf o NER:

ner_ontonotes_bert_mult

Rydym yn lansio'r gweinydd REST gyda'r model:

  1. Rydym yn gosod y dibyniaethau model a nodir yn ei ffurfweddiad yn yr amgylchedd rhithwir gweithredol:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Dadlwythwch gydrannau model cyfresol o weinyddion DeepPavlov:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Bydd y cydrannau cyfresol yn cael eu llwytho i lawr i gyfeiriadur cartref DeepPavlov, sydd wedi'i leoli yn ddiofyn

    ~/.deeppavlov

    Wrth lwytho i lawr, mae'r hash o gydrannau sydd eisoes wedi'u llwytho i lawr yn cael ei wirio yn erbyn y hashes o gydrannau sydd wedi'u lleoli ar y gweinydd. Os oes cyfatebiaeth, caiff y lawrlwythiad ei hepgor a defnyddir ffeiliau sy'n bodoli eisoes. Gall maint y cydrannau a lawrlwythwyd amrywio ar gyfartaledd o 0.5 i 8 Gb, gan gyrraedd 20 Gb mewn rhai achosion ar ôl dadsipio.

  3. Rydym yn lansio'r gweinydd REST gyda'r model:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

O ganlyniad i weithredu'r gorchymyn hwn, bydd gweinydd REST gyda model yn cael ei lansio ar borthladd 5005 y peiriant gwesteiwr (y porthladd rhagosodedig yw 5000).

Ar ôl cychwyn y model, mae Swagger gyda dogfennaeth API a'r gallu i brofi i'w gweld yn yr URL http://127.0.0.1:5005. Gadewch i ni brofi'r model trwy ei anfon at y diweddbwynt http://127.0.0.1:5005/model Cais POST gyda'r cynnwys JSON canlynol:

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

Mewn ymateb dylem dderbyn y JSON canlynol:

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

Gan ddefnyddio'r enghreifftiau hyn, byddwn yn dadansoddi API REST DeepPavlov.

API DeepPavlov

Mae gan bob model DeepPavlov o leiaf un ddadl mewnbwn. Yn yr API REST, enwir dadleuon, eu henwau yw allweddi'r geiriadur sy'n dod i mewn. Yn y rhan fwyaf o achosion, y ddadl yw'r testun y mae angen ei brosesu. Ceir rhagor o wybodaeth am ddadleuon a gwerthoedd a ddychwelwyd gan fodelau yn adran MODELS y ddogfennaeth DeepPavlov

Yn yr enghraifft, trosglwyddwyd rhestr o ddau linyn i ddadl x, a rhoddwyd marcio ar wahân i bob un ohonynt. Yn DeepPavlov, mae pob model yn cymryd rhestr (swp) o werthoedd sy'n cael eu prosesu'n annibynnol fel mewnbwn.

Mae'r term "swp" yn cyfeirio at faes dysgu peirianyddol ac yn cyfeirio at swp o werthoedd mewnbwn annibynnol a brosesir gan algorithm neu rwydwaith niwral ar yr un pryd. Mae'r dull hwn yn caniatáu ichi leihau (yn aml yn sylweddol) yr amser y mae'r model yn prosesu un elfen o swp o'i gymharu â'r un gwerth a drosglwyddir i'r mewnbwn ar wahân. Ond dim ond ar ôl i'r holl elfennau gael eu prosesu y cyhoeddir y canlyniad prosesu. Felly, wrth gynhyrchu swp sy'n dod i mewn, bydd angen ystyried cyflymder y model a'r amser prosesu gofynnol ar gyfer pob un o'i elfennau unigol.

Os oes sawl dadl i fodel DeepPavlov, mae pob un ohonynt yn derbyn ei swp ei hun o werthoedd, ac ar yr allbwn mae'r model bob amser yn cynhyrchu un swp o atebion. Mae elfennau'r swp sy'n mynd allan yn ganlyniadau prosesu elfennau'r sypiau sy'n dod i mewn gyda'r un mynegai.

Yn yr enghraifft uchod, canlyniad y model oedd torri pob llinyn yn docynnau (geiriau a marciau atalnodi) a dosbarthu'r tocyn mewn perthynas â'r endid a enwir (enw'r sefydliad, arian cyfred) y mae'n ei gynrychioli. Ar hyn o bryd y model ner_ontonotes_bert_mult gallu adnabod 18 math o endidau a enwir, gellir dod o hyd i ddisgrifiad manwl yma.

Modelau eraill y tu allan i'r bocs gan DeepPavlov

Yn ogystal â NER, mae'r modelau tu allan i'r bocs canlynol ar gael yn DeepPavlov ar adeg ysgrifennu:

Ateb Cwestiwn Testun

Atebwch y cwestiwn i'r testun gyda darn o'r testun hwn. Cyfluniad model: sgwad_ru_bert_infer

Cais enghraifft:

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

Canlyniad:

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

Canfod Sarhad

Canfod presenoldeb sarhad ar y person y cyfeiriwyd y testun ato (ar adeg ysgrifennu - dim ond ar gyfer Saesneg). Ffurfwedd y model: insults_kaggle_conv_bert

Cais enghraifft:


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

Canlyniad:

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

Dadansoddiad Sentiment

Dosbarthiad teimlad testun (cadarnhaol, niwtral, negyddol). Cyfluniad model: rusentiment_elmo_twitter_cnn

Cais enghraifft:

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

Canlyniad:

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

Canfod Aralleiriad

Penderfynu a oes gan ddau destun gwahanol yr un ystyr. Cyfluniad model: stand_paraphraser_cy

Cais:

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

Canlyniad:

[
  [1],
  [0]
]

Gellir dod o hyd i'r rhestr gyfredol o'r holl fodelau DeepPavlov allan-o-y-bocs bob amser yma.

Casgliad

Yn yr erthygl hon, daethom yn gyfarwydd ag API DeepPavlov a rhai o alluoedd prosesu testun y llyfrgell a ddarparwyd allan o'r bocs. Dylid cofio, ar gyfer unrhyw dasg NLP, y ceir y canlyniad gorau wrth hyfforddi'r model ar set ddata sy'n cyfateb i faes pwnc (parth) y dasg. Yn ogystal, ni all hyd yn oed mwy o fodelau, mewn egwyddor, gael eu hyfforddi ar gyfer pob sefyllfa.

Yn yr erthyglau canlynol byddwn yn edrych ar leoliadau ychwanegol y llyfrgell, gan lansio DeepPavlov o Docker, ac yna byddwn yn symud ymlaen i fodelau hyfforddi. A pheidiwch ag anghofio bod gan DeepPavlov y fforwm – gofynnwch eich cwestiynau am y llyfrgell a modelau. Diolch am eich sylw!

Ffynhonnell: hab.com

Ychwanegu sylw