词嵌入表示
概念:词嵌入表示是一个连续,低维,稠密的向量表示,简称词向量,而且向量值可以根据目标任务的优化进行调整。也可以充分利用语句中的上下文信息作为自监督信号进行训练,提高词语的效果。
这里常用的是wordvec2,lstm等构建词向量的方法。(后续会继续补充一部分词嵌入的知识)
词袋表示
概念:词袋表示(Bag of Words BOW),将文本中的词语所对应的向量(one-hot/ 分布式表示向量/ 词嵌入)表示,进行相加或者加权求和。这样得出的词向量只跟在上下文出现的频次有关,这种做法虽然简单,但是忽略了词语的顺序以及词语的语义信息。
如果引入二元词表(Bigram)将两个词语作为一个词,同时再加上学习二元次的词向量表示,但是可能会造成数据稀疏问题。
代码
输入为一个str类型的列表,而且encodig = ‘utf-8’,输出为一个词频矩阵,而且用to_array()方法可以转化。
from sklearn.feature_extraction.text import CountVectorizer, HashingVectorizer
content_list = ['我 喜欢 深度 学习',
'我 爱 机器 学习']
# vectorizer=CountVectorizer()
vectorizer = HashingVectorizer(n_features=6, norm=None) # 一般用hash降低纬度比较多
model_output = vectorizer.fit_transform(content_list) # 输入为list类型的str,输出为词频矩阵
# print(vectorizer.get_feature_names()) # 在CountVectorizer类方法中调用get_feature_names()
print("词频统计:")
#输出4个文本的词频统计:左边的括号中的两个数字分别为(文本序号,词序号),右边数字为频次
print(vectorizer.fit_transform(content_list))
print("\n词袋模型:")
print(vectorizer.fit_transform(content_list).toarray()) # 将产生的矩阵转化为array类型的数据
输出
词频统计:
(0, 0) 1.0
(0, 2) -1.0
(0, 5) -1.0
(1, 0) -1.0
(1, 2) -1.0
词袋模型:
[[ 1. 0. -1. 0. 0. -1.]
[-1. 0. -1. 0. 0. 0.]]