文本挖掘学习(二) 向量化

目录

1.One-hot表示方式/词袋模型

2.文档-词条矩阵/d2m矩阵

3.N-gram

4.word2vec


1.One-hot表示方式/词袋模型

优点:

  • 解决了分类器不好处理离散数据的问题
  • 在一定程度上也起到了扩充特征的作用

缺点:

  • 不考虑词与词之间的顺序
  • 他假设词与词之间相互独立(大多数情况下,词与词之间是相互有关联的)
  • 得到的特征是离散稀疏的

2.文档-词条矩阵/d2m矩阵

sklearn中的CountVectorizer可以实现将文本转换为稀疏矩阵,此处输入的中文文本必须是要先分好词再按空格分隔,合并为一个字符串才可以。参数min_df=5表示词必须要在至少5个文档中出现过,否则就不考虑。

# 5.向量化
# 词袋模型
from sklearn.feature_extraction.text import CountVectorizer

# 取出所有分词
words_list = list(chap.words_list)
countvec = CountVectorizer(min_df=5)  # 在5个以上章节中出现才保留
words_vec = countvec.fit_transform(words_list)  # 得到一个稀疏矩阵
words_vec.todense()  # 转换为d2m矩阵
countvec.get_feature_names()[-10:]


3.N-gram

优点:

  • 考虑了词的顺序,信息量更充分

缺点:

  • 词表迅速膨胀,数据出现大量的稀疏化问题
  • 每增加一个词,模型参数增加40万倍
  • 无法衡量词项量之间的关系

4.word2vec

word2vec 计算时使用的是去除了隐含层的神经网络,本质上是一个线性分类器,对于大量语料输入情况下,模型的

文本挖掘学习(二) 向量化_第1张图片

降低运算量操作

文本挖掘学习(二) 向量化_第2张图片

文本挖掘学习(二) 向量化_第3张图片

word2vec仍然存在的问题:

  • 只是利用了每个词局部上下文窗口信息进行训练,没有利用包含在全局矩阵中的统计信息
  • 对多一次无法很好地表示和处理,因为使用了唯一的词向量
# word2vec
from gensim.models.word2vec import Word2Vec

chap['cut'] = chap.words_list.apply(lambda x: x.split(' '))  # list of list

# 初始化word2vec模型和词表
n_dim = 300  # 指定向量维度
w2vmodel = Word2Vec(size=n_dim, min_count=10)
w2vmodel.build_vocab(chap.cut)  # 生成词表
# 模型训练
%time w2vmodel.train(chap.cut, total_examples=w2vmodel.corpus_count, epochs=10)

# 计算词向量间的相似度
w2vmodel.most_similar('胖子',topn=20)

文本挖掘学习(二) 向量化_第4张图片

你可能感兴趣的:(文本挖掘)