Ekstrak informasi dari kalimat

11

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.

edwin
sumber
Ini menjelaskan bagaimana bot obrolan modern dibangun, tetapi saya tidak akan menyebutnya sederhana. Anda dapat mempelajari lebih lanjut dengan mencari "penjawab pertanyaan".
Emre
Saya sangat suka bagaimana orang yang mengajukan pertanyaan dan menerima jawaban menandai jawaban sebagai jawaban yang dapat diterima: P
chewpakabra

Jawaban:

7

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 -

 1. User: Edwin is my name.
 2. User: I am Edwin.
 3. User: My name is Edwin.

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.

vsdaking
sumber
2
Anda mungkin akan menerapkan 'automata terbatas non deterministik', di mana setiap kalimat adalah respons yang diterima suatu pola. Beberapa tata bahasa diterapkan pada sesuatu seperti ini. (NLP / Tata Bahasa). Jika Anda perlu cara melakukan ini, lihat kerangka stanfordnlp.github.io/CoreNLP
Intruso
5

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.

chewpakabra
sumber
4

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,

 I am Edwin.
 O O  B-NAME

 You can call me Alfred
 O   O    O    O B-NAME

 My name is  Edwin   thomas
 O  O     O  B-NAME  I-NAME

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.

Alfred Francis
sumber
0

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.

enterML
sumber