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 TF−IDF=TF∗IDF
- 应用:自动提取关键词,信息检索等。
- 优点:简单快速,结果比较符合实际情况。
- 缺点:单纯以"词频"衡量一个词的重要性,不够全面,忽略了词的位置信息。
- 参考: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} xc−m,…,xc−1,xc+1,…,xc+m,其中 x i ∈ R 1 × ∣ V ∣ x_i\in R^{1\times |V|} xi∈R1×∣V∣.
- 令输入空间到嵌入空间的映射矩阵为 H H H,其中 H ∈ R ∣ V ∣ × n H\in R^{|V|\times n} H∈R∣V∣×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} hc−m,…,hc−1,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} hi∈R1×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^=2mhc−m+⋯+hc−1+hc+1+⋯+hc+m.
-
令隐藏层到输出层的矩阵为 U ∈ R n × ∣ V ∣ U\in R^{n\times |V|} U∈Rn×∣V∣,计算得分向量 z = h ^ U z=\hat{h}U z=h^U, z ∈ R 1 × ∣ V ∣ z\in R^{1\times |V|} z∈R1×∣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(wc∣wc−m,…,wc−1,wc+1,…,wc+m)=−logP(ucT∣h^)=−log(∑i=1∣V∣exp(h^ui)exp(h^uc))=−h^uc+log(i=1∑∣V∣exp(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} Hc−m,…,Hc−1,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|} xc∈R1×∣V∣.
- 令输入空间到嵌入空间的映射矩阵为 H H H,其中 H ∈ R ∣ V ∣ × n H\in R^{|V|\times n} H∈R∣V∣×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} hc∈R1×n
- 令隐藏层到输出层的矩阵为 U ∈ R n × ∣ V ∣ U\in R^{n\times |V|} U∈Rn×∣V∣,计算得分向量 z = h ^ U z=\hat{h}U z=h^U, z ∈ R 1 × ∣ V ∣ z\in R^{1\times |V|} z∈R1×∣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(wc−m,…,wc−1,wc+1,…,wc+m∣wc)=−logj=0,j=m∏2mP(wc−m+j∣wc)=−logj=0,j=m∏2mP(uc−m+jT∣hc)=−logj=0,j=m∏2m∑i=1∣V∣exp(hcui)exp(hcuc−m+j)=−j=0,j=m∑2mhcuc−m+j+2mlog(i=1∑∣V∣exp(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
抽时间继续来总结。