分布式表示
用一个词附近的其他词来表示该词 。基于人的语言表达,认为一个词是由这个词的周边词汇一起来构成精确的语义信息。
共现矩阵
词文档的共现矩阵主要用于发现主题(topic),用于主题模型,如LSA。局域窗中的word-word共现矩阵可以挖掘语法和语义信息
- I like deep learning.
- I like NLP.
- I enjoy flying
有以上三句话,设置滑窗为2,可以得到一个词典:{“I like”,“like deep”,“deep learning”,“like NLP”,“I enjoy”,“enjoy flying”}。
counts | i | like | enjoy | deep | learning | nlp | flying | . |
---|---|---|---|---|---|---|---|---|
i | 0 | 2 | 1 | 0 | 0 | 0 | 0 | 0 |
like | 2 | 0 | 0 | 1 | 0 | 1 | 0 | 0 |
enjoy | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
deep | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
learning | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
nlp | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |
flying | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 |
. | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 |
中间每个格子表示的是行和列组成的词组在词典中共同出现的次数即共现特性。
存在的问题:
- 向量维数随 着词典大小线性增长。
- 存储整个词典的空间消耗非常大。
- 一些模型如文本分类模型会面临稀疏性问题。
- 模型会欠稳定,每新增一份语料进来,稳定性就会变化。
NNLM(Neural Network Language model)
神经网络语言模型是03年提出来的,通过训练得到中间产物——词向量矩阵,即文本表示向量矩阵。
NNLM定义一个前向窗口大小,把这个窗口中最后一个词当作y把之前的词当作输入x,通俗来说就是预测这个窗口中最后一个词出现概率的模型。
NNLM网络 结构图如下:
-
input层是一个前向词的输入,是经过one-hot编码的词向量表示形式,具有V*1的矩阵。
-
C矩阵是投影矩阵,也就是稠密词向量表示,在神经网络中是w参数矩阵,该矩阵的大小为D*V,正好与input层进行全连接(相乘)得到
D*1的矩阵,采用线性映射将one-hot表示投影到稠密D维表示。
C = ( w 1 , w 2 , . . . , w v ) = ( ( w 1 ) 1 ( w 2 ) 1 ⋯ ( w V ) 1 ( w 1 ) 2 ( w 2 ) 2 ⋯ ( w V ) 2 ⋮ ⋮ ⋱ ⋮ ( w 1 ) D ( w 2 ) D ⋯ ( w V ) D ) \text{C}=({ {w}_{1}},{ {w}_{2}},...,{ {w}_{v}})=\left( \begin{matrix} { {({ {w}_{1}})}_{1}} & { {({ {w}_{2}})}_{1}} & \cdots & { {({ {w}_{V}})}_{1}} \\ { {({ {w}_{1}})}_{2}} & { {({ {w}_{2}})}_{2}} & \cdots & { {({ {w}_{V}})}_{2}} \\ \vdots & \vdots & \ddots & \vdots \\ { {({ {w}_{1}})}_{D}} & { {({ {w}_{2}})}_{D}} & \cdots & { {({ {w}_{V}})}_{D}} \\ \end{matrix} \right) C=(w1,