NLP-Task3 Subword model

 word2vec 和 glove 基本上都是基于word单词作为基本单位的,这种方式虽然能够很好的对词库中每一个词进行向量表示,然而,这种方式容易出现单词不存在于词汇库中的情况,也就是 OOV(out-of-vocabulary),而且对于单词的一些词法上的修饰(morphology)处理的也不是很好。一个自然的想法就是能够利用比word更基本的组成来建立模型,以更好的解决这些问题。本节思考采用 n-gram 思想训练 word vector 模型,也就是 FastText。

Character-Level Model

一种思路是将字符作为基本单元,建立Character-level model,但是由于基本单元换为字符后,相较于单词,其输入的序列更长了,使得数据更稀疏且长程的依赖关系更难学习,训练速度也会降低。

优点:

  1. 解决word-level所存在的OOV问题
  2. 类似的单词,具有类似的embedding

问题:

  1. 相较于单词,其输入的序列更长了,使得数据更稀疏且长程的依赖关系更难学习,训练速度也会降低。

解决方法:

Fully Character-Level Neural Machine Translation without Explicit Segmentation论文中,利用了多层的convolution, pooling与highway layer来解决这一问题,其中encoder的结构如下图所示:

思想如下:

  1. 输入的字符被映射到Character embedding

  2. 采用 不同窗口大小的卷积核对输入字符的 character embeddings 表示进行卷积操作,论文中采用的窗口的大小分别为 3、4、5 ,也就是说学习 Character-level 的 3-gram、4-gram、5-gram

  3. 对不同卷积层的卷积结果进行 max-pooling 操作,即捕获其最显著特征生成 segment embedding

  4. segment embedding 经过 Highway Network

  5. 输出结果 再经过 单层 BiGRU,得到最终 的 encoder output

  6. decoder再利用Attention机制以及character level GRU进行decode

通过这种方式不仅能够解决 Word-level 所存在的 OOV 问题,而且能够捕获 句子的 3-gram、4-gram、5-gram 信息,这个也是 后期 FastText 的想法雏形。

Subword model

subword model 一种介于word-level model 和 character-level 的模型。可以被分为Byte Pair Encoding(BPE) 和 SentencePiece。

Byte Pair Encoding(BPE)

BPE 属于 压缩算法中一种,其主要思想就是将经常出现的byte pair用一个新的byte来代替, 例如假设('A', ’B‘)经常顺序出现,则用一个新的标志'AB'来代替它们。

给定了文本库,我们的初始词汇库仅包含所有的单个的字符,然后不断的将出现频率最高的n-gram pair作为新的ngram加入到词汇库中,直到词汇库的大小达到我们所设定的某个目标为止。

如下所示:假设我们的文本库中出现的单词及其出现次数为:

{'l o w': 5, 'l o w e r': 2, 'n e w e s t': 6, 'w i d e s t': 3}

词库为:

  { 'l', 'o', 'w', 'e', 'r', 'n', 'w', 's', 't', 'i', 'd'}

 出现频率最高的ngram pair是('e','s') 9次,所以我们将'es'作为新的词汇加入到词汇库中,'es'作为一个整体出现在词汇库中。

    {'l o w': 5, 'l o w e r': 2, 'n e w es t': 6, 'w i d es t': 3}

 这时出现频率最高的ngram pair是('es','t') 9次,将'est'加入到词汇库中,文本库更新为

   {'l o w': 5, 'l o w e r': 2, 'n e w est': 6, 'w i d est': 3}

 新的出现频率最高的ngram pair是('l','o')7次,将'lo'加入到词汇库中,文本库更新为

 {'lo w': 5, 'lo w e r': 2, 'n e w est': 6, 'w i d est': 3}

以此类推,直到词汇库大小达到我们所设定的目标。这个例子中词汇量较小,对于词汇量很大的实际情况,我们就可以通过BPE逐步建造一个较小的基于subword unit的词汇库来表示所有的词汇。

  • 有一个目标词汇量,当你达到它的时候就停止
  • 做确定性的最长分词分割
  • 分割只在某些先前标记器(通常MT使用的 Moses tokenizer )标识的单词中进行
  • 自动为系统添加词汇
    • 不再是基于传统方式的 strongly “word”

Wordpiece/Sentencepiece model

sentencepiece model 将词间的空白也当成一种标记,可以直接处理sentence,而不需要将其pre-tokenize成单词。

谷歌NMT (GNMT) 使用了它的一个变体

  • V1: wordpiece model
  • V2: sentencepiece model

不使用字符的 n-gram count,而是使用贪心近似来最大化语言模型的对数似然函数值,选择对应的pieces

  • 添加最大限度地减少困惑的n-gram
  • Wordpiece模型标记内部单词

Sentencepiece模型使用原始文本。

  • 空格被保留为特殊标记(_),并正常分组
  • 您可以通过将片段连接起来并将它们重新编码到空格中,从而在末尾将内容反转。

BERT 使用了 wordpiece 模型的一个变体

Hybrid Model

还有一种思路是在大多数情况下我们还是采用word level模型,而只在遇到OOV的情况才采用character level模型。

其结构如下图所示,大部分还是依赖于比较高效的word level模型,但遇到例子中的"cute"这样的OOV词汇,我们就需要建立一个character level的表示,decode时遇到<unk>这个表示OOV的特殊标记时,就需要character level的decode,训练过程是end2end的,不过损失函数是word部分与character level部分损失函数的加权叠加。

FastText

FAIR的FastText就是利用subword将word2vec扩充,有效的构建embedding。用子单词信息丰富单词信息

  • 目标:下一代高效的类似于word2vecd的单词表示库,但更适合于具有大量形态学的罕见单词和语言
  • 带有字符n-grams的 w2v 的 skip-gram模型的扩展

  • 将单词表示为用边界符号和整词扩充的字符n-grams

  • where=< wh,whe,her,ere,re>,<where>
    • 注意 $ , <her $ 是不同于 her 的
      • 前缀、后缀和整个单词都是特殊的
  • 将word表示为这些表示的和。上下文单词得分为
    • S\left ( w,c\right )=\sum g\epsilon G\left ( w \right )Z_{g}^{T}V_{c}
      • 细节:与其共享所有n-grams的表示,不如使用“hashing trick”来拥有固定数量的向量

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值