NLP系列 4. 文本表示

词袋模型——离散、高维、稀疏

基本介绍

词袋模型是一种很基础的文本表示模型。
通俗的理解就是把一段文本看做一个袋子,并且忽略词出现的顺序。具体而言,就是将文本以词为单位切分开,每篇文章可以表示为一个长向量,向量中的每一维代表一个单词,而其权重反映了这个词的重要程度,常用前面博客中所叙述的TF-IDF计算权重。
完全忽略词的出现顺序也不是很好,词与词之间的有机组合方才构成了一段文本的语义,这时候也常用到n-gram作为单独的特征放到向量表示中。
词袋模型在用向量表示文本时,也可能出现向量过于稀疏的问题。

sklearn实现

第一种模式

出现就算1,没出现就算0
下面以之前博客中介绍过的THUCnews为例

from sklearn.feature_extraction.text import CountVectorizer
vectorizer=CountVectorizer(binary=True)

f=open('cnews.val.txt','r',encoding='utf-8')
text=[x for (i,x) in zip(range(1),f.readlines())]
print(text)
#text = ["The quick brown fox jumped over the lazy dog."]
module=vectorizer.fit(text)
print(module.vocabulary_)
vector=vectorizer.transform(text)
print(vector.toarray())

在这里插入图片描述

第二种方式

用TF-IDF计算词向量权重

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer=TfidfVectorizer()#第二种

f=open('cnews.val.txt','r',encoding='utf-8')
text=[x for (i,x) in zip(range(2),f.readlines())]
print(text)
#text = ["The quick brown fox jumped over the lazy dog."]
module=vectorizer.fit(text)
print(module.vocabulary_)
vector=vectorizer.transform(text)
print(vector.toarray())

在这里插入图片描述

分布式表示——连续、低维、稠密

最简单的词向量就是上面所说的词袋模型以及独热(one-hot)表示方法了, 这种方法会导致向量过于稀疏的问题。
而分布式表示(Distributional Representation)可以很好地解决这个问题。
简单来说,分布式表示就是将词向量映射为一个个短向量,并且映射到一个向量空间中,这样就可以通过向量间的距离表示词向量之间的关联与差异。
分布式表示,顾名思义就是将词向量表示为低维、稠密的连续向量,将词向量分布到空间中。
英语西语词向量的分布式表示:
在这里插入图片描述

word2vec词向量原理及实践

word2vec是由谷歌在2013年提出的,是目前最常用的词嵌入模型之一。
word2vec属于一种浅层的神经网络模型,分为两部分CBOW和Skip-gram。

CBOW

CBOW是根据上下文出现的词语来预测当前词的生成概率,包含输入层(Input)、映射层(Projection)和输出层(Output)。

输入层

输入层每个词由独热编码表示,所有词均表示为一个N维向量,N为词汇表中单词总数。每个词对应维度为1,其余为0。

映射层

包含K个隐含单元,其取值可以由N维输入向量以及连接输入和隐含单元的N*K维矩阵计算得到,CBOW中还需要对输入词所计算出的隐含单元求和。

输出层

输出层也是N维向量,每维与词汇表中一个单词相对应,最后应用Softmax函数进行激活,从而计算出生成概率。

Skip-gram

Skip-gram的网络结构与CBOW差不多,只不过Skip-gram是根据当前词预测上下文中各词的生成概率。

sklearn实现

word2vec进行IMDB评论分类实战
参考: https://blog.csdn.net/github_38705794/article/details/75452729

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值