NLP--5--文本表示1

1. 文本表示

将字符表示的文本转变为计算机可以处理的向量表示。

2. 文本表示分类(基于表示方法)

(1) 离散表示:one-hot表示,multi-hot表示
(2) 分布式表示
a. 基于矩阵(细节不清楚,需要补充,比如SVD):基于降维的方法,基于聚类的方法
b. 基于神经网络:CBOW,Skip-gram,NNLM,C&W,ELMo

3. 文本离散表示

(1) 词袋模型

  • 描述:将所有出现的词储存为一个词表,然后依据 “词语是否出现在词表中”在相应的向量位置标记1,例如[1,0,1,1,1,0,0,1,…],其中向量的每个维度唯一对应着词表中的一个词。
  • 优点:1) 简单,快速;2) 在语料充足的情况下,对于简单的自然语言处理任务,效果较好。
  • 缺点:1) 对文本中出现的所有词一视同仁,不能考虑不同的词在一句话中不同的重要性;2) 无法关注词语之间的顺序关系。

(2) TF-IDF(term frequency–inverse document frequency)

  • TF:一个词在当下文本中出现的概率。
  • IDF:出现该词语的文档占总文档出现的频率(DF), I D F = l o g 总 文 档 数 量 出 现 该 词 语 的 文 档 数 量 + 1 IDF=log \frac{总文档数量}{出现该词语的文档数量+1} IDF=log+1,IDF与一个词的常见程度成反比。
  • TF-IDF T F − I D F = T F ∗ I D F TF-IDF=TF*IDF TFIDF=TFIDF
  • 应用:自动提取关键词,信息检索等。
  • 优点:简单快速,结果比较符合实际情况。
  • 缺点:单纯以"词频"衡量一个词的重要性,不够全面,忽略了词的位置信息。
  • 参考:https://www.ruanyifeng.com/blog/2013/03/tf-idf.html

4. 文本分布式表示:word2vec

  • 英语中大约有1300万个词组。
  • 声明speech:每一个词向量的维度都可能会表征一些意义(物理含义)。
  • 简介:word2vec是google于2013年提出的计算词的分布式表征的nlp工具,是一种无监督学习。
  • 源码:https://github.com/tmikolov/word2vec
  • 思路:通过训练,将每个词都映射到一个较短的词向量上来。
  • Embedding:其实是一个映射,将单词从原先所属的空间映射到新的多维空间中,也就是把原先词所在空间嵌入到一个新的空间中去。例如,在word2vec中将单词的one-hot向量映射到嵌入空间得到嵌入向量(embedded vector)。
  • Fake Task:训练模型的真正目的是获得模型基于训练数据学得的参数(隐层权重),而不是使用获得的模型进行预测。
  • 参考:几篇写的比较好的文章
    https://www.leiphone.com/news/201706/PamWKpfRFEI42McI.html
    https://www.leiphone.com/news/201706/eV8j3Nu8SMqGBnQB.html
    https://www.leiphone.com/news/201706/QprrvzsrZCl4S2lw.html
    https://www.cnblogs.com/pinard/p/7160330.html
    https://www.cnblogs.com/peghoty/p/3857839.html

4.1 连续词袋模型 (CBOW, Continuous Bag-Of-Words Model)

(1) 模型特征

输入是某一个特征词的上下文,输出就是这个特定的一个词。
需要注意的是,由于CBOW使用的是词袋模型,因此上下文这n个词都是平等的,也就是不考虑他们和我们关注的词之间的距离大小,只要在我们上下文之内即可。

(2) 传统的神经网络中的CBOW

  • 首先,

    • 令上下文的one-hot向量分别为: x c − m , … , x c − 1 , x c + 1 , … , x c + m x_{c-m},\dots,x_{c-1},x_{c+1},\dots,x_{c+m} xcm,,xc1,xc+1,,xc+m,其中 x i ∈ R 1 × ∣ V ∣ x_i\in R^{1\times |V|} xiR1×V.
    • 令输入空间到嵌入空间的映射矩阵为 H H H,其中 H ∈ R ∣ V ∣ × n H\in R^{|V|\times n} HRV×n,n为嵌入空间的维度,映射矩阵也可以理解为从输入层到嵌入层的权重矩阵.
    • 计算上下文的嵌入向量 h c − m , … , h c − 1 , h c + 1 , … , h c + m h_{c-m},\dots,h_{c-1},h_{c+1},\dots,h_{c+m} hcm,,hc1,hc+1,,hc+m,其中 h i = x i H h_{i}=x_{i}H hi=xiH h i ∈ R 1 × n h_i\in R^{1\times n} hiR1×n.
  • 上下文嵌入向量求和取平均: h ^ = h c − m + ⋯ + h c − 1 + h c + 1 + ⋯ + h c + m 2 m \hat{h}=\frac{h_{c-m}+\cdots+h_{c-1}+h_{c+1}+\cdots+h_{c+m}}{2m} h^=2mhcm++hc1+hc+1++hc+m.

  • 令隐藏层到输出层的矩阵为 U ∈ R n × ∣ V ∣ U\in R^{n\times |V|} URn×V,计算得分向量 z = h ^ U z=\hat{h}U z=h^U z ∈ R 1 × ∣ V ∣ z\in R^{1\times |V|} zR1×V.

  • 将得分向量转换为概率分布: y ^ = s o f t m a x ( z ) \hat{y}=softmax(z) y^=softmax(z).

  • 使用梯度下降法优化参数,损失函数选择交叉熵损失函数:
    H ( y c , y ^ c ) = − y c l o g ( y ^ c ) H(y_c,\hat{y}_c)=-y_c log(\hat{y}_c) H(yc,y^c)=yclog(y^c)
    因此,损失函数为:
    J = − l o g P ( w c ∣ w c − m , … , w c − 1 , w c + 1 , … , w c + m ) = − l o g P ( u c T ∣ h ^ ) = − l o g ( e x p ( h ^ u c ) ∑ i = 1 ∣ V ∣ e x p ( h ^ u i ) ) = − h ^ u c + l o g ( ∑ i = 1 ∣ V ∣ e x p ( h ^ u i ) ) \begin{aligned} J &= -logP(w_c|w_{c-m},\dots,w_{c-1},w_{c+1},\dots,w_{c+m}) \\ &=-logP(u_c^T|\hat{h}) \\ &=-log(\frac{exp(\hat{h}u_c)}{\sum_{i=1}^{|V|}exp(\hat{h}u_i)}) \\ &=-\hat{h}u_c+log(\sum_{i=1}^{|V|}exp(\hat{h}u_i)) \end{aligned} J=logP(wcwcm,,wc1,wc+1,,wc+m)=logP(ucTh^)=log(i=1Vexp(h^ui)exp(h^uc))=h^uc+log(i=1Vexp(h^ui))
    使用梯度下降法优化参数 u i ( i = 1 , … , ∣ V ∣ ) u_i(i=1,\dots,|V|) ui(i=1,,V) H c − m , … , H c − 1 , H c + 1 , … , H c + m H_{c-m},\dots,H_{c-1},H_{c+1},\dots,H_{c+m} Hcm,,Hc1,Hc+1,,Hc+m.

(3) 优化方法1:分层的softmax

参考:https://www.cnblogs.com/pinard/p/7160330.html
抽时间继续来总结。

(4) 优化方法2:Negative sampling

参考:https://www.leiphone.com/news/201706/PamWKpfRFEI42McI.html
抽时间继续来总结。

4.2 skip-gram模型

(1) 模型特征

输入是一个特定的词,输出是这个特定词的上下文。

(2) 传统的神经网络中的skip-gram

  • 首先,
    • 令特定词的one-hot向量为: x c ∈ R 1 × ∣ V ∣ x_{c}\in R^{1\times |V|} xcR1×V.
    • 令输入空间到嵌入空间的映射矩阵为 H H H,其中 H ∈ R ∣ V ∣ × n H\in R^{|V|\times n} HRV×n,n为嵌入空间的维度,映射矩阵也可以理解为从输入层到嵌入层的权重矩阵.
  • 计算特定词的嵌入向量: h c = x c H h_{c}=x_{c}H hc=xcH h c ∈ R 1 × n h_c\in R^{1\times n} hcR1×n
  • 令隐藏层到输出层的矩阵为 U ∈ R n × ∣ V ∣ U\in R^{n\times |V|} URn×V,计算得分向量 z = h ^ U z=\hat{h}U z=h^U z ∈ R 1 × ∣ V ∣ z\in R^{1\times |V|} zR1×V.
  • 将得分向量转换为概率分布: y ^ = s o f t m a x ( z ) \hat{y}=softmax(z) y^=softmax(z).
  • 使用梯度下降法优化参数,损失函数选择交叉熵损失函数:
    H ( y c , y ^ c ) = − y c l o g ( y ^ c ) H(y_c,\hat{y}_c)=-y_c log(\hat{y}_c) H(yc,y^c)=yclog(y^c)
    因此,损失函数为:
    J = − l o g P ( w c − m , … , w c − 1 , w c + 1 , … , w c + m ∣ w c ) = − l o g ∏ j = 0 , j ≠ m 2 m P ( w c − m + j ∣ w c ) = − l o g ∏ j = 0 , j ≠ m 2 m P ( u c − m + j T ∣ h c ) = − l o g ∏ j = 0 , j ≠ m 2 m e x p ( h c u c − m + j ) ∑ i = 1 ∣ V ∣ e x p ( h c u i ) = − ∑ j = 0 , j ≠ m 2 m h c u c − m + j + 2 m l o g ( ∑ i = 1 ∣ V ∣ e x p ( h c u i ) ) \begin{aligned} J &= -logP(w_{c-m},\dots,w_{c-1},w_{c+1},\dots,w_{c+m}|w_c) \\ &=-log\prod_{j=0,j \not= m}^{2m}P(w_{c-m+j}|w_c) \\ &=-log\prod_{j=0,j \not= m}^{2m}P(u_{c-m+j}^T|h_c) \\ &=-log\prod_{j=0,j \not= m}^{2m}\frac{exp(h_cu_{c-m+j})}{\sum_{i=1}^{|V|}exp(h_cu_i)} \\ &=-\sum_{j=0,j \not= m}^{2m}h_cu_{c-m+j}+2mlog(\sum_{i=1}^{|V|}exp(h_cu_i)) \end{aligned} J=logP(wcm,,wc1,wc+1,,wc+mwc)=logj=0,j=m2mP(wcm+jwc)=logj=0,j=m2mP(ucm+jThc)=logj=0,j=m2mi=1Vexp(hcui)exp(hcucm+j)=j=0,j=m2mhcucm+j+2mlog(i=1Vexp(hcui))
    使用梯度下降法优化参数 u i ( i = 1 , … , ∣ V ∣ , 即 矩 阵 U ) u_i(i=1,\dots,|V|,即矩阵U) ui(i=1,,V,U) H c H_c Hc.

(3) 优化方法1:分层的softmax

参考:https://www.cnblogs.com/pinard/p/7160330.html
抽时间继续来总结。

(4) 优化方法2:Negative sampling

参考:https://www.leiphone.com/news/201706/PamWKpfRFEI42McI.html
抽时间继续来总结。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值