DeepPavlov kanggo pangembang: # 1 Alat NLP lan nggawe chatbot

Halo kabeh! Kita mbukak seri artikel sing ditujokake kanggo ngrampungake masalah praktis sing ana gandhengane karo pangolahan basa alami (Natural Language Processing utawa mung NLP) lan nggawe agen dialog (chatbots) nggunakake perpustakaan sumber terbuka. DeepPavlov, sing dikembangake dening tim kita ing Laboratorium Sistem Syaraf MIPT lan Pembelajaran Jero. Tujuan utama seri kasebut yaiku kanggo ngenalake DeepPavlov menyang macem-macem pangembang lan nuduhake carane sampeyan bisa ngatasi masalah NLP sing ditrapake tanpa duwe kawruh jero babagan Machine Learning lan PhD ing Matematika.

Tugas NLP kalebu nemtokake sentimen teks, ngurai entitas sing dijenengi, nemtokake apa sing dikarepake interlocutor saka bot sampeyan: pesen pizza utawa entuk informasi latar mburi, lan liya-liyane. Sampeyan bisa maca liyane babagan tugas lan metode NLP kene.

Ing artikel iki, kita bakal nuduhake sampeyan carane mbukak server REST kanthi model NLP sing wis dilatih, siap digunakake tanpa konfigurasi utawa latihan tambahan.

DeepPavlov kanggo pangembang: # 1 Alat NLP lan nggawe chatbot

Instalasi DeepPavlov

Ing kene lan ing ngisor iki, instruksi kanggo Linux bakal diwenehake. Kanggo Windows, deleng kita dokumentasi

  • Gawe lan aktifake lingkungan virtual kanthi versi Python sing didhukung saiki:
    virtualelnv env -p python3.7
    source env/bin/activate
  • Instal DeepPavlov ing lingkungan virtual:
    pip install deeppavlov
    

Ngluncurake server REST kanthi model DeepPavlov

Sadurunge kita miwiti server karo model DeepPavlov pisanan, iku bakal migunani kanggo pirembagan bab sawetara fitur saka arsitektur perpustakaan.

Sembarang model ing DP kalebu:

  • kode Python;
  • Komponen sing bisa didownload - asil latihan serial ing data tartamtu (embeddings, bobot saka jaringan syaraf, etc.);
  • A file konfigurasi (sabanjuré diarani minangka config), kang ngemot informasi bab kelas digunakake model, URL komponen diundhuh, dependensi Python, etc.

Kita bakal ngandhani luwih lengkap babagan apa sing ana ing jero DeepPavlov ing artikel ing ngisor iki, saiki cukup kanggo ngerti:

  • Sembarang model ing DeepPavlov diidentifikasi kanthi jeneng konfigurasi;
  • Kanggo mbukak model, sampeyan kudu ngundhuh komponen saka server DeepPavlov;
  • Uga, kanggo mbukak model, sampeyan kudu nginstal perpustakaan Python sing digunakake.

Model pisanan sing bakal diluncurake yaiku Multilingual Named Entity Recognition (NER). Model kasebut nggolongake tembung teks miturut jinis entitas sing dijenengi (jeneng sing tepat, jeneng geografis, jeneng mata uang, lan liya-liyane). Jeneng konfigurasi kanggo versi NER paling anyar:

ner_ontonotes_bert_mult

Kita miwiti server REST kanthi model:

  1. Kita nginstal dependensi model sing ditemtokake ing konfigurasi menyang lingkungan virtual sing aktif:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Download komponen model serial saka server DeepPavlov:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Komponen serial bakal diundhuh menyang direktori ngarep DeepPavlov, sing minangka standar

    ~/.deeppavlov

    Nalika ndownload, hash komponen sing wis diundhuh dicenthang nglawan hash komponen sing ana ing server. Yen ana sing cocog, download dilewati lan file sing ana digunakake. Ukuran komponen sing diundhuh bisa beda-beda rata-rata saka 0.5 nganti 8 Gb, ing sawetara kasus tekan 20 Gb sawise unzip.

  3. Kita miwiti server REST kanthi model:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Minangka asil saka nglakokaké printah iki, server REST karo model bakal dibukak ing port 5005 mesin inang (port standar 5000).

Sawise miwiti model kasebut, Swagger kanthi dokumentasi API lan kemampuan kanggo nyoba bisa ditemokake ing URL http://127.0.0.1:5005. Ayo nyoba model kasebut kanthi ngirim menyang titik pungkasan http://127.0.0.1:5005/model Panjaluk POST kanthi konten JSON ing ngisor iki:

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

Nanggepi kita kudu nampa JSON ing ngisor iki:

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

Nggunakake conto iki, kita bakal nganalisa DeepPavlov REST API.

API DeepPavlov

Saben model DeepPavlov nduweni paling sethithik siji argumen input. Ing REST API, argumen dijenengi, jenenge minangka kunci kamus sing mlebu. Umume kasus, argumentasi minangka teks sing kudu diproses. Informasi luwih lengkap babagan argumen lan nilai sing dibalekake dening model bisa ditemokake ing bagean MODEL saka dokumentasi DeepPavlov

Ing conto kasebut, dhaptar rong senar dikirim menyang argumen x, sing saben diwenehi markup sing kapisah. Ing DeepPavlov, kabeh model njupuk dhaptar (batch) nilai sing diproses kanthi mandiri.

Istilah "batch" nuduhake lapangan machine learning lan nuduhake kumpulan nilai input independen sing diproses dening algoritma utawa jaringan saraf bebarengan. Pendekatan iki ngidini sampeyan ngurangi (asring Ngartekno) wektu model ngolah siji unsur saka kumpulan dibandhingake karo nilai sing padha liwati menyang input kanthi kapisah. Nanging asil pangolahan ditanggepi mung sawise kabeh unsur wis diproses. Mulane, nalika nggawe batch mlebu, perlu kanggo njupuk menyang akun kacepetan model lan wektu Processing sing dibutuhake kanggo saben unsur individu.

Yen ana sawetara bantahan kanggo model DeepPavlov, saben wong nampa kumpulan nilai dhewe, lan ing output model tansah mrodhuksi siji kumpulan jawaban. Unsur-unsur batch metu minangka asil ngolah unsur-unsur batch mlebu kanthi indeks sing padha.

Ing conto ing ndhuwur, asil model kasebut yaiku ngrusak saben senar dadi token (tembung lan tandha wacan) lan nggolongake token kasebut relatif marang entitas sing dijenengi (jeneng organisasi, mata uang) sing diwakili. Saiki model ner_ontonotes_bert_mult bisa ngenali 18 jinis entitas sing dijenengi, katrangan rinci bisa ditemokake kene.

Model out-of-the-box liyane dening DeepPavlov

Saliyane NER, model out-of-the-box ing ngisor iki kasedhiya ing DeepPavlov nalika nulis:

Wangsulan Pitakonan Teks

Wangsulana pitakon ing teks kasebut kanthi potongan teks kasebut. Konfigurasi model: squad_ru_bert_infer

Tuladha panyuwunan:

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

Asil:

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

Deteksi Penghinaan

Deteksi anané penghinaan marang wong sing dituju teks kasebut (ing wektu nulis - mung kanggo basa Inggris). Konfigurasi model: insults_kaggle_conv_bert

Tuladha panyuwunan:


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

Asil:

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

Analisis sentimen

Klasifikasi sentimen teks (positif, netral, negatif). Konfigurasi model: rusentiment_elmo_twitter_cnn

Tuladha panyuwunan:

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

Asil:

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

Deteksi Paraphrase

Nemtokake manawa rong teks sing beda nduweni teges sing padha. Konfigurasi model: stand_paraphraser_en

Panjaluk:

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

Asil:

[
  [1],
  [0]
]

Dhaptar saiki kabeh model DeepPavlov sing metu saka kothak bisa ditemokake kene.

kesimpulan

Ing artikel iki, kita kenal karo DeepPavlov API lan sawetara kemampuan pangolahan teks saka perpustakaan sing diwenehake metu saka kothak. Sampeyan kudu eling yen kanggo tugas NLP, asil paling apik bakal digayuh nalika nglatih model ing set data sing cocog karo area subyek (domain) tugas kasebut. Kajaba iku, luwih akeh model ora bisa, ing prinsip, dilatih kanggo kabeh kahanan.

Ing artikel ing ngisor iki, kita bakal ndeleng setelan tambahan perpustakaan, ngluncurake DeepPavlov saka Docker, lan banjur pindhah menyang model latihan. Lan aja lali yen DeepPavlov duwe forum – takon pitakonan bab perpustakaan lan model. Matur nuwun kanggo perhatian sampeyan!

Source: www.habr.com

Add a comment