DeepPavlov untuk pembangun: Alat NLP #1 dan penciptaan bot sembang

Hai semua! Kami membuka satu siri artikel yang dikhaskan untuk menyelesaikan masalah praktikal yang berkaitan dengan pemprosesan bahasa semula jadi (Natural Language Processing atau ringkasnya NLP) dan mencipta ejen dialog (chatbots) menggunakan perpustakaan sumber terbuka DeepPavlov, yang sedang dibangunkan oleh pasukan kami di Makmal Sistem Neural dan Pembelajaran Dalam MIPT. Matlamat utama siri ini adalah untuk memperkenalkan DeepPavlov kepada pelbagai pembangun dan menunjukkan cara anda boleh menyelesaikan masalah NLP gunaan tanpa mempunyai pengetahuan mendalam dalam Pembelajaran Mesin dan PhD dalam Matematik.

Tugas NLP termasuk menentukan sentimen teks, menghuraikan entiti yang dinamakan, menentukan perkara yang diingini oleh lawan bicara daripada bot anda: memesan pizza atau mendapatkan maklumat latar belakang dan banyak lagi. Anda boleh membaca lebih lanjut mengenai tugas dan kaedah NLP di sini.

Dalam artikel ini, kami akan menunjukkan kepada anda cara menjalankan pelayan REST dengan model NLP terlatih, sedia untuk digunakan tanpa sebarang konfigurasi atau latihan tambahan.

DeepPavlov untuk pembangun: Alat NLP #1 dan penciptaan bot sembang

Pemasangan DeepPavlov

Di sini dan di bawah, arahan untuk Linux akan diberikan. Untuk Windows, lihat kami dokumentasi

  • Cipta dan aktifkan persekitaran maya dengan versi Python yang disokong semasa:
    virtualelnv env -p python3.7
    source env/bin/activate
  • Pasang DeepPavlov dalam persekitaran maya:
    pip install deeppavlov
    

Melancarkan pelayan REST dengan model DeepPavlov

Sebelum kami melancarkan pelayan dengan model DeepPavlov buat kali pertama, adalah berguna untuk membincangkan beberapa ciri seni bina perpustakaan.

Mana-mana model dalam DP terdiri daripada:

  • Kod Python;
  • Komponen yang boleh dimuat turun - hasil latihan bersiri pada data tertentu (benam, berat rangkaian saraf, dsb.);
  • Fail konfigurasi (selepas ini dirujuk sebagai konfigurasi), yang mengandungi maklumat tentang kelas yang digunakan oleh model, URL komponen yang dimuat turun, kebergantungan Python, dsb.

Kami akan memberitahu anda lebih lanjut tentang apa yang ada di bawah hud DeepPavlov dalam artikel berikut, buat masa ini cukup untuk kami mengetahui bahawa:

  • Mana-mana model dalam DeepPavlov dikenal pasti dengan nama konfigurasinya;
  • Untuk menjalankan model, anda perlu memuat turun komponennya daripada pelayan DeepPavlov;
  • Selain itu, untuk menjalankan model, anda perlu memasang perpustakaan Python yang digunakannya.

Model pertama yang akan kami lancarkan ialah Pengiktirafan Entiti Berbilang bahasa (NER). Model ini mengklasifikasikan perkataan teks mengikut jenis entiti yang dinamakan di mana ia tergolong (nama yang betul, nama geografi, nama mata wang dan lain-lain). Nama konfigurasi untuk versi terkini NER semasa:

ner_ontonotes_bert_mult

Kami melancarkan pelayan REST dengan model:

  1. Kami memasang kebergantungan model yang dinyatakan dalam konfigurasinya ke dalam persekitaran maya yang aktif:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Muat turun komponen model bersiri daripada pelayan DeepPavlov:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Komponen bersiri akan dimuat turun ke direktori utama DeepPavlov, yang terletak secara lalai

    ~/.deeppavlov

    Apabila memuat turun, cincangan komponen yang telah dimuat turun diperiksa terhadap cincangan komponen yang terdapat pada pelayan. Jika terdapat padanan, muat turun dilangkau dan fail sedia ada digunakan. Saiz komponen yang dimuat turun boleh berbeza-beza secara purata dari 0.5 hingga 8 Gb, dalam beberapa kes mencapai 20 Gb selepas membuka zip.

  3. Kami melancarkan pelayan REST dengan model:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Hasil daripada melaksanakan arahan ini, pelayan REST dengan model akan dilancarkan pada port 5005 mesin hos (port lalai ialah 5000).

Selepas memulakan model, Swagger dengan dokumentasi API dan keupayaan untuk menguji boleh didapati di URL http://127.0.0.1:5005. Mari kita uji model dengan menghantarnya ke titik akhir http://127.0.0.1:5005/model Permintaan POST dengan kandungan JSON berikut:

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

Sebagai tindak balas, kami harus menerima JSON berikut:

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

Menggunakan contoh ini, kami akan menganalisis DeepPavlov REST API.

API DeepPavlov

Setiap model DeepPavlov mempunyai sekurang-kurangnya satu argumen input. Dalam REST API, argumen dinamakan, nama mereka adalah kunci kamus masuk. Dalam kebanyakan kes, hujah ialah teks yang perlu diproses. Maklumat lanjut tentang hujah dan nilai yang dikembalikan oleh model boleh didapati di bahagian MODEL dokumentasi DeepPavlov

Dalam contoh, senarai dua rentetan telah dihantar ke hujah x, setiap satunya diberi penanda berasingan. Dalam DeepPavlov, semua model mengambil sebagai input senarai (batch) nilai yang diproses secara bebas.

Istilah "batch" merujuk kepada bidang pembelajaran mesin dan merujuk kepada sekumpulan nilai input bebas yang diproses oleh algoritma atau rangkaian saraf secara serentak. Pendekatan ini membolehkan anda mengurangkan (selalunya ketara) masa model memproses satu elemen kumpulan berbanding dengan nilai yang sama yang dihantar kepada input secara berasingan. Tetapi hasil pemprosesan dikeluarkan hanya selepas semua elemen telah diproses. Oleh itu, apabila menjana kumpulan masuk, adalah perlu untuk mengambil kira kelajuan model dan masa pemprosesan yang diperlukan untuk setiap elemen individunya.

Jika terdapat beberapa hujah untuk model DeepPavlov, setiap daripada mereka menerima kumpulan nilainya sendiri, dan pada output model sentiasa menghasilkan satu kumpulan jawapan. Elemen kumpulan keluar adalah hasil pemprosesan elemen kumpulan masuk dengan indeks yang sama.

Dalam contoh di atas, hasil model adalah untuk memecahkan setiap rentetan kepada token (perkataan dan tanda baca) dan mengklasifikasikan token itu berbanding dengan entiti yang dinamakan (nama organisasi, mata wang) yang diwakilinya. Pada masa ini model ner_ontonotes_bert_mult mampu mengenali 18 jenis entiti bernama, penerangan terperinci boleh didapati di sini.

Model luar biasa lain oleh DeepPavlov

Selain NER, model luar biasa berikut tersedia dalam DeepPavlov pada masa penulisan:

Menjawab Soalan Teks

Jawab soalan kepada teks dengan serpihan teks ini. Konfigurasi model: skuad_ru_bert_infer

Contoh permintaan:

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

Keputusan:

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

Pengesanan Penghinaan

Pengesanan kehadiran penghinaan kepada orang yang ditujukan teks (pada masa penulisan - hanya untuk bahasa Inggeris). Konfigurasi model: insults_kaggle_conv_bert

Contoh permintaan:


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

Keputusan:

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

Analisis Sentimen

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

Contoh permintaan:

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

Keputusan:

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

Pengesanan Parafrasa

Menentukan sama ada dua teks yang berbeza mempunyai makna yang sama. Konfigurasi model: stand_paraphraser_en

Permintaan:

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

Keputusan:

[
  [1],
  [0]
]

Senarai semasa semua model DeepPavlov yang luar biasa sentiasa boleh ditemui di sini.

Kesimpulan

Dalam artikel ini, kami berkenalan dengan DeepPavlov API dan beberapa keupayaan pemprosesan teks perpustakaan yang disediakan di luar kotak. Perlu diingat bahawa untuk sebarang tugas NLP, hasil terbaik akan dicapai apabila melatih model pada set data yang sepadan dengan kawasan subjek (domain) tugasan. Di samping itu, lebih banyak model tidak boleh, pada dasarnya, dilatih untuk semua situasi.

Dalam artikel berikut, kami akan melihat tetapan tambahan perpustakaan, melancarkan DeepPavlov dari Docker, dan kemudian kami akan beralih kepada model latihan. Dan jangan lupa bahawa DeepPavlov mempunyai forum – tanya soalan anda mengenai perpustakaan dan model. Terima kasih kerana memberi perhatian!

Sumber: www.habr.com

Tambah komen