Ia memahami perintah suara Anda, mencari berita dan sumber pengetahuan, serta merangkum dan membacakan konten untuk Anda.
Lihat video demonya.
Majalah Chatbots menampilkan artikel Delbot saya dalam 100 artikel Teratas di Majalah Chatbots.
python app.py
di command prompt untuk meluncurkan layanan web.Bot tetap menjadi topik hangat. Semua orang membicarakannya.
Bagaimana kalau membangunnya dari awal? Yang sederhana yang akan kita buat hari ini akan memahami dan menjawab pertanyaan seperti:
Tujuan kami adalah membuat kode bot dari awal dan menggunakan pemrosesan bahasa alami (NLP) saat melakukannya.
Selain itu, bot kami akan diaktifkan dengan suara dan berbasis web jika Anda melengkapi bagian aplikasi web juga. Bagian terbaiknya adalah kita tidak perlu melakukan sesuatu yang rumit untuk pengenalan dan sintesis ucapan: kita akan menggunakan kemampuan bawaan browser web modern.
Pada tingkat tinggi, kami ingin dapat memahami dua tipe kueri yang luas. Berikut diagram alurnya.
Kami mungkin meminta kabar . Misalnya:
Apa kabar terbaru tentang Fantastic Beasts in the Guardian?
Bot akan menanyakan API sumber berita yang diminta (New York Times jika tidak ditentukan) dan merangkum hasilnya:
[...] Membandingkan film Harry Potter pertama (Harry Potter and the Philosopher's Stone tahun 2001) dengan film terakhir (Harry Potter and the Deathly Hallows Part Two tahun 2011) agak mirip dengan membandingkan Bambi dengan Reservoir Dogs. Kami pertama kali bertemu dengannya di New York tahun 1920-an – hampir 60 tahun sebelum Harry lahir – di mana dia berada di [...]
(sumber: https://www.theguardian.com/books/2016/nov/25/jk-rowling-fantastic-beasts-screenplay)
Kita mungkin mengajukan pertanyaan pengetahuan . Misalnya:
Apa itu rangkap tiga RDF?
Dan bot akan menjawab:
Triple semantik, atau hanya triple, adalah entitas data atom dalam Resource Description Framework.nFormat ini memungkinkan pengetahuan direpresentasikan dengan cara yang dapat dibaca mesin. Khususnya, setiap bagian dari rangkap tiga RDF dapat dialamatkan secara individual melalui URI unik. Misalnya, pernyataan kedua di atas mungkin direpresentasikan dalam RDF sebagai http://example.name#BobSmith12 http://xmlns.com/foaf/0.1/ tahu http://example.name#JohnDoe34.
(sumber: https://en.wikipedia.org/wiki/Semantic_triple)
Kami mendefinisikan aturan sederhana untuk mengkategorikan masukan: jika kueri berisi salah satu kata news atau new , itu adalah kueri berita . Jika tidak, ini adalah pertanyaan pengetahuan .
Fungsi predict
kelas QueryAnalyzer
adalah titik masuk utama untuk bot kita. Ia melakukan kategorisasi di atas. Ini memanggil fungsi lain ke
Terakhir, ia mengembalikan keluaran dan tanda yang menunjukkan jika ada kesalahan.
Kami berasumsi masukan berupa salah satu bentuk berikut.
Apa berita terbaru tentang Star Wars di New York Times?
Bacakan saya kabar terbaru tentang Brexit.
Beri saya berita tentang film Marvel Cinematic Universe tahun 2017 dari Guardian.
Token | Memberi | Saya | itu | terbaru | berita | pada | Donald | Truf | dari | itu | Baru | York | Kali | . |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
POS | KATA KERJA | PRON | DET | ADJ | KATA BENDA | ADP | PROPN | PROPN | ADP | DET | PROPN | PROPN | PROPN | Tusuk |
MENANDAI | VB | PRP | DT | JJS | NN | DI DALAM | NNP | NNP | DI DALAM | DT | NNP | NNP | NNP | . |
Terdapat pola dalam kalimat yang terstruktur seperti di atas. Dan preposisi adalah kuncinya.
Topik pencariannya berada di antara preposisi pertama dan terakhir. Sumber yang diminta berada di akhir setelah kata depan terakhir. Potongan kata benda terakhir adalah sumbernya.
Jika sumber tidak ditentukan, seperti pada contoh kedua, segala sesuatu setelah preposisi pertama dianggap sebagai topik pencarian.
Adposisi , sederhananya, adalah preposisi dan postposisi.
Dalam bahasa awal seperti bahasa Inggris, adposisi biasanya mendahului frasa kata benda. Misalnya karakter dari Marvel Cinematic Universe. Sedangkan dalam bahasa head-final seperti Gujarati, adposisi mengikuti frase kata benda. Ini adalah postposisi. Misalnya માર્વેલ ચલચિત્ર જગત_ના_ પાત્રો, yang diterjemahkan kata demi kata menjadi: karakter Marvel Cinematic Universe.
Kami memanggil get_news_tokens
dari kelas QueryExtractor
, yang mengekstrak sumber dan kueri dari input. Secara internal, ia memanggil _split_text
untuk mengekstrak potongan kata benda, jenis kata, dan teks yang telah diurai sepenuhnya dari masukan. Kami memberi lemmatisasi pada istilah-istilah dalam kueri.
Selanjutnya, kita memanggil fungsi get_news
menggunakan query pada salah satu kelas Aggregator
di media_aggregator.py berdasarkan source . Ini mengembalikan daftar artikel berita yang dikirim sebagai respons oleh API berita. Saat ini kami mendukung The Guardian API dan The New York Times API.
Terakhir, kita memilih item pertama (secara default) dari daftar respons dan meringkasnya menggunakan fungsi shorten_news
.
Kami berasumsi masukan berupa salah satu bentuk berikut.
John Deere
Joan dari Arc
Siapa Donald Trump?
Siapa JRR Tolkien?
Apa yang dimaksud dengan objek predikat subjek?
Ceritakan tentang fisika partikel.
Token | Apa | adalah | sebuah | RDF | tiga kali lipat | ? |
---|---|---|---|---|---|---|
POS | KATA BENDA | KATA KERJA | DET | PROPN | KATA BENDA | Tusuk |
MENANDAI | WP | VBZ | DT | NNP | NN | . |
Token | Memberi tahu | Saya | tentang | Dia | - | pria | Dan | itu | tuan | dari | itu | semesta | . |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
POS | KATA KERJA | PRON | ADP | PRON | Tusuk | KATA BENDA | KONJ | DET | KATA BENDA | ADP | DET | KATA BENDA | Tusuk |
MENANDAI | VB | PRP | DI DALAM | PRP | HIPH | NN | CC | DT | NNS | DI DALAM | DT | NN | . |
Jika kita menemukan kata kerja bantu, kita memperlakukan segala sesuatu setelah kemunculannya yang pertama sebagai kueri. Jadi, dalam Contoh 1 , kuerinya adalah RDF triple .
Jika tidak, kami memperlakukan semua potongan kata benda setelah yang pertama sebagai kueri. Jadi, dalam Contoh 2 , pertanyaannya adalah dialah yang menguasai alam semesta .
Kami memanggil get_knowledge_tokens
dari kelas QueryExtractor
, yang mengekstrak kueri .
Kami meneruskan ini ke fungsi get_gkg
, yang menanyakan API Wikipedia melalui paket Python wikipedia dan mengembalikan ringkasan 5 kalimat dari hasil teratas.
Saya menggunakan kelas FrequencySummarizer
dari Peringkasan teks dengan NLTK. Alternatifnya, Anda bisa menggunakan sumy.
Selain paket re , bs4 , request , operator , collections , heapq , string dan nltk , kita akan menggunakan yang berikut ini.
spaCy : Silakan atur seperti yang diberikan dalam dokumen Instal spaCy. spaCy akan membantu kita melakukan NLP dengan cepat. Kami dapat menggunakan NLTK tetapi spaCy akan membuat Anda bekerja lebih cepat. Kami menggunakan spaCy dalam proyek ini.
Wikipedia : Ini membantu menanyakan API Wikipedia. Anda dapat membaca dokumen paket Python wikipedia di sini.
Summarizer : Yang saya gunakan dipinjam dari blog The Glowing Python yang ditulis oleh JustGlowing. Ini merangkum konten yang panjang. Alternatifnya, Anda bisa menggunakan sumy.
Flask-RESTful, Flask (Opsional) : Ini untuk membangun aplikasi web dan mengoperasionalkan bot kami melalui layanan web RESTful.
Kami menambahkan halaman web keren tempat Anda dapat menjalankan kueri suara dan meminta browser membacakan konten respons. Kami menggunakan Web Speech API untuk ini.
Kami mengaktifkan dan menjalankan layanan web REST berbasis Flask di bawah 20 baris kode. Kelas QueryService
menangani permintaan.
Saat ini, kami hanya memerlukan satu panggilan layanan untuk mengirim masukan dari aplikasi web ke bot kami. Hal ini dilakukan melalui fungsi post
dari kelas QueryService
. post
, pada gilirannya, memanggil fungsi predict
, yang merupakan titik masuk utama seperti yang disebutkan di atas.
Saya membuat halaman web dasar untuk mendemonstrasikan bot. Ia menggunakan Web Speech API untuk menerima masukan suara dan membacakan konten. Anda dapat menemukan file index.html di folder template. Pastikan Anda telah menginstal semua paket dan pustaka yang diperlukan, dan layanan web aktif dan berjalan sebelum Anda membuka situs web.
Bot sederhana kami memahami permintaan terbatas. Ia tidak dapat memahami jenis permintaan lain seperti berikut.
Permintaan pengetahuan dengan struktur yang berbeda
Jelaskan kepada saya apa itu agregasi bootstrap.
Ceritakan sesuatu tentang ilmu saraf komputasi.
Permintaan berita dengan struktur berbeda
Apa pendapat New York Times tentang pertandingan terakhir Roger Federer?
Apa yang terjadi di dunia tenis?
Permintaan pengetahuan jenis lain
Bagaimana keju dibuat?
Dimana JK Rowling lahir?
Bisakah kita membangun kota langit di Venus?
Kapan Revolusi Perancis terjadi?
Mengapa Jupiter Memiliki Bintik Merah Besar?
Pertanyaan dan konteks tindak lanjut
Jelaskan kepada saya apa itu agregasi bootstrap.
lalu: Apa kaitannya dengan hutan acak?
Memahami apa yang dirujuk dalam pertanyaan lanjutan muncul dalam apa yang dikenal sebagai resolusi anafora. Itu semua adalah bagian dari pemahaman konteks. Kata-kata yang berbeda memiliki arti yang berbeda dalam konteks yang berbeda. Meskipun manusia memiliki pemahaman yang berbeda-beda tentang hal ini, jauh lebih sulit untuk mengajarkan hal yang sama kepada mesin.
Kami mencapai tujuan kami dalam membuat bot berdasarkan beberapa aturan yang kami tetapkan. Kami juga memanfaatkan beberapa teknik NLP. Terakhir, kami menerapkan bot kami ke aplikasi web. Namun, bot kami terbatas pada jenis pertanyaan yang dapat dipahami dan dijawab. Mengapa cakupan pemahamannya begitu sempit?
Secara umum, membuat komputer benar-benar memahami bahasa merupakan masalah yang sulit bagi AI. Ada bidang yang dikenal sebagai NLU (Natural Language Understanding) dalam NLP yang didedikasikan untuk ini.
Kami dapat menerapkan solusi berbasis pembelajaran mesin sehingga bot kami berpotensi memahami permintaan yang lebih luas.
Harap pastikan untuk membaca ketentuan penggunaan API yang digunakan di sini.