cs224n笔记

课程大纲型笔记,查漏补缺型。

个人感觉:必须要先有一定基础,做好章节预习,再看视屏,然后再查资料理解。不然会看的很迷。

2/3.word2vec

详见

one-hot编码:

  • 太长,占内存。
  • 无法表示词之间的关系(相似性)。

分布相似性(distributional similarity):

  • 一种关于词汇语义的理论。
  • 通过上下文理解当前词的含义。

分布式表示(distributed representation):

  • 用密集向量表示词汇含义。

两个算法:

  • Skip-grams(SG):用目标词预测周围词。
  • CBOW(Continuous Bag of word ):用周围词预测目标词。

两个训练方法:

  • Hieravchical softmax (层次softmax)
  • Negative sampling(负采样)

基于统计的方法:

  • 直接统计周围词的词频。
  • 可以用奇异值分解(SVG)来降维。
  • 对高频词比较敏感,需要处理高频词(设置最大值或直接删除等等)。
  • 可以根据距离的远近分配权重来计数,也可以通过tf-idf作为权重。

基于统计 vs 基于预测:

  • 基于统计:训练速度快。
  • 基于预测:能够获得复杂的词相似性,有利于下游的任务。

多义词:

  • 能够捕捉到多义词的含义。
  • 词向量可以理解为“多义向量的线性叠加”。(比如两百维的向量,可以理解为学习了两百种语义。)

超参数:

  • 非对称窗口效果不好。
  • 词向量维度取300左右比较好。
  • 窗口大小取8左右。
  • 数据越多越好,维基百科优于新闻。

GloVe(Global Vectors):

  • 结合了统计模型和预测模型。用滑动窗口的形式统计全局特征,效果更好。

杂项:

  • Loss function = cost function = objective function

4.word window 分类与神经网络

  • softmax
  • 最大似然
  • 交叉熵和KL散度
  • 正则项
  • 神经网络的基础推导,反向传导。
  • 窗口模型做命名实体识别。

5.反向传播

详见

6.依存分析

  • Constituency = phrase structure grammar = context-free grammars (CFGs)
    短语结构语法 = 无上下文关系语法
    语法分析过时了~基本不再使用。难以制定,过于复杂,无法通用…

  • Dependency structure
    依存句法结构
    通过找到句子中每一个词所依赖的部分来描述句子结构。

  • 依赖模糊 attachment ambiguities
    复杂的句子中,依赖关系往往不易确定。

  • 树库 treebanks
    一些已经标注好句子依赖关系的数据资源库。

    • 建立树库是缓慢的
    • 可重复利用
      • 人们制定的语法往往无法重复使用,因为每个人对语法有自己的理解。
      • 许多解析,词性标注等可以基于树库。
      • 对于语言学家有利用价值。
    • 覆盖更广,而不是像语法那样出于直觉。
    • 提供频率和分布信息。
    • 能够用于评估系统。

  • 依存结构,依存语法
    用箭头来表示依存关系。
    有一个单独的头部,无环,每个词都有连接。

  • 投影依存 projective dependency
    大部分句子中依存关系是嵌套结构的并有着线性的顺序。也就是说箭头不存在交叉。

  • 词序
    依存结构无法保存词序(但可以对词加上序号来保留词序)。
  • 具体实现方法:
    “基于转移的解析”、“确定型依存解析”:机器学习分类问题。

  • 基于转移的依存分析

(栈,队列,依存弧)栈:存放待处理的词。队列:从左到右存放单词。依存弧:依存关系(基于语料库)。

  3个动作:
    ● Left-ARC:添加一条s1->s2的依存边,并将s2从栈中删除。即建立右焦点词依存于左焦点词的关系。
    ● Right-ARC:添加一条s2->s1的依存边,并将s1从栈中删除。即建立左焦点词依存于右焦点词的关系。
    ● shift:单词出队压入栈。

    如果有n种依存关系,则共有2n+1种动作。
    注意:得到的序列不一定是唯一正确的。整个分析比较依赖依存关系(语料库)。语料库可以通过treebank转换成我们需要的形式。

传统的基于转移的依存分析,需要从语料库得到依赖关系。这一步并不是很友好,而使用神经网络可以避免这一步特征提取,大大减少工作量。

<词,词性,依存>做为神经网络的输入。
    词:18个单词,用周围词、孩子、孙子来表示当前词。
    词性:18个单词所对应的词性。
    依存:12个,孩子和孙子的弧标签。

  • 评估:
    UAS:只关心箭头是否准确。
    LAS:还关心标签是否准确。

7.Tensorflow1.x 入门

  • 用variables和placeholders构建图,设置loss,选择optimization,将图部署到session(执行环节),session.run。
  • tf.variable_scope() tf.get_variable()
  • 有点过时了,2.x开启。

8.RNN和语言模型

  • 传统语言模型,详见
  • RNN
    • 梯度消失问题,导致普通RNN无法记忆长序列,一般超过5,6个距离的词对W基本没有影响。

9.LSTM 和 GRU

详见

  • seq2seq 模型用于机器翻译

  • LSTM

input, output and forget gates

8个矩阵参数

  • GRU

    reset and update gates

    3个矩阵参数

    注意没有memory cell

10.机器翻译和注意力模型

详见

  • seq2seq模型。

  • 神经网络用于翻译的优势:
    • 端对端,方便训练。
    • 分布式开发。
    • 对文本的开发更强。
    • 生成的文本更加流畅。

  • NMT的缺点:
    • 黑盒,不知道内部在干什么。。
    • 对句法、语义的使用不够明确。
    • 对章节结构、连接子句、回指等高阶的文章概念处理的不好。

  • 多语言翻译

    google非常机智,并没有训练多个模型或者训练多个Encoder、Decoder。而是直接加个标签,表示翻译的目标。

  • attention vs LSTM

    • LSTM只能记住20个词内的信息。而attention没有距离限制。
    • 即使在较短的句子翻译中,attention仍然优于LSTM,因为其每个词的翻译更有针对性。
    • 对于很短的句子(4,5个词)的翻译,效果都不好。因为太短实际上算不上完整的句子。

  • attention

11.GRU及NMT的其他议题

  • !!!为什么LSTM和GRU能够避免梯度消失?

    因为这两个网络内部求新的状态矩阵时,都使用了线性相加,而不是矩阵乘法!

    实际上这和残差结构的原理是一样的!误差传递时,两项相加能够一定程度的防止梯度消失,但并不能规避梯度消失,只能缓解(从6个左右增长到了20个左右)。

  • 使用建议

    • dropout一般用于垂直网络,水平网络(RNN)一般不用(需要特殊处理)。

  • 集成能够有效的提高最终结果。比如训练10个网络求平均。

  • Softmax非常的占训练时间,比如Google翻译网络训练时有将近一半的时间用在计算softmax!

    • Hierarchical softma,层次softmax。但对GPU不友好。
    • 负采样

12.语音处理的端对端模型

简单略过。。

  • 连接时序分类法(CTC,Connectionist Temporal Classification)

  • seq2seq with attention

    每次预测都使用整个输入,用yi-1预测yi。对于很长的语音效果会不好(定位难度会加大)。

  • LAS(Listen and Spell)

    • 输出根据整个输入,导致需要输入完全后才能处理。
    • attention计算的瓶颈,序列越长,学习越困难。
    • 输入的长度对准确率有很大影响。

  • online sequence to sequence Model

    将输入切成一个个的小时间块,每次只识别一个时间块的内容。

13.卷积神经网络

???不知道为什么这章取名为卷积神经网络。。。。。明明就介绍了一个问答模型。

  • Dynamic Memory NetWork(DMN)
    • 问答系统

  • 处理图片数据

14.tree RNN 和 短语句法分析

  • 递归神经网络 vs 循环神经网络(tree RNN vs RNN)

    递归神经网络对短语的抓取能力更强。向量相近的短语可以认为意思相近,这样能够获得更多有意思的结果。

  • tree RNN vs CNN

    • CNN会抓取所有可能的短语。而tree RNN只抓取有一定语法的短语。

  • 递归神经网络结构

    • 输入就是两个子向量。
    • 输出一个向量和一个可能性得分。根据得分情况判断是否进行合并。
    • 具体实现可以用贪心策略,每次合并得分最高的节点。
    • 最后整棵树的得分可以用各个节点的得分和表示。并将其作为网络优化目标。
    • 特殊的反向传播技巧:贯穿结构反向传播(through structure)。

  • 基础TreeRNN存在的问题:

    • 只用一个矩阵无法获取复杂的语法关系。
    • 两个输入节点之间没有产生关联。

  • TreeRNN改进方法:

    • 简单来说就是不在共用一个矩阵,对不同类型的输入情况使用对应的矩阵(比如名词+形容词矩阵、名词+动词矩阵等等)。

  • MV TreeRNN(Matrix-Vector model)
    • 对各种情况设置矩阵并不容易。
    • 每个节点都有 一个向量和矩阵,交换相乘来获得新的向量,这样一来词之间就有了交互,并自带了词性等信息。
    • 缺点在于要训练太多矩阵,参数训练太困难。另外,矩阵构建也困难。

15.共指解析 Coreference resolution

  • 排名模型:对候选先行词进行逐个词打分,取最大得分。

  • 提及匹配模型

16. 用于问答的动态神经网络

  • 略过

17. NLP的问题和可能性架构

略过

18. NLP局限性

  • 多任务
  • 介绍自己的模型。略过。。。
-------------本文结束感谢您的阅读-------------