Parsing with compositional vector grammars 实现
来源:互联网 发布:网络预警机制 编辑:程序博客网 时间:2024/05/22 04:30
Parsing with compositional vector grammars 实现
本文主要就《parsing with compositional vector grammars》关于这篇论文中的一部分内容,介绍其实现的具体代码细节。代码源于组内师兄,为了方便自己下一次看代码时不用那么费劲。所以就将里面的一些东西记录下来,希望能够对自己对别人有帮助。本人才学疏浅,有错误的地方希望大家能够指出。
首先 论文的主要工作是用一个Recursive NN 为一课句法树打分。其中比较新颖的地方时,以前打分的时候,节点合并的时候,计算得分的时候都是用的同一组参数,本文作者采用,根据节点类型使用不同的参数。具体内容还是去认真读读论文吧。
接下来介绍一下代码的实现:
首先,在main函数中第一个出现的是
genTestData(),获得开发集,这是我们判断迭代到多久才收敛,也就是判断是否需要继续训练的指示。
SURecursiveNetworkModel surnnModel = generateSURNNModelOnline(...);
然后得到主要的model对象,其中主要过程和上面的函数一样,都是读文件,转换成CFGRerankingTree(这种树是设计来方便RNN 计算得分梯度等得,由传统的CFGTree转换而来),然后把树中有的参数插入到相应的map中去(由于论文的思想是根据节点的类别,设置不同的参数,所以map里面有很多参数),
gradientSquareMap = surnnModel.createAdaGradSquare(config.adaAlpha);
根据前面的model建立AdaGrad,要用到adagrad更新,就要用这样的结构保存历史梯度。
SURecursiveNetworkModel emptyGradients = surnnModel.createGradients();
接下来根据model建立一个梯度对象,里面所有参数的梯度全都为0;
前面的surnnModel包含了dev gold k-best的所有参数,所以在建立adagrad和梯度之前要先得到它
接下来就是一个得到batch的过程,就是将所有的训练数据分成份(50/份),调用
batchTraining()来训练。
batchTraining()中调用了MulticoreWrapper这种机制,这是一种迭代,我们只需要知道,它重复某个迭代过程(这里就是ScoringProcessor()),得到的结果可以通过wrapper.peek()取出来。
进入到ScoringProcessor()这个函数中,其大致过程就是k-best中得分最高的和gold分别做一个前向传播算得分,比较得分,如果gold得分不是最高的话,将两个树做后向传播,返回两个梯度
回到batchTraining()中,将后向传播的梯度merge到emptyGradients中去。等多次迭代的梯度merge以后就回到train中。
surnn.updateGradients(emptyGradients, gradientSquareMap, config.batchSize, config.regParameter);
根据emptyGradients去更新参数toBeUpdated,表示要更新参数的值,这种结果有点奇怪,直接getValue()以后改变它的值,原来的对象的参数也变了。
如此迭代到收敛即可。
主要是下面论文的工作:
Socher R, Bauer J, Manning C D, et al. Parsing with Compositional Vector Grammars[C]// Meeting of the Association for Computational Linguistics. 2013:455-465.
代码如果有需要请留言。
- Parsing with compositional vector grammars 实现
- Parsing with Compositional Vector Grammars
- Parsing with Perl 6 Regexes and Grammars.pdf 2017 英文原版 免费下载
- NLP | 自然语言处理 - 语法解析(Parsing, and Context-Free Grammars)
- Parsing JSON With SBJSON
- Parsing Strings with split
- Parsing Arguments with getopt
- Parsing URLs with the DOM
- Parsing URLs with the DOM
- Parsing XML Files with PowerShell
- Parsing XML Files with SAX
- Parsing XML with SAX_(MyMoviesWithHttpClient)
- Parsing XML with XmlPull_(MyMoviesWithHttpClient)
- Parsing URLs with the DOM!
- 11.12. Parsing XML with NSXMLParser
- 9.2 Grammars
- parsing xml with sax and pull
- SuperParsing: Scalable Nonparametric Image Parsing with Superpixels
- 此时此刻
- 常用网址
- html5无法调用Android本地方法的一种情况(因混淆)
- Android 关于“NetworkOnMainThreadException”出错提示的原因及解决办法
- 如何解析本地和线上XML文件获取相应的内容
- Parsing with compositional vector grammars 实现
- No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386).
- 一道猿题库笔试题解答: 只包含1和-1的数组,如: [1, -1, 1, 1, 1, -1] 求其中和为0的最长连续子数组
- Java中的<<符号的理解
- MySQL字符函数
- nginx 做proxy 不转发 http header问题解决
- mysql之TIMESTAMP(时间戳)用法详解
- 关于JavaScript中.round()函数的运用
- MicrosoftWindows[版本 6.1.7600]版本号是啥意思