之前講到向量空間模型(Vector Space Model)跟 Cosine Similarity 時,都有談到把文本轉換成向量,
電腦才能夠處理人類的語言。
但是到底是怎麼把「文字、文本」轉換成「向量」呢?
今天就要來介紹其中一種常用的方法: Bag-of-Words Model(中文會叫做詞袋模型)
Bag-of-Words Model是什麼?
- BoW Model 是自然語言處理(NLP)當中的一項技術
- 它會把句子、段落或是整個文件變成一個字詞的集合,這個集合就像一個袋子,裡面裝的是文本當中出現的所有字,模型會去統計每個文字出現的次數
- BoW 不會去管字的順序或是文法,只會去看字出現的頻率,像是哪些出現比較多次
- 這種模型適用於文本分類、情感分析上面,很常會跟 Naive Bayes 去一起應用(Naive Bayes 之後會再介紹~~)
例子
假設今天有兩個句子:
I like them just as much as they like me.
I like the cheese, they do too.
利用這兩句話建立一個詞表:
["I", "like", "them", "just", "as", "much", "they", "me", "the", "cheese", "do", "too"]
接著把句子轉成向量:
I like them just as much as they like me. -> [1, 2, 1, 1, 2, 1, 1, 1, 0, 0, 0, 0]
I like the cheese, they do too. -> [1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1]
🌟 其實把文字向量化的過程,就是把從文字當中抽取特徵
優點
- 概念非常簡單,操作起來也容易
- 適用在小型任務上面(一些文本分類任務)
缺點
- 語意:這個模型在處理文字時,不會去管語意,跟下面這一點相關
- 文字的關聯性:這個模型不會去管字與字之間的關聯,像是 apple 可能跟 juice 常常放在一起,但是 BoW不會去標記這項特徵,也就是他不會把文本的情境(context)納入考量
- 文字的稀疏性:在比較大的文本裡面,詞彙量很大,很多向量裡面的值可能會是0。向量的長度通常是所有詞彙的數量。但是一篇文章或是一句話實際上只會用到其中很少一部分的詞,其他大多數的詞並不會出現,因此它們在向量裡的值就是 0。這樣一來,向量裡只有少數幾個位置是非零值,這種情況就是稀疏(Sparse)
- 這個情況有幾個問題,包括會佔記憶體、處理效率低、模型學習起來會比較困難,因為可能導致過度擬和(overfitting)(這個概念其實就像是模型會記住答案,沒有真的學習到,導致無法應用在新的資料上)
Bag-of-Words 算是 NLP 裡最基礎直觀的方法。它雖然簡單,但已經足夠讓我們處理和理解一些文字!