Lensa ML

Bag of Words

Langkah 1 dari 6: Menyusun Kosakata

Dari korpus menjadi daftar kata

Threshold frekuensi minimum1
Korpus5 dokumen · 30 tokenD0"the cat sat on the mat"6D1"the dog ran in the park"6D2"a cat and a dog played"6D3"the park had a big mat"6D4"a dog sat on a mat"6Frekuensi Katadi semua dokumena5the5dog3mat3cat2on2park2sat2and1big1had1in1played1ran1frek min = 1
Ukuran kosakata
14
Dihapus
0
Total token
30

Frekuensi minimum = 1: semua kata di korpus dipertahankan, dari yang umum seperti 'the' (5×) sampai yang langka seperti 'big' (1×).

Geser Threshold frekuensi minimum dari 1 ke 5 dan lihat kosakata 14 kata itu menyusut. Kelima dokumen contoh berisi total 30 token. Menyusun kosakata adalah satu-satunya proses fitting yang dibutuhkan model bag-of-words: lakukan tokenization, hitung, saring, lalu beri indeks pada setiap kata yang tersisa. Pipeline sungguhan menyaring dari dua arah. CountVectorizer di scikit-learn punya min_df untuk membuang kata langka dan max_df untuk membuang kata yang muncul di terlalu banyak dokumen, dan banyak pipeline juga mengubah teks ke huruf kecil serta menghapus daftar stop word. Kata di luar kosakata diabaikan saat prediksi.

Langkah 2 dari 6: One-Hot Encoding

Satu kata, satu dimensi

Pilih kata0
Kosakataindeks → one-hot vectoridxkataone-hot vector0a100000000000001the010000000000002dog001000000000003mat000100000000004cat000010000000005on000001000000006park000000100000007sat000000010000008and000000001000009big0000000001000010had0000000000100011in0000000000010012played0000000000001013ran00000000000001Dimensi vector = ukuran kosakata = 14
Kata
a
Indeks
0
Dimensi
14
Bukan nol
1

"a" ada di indeks 0 → one-hot vector-nya bernilai 1 di posisi 0 dan 0 di semua posisi lain. Kata yang umum mendapat indeks kecil di sini. Setiap kata memiliki tepat satu dimensi, tanpa konsep kemiripan antarkata.

Geser Pilih kata melewati 14 indeks untuk memindahkan satu-satunya angka 1 di dalam vector. Dua one-hot vector yang berbeda selalu punya dot product 0 dan jarak Euclidean √2. Dalam arti itulah one-hot encoding tidak tahu apa-apa soal makna. Model jarang menyimpan vector ini. Mengalikan one-hot vector dengan matriks weight hanya memilih satu baris matriks, jadi neural network mengganti perkalian itu dengan pencarian di tabel. Tabel itulah embedding layer.

Langkah 3 dari 6: Count Vector

Menjumlahkan one-hot menjadi vector dokumen

Pilih dokumen0
Dok 0"the cat sat on the mat"theidx 1catidx 4satidx 7onidx 5theidx 1matidx 3Σ one-hot → count vectorCount Vectora0the2dog0mat1cat1on1park0sat1and0big0had0in0played0ran0
Dokumen
Dok 0
Token
6
Unik
5
Sparsity
64%

Dokumen 0 punya 6 token yang dipetakan ke 5 kata unik. Kata seperti "the" muncul 2×. Count vector mencatat frekuensi, bukan posisi.

Geser Pilih dokumen dari 0 ke 4 untuk melihat count vector tiap kalimat. Count vector adalah jumlah one-hot vector dari token-nya: Dokumen 0 punya 6 token, dan dua kata "the" di dalamnya menjadi angka 2 di satu posisi. Penjumlahan membuang posisi, jadi urutan kata tidak bisa dipulihkan. Meski begitu, vector ini masih menyimpan banyak sinyal. Naive Bayes dan logistic regression di atas count vector selama bertahun-tahun menjadi standar untuk filter spam dan classifier sentimen, dan pada dataset kecil keduanya masih sulit dikalahkan.

Langkah 4 dari 6: Document-Term Matrix

Gambaran lengkap: semua dokumen, semua term

Ukuran kosakata10
Document-Term Matrix5 × 10athedogmatcatonparksatandbigD00201110100D10210001000D22010100010D31101001001D42011010100Baris = dokumen (5) · Kolom = term (10) · Sel = jumlah kataBukan nol: 22 / 50 (56% sparse)
Matriks
5×10
Bukan nol
22
Sparsity
56%
Term
10

Setiap dokumen adalah baris dan setiap term adalah kolom. Dengan 10 term, sparsity matriks ini 56%. Sparsity korpus sungguhan mencapai 99%+.

Geser Ukuran kosakata ke atas dan lihat kolom yang sebagian besar isinya nol masuk ke matriks. Baris adalah dokumen dan kolom adalah term, jadi kalau dibaca per kolom, setiap kata punya vector berisi dokumen tempat kata itu muncul. Memfaktorkan matriks ini dengan SVD disebut latent semantic analysis (LSA, 1990), salah satu metode pertama yang menempatkan kata-kata terkait saling berdekatan. Format sparse seperti CSR hanya menyimpan sel bukan nol beserta posisinya. Matriks dense berukuran sejuta dokumen kali 100.000 term akan butuh 100 miliar sel.

Langkah 5 dari 6: Biner, Count, dan Ternormalisasi

Tiga varian BoW

CountFrekuensi kata mentah: dokumen yang lebih panjang punya hitungan lebih besarathedogmatcatonparksatandbigD00201110100D10210001000D22010100010D31101001001D42011010100Rentang nilai: 0–2 · Bukan nol: 22 / 50
Mode
Count
Rentang nilai
0-2
Bukan nol
22

BoW count: jumlah kata mentah. 'the' muncul 2× di Dokumen 0, jadi nilai selnya 2. Frekuensi tersimpan, tetapi dokumen yang lebih panjang mendapat hitungan lebih besar, sehingga perbandingannya jadi miring.

Klik Biner, Count, dan TF-Normalized untuk mengganti cara setiap sel diisi. Pilihan yang tepat bergantung pada modelnya. Bernoulli naive Bayes mengharapkan input biner, multinomial naive Bayes mengharapkan hitungan, dan model linear yang dilatih dengan gradient descent biasanya lebih baik dengan nilai ternormalisasi atau berskala log, supaya tidak ada satu feature yang mendominasi. Pada teks pendek seperti tweet atau query pencarian, kata jarang berulang, sehingga vector biner dan vector hitungan hampir sama. Versi ternormalisasi adalah bagian TF dari TF-IDF.

Langkah 6 dari 6: Keterbatasan

Yang hilang dari BoW

Order invariance: urutan berbeda, BoW samaKalimat:dogbitesmanArti: "Anjing menggigit orang"Vector BoW:bites1dog1man1Vector sama untuk SEMUA urutan!Masalah sparsity (Dok 0, seluruh kosakata):bukan nolnol (64%)Keterbatasan utama:Tanpa urutan kata: 'dog bites man' = 'man bites dog'Dimensi tinggi: satu dimensi untuk setiap kata kosakataSparsity ekstrem: sebagian besar isinya nolTanpa kemiripan makna: 'happy' dan 'glad' orthogonal
Urutan
#1
Vector BoW
[1,1,1]
Sparsity
64%

"Dog bites man": judul berita biasa dengan vector BoW [1,1,1]. Klik urutan lain. Maknanya berubah, tetapi vector-nya tidak.

Klik empat urutan dog, bites, dan man lalu bandingkan vector-nya. Perbaikan parsialnya adalah n-gram: menambahkan pasangan kata sebagai kolom ekstra memberi "dog bites" dan "man bites" kolom masing-masing, sehingga kedua judul berita itu akhirnya berbeda. Harganya ada di ukuran, karena kosakata V kata bisa menghasilkan sampai V² bigram. Bag-of-words punya titik buta lain. "not good" dan "good" sama-sama punya feature "good", dan sinonim seperti "film" dan "movie" menjadi kolom yang tidak berkaitan. Word embedding dan model sekuens seperti RNN dan transformer mengatasi masalah ini.

Apa itu model bag-of-words?

Model bag-of-words (BoW) merepresentasikan dokumen sebagai jumlah kemunculan kata di dalamnya, tanpa memedulikan urutannya. Kosakata yang tetap memberi setiap kata satu posisi, dan setiap dokumen menjadi vector yang mencatat berapa kali tiap kata kosakata muncul. Dua kalimat dengan kata yang sama tetapi urutan berbeda mendapat vector yang sama.

Bag-of-words adalah cara paling sederhana untuk mengubah teks menjadi angka yang bisa dipakai model machine learning. Filter spam, classifier sentimen, topic model seperti LDA, dan mesin pencari generasi awal semuanya dibangun di atasnya, biasanya bersama naive Bayes atau logistic regression. Sampai sekarang pun cara ini masih menjadi baseline yang cepat dan mudah ditafsirkan, dan TF-IDF adalah versi vector yang sama dengan weight berbeda.

Ide utama

  • Bag-of-words merepresentasikan dokumen dengan jumlah katanya dan membuang urutan kata.
  • Kosakata memetakan setiap kata yang disimpan ke satu indeks tetap di dalam vector.
  • Count vector sebuah dokumen adalah jumlah one-hot vector dari token-nya.
  • Menumpuk vector itu menghasilkan document-term matrix yang hampir seluruhnya nol.
  • Isi sel bisa berupa nilai biner, hitungan mentah, atau hitungan dibagi panjang dokumen.
  • N-gram memulihkan sebagian urutan kata lokal, dengan biaya kosakata yang jauh lebih besar.

Pertanyaan umum

Apa bedanya bag of words dan TF-IDF?

Bag-of-words mengisi setiap sel dengan hitungan, jadi kata fungsi yang sering muncul mendapat nilai besar. TF-IDF mulai dari hitungan yang sama, lalu mengalikannya dengan weight inverse document frequency, yang mengecilkan kata yang ada di sebagian besar dokumen dan menaikkan kata langka yang khas untuk suatu topik. Keduanya menghasilkan vector dengan bentuk yang sama.

Kenapa disebut "kantong" kata (bag of words)?

Dalam matematika, bag atau multiset adalah kumpulan yang mencatat berapa kali setiap item muncul, tetapi tidak mencatat urutannya. Gagasan menggambarkan teks lewat distribusi kata berawal dari makalah Zellig Harris tahun 1954, "Distributional Structure", yang memakai frasa "bag of words" saat membahas bahasa.

Bagaimana bag-of-words menangani kata yang belum pernah dilihat?

Kata yang tidak ada di kosakata tidak punya kolom, jadi kata itu dibuang. Hashing trick menghindari kosakata tetap dengan memetakan setiap kata lewat hash ke salah satu dari sejumlah kolom. Cara ini menangani kata apa pun, tetapi kata yang tidak berkaitan bisa bertabrakan di kolom yang sama.

Apakah bag-of-words dipakai di luar teks?

Ya. Model bag-of-visual-words mengelompokkan potongan kecil gambar menjadi codebook berisi "kata visual" dan menggambarkan setiap gambar dengan histogram dari kelompok itu. Sebelum ada convolutional network, cara ini menjadi metode standar klasifikasi gambar, dan ide penghitungan yang sama juga muncul di audio dan genomika.

Penjelasan terkait

  • Tokenization & BPE · Cara teks menjadi angka, dari karakter sampai subword token lewat byte-pair encoding
  • TF-IDF · Menilai seberapa penting sebuah kata bagi satu dokumen dalam koleksi, dasar mesin pencari dan text retrieval
  • Naive Bayes Classifier · Klasifikasi probabilistik dengan aturan Bayes
  • Text Classification & Sentiment · Latih model untuk memberi label pada teks, dari deteksi spam sampai sentiment analysis
  • Embedding · Mengubah kata dan kategori menjadi vector
  • Singular Value Decomposition · Uraikan matriks apa pun menjadi rotasi, skala, dan rotasi: alat serbaguna di aljabar linear

Referensi

  1. Harris (1954), "Distributional Structure", Word
  2. Deerwester et al. (1990), "Indexing by Latent Semantic Analysis", Journal of the American Society for Information Science
  3. Jurafsky & Martin, "Speech and Language Processing" (3rd ed. draft)

Terakhir diperbarui