知识点3.2.1 共现矩阵
- 描述一定长度范围内(窗口)词与词的共现关系
- 共现矩阵为对称矩阵
- 通过一个词与周围词的共现关系来表示该词
例:我喜欢机器学习
我喜欢NLP
我学习NLP课程
counts | 我 | 喜欢 | 机器学习 | NLP | 学习 | 课程 |
---|---|---|---|---|---|---|
我 | 0 | 2 | 0 | 0 | 1 | 0 |
喜欢 | 2 | 0 | 1 | 1 | 0 | 0 |
机器学习 | 0 | 1 | 0 | 0 | 0 | 0 |
NLP | 0 | 1 | 0 | 0 | 1 | 1 |
学习 | 1 | 0 | 0 | 1 | 0 | 0 |
课程 | 0 | 0 | 0 | 1 | 0 | 0 |
存在问题:
-
词向量维度会随着词典大小增长而线性增长,存储消耗过大
-
词向量的特征空间过大,数据过于稀疏
-
可使用SVD(奇异值分解)降维,但计算量会随着词典大小增长而指数级增长( V 3 V^3 V3),难以给词典中新加入的词分配词向量
知识点3.2.2 NNLM模型(神经网络语言模型)
- Bengio等人于2003年提出
- 目标函数: L ( θ ) = ∑ t l o g P ( w t ∣ w t − n + 1 ⋯ w t − 1 ) L(\theta)=\sum_{t}logP(w_{t} |{w_{t-n+1}}\cdots w_{t-1}) L(θ)=∑tlogP(wt∣wt−n+1⋯wt−1)
- 四层神经网络结构,输入层、投影层、隐藏层、输出层
-
输入层:
词 w t w_{t} wt前 n − 1 n-1 n−1个词的词向量(One-Hot编码, V × 1 V\times{1} V×1维, V V V为词典大小)
-
投影层:
1、将输入层的词向量映射为 n − 1 n-1 n−1个 D × 1 D\times{1} D×1维( D D D由用户设定)的词向量
作用:(1)降低词的维度,(2)便于计算词的距离
2、按顺序首尾相连拼接成长度为 ( n − 1 ) D (n-1)D (n−1)D的投影层向量 x w x_{w} xw, x w x_{w} xw为 ( n − 1 ) D × 1 (n-1)D\times{1} (n−1)D×1维
-
隐藏层:
1、隐藏层节点数为 H H H( H H H由用户设定)
2、投影层到隐藏层 z w = t a n h ( W x w + p ) z_{w}=tanh(Wx_{w}+p) zw=tanh(Wxw+p), z w z_{w} zw为 H × 1 H\times{1} H×1维
3、隐藏层到输出层 y w = U z w + q y_{w}=Uz_{w}+q yw=Uzw+q, y w y_{w} yw为 V × 1 V\times{1} V×1维
式中 t a n h tanh tanh(双曲正切函数)为隐藏层的激活函数, W W W和 U U U分别为投影层到隐藏层以及隐藏层到输出层的权值矩阵(待估参数矩阵,可通过BP和SGD优化), p p p和 q q q分别为隐藏层和输出层的偏置向量
-
输出层:
对隐藏层计算得到的 y w = ( y w 1 , y w 2 , . . . , y w V ) T y_{w}=(y_{w_1},y_{w_2},...,y_{w_V})^T yw=(yw1,yw2,...,ywV)T进行softmax归一化,归一化后 y w i y_{w_i} ywi就可以表示前 n − 1 n-1 n−1个词的下一个词为词典中第 i i i个词的概率
P ( w t ∣ w t − n + 1 ⋯ w t − 1 ) = e y w t ∑ i = 1 V e y w i P(w_{t} |{w_{t-n+1}}\cdots w_{t-1})=\frac{e^{y_{w_t}}}{\sum_{i=1}^{V}e^{y_{w_i}}} P(wt∣wt−n+1⋯wt−1)=∑i=1Veywieywt
-
计算复杂度: ( n − 1 ) D + H ( n − 1 ) D + V H (n-1)D+H(n-1)D+VH (n−1)D+H(n−1)D+VH