词向量、TF-IDF值词向量都没有考虑单词的上下文关系,而仅仅考虑词的权重,即单词出现的频率。虽然丢失了一部分语义信息,但是在面临聚类、分类等问题时,这种词向量方法表现也不错。
下面代码例子中,首先利用docs中出现的单词构建字典,然后把每句话转化为词向量形式。有些单词"I"、"is"属于停用词,不参加词频统计。同时词向量中包含大量0值,所以我们的矩阵通常是十分稀疏的。当词向量特征矩阵十分巨大时可以使用Hash Trick进行特征降维。
from sklearn.feature_extraction.text import CountVectorizer
vectorizer=CountVectorizer()
docs=["Where are you from","I like playing football","Would you mind if I sit here","Just do it"]
print(vectorizer.fit_transform(docs))
(0, 3) 1
(0, 14) 1
(0, 0) 1
(0, 12) 1
(1, 2) 1
(1, 10) 1
(1, 8) 1
(2, 4) 1
(2, 11) 1
(2, 5) 1
(2, 9) 1
(2, 13) 1
(2, 14) 1
(3, 6) 1
(3, 1) 1
(3, 7) 1
print(vectorizer.fit_transform(docs).toarray())
[[1 0 0 1 0 0 0 0 0 0 0 0 1 0 1]
[0 0 1 0 0 0 0 0 1 0 1 0 0 0 0]
[0 0 0 0 1 1 0 0 0 1 0 1 0