DeepPavlov për zhvilluesit: Mjetet #1 NLP dhe krijimi i chatbot

Pershendetje te gjitheve! Ne po hapim një seri artikujsh kushtuar zgjidhjes së problemeve praktike që lidhen me përpunimin e gjuhës natyrore (Natural Language Processing ose thjesht NLP) dhe krijimin e agjentëve dialogues (chatbots) duke përdorur një bibliotekë me burim të hapur DeepPavlov, e cila po zhvillohet nga ekipi ynë në Laboratorin e Sistemeve Neurale dhe të Mësimit të Thellë MIPT. Qëllimi kryesor i serisë është të prezantojë DeepPavlov me një gamë të gjerë zhvilluesish dhe të tregojë se si mund të zgjidhni problemet e aplikuara NLP pa pasur njohuri të thella në mësimin e makinerisë dhe doktoraturën në matematikë.

Detyrat NLP përfshijnë përcaktimin e ndjenjës së tekstit, analizimin e entiteteve të emërtuara, përcaktimin e asaj që bashkëbiseduesi dëshiron nga roboti juaj: porositni pica ose merrni informacione në sfond, dhe shumë më tepër. Mund të lexoni më shumë rreth detyrave dhe metodave NLP këtu.

Në këtë artikull, ne do t'ju tregojmë se si të ekzekutoni një server REST me modele NLP të trajnuara paraprakisht, të gatshëm për t'u përdorur pa ndonjë konfigurim ose trajnim shtesë.

DeepPavlov për zhvilluesit: Mjetet #1 NLP dhe krijimi i chatbot

Instalimi i DeepPavlov

Këtu dhe më poshtë, do të jepen udhëzimet për Linux. Për Windows, shihni faqen tonë dokumentacionin

  • Krijoni dhe aktivizoni një mjedis virtual me versionin aktual të mbështetur të Python:
    virtualelnv env -p python3.7
    source env/bin/activate
  • Instaloni DeepPavlov në një mjedis virtual:
    pip install deeppavlov
    

Nisja e një serveri REST me modelin DeepPavlov

Përpara se të nisim një server me modelin DeepPavlov për herë të parë, do të jetë e dobishme të flasim për disa veçori të arkitekturës së bibliotekës.

Çdo model në PD përbëhet nga:

  • kodi Python;
  • Komponentët e shkarkueshëm - rezultatet e trajnimit të serializuara në të dhëna specifike (ngulitje, pesha e rrjeteve nervore, etj.);
  • Një skedar konfigurimi (në tekstin e mëtejmë i referuar si konfigurimi), i cili përmban informacione për klasat e përdorura nga modeli, URL-të e komponentëve të shkarkuar, varësitë e Python, etj.

Ne do t'ju tregojmë më shumë për atë që është nën kapuçin e DeepPavlov në artikujt e mëposhtëm, tani për tani mjafton të dimë se:

  • Çdo model në DeepPavlov identifikohet me emrin e konfigurimit të tij;
  • Për të ekzekutuar modelin, duhet të shkarkoni përbërësit e tij nga serverët DeepPavlov;
  • Gjithashtu, për të ekzekutuar modelin, duhet të instaloni bibliotekat Python që ai përdor.

Modeli i parë që do të lançojmë do të jetë Njohja shumëgjuhëshe e Entitetit të Emërtuar (NER). Modeli i klasifikon fjalët e tekstit sipas llojit të entiteteve të emërtuara të cilave u përkasin (emrat e përveçëm, emrat gjeografikë, emrat e monedhave dhe të tjera). Emri i konfigurimit për versionin aktual më të fundit të NER:

ner_ontonotes_bert_mult

Ne nisim serverin REST me modelin:

  1. Ne instalojmë varësitë e modelit të specifikuara në konfigurimin e tij në mjedisin virtual aktiv:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Shkarkoni komponentët e modelit të serializuar nga serverët DeepPavlov:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Komponentët e serializuar do të shkarkohen në drejtorinë kryesore të DeepPavlov, e cila ndodhet si parazgjedhje

    ~/.deeppavlov

    Gjatë shkarkimit, hash-i i komponentëve të shkarkuar tashmë kontrollohet kundrejt hasheve të komponentëve të vendosur në server. Nëse ka një përputhje, shkarkimi anashkalohet dhe skedarët ekzistues përdoren. Madhësitë e komponentëve të shkarkuar mund të ndryshojnë mesatarisht nga 0.5 në 8 Gb, në disa raste duke arritur në 20 Gb pas zbërthimit.

  3. Ne nisim serverin REST me modelin:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Si rezultat i ekzekutimit të kësaj komande, një server REST me një model do të lëshohet në portin 5005 të makinës pritës (porti i paracaktuar është 5000).

Pas inicializimit të modelit, Swagger me dokumentacionin API dhe aftësinë për të testuar mund të gjenden në URL http://127.0.0.1:5005. Le të testojmë modelin duke e dërguar në pikën përfundimtare http://127.0.0.1:5005/model Kërkesa POST me përmbajtjen e mëposhtme JSON:

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

Si përgjigje, ne duhet të marrim JSON-in e mëposhtëm:

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

Duke përdorur këta shembuj, ne do të analizojmë DeepPavlov REST API.

API DeepPavlov

Çdo model DeepPavlov ka të paktën një argument hyrës. Në REST API, argumentet emërtohen, emrat e tyre janë çelësat e fjalorit në hyrje. Në shumicën e rasteve, argumenti është teksti që duhet të përpunohet. Më shumë informacion rreth argumenteve dhe vlerave të kthyera nga modelet mund të gjenden në seksionin MODELS të dokumentacionit DeepPavlov

Në shembull, një listë me dy vargje iu kalua argumentit x, secilit prej të cilëve iu dha një shënim i veçantë. Në DeepPavlov, të gjitha modelet marrin si hyrje një listë (batch) vlerash që përpunohen në mënyrë të pavarur.

Termi "batch" i referohet fushës së mësimit të makinerive dhe i referohet një grupi vlerash hyrëse të pavarura të përpunuara nga një algoritëm ose rrjet nervor njëkohësisht. Kjo qasje ju lejon të zvogëloni (shpesh në mënyrë të konsiderueshme) kohën që modeli përpunon një element të një grupi në krahasim me të njëjtën vlerë të kaluar në hyrje veç e veç. Por rezultati i përpunimit lëshohet vetëm pasi të jenë përpunuar të gjithë elementët. Prandaj, kur gjeneroni një grup në hyrje, do të jetë e nevojshme të merret parasysh shpejtësia e modelit dhe koha e kërkuar e përpunimit për secilin nga elementët e tij individualë.

Nëse ka disa argumente për modelin DeepPavlov, secili prej tyre merr grupin e vet të vlerave, dhe në dalje modeli gjithmonë prodhon një grup përgjigjesh. Elementet e grupit dalës janë rezultat i përpunimit të elementeve të grupeve hyrëse me të njëjtin indeks.

Në shembullin e mësipërm, rezultati i modelit ishte zbërthimi i çdo vargu në shenja (fjalë dhe shenja pikësimi) dhe klasifikimi i tokenit në lidhje me entitetin e emërtuar (emri i organizatës, monedha) që ai përfaqëson. Aktualisht modeli ner_ontonotes_bert_mult të aftë për të njohur 18 lloje të entiteteve të emërtuara, mund të gjendet një përshkrim i detajuar këtu.

Modele të tjera të disponueshme nga DeepPavlov

Përveç NER, modelet e mëposhtme të disponueshme janë në dispozicion në DeepPavlov në kohën e shkrimit:

Përgjigja e pyetjes së tekstit

Përgjigjuni pyetjes së tekstit me një fragment të këtij teksti. Konfigurimi i modelit: squad_ru_bert_infer

Shembull i kërkesës:

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

Rezultati:

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

Zbulimi i fyerjes

Zbulimi i pranisë së një fyerjeje ndaj personit të cilit i drejtohet teksti (në kohën e shkrimit - vetëm për anglisht). Konfigurimi i modelit: insults_kaggle_conv_bert

Shembull i kërkesës:


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

Rezultati:

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

Analiza e ndjenjës

Klasifikimi i ndjenjës së tekstit (pozitiv, neutral, negativ). Konfigurimi i modelit: rusentiment_elmo_twitter_cnn

Shembull i kërkesës:

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

Rezultati:

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

Zbulimi i parafrazës

Përcaktimi nëse dy tekste të ndryshme kanë të njëjtin kuptim. Konfigurimi i modelit: stand_parafrazuesi_en

Kërkesë:

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

Rezultati:

[
  [1],
  [0]
]

Lista aktuale e të gjitha modeleve të disponueshme të DeepPavlov mund të gjendet gjithmonë këtu.

Përfundim

Në këtë artikull, ne u njohëm me API-në DeepPavlov dhe disa nga aftësitë e përpunimit të tekstit të bibliotekës së ofruar jashtë kutisë. Duhet të kihet parasysh se për çdo detyrë NLP, rezultati më i mirë do të arrihet kur trajnohet modeli në një grup të dhënash që korrespondon me fushën e temës (domain) të detyrës. Për më tepër, edhe më shumë modele, në parim, nuk mund të trajnohen për të gjitha situatat.

Në artikujt e mëposhtëm do të shikojmë cilësimet shtesë të bibliotekës, duke lëshuar DeepPavlov nga Docker, dhe më pas do të kalojmë te modelet e trajnimit. Dhe mos harroni se DeepPavlov ka forumi – bëni pyetjet tuaja në lidhje me bibliotekën dhe modelet. Faleminderit per vemendjen!

Burimi: www.habr.com

Shto një koment