DeepPavlov për zhvilluesit: #1 mjetet NLP dhe krijimi i chatbot-eve

Përshëndetje të gjithëve! Ne po fillojmë një cikël artikujsh që i kushtohet zgjidhjes së problemeve praktike të lidhura me përpunimin e gjuhës natyrore (Natural Language Processing ose thjesht NLP) dhe krijimin e agjentëve dialogues (chat-bots) me ndihmën e bibliotekës me burim të hapur DeepPavlov, që po zhvillon ekipi ynë në laboratorin e Sistemeve Nënqëndrore dhe Mësimit të Thellë të MFTI. Qëllimi kryesor i ciklit është të njohë një grup të gjerë zhvilluesish me DeepPavlov dhe të tregojë se si është e mundur të zgjidhen probleme praktike të NLP-së, pa pasur njohuri të thella në Machine Learning dhe PhD në Matematikë.

Problemet e NLP përfshijnë përcaktimin e tonit të tekstit, analizën e entiteteve të emëruara, përcaktimin e asaj që përbiseduesi do nga boti juaj: të porosisë pizza apo të marrë informacion të referencës dhe shumë më tepër. Për detaje të mëtejshme rreth problemeve dhe metodave të NLP, mund të lexoni këtu.

Në këtë artikull do të tregojmë se si të filloni një server REST me modele NLP të parainstruara, të gatshme për t'u përdorur pa ndonjë konfigurgim ose trajnim të mëtejshëm.

DeepPavlov për zhvilluesit: #1 mjetet NLP dhe krijimi i chatbot-eve

Instalimi i DeepPavlov

Këtu dhe më pas do të jepen udhëzime për Linux. Për Windows, shikoni udhëzimet tona në dokumentacioni

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

Fillimi i serverit REST me modelin DeepPavlov

Para se të fillojmë për herë të parë serverin me modelin DeepPavlov, do të ishte e dobishme të flasim për disa veçori të arhitekturës së bibliotekës.

Çdo model nĂ« DP pĂ«rbĂ«het nga:

  • Kodi nĂ« Python;
  • KomponentĂ«t e shkarkueshĂ«m - rezultatet e serializuara tĂ« trajnimit nĂ« tĂ« dhĂ«na tĂ« caktuara (embedding, pesha tĂ« rrjeteve nervore dhe tĂ« tjera);
  • Skeda e konfigurimit (mĂ« pas - konfig), e cila pĂ«rmban informacion rreth klasave tĂ« pĂ«rdorura nga modeli, URL-tĂ« e komponentĂ«ve tĂ« shkarkueshĂ«m, varĂ«sitĂ« e Python dhe gjĂ«rat e tjera.

Më shumë rreth asaj që ndodhet nën kapuçin e DeepPavlov do të tregojmë në artikujt e ardhshëm, për momentin mjafton të dimë se:

  • Çdo model nĂ« DeepPavlov identifikohet me emrin e konfigut tĂ« tij;
  • PĂ«r tĂ« nisur modelin, Ă«shtĂ« e nevojshme tĂ« shkarkohen komponentĂ«t e tij nga serverĂ«t e DeepPavlov;
  • Po ashtu, pĂ«r tĂ« nisur modelin Ă«shtĂ« e nevojshme tĂ« instalohen bibliotekat e Python tĂ« pĂ«rdorura prej tij.

Modeli i parë që do të nisim do të jetë modeli multilinguist i Njohjes të Entiteteve të Emëruara (NER). Ky model klasifikon fjalët e tekstit sipas tipit të entiteteve të emëruara që i përkasin (emra të përshtatshëm, emra gjeografikë, emrat e monedhave dhe të tjera). Emri i konfigut për versionin më të fundit të NER është:

ner_ontonotes_bert_mult

Nisim serverin REST me modelin:

  1. Instaloni në ambientin virtual aktiv varësitë e modelit të përmendura në konfigun e tij:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Shkarkoni komponentët e serializuar të modelit nga serverët e DeepPavlov:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Komponentët e serializuar do të shkarkohen në direktorinë e shtëpisë të DeepPavlov, e cila në mënyrë të paracaktuar është

    ~/ .deeppavlov

    Gjatë shkarkimit, hash-i i komponentëve të shkarkuar verifikohet me hash-at e komponentëve që ndodhen në server. Në rast përputhjeje, shkarkimi kalon dhe përdoren skedarët që janë tashmë të pranishëm. Madhësitë e komponentëve të shkarkuar mund të ndryshojnë nga 0.5 deri në 8 Gb, në disa raste pas shkarkimit arrijnë deri në 20 Gb.

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

Si rezultat i ekzekutimit të kësaj komande do të niset një server REST me modelin në portin 5005 të makinës pritëse (porti i paracaktuar është 5000).

Pas inicializimit të modelit, Swagger me dokumentacionin e API dhe mundësinë për ta testuar mund të gjendet në URL http://127.0.0.1:5005. Do ta testojmë modelin duke dërguar një kërkesë POST në endpoint http://127.0.0.1:5005/model me përmbajtjen JSON të mëposhtme:

{
  "x": [
    "NĂ« MFTI mund tĂ« arrish me tren nga Stacioni Savёlovski.",
    "Në Rusinë jugperëndimore, nje shtëllungë gruri vlerësohet në 15 grivna"
  ]
}

Në përgjigje duhet të marrim këtë JSON:

[
  [
    ["NĂ«", "MFTI", "mund", "tĂ«", "arrish", "me", "tren", "nga", "Stacioni", "Savёlovski", "."],
    ["O", "B-FAC", "O", "O", "O", "O", "O", "B-FAC", "I-FAC", "O"]
  ],
  [
    ["Në", "jug", "-", "perëndimor", "Rusinë", "shtëllungë", "gruri", "vlerësohet", "në", "15", "grivna"],
    ["O", "B-LOC", "I-LOC", "I-LOC", "I-LOC", "O", "O", "O", "O", "B-MONEY", "I-MONEY"]
  ]
]

Me këto shembuj do të analizojmë REST API DeepPavlov.

API DeepPavlov

Çdo model i DeepPavlov ka tĂ« paktĂ«n njĂ« argument hyrĂ«s. NĂ« REST API, argumentet janĂ« tĂ« emĂ«rtuara, emrat e tyre janĂ« çelĂ«sa tĂ« fjalorit hyrĂ«s. NĂ« shumicĂ«n e rasteve, argumenti Ă«shtĂ« teksti qĂ« duhet tĂ« pĂ«rpunohet. MĂ« shumĂ« rreth argumenteve dhe vlerave tĂ« kthyera nga modelet mund tĂ« mĂ«soni nĂ« seksionin MODELS tĂ« dokumentacionit. DeepPavlov

Në shembullin, në argumentin x u kalua një listë me dy rreshta, për çdo të cilin u dha një ndarje e veçantë. Në DeepPavlov të gjitha modelet pranojnë 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 nënkupton një paketë të vlerave hyrëse të pavarura, të përpunuara nga një algoritëm ose një rrjet nervor njëkohësisht. Ky qasje lejon të shkurtohet (shpesh ndjeshëm) koha e përpunimit të modelit për një element të vetëm të batch-it krahasuar me këtë vlerë, e cila është dërguar veçmas si hyrëse. Por rezultati i përpunimit jepet vetëm pasi të përpunohen të gjithë elementët. Prandaj, kur formohet një batch hyrës, do të jetë e nevojshme të merret parasysh shpejtësia e punës së modelit dhe koha e kërkuar për përpunimin e çdo elementi të veçantë.

Në rast se modelit DeepPavlov i jepen disa argumente, çdo njëri prej tyre merr batch-in e tij të vlerave, dhe në dalje modeli gjithmonë jep një batch përgjigjesh. Elementët e batch-it të daljes janë rezultatet e përpunimit të elementëve të batch-eve hyrëse me të njëjtin indeks.

Në shembullin e dhënë, rezultati i punës së modelit ishte ndarja e çdo rreshti në toka (fjalë dhe shenja pikësimi) dhe klasifikimi i tokës në lidhje me entitetin e emëruar (emri i organizatës, monedha) që ajo përfaqëson. Aktualisht modeli ner_ontonotes_bert_mult është në gjendje të njohë 18 lloje entitetesh të emëruara, përshkrimi i detajuar mund të gjendet këtu.

Modelet e tjera out-of-the-box të DeepPavlov

Përveç NER, në DeepPavlov në momentin e shkruar do të jenë të disponueshme modelet e tjera out-of-the-box:

Përgjigje Pyetje për Tekst

Përgjigje në një pyetje për tekstin nga një fragment i këtij teksti. Konfigurimi i modelit: squad_ru_bert_infer

Shembulli i kërkesës:

{
  "context_raw": [
    "DeepPavlov është duke u zhvilluar nga laboratori i MFTI.",
    "Në jug-perëndim të Rusisë, një grumbull gruri është vlerësuar në 15 hrivna."
  ],
  "question_raw": [
    "Kush e zhvillon DeepPavlov?",
    "Sa kushtonte grumbulli i grurit në Rusi?"
  ]
}

Rezultati:

[
  ["laboratori i MFTI", 27, 31042.484375],
  ["15 hrivna", 39, 1049.598876953125]
]

Zbulimi i Ofendimeve

Identifikimi i pranisĂ« sĂ« njĂ« ofendimi pĂ«r personin, tĂ« cilit i Ă«shtĂ« adresuar teksti (nĂ« momentin e shkruar — vetĂ«m pĂ«r gjuhĂ«n angleze). Konfigurimi i modelit: insults_kaggle_conv_bert

Shembulli i kërkesës:


{
  "x": [
    "Para flet, budallallëku ecën.",
    "Nuk je nga më të mençurit.
  ]
}

Rezultati:

[
  ["Jo Ofendim"],
  ["Ofendim"]
]

Analiza e Ndjenjave

Klasifikimi i tonit të tekstit (pozitivi, neutral, negativ). Konfigurimi i modelit: rusentiment_elmo_twitter_cnn

Shembulli i kërkesës:

{
  "x": [
    "Më pëlqen biblioteka DeepPavlov.",
    "Kam dëgjuar për bibliotekën DeepPavlov.",
    "Më shqetësojnë trollat dhe anonimët."
  ]
}

Rezultati:

[
  ["pozitiv"],
  ["neutral"],
  ["negativ"]
]

Zbulimi i Parafrazave

Përcaktimi nëse dy tekste të ndryshëm kanë të njëjtin kuptim. Konfigurimi i modelit: stand_paraphraser_ru

Kërkesa:

{
  "text_a": [
    "Qyteti i bie në gjumë, Mafia zgjohet.",
    "Presidenti amerikan kërcënoi me anulimin e marrëveshjes me Gjermaninë."
  ],
  "text_b": [
    "Nata po vjen, të gjithë banorët e qytetit shkuan të flinin, ndërsa kriminelët u zgjuan.",
    "Gjermania nuk ka ndërmend të dorëzohet përballë kërcënimeve nga Shtetet e Bashkuara."
  ]
}

Rezultati:

[
  [1],
  [0]
]

Lista aktuale e të gjitha modeleve out-of-the-box të DeepPavlov mund të gjendet gjithmonë këtu.

Përfundimi

Në këtë artikull ne u njohëm me API-në e DeepPavlov dhe disa mundësi të bibliotekës për përpunimin e tekstit, të ofruara "nga kutia". Në të njëjtën kohë, duhet pasur parasysh se për çdo detyrë NLP do të arrihet rezultati më i mirë duke trajnuar modelin në një grup të dhënash që i përshtatet domenit të detyrës. Për më tepër, nuk ka ndonjë model që mund të trajnohet për të gjitha rastet.

NĂ« artikujt e ardhshĂ«m do tĂ« shqyrtojmĂ« konfigurime shtesĂ« tĂ« bibliotekĂ«s, nisjen e DeepPavlov nga Docker, dhe mĂ« pas do tĂ« kalojmĂ« nĂ« trajnimet e modeleve. Dhe mos harroni, qĂ« DeepPavlov ka forum – bĂ«ni pyetjet tuaja nĂ« lidhje me bibliotekĂ«n dhe modelet. Faleminderit pĂ«r vĂ«mendjen!

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster