将文本信息数值化,从而便于建模。工欲善其事,必先利其器。在数据挖掘中,数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。因此文档信息向量化决定模型的高度。
一、词袋模型:
1.One-hot
在之前做纯数据挖掘时,我记得它叫独热编码,它的基本思想时将每个特征可能取到的值单独作为一个变量,该变量出现记为1,不出现记为0.
在文本分析中,它是一种最早用于提取文本特征的方法,也很简单,与纯数据中一样,不考虑语法和语序地把文本简化成一系列独立的词的集合,对每个词进行编码,形成字典,用0/1表示某个词是否出现,从而将文本转化为一个数学上的特征向量,便于进一步建模分析。
举个栗子:
“狗喜欢吃骨头”:{“狗”:1,“喜欢”:2,“吃”:3,“骨头”:4}这样经过分词和编码就形成了一个特征向量。当新的句子进来时候就会依照该字典对其0/1编码:“吃骨头”:[0,0,1,1]
2. One-hot=Bag of Words词袋模型
形象的看,文本就是一个袋子,每个词毫无顺序的扔进袋子。为减小模型复杂度,可以不考虑词频,即使用词集模型Set of Words:它只包含词的集合,不包含词出现的频数,出现则为1,不出现则为0
优缺点:优点:可处理离散数据,且相当于扩充了特征
缺点:没有考虑词之间的顺序关系;它的假设:词之间相互独立在很多情况下是不符合实际的;造成维数灾难,扩充后的特征是稀疏的,这无疑导致维数的爆炸式增长。
3.gensim实现词袋模型
首先安装pip install genism
1.实现过程:分词、建立字典
Genism中的Dictionary类可实现把所有单词建立一个集合,给每个单词分配一个id号,这样就建立了一个词对Id的映射。就像是建立了一本新华字典,在后面新过来一个句子时,就去字典里查,得出每个词对应的ID和它在这个句子中出现的次数。
Dictionary的部分属性:
#建立字典
from gensim.corpora import Dictionary
text=[['july','可爱','傻fufu','聪明','好可爱','精致','猪猪女孩']]
dc=Dictionary(text)
print("映射关系:",dc.token2id)
print("每个词出现在几个文档中:",dc.dfs)
print("共处理的文档数量:",dc.num_docs)
print(