question answer chatbot

Question Answer (QA) Chatbot dengan DistillBERT Transformer

Tutorial kali ini kita akan membuat model Question Answer (QA), dengan menggunakan library transformer untuk NLP yakni Hugging Face. QA yang kita buat dapat menerima pertanyaan dalam format layaknya pertanyaan yang diajukan manusia, dan memberikan jawaban yang sesuai dengan konteks yang kita harapkan. QA adalah task yang menarik dan berbeda dengan retrieval, karena kita bukan searching keyword jawaban di database, meskipun perkembangan search engine bisa dikombinasi dengan task ini (bisa dibaca artikel menarik di sini https://blog.google/search-language-understanding-bert).

Ada 4 tahapan yang akan dieksplor di tutorial ini:

  1. Membuat Question Answer dengan DistillBERT
  2. Pre-trained Model Transformer Khusus
  3. Membuat Chatbot Telegram
  4. Integrasi Model Transformer QA ke Chatbot Telegram

1. Membuat Question Answer dengan DistillBERT

DistillBERT adalah varian BERT dengan kecepatan inferensi yang baik sehingga cocok digunakan untuk Question Answer system. Perbedaan DistillBERT, BERT, dan varian lain bisa juga dibaca di sini: https://towardsdatascience.com/bert-roberta-distilbert

Workflow
  1. Buat file Colab
  2. Install library transformers Hugging Face.
  3. Import class pipeline dari library transformer. Class ini memuat pre-trained model untuk berbagai task NLP dalam bahasa Inggris. Ada beberapa pilihan task NLP yang bisa kita gunakan misalnya sentiment analysis, translation, question-answering dll. Task yang akan kita gunakan adalah question-answering.
  4. Inisiasi pembuatan obect dengan class pipeline, isikan parameter pertama dengan "question-answering". Step ini akan mendownload model untuk task question-answering sehingga hanya perlu di-run sekali. Inisiasi ini akan otomatis menggunakan model transformer DistillBERT, yang kecepatan inferensinya baik.
  5. Object bisa digunakan dengan mengisikan pertanyaan pada parameter question dan konteks pertanyaan pada parameter context.

Sebagai contoh akan diberikan pertanyaan “Where was Pink Floyd established?” dengan konteks “Pink Floyd was an English rock band formed in London in 1965.“. Implementasinya dituliskan pada code di bawah ini.

# Install library transformer dan Import class pipeline
!pip install transformers 
from transformers import pipeline

# Inisiasi object dan Penggunaan pre-trained model QA
qa_model = pipeline('question-answering')
qa_model(question='Where is Pink Floyd established?',
         context='Pink Floyd was an English rock band formed in London in 1965.')
Continue reading

Representation Learning #NLP1

Istilah representation learning sering muncul pada paper-paper rujukan yang mengusulkan varian atau arsitektur baru suatu algoritma. Saat membaca paper (Zhang, 2018), berjudul “Learning Structured Representation for Text Classification via Reinforcement Learning”, saya baru tahu kalau penggunaan LSTM itu bisa disetarakan dengan BoW dalam hal representasi, dengan istilah representation learning. Jadi ingat, memang benar ada conference yang namanya ICLR: The International Conference on Learning Representations, dan banyak paper rujukan utama perkembangan machine learning berasal dari situ. Oke kembali lagi, jadi pembagian representasi untuk kebutuhan fitur task klasifikasi teks bisa jadi 4 menurut Zhang.

  1. Bag of words. Tidak memperhatikan urutan, termasuk di dalamnya Deep Average Network (Iyyer, 2015) dan Autoencoder (Liu, 2015). Keduanya saya belum baca kenapa bisa termasuk ke kategori ini.
  2. Sequence. Metode CNN, RNN, termasuk LSTM dan variannya, dikatakan bahwa mereka memperhatikan word order namun tanpa menggunakan struktur apapun. (Kalau word embedding seperti Word2Vec dan Fasttext, masuk di mana ya? Pembentukan inputnya melibatkan sekuens, karena antara kata konteks dan kata target merupakan kata-kata bertetangga, kan. Tapi untuk representasinya semua dikumpulkan menjadi satu begitu saja seperti dictionary, jadi saya masih skip dulu bagian ini.)
  3. Structured. Metode Recursive autoencoder (Socher 2011, 2013), dan Tree-structured LSTM (Tai, 2015) yang saya gunakan di tesis, masuk di kategori ini. Saya pernah baca, bahwa tree-structured network bisa disamakan atau memang bersumber dari metode recursive network pada awalnya. Belum tahu pasti, tapi yang terbayang mungkin berbeda dari segi implementasi yang satu dengan recursive looping, dan yang satu dengan objek tree. Atau mungkin juga memang benar-benar sama, tapi hanya beda istilah saja? (Akan update setelah menemukan pencerahan lagi. Surprisingly saya ternyata follow Socher ini di twitter sudah sejak lama, bahkan sebelum saya ambil S2 ataupun tesis Tree-LSTMM.)
  4. Attention-based. Metode attention ini setahu saya bersumber dari metode seq2seq, tapi dengan penambahan penekanan alias attention di bagian input tertentu. (Akan update setelah beneran ngerjain kasus attention.)

Sebagai catatan, paper Zhang yang saya sebutkan di awal sangat menekankan istilah “representasi struktur” di penelitian tersebut, yang berarti masuk di kategori ke-3 dari 4 kategori di atas. Namun setelah saya coba fahami metode yang mereka usulkan, saya lebih terpikirkan ke task tagging ketimbang struktur. Yang terbayang adalah seperti task POS Tagging, yang solusi pengerjaannya adalah dengan memprediksi tiap kata atau fragmen dengan suatu label atau tag. Walaupun memang Part of Speech ini, setelah berhasil diprediksi kemudian bisa disebut atau bisa menciptakan “struktur”, tentunya dari segi linguistik.

Sehingga, agak berbeda dengan kesan saya terhadap contoh metode di kategori ke-3 yakni Recursive autoencoder dan Tree-structured LSTM. Keduanya benar-benar memaparkan cara berpikir dengan “struktur”. Algoritma dirancang dengan flow sesuai struktur yang diusulkan, yang satu secara recursive, yang satunya dengan bentuk Tree. Sehingga untuk setiap input yang diproses mengikuti struktur yang didefinisikan, dihasilkan pula output representasi struktur yang sesuai.

On Policy dan Off Policy Learning #RL1

Sudah lewat setahun saya selesai tesis, tapi belum bisa sharing artikel di sini karena bingung mulai dari mana. Kebetulan momennya sekarang sedang revisi paper, jadinya saya harus belajar lagi. Dan tiap belajar pasti banyak sekali catatan yang saya buat, baik yang tuntas maupun yang mandeg. Maka dari itu, muncul ide tab Notes ini. Berisi catatan belajar yang belum layak jadi artikel, tapi sayang kalau dibuang. Ini adalah konten Notes yang pertama, dengan topik Reinforcement Learning.

Anyway, di tesis saya, saya menggunakan algoritma Q-Learning. Q-Learning di buku Reinforcement Learning: An Introduction (Sutton dan Barto) termasuk dalam Off Policy Temporal Different Learning.

Q-Learning

Rumus Q-value nya adalah seperti gambar di bawah (GeeksforGeeks), ini sesuai yang saya pakai di tesis.

Saat menentukan action dari next state St+1, bisa dilihat di dalam kurung pada notasi yang memuat max. Nah mengambil nilai max ini disebut dengan greedy. Dan greedy ini termasuk jenis policy. Jadi untuk next state, policy yang dipakai adalah greedy.

Sedangkan menentukan action di current state St, policy yang dipakai adalah epsilon greedy. Epsilon greedy, maksudnya kita punya parameter nilai epsilon. Nilai epsilon berubah di tiap episode, ini yang menentukan kita mau pakai policy mana. Ada dua pilihan mau memilih nilai max (greedy) atau memilih random.

Jadi di Q-Learning ini sekali proses ada dua jenis policy yang dipakai. Di awal pakai epsilon greedy, di akhir ditentukan pakainya mesti greedy, sekali lagi ini kasus di tesis saya. Nah disebut Off Policy, karena policy yang dipakai di awal current state, dimatikan, dan diganti policy yang lain untuk next statenya.

SARSA

Ini merupakan jenis algoritme RL, yang saya taunya dari paper rujukan reviewer buat revisi jurnal saya (Zhang, 2009). Ternyata, SARSA mirip sekali dengan Q-Learning karena merupakan modifikasinya. Bedanya, SARSA berjenis On-Policy.

Rumus Q-value nya:

Sesuai yang sudah dijelaskan di bagian Q-Learning, kalau Off Policy memakai dua jenis policy berbeda. Maka kalau On Policy, policy yang digunakan sama. Jadi semisal di awal current state pakai epsilon greedy, maka untuk next state juga pakai epsilon greedy. Maka dari itu di rumus di atas, perolehan Q-value untuk next state notasinya sama dengan Q-value untuk current state.

Tips Mengerjakan TOEFL ITP Online

Sebelumnya saya menulis pengalaman mendaftar dan mengikuti TOEFL ITP Online pada artikel Pengalaman TOEFL ITP Online. Kali ini akan saya share tips mengerjakan TOEFL ITP Online dan detil tiap sesinya!

1. Section 1 Listening Comprehension

Waktu : 35 menit, Jumlah : 50 soal.
Ketika memulai sesi ini, waktu akan berjalan dan audio soal akan berbunyi (Jika waktu sudah jalan, tapi tidak terdengar audio, langsung lambai-lambai ke webcam agar tes bisa dipause oleh proctor). Meskipun disebutkan maksimal pengerjaan sesi listening 35 menit, namun pada tiap soal dibatasi waktu pengerjaannya, mungkin sekitar 5-10 detik saya agak lupa. Akan ada notif semacam loading bar tertampil di layar untuk setiap soal. Jika waktu per soal habis (loading bar sudah mentok), maka otomatis layar menampilkan soal selanjutnya. Pastikan menjawab semua soal, karena setelah sampai di soal terakhir kita tidak bisa mengulang mendengarkan audio soal, meskipun waktu pengerjaan kita belum sampai 35 menit.

Continue reading

Melanjutkan Training Extend FastText Model

Artikel kali ini membahas bagaimana cara melanjutkan training atau extend Fasttext model yang sudah ada, dengan menambahkan dataset baru. Pada artikel sebelumnya, Word embedding dengan Fasttext bagian 1.5, telah dibahas cara menggunakan model pre-trained Fasttext word embedding dalam Bahasa Indonesia yang disediakan oleh Facebook. Manfaat dari extend model adalah kita bisa menambahkan kosa kata baru ke dalam vocabulary model pre-trained Fasttext, tanpa perlu train ulang dari awal.

Definisi model pre-trained di sini tidak terbatas pada model pre-trained yang disediakan Facebook, tapi bisa juga berupa model word embedding Fasttext yang sudah kita train sendiri sebelumnya. Namun untuk contoh, akan digunakan model pre-trained Fasttext Bahasa Indonesia dari Facebook.

  1. Load Pre-Trained Model FastText dari Facebook
  2. Cek Model Awal
  3. Menyiapkan Dataset
  4. Extend Model
  5. Cek Model Setelah di-Extend
Continue reading