文本表示(词嵌入表示&词袋表示BOW)

词嵌入表示

概念:词嵌入表示是一个连续,低维,稠密向量表示,简称词向量,而且向量值可以根据目标任务的优化进行调整。也可以充分利用语句中的上下文信息作为自监督信号进行训练,提高词语的效果。

这里常用的是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.]]

猜你喜欢

转载自blog.csdn.net/xiaziqiqi/article/details/129224852