HuggingFace: Ekosistem Open Source untuk Machine Learning

Apa itu HuggingFace 🤗

Bagi teman-teman yang aktif ngikutin perkembangan Machine Learning, khususnya Natural Language Processing, pasti pernah dengar HuggingFace. HuggingFace (HF) ini adalah perusahaan yang awalnya berfokus pada pengembangan aplikasi-aplikasi NLP, tapi sekarang sudah menjelma menjadi suatu “Ekosistem” machine learning yang sangat besar. Saya sebut ekosistem karena HF bukan seperti perusahaan yang hanya menyediakan jasa, atau produk komersil, tapi lebih dari itu!

HF telah berkontribusi banyak dalam perkembangan Machine Learning saat ini, tidak hanya NLP tapi Machine Learning secara umum. Dengan menyediakan Course; platform untuk saling berbagi model, dataset, atau demo; menyediakan library untuk NLP; membangun komunitas yang aktif; yang semua itu gratis!! (HF juga menulis buku tentang NLP di sini, tapi kalau ini berbayar 😁)

Beberapa waktu lalu ikut kegiatan HF yang mau buat platform untuk edukasi di kelas-kelas

Di artikel ini saya akan coba cerita sedikit gambaran umum tentang layanan-layanan HF yang teman-teman bisa gunakan.

HuggingFace Model Hub

Saya ingat beberapa tahun lalu pernah ada yang tanya, baik langsung ke saya atau via online, apakah ada layanan di mana orang-orang bisa upload model machine learning untuk digunakan orang lain, jadi orang lain tidak perlu melakukan train, test, dan sebagainya. HuggingFace Model menjawab itu! Di sini orang-orang bisa mengupload model hasil pelatihan mereka, lalu orang lain bisa tinggal download dan pakai model tersebut.

HuggingFace Model sangat terorganisir, kalian bisa sort berdasarkan task kebutuhan kalian, library yang digunakan, pembuatnya, atau bahasa (untuk NLP). Model-model tersebut nantinya bisa digunakan sebagai pre-trained model yang lalu ditrain ulang (finetuning) atau digunakan apa adanya. Beberapa waktu lalu istri saya pernah menulis tutorial membuat chatbot menggunakan salah satu model yang ada di HF ini.

Menggunakan model-model tersebut kerasa lebih mudah ketimbang harus cari-cari model di internet, karena sudah terintegrasi dengan library HF. Selain itu penjelasan pemakaian juga biasanya didokumentasikan dengan baik pada Model Card (“Readme” nya model di HF).

Oh ya, Jika tidak mau bersentuhan dengan modelnya sama sekali, kita juga bisa menggunakan HF inference API (berbayar) yang memungkinkan kita untuk memanfaatkan model-model secara langsung melalui API. Jadi kita bahkan bisa memanfaatkan model-model machine learning tanpa perlu paham Python!

Continue reading
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

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
tutorial fasttext bahasa indonesia

Membuat Model Word Embedding Fasttext Bahasa Indonesia

Artikel ini adalah kelanjutan dari dua artikel sebelumnya, word embedding dengan Fasttext bagian 1 dan word embedding dengan Fasttext bagian 1.5. Pada artikel sebelumnya kita berfokus menggunakan pretrained model Fasttext Bahasa Indonesia menggunakan package gensim dan package Fasttext Python. Kali ini kita akan mencoba membuat model word embedding Fasttext Bahasa Indonesia sendiri menggunakan package Fasttext python.

Apa yang dibutuhkan?

Dalam membuat model word embedding Fasttext Bahasa Indonesia, yang kita butuhkan pertama adalah dataset. Untuk menghasilkan model yang baik, diperlukan dataset yang cukup besar. Karena ukuran dataset yang bisa sangat besar, disarankan menggunakan komputer dengan RAM berkapasitas besar, atau kalau saya pribadi menggunakan Google Colab.

Continue reading

Word Embedding Bahasa Indonesia menggunakan Fasttext (tanpa Gensim)

Updated 11 Juli 2019: Fasttext released version 0.9.1

Pada artikel sebelumnya saya sempat menuliskan bagaimana menggunakan Gensim untuk me-load pre-trained model word embedding FastText. Ternyata metode tersebut “kebetulan” mudah digunakan untuk data bahasa Indonesia. Ketika kita memilih bahasa lain yang memiliki ukuran data lebih besar, menggunakan Gensim bisa jadi memunculkan masalah karena untuk me-load pre-trained model FastText, Gensim membutuhkan resource RAM yang cukup tinggi

Sebagai contoh jika kita coba me-load pre-trained model bahasa Inggris di Google Colab yang memiliki kapasitas RAM 12GB, Google Colab akan crash karena notebook kita menggunakan sumberdaya melebihi yang disediakan.

Berikut contoh program untuk me-load model bahasa Inggris menggunakan Gensim (detail sintaks program sebelumnya sudah sempat saya bahas di post sebelumnya)

# Install Gensim
!pip install --upgrade gensim

# Download dan unzip dataset
!wget https://dl.fbaipublicfiles.com/fasttext/vectors-crawl/cc.en.300.bin.gz
!gunzip cc.en.300.bin.gz
# Load model
from gensim.models.fasttext import FastText
model = FastText.load_fasttext_format('cc.en.300.bin')

Dan hasilnya, RAM kita yang 12GB itu secara perlahan akan habis digunakan. Lalu berakhir Google Colab kita akan mengalami crash dengan pesan berikut:

Untuk itu ada cara lain yang ingin saya bahas singkat di post ini bagaimana cara me-load pre-trained model Fasttext jika RAM kita terbatas

Menggunakan Fasttext Python Library

Seperti yang telah saya singgung di artikel sebelumnya, terdapat dua library yang dapat kita gunakan saat ingin menerapkan FastText di Python. Yang pertama adalah menggunakan Gensim, dan yang kedua adalah menggunakan package resmi dari FastText. Dokumentasinya dapat dibaca di halaman github ini.

Continue reading