csdn:https://blog.csdn.net/abcgkj
github:https://github.com/aimi-cn/AILearners
目前在NLP领域中,主要采用word level和character leve语言建模。接下来我们将分别讲解这两种模型。
基于词级模型
词级语言建模是指把词作为文本信息的最小单位。在语义空间中,单词就好像是空间中的一个节点。在这种情况下,通过 TF 技术或者主题模型技术或者词嵌入模型来生成特征向量或字矢量,每个单词都用一个数字或者一个矢量来表示,之后就可以像循环神经网络这样的模型进行训练。
目前,比较流行的方法是使用词嵌入来得到特征向量。该方法是训练一个大型的语料库,从而来得到一个 Word2Vec 模型。Word2Vec 模型包含一个词典,其中每个单词都是一个矢量化信息。
但是在我们使用基于word level的模型时,需要处理很大的词汇表,而且在英语中单词只要变个形态就是另一个单词了,比如对于下图的一些非正式表达:因此会遇到很大的麻烦。
基于字符级模型
字符级语言建模就像用一个 0-1 向量来表示每一个字符,并且将这个向量送入模型进行训练,而文本中的语法和单词语义被简单地忽略掉,因为我们相信模型可以捕捉到这些语法和单词语义信息。字符级语言建模的思想来自于信号处理。
而用基于character level的模型,可以为未知单词生成word embedding ,相似的拼写单词会有相似的word embedding,并且可以解决OOV问题。
对于纯字符级的模型来说,开始时并没有得到令人满意的效果。但是在2015年之后,逐渐由研究者取得了一些成绩。
比如luong和Manining测试了一个纯字符级的seq2seq(LSTM)NMT系统作为baseline,它和基于word level的模型一样运行的很好,但是在训练时非常耗费时间。下图来是该系统的BLEU评分:
下图是使用该系统翻译的一个例子,可以看到字符级的模型有很好的效果:
在2017年,Jason Lee等人开发出一种Fully Character-Level Neural Machine Translation without Explicit Segmentation系统,下图是该模型的Encoder,Decoder是一个char-level的GRU。
2018年Google的一些研究人员对基于LSTM的seq2seq的character level模型进行分析发现,模型深度越深得到的效果越好,而且char level系统比word level系统表现好,但是char level系统所花费的时间却比word level系统长的多,如下图所示:
Sub-word模型的两个趋势
- 与word level相同的架构,但是使用更小的单元:“word pieces”
- 混合架构:主要为word级,也有一部分为character
对于第一种,Google NMT使用了贪婪贪婪近似最大化语言模型的似然函数来选择pieces,该模型标记内部单词,空格保留为特殊标记(_)并正常分组。
而对于第二种,2014年Dos Santos和Zadrozny提出了Character-level to build word-level Learning Character-level Representations for Part-of-Speech Tagging,该模型对字符进行卷积以生成单词嵌入,并且在固定窗口的词嵌入中使用PoS标签,如下图所示:
Ling等人提出了Character-based LSTM to build word rep’ns,即使用双向LSTM来构建word representations。
为了构建出一个强大、健壮的语言模型,且该模型在多种语言中都有效,编码子单词关联性和用更少的参数获得可比较的表达性,研究人员提出了下图所示的架构:
在2016年,Bojanowski等人提出了FastText embeddings,其目的是推出一种更高效的类似word2vecd的单词表示库,并且更适合于具有大量形态学的稀有单词和语言,对于一个单词的表示采用n-grams和其整个单词来共同表示,如下图所示:
喜欢的童鞋记得分享给别的小伙伴哈。AIMI-CN AI学习交流群【1015286623】 获取更多AI资料扫码加群:
分享技术,乐享生活:我们的公众号每周推送“AI”系列资讯类文章,欢迎您的关注!