何使用 scikit-learn 为机器学习准备文本数据
词袋模型( Bag-of-Words Model )
使用机器学习算法时,我们不能直接使用文本。
相反,我们需要将文本转换为数字。
我们可能想对文档进行分类,每一类文档都是“输入”,而类别标签是我们预测算法的“输出”。算法将数字向量作为输入,因此我们需要将文档转换为固定长度的数字向量。
在机器学习中,Bag-of-Words 模型(BoW)是一种简单而有效的让计算机“理解”文本文档的模型。
这个模型非常简单,它移除了单词的诸如词序、语法等顺序信息,只关注文档中该单词的出现情况。
上面这一步可以通过为每个单词分配一个唯一的编码来完成。我们所看到的任何文档都可以被编码为一个固定长度的矢量,其长度为文档中全部已知单词的词汇量。矢量中每个位置的值可以用编码文档中每个单词的出现个数或频率填充。
在词袋模型中,我们只关心编码方案,而编码方案描述了文档中出现了什么单词,以及这些单词在编码文档中出现的频率,而没有任何关于顺序的信息。
有很多方法来扩展这个简单的方法,例如,我们可以想办法更好地解释一个单词的含义,或是更好地规定向量中每个单词的编码方式。
scikit-learn 库提供了3种不同的方案供我们使用,下面简要地介绍一下。
使用 CountVectorizer 计算字数
from sklearn.feature_extraction.text import CountVectorizer # 下面是一个文本文档的列表 text = ["The quick brown fox jumped over the lazy dog."] # 实例化 CountVectorizer 类 vectorizer = CountVectorizer() # 标记并建立索引 vectorizer.fit(text) # 查看结果 print(vectorizer.vocabulary_) # 编码文档 vector = vectorizer.transform(text) # 查看编码后的向量 print(vector.shape) print(type(vector)) print(vector.toarray())