cs224n学习笔记--Subword Models

Subword Models

基于词级的模型(word-level Model)

使用基于单词的模型时需要处理规模庞大的词汇表,例如Word2Vec,是利用word embedding的方法来得到每一个word的vec,这种方法需要去处理规模庞大的词汇表。这种方式虽然效果不错,但是对于单词而言,只要稍微做些改变就是另一个单词了。造成的后果:

  • OOV(out-of-vocabulary)出现单词不存在于词汇库中的情况。解决方法:最佳语料规模,使系统能够获得更多的词汇量;
  • 拼写错误。解决方法:矫正或加规则约束;
  • 对名字和地名的音译。

字符级语言模型(Character-Level Model)

基于 Character 作为基本单位的,这种方式能够很好的对字库中每一个 Char 进行向量表示。对比word embedding,character embedding有以下几个优点:

  • 解决基于词级模型的OOV 问题
  • 为不存在的词生成embedding,拼写相似的单词具有相似的 embedding

存在问题:

  1. 序列变长:相比于 词级(word-level ), 字符级(Character-level) 的输入句子变长,使得数据变得稀疏,而且对于远距离的依赖难以学到,训练速度降低;
    解决办法:Jason Lee等人提出(Fully Character-Level Neural Machine Translation without Explicit Segmentation 原文点此)利用多层 conv 和 pooling 和 highway layer 的方式来解决该问题cs224n学习笔记--Subword Models_第1张图片
    该论文思路如下:
    1.输入的字符首先需要经过 Character embedding 层,并被转化为 character embeddings 表示;
    2.采用 不同窗口大小的卷积核对输入字符的 character embeddings 表示进行卷积操作,论文中采用的窗口的大小分别为 3、4、5 ,也就是说学习 Character-level 的 3-gram、4-gram、5-gram;
    3.对不同卷积层的卷积结果进行 max-pooling 操作,即捕获其最显著特征生成 segment embedding;
    4.segment embedding 经过 Highway Network (有些类似于Residual network,方便深层网络中信息的流通,不过加入了一些控制信息流量的gate);
    5…输出结果 再经过 单层 BiGRU,得到最终 的 encoder output;
    6.之后,decoder再利用Attention机制以及character level GRU进行decode。
    通过这种方式不仅能够解决 Word-level 所存在的 OOV 问题,而且能够捕获 句子的 3-gram、4-gram、5-gram 信息,这个也是 后期 FastText 的想法雏形;

你可能感兴趣的:(自然语言处理,深度学习,CS224NLP)