利用word embedding之类的方法, 基于单词级别的模型, 虽然能够很好的对词库中每一个词进行向量表示, 但也存在一些问题: 首先需要处理和维护巨大的开放词表,其次, 容易出现单词不存在于词汇库中的情况,也就是 OOV(out-of-vocabulary),此外单词的非正式拼写与拼写错误等问题也经常出现. 一个比较直观的想法就是利用比word更基本的元素来建立模型.
该模型是将 Character (音节) 作为基本单位进行的,它能够解决 Word-level 所存在的 OOV 问题, 并且对于拼写类似的单词能够得到类似的 embedding.但也存在一些问题, 例如,相对词向量而言序列变得更长,相对于 word-level , Character-level 的输入句子变长,使得数据变得稀疏,而且对于远距离的依赖难以学到,训练速度降低.
由于word-level Model 和 Character-level Model 各有优缺点,一个想法就是采用介于 word-level Model 和 Character-level 之间的 Subword Model.
Subword Model 可以被分为 Byte Pair Encoding(BPE) 和 SentencePiece。
BPE 属于 压缩算法中一种,其主要思想就是将经常出现的byte pair用一个新的byte来代替,例如假设(‘A’, ’B‘)经常顺序出现,则用一个新的标志’AB’来代替它们. BPE中利用了n-gram count来更新词汇库: 给定了文本库,我们的初始词汇库仅包含所有的单个的字符,然后不断的将出现频率最高的 n-gram pair 作为新的n-gram加入到词汇库中,直到词汇库的大小达到我们所设定的某个目标为止.
核心思想:大部分时候都使用word-level的模型来做translate,只有在遇到rare or unseen的words的时候才会使用character-level的模型协助。这种做法产生了非常好的效果。 混合模型即两种方式并存的模型,在正常处理时采用word-level的模型,当出现奇怪的词的后,使用char-level级的模型。
FastText就是利用subword将word2vec扩充,有效的构建embedding. fastText 方法包含三部分:模型架构、层次 Softmax 和 N-gram 特征,与cbow结构相似,不同之处在于,fastText 预测标签,而 CBOW 模型预测中间词。其是Facebook AI Research在2016年开源的一个文本分类器,特点就是fast。相对于其它文本分类模型,如SVM,Logistic Regression和neural network等模型,fastText在保持分类效果的同时,大大缩短了训练时间。
在ELMo 中,每个单词被赋予一个表示,它是它们所属的整个语料库句子的函数。所述的嵌入来自于计算一个两层双向语言模型(LM)的内部状态,因此得名「ELMo」:Embeddings from Language Models.
Bert训练出的word-level向量变成sentence-level的向量,下游具体NLP任务调用更方便,修正了ELMo模型的潜在问题(不能并行).使用句子级负采样获得句子表示/句对关系,Transformer模型代替LSTM提升表达和时间上的效率,masked LM解决“自己看到自己”的问题。
BERT优于以前的方法,因为它是第一个无监督的、深度双向的用于预训练NLP的系统。无监督意味着BERT可以仅使用纯文本语料库进行训练,这是非常重要的特性,因为大量纯文本数据在网络上以多种语言公开。
预训练方法可以粗略分为不联系上下文的词袋模型等和联系上下文的方法。其中联系上下文的方法可以进一步分为单向和双向联系上下文两种。诸如NNLM、Skip-Gram、 Glove等词袋模型,是一种单层Shallow模型,无法联系上下文;而LSTM、Transformer为典型的可以联系上下文的深层次网络模型。