版本2:Syntactically-United RNN
利用子节点的句法分类(词性NN、VV、PP)不同而使用不同的权值矩阵进行合成。
然后句子的结构也是通过PCFG中的CKY算法动态规划地得到。这样速度很快,不需要遍历每两个节点的组合,进行矩阵和向量的乘积计算。这种“文法”被称为Compostional Vector Grammars。
句法分析的相关工作
CVG的产生离不开PCFG的拓展,当时人们提出Lexicalized PCFG,即用短语的head表示短语本身。但这是个离散的表示,丢失了其他词语的语义,CVG自然而然地想到了用连续的向量表示来代替它。
效果
裸的CKY-PCFG可以拿到72%的F1,但裸的RNN已经可以拿到85%的F1了,在加上Syntactically-United,立马超越所有人工特征工程。
句法分析并不是最终目的,最终目的是通过句法分析得到的句法树合成句子的意思的表示。
直观效果
将每种短语的合成函数的权值矩阵可视化,会发现模型成功地捕捉到究竟哪个子节点语义信息更丰富。
其中主对角线的黄线来自单位矩阵初始化。
上图名词-连词短语中,语义主要来自前半部分。而所有格-名词短语中,语义主要来自后半部分。
还有很多类似的例子:
而得到的句子表示也的确把相似的句子放到了邻近的向量空间中:
版本2依然没有解决两个子节点的混合问题,它们依然乘上的是矩阵的不同部分,互不相干。
版本3:Matrix-vector RNNs
有理论认为语言是由两种不同的符号组成,一种符号就是普通的符号,另一种符号类似操作符,可以改变普通符号的意思。比如very good和not good中,good是普通符号,被前面的操作符修改了意思。
版本3形式化了这种思想,将操作符抽象为矩阵,将符号抽象为向量。我们不知道哪些词语是操作符,哪些是符号,所以为每个节点同时赋予向量和矩阵,在合成运算的时候混合两者的矩阵和向量,期待模型自己去区分并混合语义:
这样得到的短语p依然是一个向量,但是已经充分混合两个子节点的语义表示。
而对两个子节点的矩阵表示,也拼接起来乘上另一个矩阵得到一个新的矩阵,作为短语的操作符的矩阵表示:
事实上,矩阵是个庞大的参数集合,这是该模型的短板。
效果
虽然朴素RNN可以捕捉大多数短语语义,但它容易被最后一个单词影响。而MV-RNN的确做得更好。下图是两种模型预测的短语情感(越大越正面)及其概率分布:
语义关系分类
可以将MV-RNN用于学习较大的语义上下文所描述的语义关系,比如总体-局部、消息-主题之类:
只需得到包含两个目标单词的最小短语表示进行分类即可。
效果
朴素RNN依然挺好,加上MV和一点点额外语言学特征就超越了使用大量特征工程的SVM。
其他应用
这时候就下课了,后面还有一些MV-RNN的应用:
解析图像各部分的语义成分(类似句法分析):
图像分割与多分类(类似中文分词与词性标注):
甚至用于粒子物理:
有一处错误,在结构预测那里,从第一层,词向量开始评分那里,我觉得本该是只有相邻的两个词向量进行评分,并不是所有的词向量对,句法分析中不存在跳过某个单词的关系,博主想当然了。
你说的每错,manning 也说了是greed的搜索,如果不是用greed的话复杂度会是一个factorial n。
“利用单层的神经网络作为组合函数,向量内积作为打分函数,马上就可以得到一个最简单的RNN”。 请问score = transform(U)p 中的U是另一个需要训练的score向量吗?也是在所有词语对中相同的吗?谢谢!
$U$的确是所有词语share的权值向量,用于score,需要训练