• CS224d lecture 8札记


    欢迎转载,转载注明原文地址:

    http://www.cnblogs.com/NeighborhoodGuo/p/4692979.html

    又开始新一课的札记啦!最近Project Proposal也快到了,时间还是比较紧的。不过课程已经过半了还是挺开心的。stanford开放这么有技术含量的课程,还是很钦佩stanford的开放精神。

    这一课是对Recurrent NN for MT做了一个简要的介绍。个人认为这种方法比较靠谱耶,想想我们人类对于母语的学习,对于母语的理解,从来都不是先分析语法,再分析语义的,而是直接就从前到后听或看久直接理解了。RNN对于语言的理解表示我个人认为比较类似人类的思维方式(如果有朋友看到我这篇文章有不同见解,欢迎讨论)。而这门课的Project我就做这个好啦,哈哈。使用RNN的MT!

    先梳理一下这一讲的脉络哦。首先是对Bidirectional及deep RNNs for opinion labeling的wrapping up,然后是现今MT的pipeline,再最后就是Recurrent NN实现MT的大体思路及方法,再往后就是几个Recurrent NN实现MT的改进措施。

    1.Wrapping up

    Deep Bidirectional RNNs这个结构上一课讲得很详细了,这次就不表了。

    F1 score这个东西的解释这次给了个图,非常好呢。十分直观清楚。

    Parallel corpora的例子:欧盟的议会文件,埃及出土的大石头(- -)

    2.现今tranditional MT的pipeline

    第一步是Alignment顾名思义就是source language里的词对应到target language是哪个词。

    这个东东真的是很复杂呀,最简单的情况是一对一的,但是还有zero fertility,一对多的,多对一的,多对多的,好烦躁有木有。

    Alignment之后还没完,还得reordering这些词,使其在target language里表达的很“正确”。

    本来Alignment就很复杂,还得从中选出最适合的词,还得reordering这个可真是。。。说不下去了。怎么办?RNN闪亮登场!

    3.RNN model for MT

    首先是最简单的例子

    使用RNN把source language的单词一个一个的输入到model里,最终把这一整句话用一个vector表示出来,也就是encoder的过程;然后得到最终的vector之后再decoder将原始的句子用target language表示出来。看起来挺诱人挺高效的有木有!但是其实米有这么简单呀!

    于是就duang推出了第一种加强改良版

    decoder的过程不仅仅是从最后一个hidden node(以下简写为C)中提取信息,还从前一个decoder出来的单词及前一个hidden node里提取信息。这样有什么好处我也不造(- -)据老师说很棒。

    还有几个一是改良方法是使用stacked/deep RNNs;二是使用bidirectional encoder,而不是使用最简单的一层的encoder;三是把单词的顺序倒个个,原因说的是第一个单词的信息能很容易保留下来,然后target language就能很容易从中提取出信息,做出有效的翻译(说实话没搞明白为啥有用)

    最后有两个超级改良版:GRU和LSTMs

    4.GRU

    main ideas: 1.keep around memories to capture long distance dependencies

          2.allow error messages to flow at different strengths depending on the inputs

    推荐阅读里有有两篇讲GRU的,讲得挺好的,受益匪浅。Paper里还将LSTM和GRU进行了对比。

    GRU的思路是首先根据当前word vector及前一个hidden state计算出update gate和reset gate;再根据reset gate、当前word vector及前一个hidden state计算出new memory content。

    reset gate的用处很明确了,就是当reset gate为1的时候,new memory content忽略之前所有的memory。最终的memory是之前的hidden node及new memory content的综合体

    数学公式表示就是:

    5.LSTMs

    这个东西有很长时间的历史了不过据说很有用。直接上公式吧,公式很清晰:

    6.GRU和LSTMs的区别

    说实话GRU和LSTMs其实是很像的先上个对比图吧:

    以下说说他们之间的相同与不同:

    1.new memory的计算方法都是根据之前的state及input计算,但是GRU有一个R gate控制之前state的进入量,在LSTM里没有这个gate

    2.产生新的state的方式不同,LSTM有两个不同的gate分别是f gate和i gate;GRU只有一个gate就是z gate

    3.LSTM对新产生的state有一个o gate可以调节大小;GRU直接输出无任何调节。

    参考网址:

    http://www.ubi.com/

    https://github.com/jych/librnn.git

  • 相关阅读:
    git 回滚merge的两个分支
    java 将一段时间分割为两个连续的时间
    Linux 命令记录
    C# WebBrowser 设置独立的代理
    VS2019 开发Django(八)------视图
    VS2019 开发Django(七)------VS2019不能格式化html代码
    VS2019 开发Django(六)------Admin中图片上传
    VS2019 开发Django(五)------createsuperuser
    VS2019 开发Django(四)------models
    VS2019 开发Django(三)------连接MySQL
  • 原文地址:https://www.cnblogs.com/NeighborhoodGuo/p/4692979.html
Copyright © 2020-2023  润新知