DeepPavlov pikeun pamekar: #1 Alat NLP sareng nyiptakeun chatbot

Halo sadayana! Kami muka sababaraha tulisan anu dikhususkeun pikeun ngarengsekeun masalah praktis anu aya hubunganana sareng pamrosésan basa alami (Natural Language Processing atanapi ngan saukur NLP) sareng nyiptakeun agén dialog (chatbots) nganggo perpustakaan open-source. DeepPavlov, anu dikembangkeun ku tim kami di Laboratorium MIPT Sistem Neural sareng Pembelajaran Jero. Tujuan utama séri nyaéta pikeun ngenalkeun DeepPavlov ka rupa-rupa pamekar sareng nunjukkeun kumaha anjeun tiasa ngabéréskeun masalah NLP anu diterapkeun tanpa gaduh pangaweruh anu jero dina Pembelajaran Mesin sareng PhD dina Matematika.

Tugas NLP kalebet nangtukeun sentimen téks, ngémutan éntitas anu namina, nangtukeun naon anu dipikahoyong ku interlocutor tina bot anjeun: mesen pizza atanapi kéngingkeun inpormasi latar, sareng seueur deui. Anjeun tiasa maca langkung seueur ngeunaan tugas sareng metode NLP di dieu.

Dina tulisan ieu, kami bakal nunjukkeun anjeun kumaha ngajalankeun server REST nganggo modél NLP anu tos dilatih, siap dianggo tanpa konfigurasi atanapi pelatihan tambahan.

DeepPavlov pikeun pamekar: #1 Alat NLP sareng nyiptakeun chatbot

Pamasangan DeepPavlov

Di dieu sareng di handap, petunjuk pikeun Linux bakal dipasihkeun. Pikeun Windows, tingali kami dokuméntasi

  • Jieun sareng aktipkeun lingkungan virtual sareng versi Python anu dirojong ayeuna:
    virtualelnv env -p python3.7
    source env/bin/activate
  • Pasang DeepPavlov dina lingkungan virtual:
    pip install deeppavlov
    

Ngaluncurkeun server REST sareng modél DeepPavlov

Sateuacan urang ngaluncurkeun server nganggo modél DeepPavlov pikeun kahiji kalina, éta bakal mangpaat pikeun ngobrol ngeunaan sababaraha fitur arsitektur perpustakaan.

Sakur modél dina DP diwangun ku:

  • Kode Python;
  • Komponén anu tiasa diunduh - hasil latihan séri dina data khusus (embeddings, beurat jaringan saraf, jsb.);
  • A file konfigurasi (hereinafter disebut config), nu ngandung émbaran ngeunaan kelas dipaké ku modél, URL komponén diundeur, kagumantungan Python, jsb.

Kami bakal nyarioskeun ka anjeun langkung seueur ngeunaan naon anu aya di handapeun tiung DeepPavlov dina tulisan di handap ieu, ayeuna cekap pikeun urang terang yén:

  • Sagala model di DeepPavlov dicirikeun ku nami config na;
  • Pikeun ngajalankeun modél, anjeun kedah ngaunduh komponénna tina server DeepPavlov;
  • Ogé, pikeun ngajalankeun modél, anjeun kedah masang perpustakaan Python anu dianggo.

Modél munggaran anu bakal kami luncurkeun nyaéta Multilingual Named Entity Recognition (NER). Modél ieu ngagolongkeun kecap téks dumasar kana jinis éntitas anu namina milikna (ngaran anu leres, nami géografis, nami mata uang, sareng anu sanésna). Ngaran konfigurasi pikeun versi panganyarna tina NER:

ner_ontonotes_bert_mult

Urang ngajalankeun server REST kalayan modél:

  1. Urang pasang dependensi modél anu ditunjuk dina konfigurasi na kana lingkungan maya anu aktip:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Unduh komponén modél séri tina server DeepPavlov:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Komponén serialized bakal diundeur ka diréktori home DeepPavlov, nu lokasina sacara standar

    ~/.deeppavlov

    Nalika diunduh, hash komponén anu parantos diunduh dipariksa ngalawan hashes komponén anu aya dina server. Upami aya pertandingan, undeuran dilewatan sareng file anu tos aya dianggo. Ukuran komponén nu diundeur bisa rupa-rupa rata-rata ti 0.5 nepi ka 8 Gb, dina sababaraha kasus ngahontal 20 Gb sanggeus unzip.

  3. Urang ngajalankeun server REST kalayan modél:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Salaku hasil tina executing paréntah ieu, server REST kalawan modél bakal dibuka dina port 5005 tina mesin host (port standar nyaéta 5000).

Saatos ngamimitian modél, Swagger kalayan dokuméntasi API sareng kamampuan pikeun nguji tiasa dipendakan dina URL http://127.0.0.1:5005. Hayu urang nguji modél ku ngirim ka titik tungtung http://127.0.0.1:5005/model Paménta POST kalayan eusi JSON di handap ieu:

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

Dina respon urang kedah nampi JSON handap:

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

Ngagunakeun conto ieu, urang bakal nganalisis DeepPavlov REST API.

API DeepPavlov

Unggal model DeepPavlov boga sahanteuna hiji argumen input. Dina REST API, argumen dingaranan, namina mangrupikeun konci kamus anu asup. Dina kalolobaan kasus, argumen nyaéta téks anu kedah diolah. Inpormasi langkung seueur ngeunaan argumen sareng nilai anu dipulangkeun ku modél tiasa dipendakan dina bagian MODEL tina dokuméntasi. DeepPavlov

Dina conto, daptar dua string dikirimkeun ka argumen x, nu masing-masing dibéré markup misah. Dina DeepPavlov, sadaya model nyandak salaku input daptar (angkatan) nilai anu diolah sacara mandiri.

Istilah "angkatan" nujul kana widang pembelajaran mesin sareng ngarujuk kana sakumpulan nilai input mandiri anu diolah ku algoritma atanapi jaringan saraf sakaligus. Pendekatan ieu ngamungkinkeun anjeun pikeun ngirangan (sering sacara signifikan) waktos modél ngolah hiji unsur angkatan dibandingkeun sareng nilai anu sami dilebetkeun kana input nyalira. Tapi hasil pamrosésan dikaluarkeun ngan saatos sadaya unsur diolah. Ku alatan éta, nalika ngahasilkeun bets asup, éta bakal perlu tumut kana akun laju model jeung waktu processing diperlukeun pikeun tiap elemen individu.

Upami aya sababaraha alesan pikeun modél DeepPavlov, masing-masing nampi nilai angkatan sorangan, sareng dina kaluaran modélna salawasna ngahasilkeun hiji angkatan jawaban. Unsur-unsur angkatan kaluar mangrupa hasil ngolah unsur-unsur angkatan nu asup kalawan indéks nu sarua.

Dina conto di luhur, hasil tina model ieu ngarecah unggal string kana tokens (kecap jeung tanda baca) jeung mengklasifikasikan token relatif ka entitas ngaranna (ngaran organisasi, mata uang) nu ngagambarkeun. Ayeuna modél ner_ontonotes_bert_mult sanggup mikawanoh 18 jenis entitas ngaranna, pedaran lengkep bisa kapanggih di dieu.

Model out-of-the-box séjén ku DeepPavlov

Salian NER, model out-of-the-box di handap ieu sayogi dina DeepPavlov nalika nyerat:

Jawaban Soal Téks

Jawab pananya kana téks ku sempalan téks ieu. Konfigurasi modél: squad_ru_bert_infer

Conto pamundut:

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

Hasil:

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

Deteksi Panghina

Deteksi ayana hinaan ka jalma anu ditujukeun ku téks (dina waktos nyerat - ngan ukur pikeun basa Inggris). Modél config: insults_kaggle_conv_bert

Conto pamundut:


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

Hasil:

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

Analisis Sentimen

Klasifikasi sentimen téks (positip, nétral, négatip). Konfigurasi modél: rusentiment_elmo_twitter_cnn

Conto pamundut:

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

Hasil:

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

Deteksi Paraphrase

Nangtukeun naha dua téks anu béda miboga harti anu sarua. Konfigurasi modél: stand_paraphraser_en

Kahoyong:

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

Hasil:

[
  [1],
  [0]
]

Daptar ayeuna sadaya model kaluar-of-the-box DeepPavlov salawasna bisa kapanggih di dieu.

kacindekan

Dina artikel ieu, urang meunang acquainted jeung DeepPavlov API sarta sababaraha kamampuhan processing téks perpustakaan disadiakeun out of the box. Perlu diémutan yén pikeun naon waé tugas NLP, hasil anu pangsaéna bakal dihontal nalika ngalatih modél dina set data anu cocog sareng daérah subjek (domain) tugas. Sajaba ti éta, malah leuwih model teu bisa, prinsipna mah, dilatih pikeun sakabéh kaayaan.

Dina tulisan di handap ieu urang bakal ningali setélan tambahan perpustakaan, ngaluncurkeun DeepPavlov ti Docker, teras urang teraskeun kana modél latihan. Sarta ulah poho yén DeepPavlov boga dina forum - naroskeun patarosan anjeun ngeunaan perpustakaan sareng modél. Nuhun kana perhatosanana!

sumber: www.habr.com

Tambahkeun komentar