Saya membuat chatbot sederhana. Saya ingin mendapatkan informasi dari respons pengguna. Contoh skenario:
Bot : Hi, what is your name?
User: My name is Edwin.
Saya ingin mengekstrak nama Edwin dari kalimat itu. Namun, pengguna dapat merespons dengan berbagai cara seperti
User: Edwin is my name.
User: I am Edwin.
User: Edwin.
Saya mencoba mengandalkan ketergantungan hubungan antara kata-kata tetapi hasilnya tidak berjalan dengan baik.
Adakah gagasan tentang teknik apa yang bisa saya gunakan untuk mengatasi masalah ini?
[DIPERBARUI]
Saya diuji dengan pengenalan entitas bernama bersama-sama dengan bagian dari tagger dan pengurai ucapan. Saya menemukan bahwa sebagian besar model dilatih dengan cara bahwa karakter pertama dari entitas untuk nama orang atau kata benda yang tepat harus huruf besar. Ini mungkin benar untuk dokumen normal, tetapi tidak relevan untuk chatbot. Misalnya
User: my name is edwin.
Kebanyakan NER gagal mengenali ini.
Jawaban:
Anda mungkin dapat menggunakan kombinasi Named Entity Recognition dan Syntactical Analysis - sementara kata Edwin tentu saja mendukung, bayangkan sebuah situasi di mana namanya adalah Edward Philip Martel . NER mendeteksi setiap kata sebagai entitas yang terpisah (karenanya 3 entitas yang berbeda) - dengan demikian, Anda harus merangkai keduanya berdasarkan beberapa logika. Selanjutnya, dalam kasus beberapa nama hadir, itu bisa menjadi lebih sulit untuk disatukan (misalnya John & Ramsey makan di Winterfell ).
Di sinilah analisis sintaksis kalimat juga akan membantu (dengan asumsi bahwa pengguna akhir memasukkan kalimat yang relatif koheren dan tepat - jika digunakan istilah slang dan teks pendek, bahkan NLP Stanford dapat membantu hingga tingkat tertentu saja).
Salah satu cara memanfaatkan analisis sintaks / parsing dan NER adalah dalam contoh berikut -
Dalam setiap kasus (seperti halnya kasus pada umumnya), Nama Entitas (Kata benda / Kata benda yang Tepat) dikaitkan dengan jarak yang dekat dengan Kata Kerja. Karenanya, jika Anda mem-parsing kalimat terlebih dahulu untuk menentukan kata kerja dan kemudian menerapkan NER pada kata-kata (+/- 1 atau 2) yang mengelilinginya, Anda mungkin memiliki cara yang relatif layak untuk menyelesaikan masalah. Solusi ini akan bergantung terutama pada aturan sintaksis yang Anda buat untuk mengidentifikasi NER serta jendela di sekitar kata kerja.
sumber
Anda harus menggunakan Pengakuan Entitas Bernama, misalnya dari NLTK, http://www.nltk.org/book/ch07.html <- Anda dapat menemukan contoh penggunaan di sana. Ini akan bekerja dengan baik untuk kasus yang Anda gambarkan.
sumber
Ini dapat dengan mudah dilakukan dengan CRF s. Anda dapat menggunakan penyandian BIO untuk menandai kalimat Anda. Kemudian berikan kepada CRF. Anda hanya perlu membuat beberapa kalimat yang ditandai untuk tujuan pelatihan sebagai berikut,
CRFsuite dan CRF ++ adalah beberapa implementasi yang baik. CRFsuite memiliki pembungkus python yang disebut pycrfsuite , yang cukup mudah diimplementasikan. Periksa buku catatan ipython ini atau potongan kode ini di github untuk implementasi NER ujung ke ujung.
periksa proyek bot Obrolan Open source ini di github dengan NER dan Intent Classification yang ditulis dalam python. Mereka memiliki UI pelatihan yang mudah digunakan untuk melatih bot Anda untuk mengekstrak informasi dari kalimat.
sumber
Untuk melakukan tugas-tugas tersebut dengan akurasi tinggi, saya sarankan Anda untuk membangun model LSTM dengan embeddings kata dengan bantuan word2vec. LSTMs dapat membantu untuk mengambil informasi dari kalimat serta memprediksi karakter atau kata berikutnya yang diberikan seperangkat kata yang sudah ada dalam kalimat.
sumber