热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【NLP入门】通俗讲解SubwordModels

Datawhale干货作者:芙蕖,Datawhale优秀学习者,东北石油大学对于英文来说,文字的粒度从细到粗依次是chara

 Datawhale干货 

作者:芙蕖,Datawhale优秀学习者,东北石油大学

对于英文来说,文字的粒度从细到粗依次是character, subword, word,character和word都很好理解,分别是字母和单词。而subword相当于英文中的词根、前缀、后缀等,如unfortunately中的un、ly、fortun(e)等就是subword,它们都是有含义的。

之前介绍的模型都是基于词向量的, 那么能不能换一个角度来表示语言。说英文的时候, 每个单词都是由音节构成的, 而人们听到了连续的音节就可以理解其中的含义, 而音节显然比词粒度更细。

首先,来梳理下word-level存在的几个问题:

  • 需要系统需要极大的词汇量;

  • 如果遇到了不正式的拼写, 系统很难进行处理;

  • 做翻译问题时, 音译姓名比较难做到。

为了解决这些问题, 一开始想到的是采用character级别的模型,即对26个字母训练word2vec,每个词由其字母的embedding拼接或者求平均得到。但这种方法梯度消失(爆炸)的问题也会更严重。

后来,人们就想用subword模型作为character和word的折中模型。subword模型主要有两种,它们都能解决未登录词(OOV)的问题。第一种是模型结构和word模型完全一样,只不过把word换成了subword。第二种则是word和character模型的杂交模型。

一、人类语言声音:语音学和音系学

  • 语音学(Phonetics)是一种非常基本的理论,只要是正常人,有着相同的人体器官和相同的发声结构,就会遵循着相同的发声规则和原理。

  • 语音体系(Phonology)是有语义的声音的合集,各国各文明的人都会制定自己的语音体系。

  • 音素(Phoneme)是语音中划分出来的最小的语音单位,分为元音和辅音

国际音标(由音素构成)按理来说可以表示所有的语音,但是会发现好多语音是没有语义的,这时我们采取的办法就是看音素的下一级(part of words)。

词法学:一个n-grams的代替方案。在基于单词的模型中存在一些问题:需要处理很大的词汇表,在英语中单词只要变个形态就是另一个单词了,比如说:gooooood bye

二、字符级模型(Character-LevelModels)

通常针对字符级的模型有两种处理思路:一种是把原有的词向量分解处理,一种是把连接的语言分解成字符。

单词嵌入可以由字符嵌入表示:

  1. 能为不知道的单词生成嵌入

  2. 相似的拼写有相似的嵌入

  3. 解决了oov问题

这两种方法都被证明是成功的。后续也有很多的工作使用字符级的模型来解决NMT任务。但这些任务有一些共同的缺点,由于从单词替换成字符导致处理的序列变长,速度变慢;由于序列变长,数据变得稀疏,数据之间的联系的距离变大,不利于学习。于是2017年,Jason等人发表了论文Fully Character-Level Neural MachineTranslation without Explicit Segmentation 解决了这些问题。

论文的模型结构如图所示:

首先是对输入的character首先做一个embedding, 然后分别与大小为3,4,5的filter进行卷积运算,就相当于3-grams, 4-grams和5-grams。之后进行max-pooling操作,相当与选出了有语义信息的segment-embedding。之后将这些embedding送入Highway Network(相当于resnet, 解决了深层神经网络不容易训练的问题)后再通过一个单层的双向GRU,得到最终的encoder的output。之后经过一个character-level的GRU(作为decoder)得到最终结果。

还有一篇2018年的文章(Revisiting Character-Based Neural Machine Translation with Capacity andCompression. 2018.Cherry, Foster, Bapna, Firat, Macherey, Google AI)中展示了纯字符级模型的效果。此论文表明在一些复杂的语言中(比如捷克语),character级别的模型会大幅提高翻译准确率,但在较为简单的语言中(如英语法语),character级别的模型提升效果不显著。同时,研究发现在模型较小时word-level的模型效果更好,在模型较大时character-level 的效果更好。如图所示:

总之,现有的character-level的模型在NMT任务上可以更好的处理OOV的问题,可以理解为我们可以学习一些字符级别的语义信息帮助我们进行翻译。

三、子词模型(Sub-word models)

所谓subword,就是取一个介于字符和单词之间成分为基本单元建立的模型。而所谓Byte Pair Encoding(一下简称BPE),就是寻找经常出现在一起的Byte对,合并成一个新的Byte加入词汇库中。即若给定了文本库,若我们的初始词汇库包含所有的单个字符,则我们会不断的将出现频率最高的n-gram的pair作为新的n-gram加入词汇库中,直到达到我们的要求。

课程在这里介绍了介于word-level和char-leval之间的Sub-word models,主要一般有两种结构,一种是仍采用和word-level相同的结构,只不过采用更小的单元word pieces来代替单词;另一种是hybrid architectures, 主要部分依然是基于word, 但是其他的一些部分用characters。

Hybrid architectures:主要的模型含有单词,一些其他的含有字符、字节对的编码。使用的是一个压缩算法:将大部分频繁出现的字节对标记为新的字节对。

3.1 Byte Pair Encoding(BPE)

Byte Pair Encoding,简称BPE,是一种压缩算法。

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

上述例子是,比如有一个初始的文本库和词汇库。首先,可见此时出现频率最高的n-gram pair是“e,s”,出现了9次,因此我们将“es”作为新词加入到词汇库中同时更新文本库。然后,这时词汇库中出现频率最高的n-gram pair是“es,t”,出现了9次,因此我们将“est”加入词汇库中同时更新文本库。依次类推,可以逐渐的通过增加新的n-gram的方式达到我们的目标。对于现实生活中有很多词汇量非常大的task,这种通过BPE逐步建立词汇库的方式就显得非常有用了。

使用这种方法可以自动生成vocab。

谷歌的NMT模型有两个版本,版本一采用的是BPE模型,版本二对BPE模型进行了改进,称为wordpiece mode。这种方法不在使用n-gram的计算来算,而是使用搜索算法搜索最大化的该语言模型的片段去选择pieces。

另外还有一种模型叫sentencepiece,它直接从raw text中获取,同时把空格视为一种特殊的token(_)

课程介绍了几篇在这方面发展的论文,有用Character-level去产生词向量的(LearningCharacter-level Representations for Part-of Speech Tagging),还有用char-level结合high-way网络进行机器翻译的。

课程分析用char-level得到词向量的特点,经由他们直接输出的word-embedding更倾向于在形状上相似,输入high-way之后,形状上的相似会朝含义上的相似发展。如图所示:

使用char-level的可以轻易解决,此没有出现在词库的情况,如图所示:

四、混合字符和词级模型

4.1 Hybrid NMT

核心思想:大部分时候都使用word-level的模型来做translate,只有在遇到rare or unseen的words的时候才会使用character-level的模型协助。这种做法产生了非常好的效果。

混合模型即两种方式并存的模型,在正常处理时采用word-level的模型,当出现奇怪的词的后,使用char-level级的模型。

一篇论文的结构如图所示:

可以看到输入未知的单词时,采用char-level进行编码,输出时也采用char-level级的进行解码。同时训练跟beam-search也时要同时对两个结构进行。

4.2 Chars for word embeddings

采用subword的方式长生词向量,课程中提到了FastText。主要思路如图所示:

  1. 字符的卷积来生成词嵌入

  2. 使用pos标记固定的窗口

五、FastText

使用n-grams和整个单词来代表单词。我们知道在word2vec方法中我们基于word-level的模型来得到每一个单词的embedding,但是对于含有许多OOV单词的文本库word2vec的效果并不好。由此很容易联想到,如果将subword的思想融入到word2vec中是不是会产生更好的效果呢?

FastText embeddings是一个word2vec like embedding。用where举例, 它把单词表示成了: "where &#61; , "这样的形式. 注意这里的"<>"符号是表达了开始和结束. 这样就可以有效地解决OOV的问题, 并且速度依然很快。

然后把它们加起来&#xff1a;

于是&#xff0c;就可以使用原有的word2vec算法来训练得到对应单词的embedding。其保证了算法速度快的同时&#xff0c;解决了OOV的问题&#xff0c;是很好的算法。

5.1 FastText和word2vec的区别

1. 相似处&#xff1a;

  • 图模型结构很像&#xff0c;都是采用embedding向量的形式&#xff0c;得到word的隐向量表达。

  • 都采用很多相似的优化方法&#xff0c;比如使用Hierarchicalsoftmax优化训练和预测中的打分速度。

2. 不同处&#xff1a;

  • 模型的输出层&#xff1a;word2vec的输出层&#xff0c;对应的是每一个term&#xff0c;计算某term的概率最大&#xff1b;而fasttext的输出层对应的是分类的label。不过不管输出层对应的是什么内容&#xff0c;起对应的vector都不会被保留和使用。

  • 模型的输入层&#xff1a;word2vec的输出层&#xff0c;是 context window 内的term&#xff1b;而fasttext 对应的整个sentence的内容&#xff0c;包括term&#xff0c;也包括 n-gram的内容。

3. 两者本质的不同&#xff0c;体现在 h-softmax的使用&#xff1a;

  • Word2vec的目的是得到词向量&#xff0c;该词向量 最终是在输入层得到&#xff0c;输出层对应的 h-softmax也会生成一系列的向量&#xff0c;但最终都被抛弃&#xff0c;不会使用。

  • fastText则充分利用了h-softmax的分类功能&#xff0c;遍历分类树的所有叶节点&#xff0c;找到概率最大的label&#xff08;一个或者N个&#xff09;

FastText是一个能用浅层网络取得和深度网络相媲美的精度&#xff0c;并且分类速度极快的算法。按照作者的说法“在标准的多核CPU上&#xff0c;能够训练10亿词级别语料库的词向量在10分钟之内&#xff0c;能够分类有着30万多类别的50多万句子在1分钟之内”。但是它也有自己的使用条件&#xff0c;它适合类别特别多的分类问题&#xff0c;如果类别比较少&#xff0c;容易过拟合。

六、写到最后

本文介绍了Subword Model的两种模型。对于第一种模型&#xff0c;其关键点在于怎样得到subword&#xff0c;在此采用BPE算法来提取高频Subword的形式。第二种被称为杂交模型的方法相对简单&#xff0c;是在文本中有这个word时就用word embedding&#xff0c;没有的时候就用char embedding来学习word embedding&#xff0c;非常简单。

说个正事哈

由于微信平台算法改版&#xff0c;公号内容将不再以时间排序展示&#xff0c;如果大家想第一时间看到我们的推送&#xff0c;强烈建议星标我们和给我们多点点【在看】。星标具体步骤为&#xff1a;

&#xff08;1&#xff09;点击页面最上方深度学习自然语言处理”&#xff0c;进入公众号主页。

&#xff08;2&#xff09;点击右上角的小点点&#xff0c;在弹出页面点击“设为星标”&#xff0c;就可以啦。

感谢支持&#xff0c;比心

投稿或交流学习&#xff0c;备注&#xff1a;昵称-学校&#xff08;公司&#xff09;-方向&#xff0c;进入DL&NLP交流群。

方向有很多&#xff1a;机器学习、深度学习&#xff0c;python&#xff0c;情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

记得备注呦

推荐两个专辑给大家&#xff1a;

专辑 | 李宏毅人类语言处理2020笔记

专辑 | NLP论文解读


整理不易&#xff0c;还望给个在看&#xff01;


推荐阅读
  • 从2019年AI顶级会议最佳论文,探索深度学习的理论根基与前沿进展 ... [详细]
  • 本文回顾了作者初次接触Unicode编码时的经历,并详细探讨了ASCII、ANSI、GB2312、UNICODE以及UTF-8和UTF-16编码的区别和应用场景。通过实例分析,帮助读者更好地理解和使用这些编码。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 理工科男女不容错过的神奇资源网站
    十一长假即将结束,你的假期学习计划进展如何?无论你是在家中、思念家乡,还是身处异国他乡,理工科学生都不容错过一些神奇的资源网站。这些网站提供了丰富的学术资料、实验数据和技术文档,能够帮助你在假期中高效学习和提升专业技能。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • 本文介绍了并查集(Union-Find算法)的基本概念及其应用。通过一个具体的例子,解释了如何使用该算法来处理涉及多个集合的问题。题目要求输入两个整数 n 和 m,分别表示总人数和操作次数。算法通过高效的合并与查找操作,能够快速确定各个元素所属的集合,适用于大规模数据的动态管理。 ... [详细]
  • 在Windows系统中安装TensorFlow GPU版的详细指南与常见问题解决
    在Windows系统中安装TensorFlow GPU版是许多深度学习初学者面临的挑战。本文详细介绍了安装过程中的每一个步骤,并针对常见的问题提供了有效的解决方案。通过本文的指导,读者可以顺利地完成安装并避免常见的陷阱。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 深入解析C语言中结构体的内存对齐机制及其优化方法
    为了提高CPU访问效率,C语言中的结构体成员在内存中遵循特定的对齐规则。本文详细解析了这些对齐机制,并探讨了如何通过合理的布局和编译器选项来优化结构体的内存使用,从而提升程序性能。 ... [详细]
  • 性能测试中的关键监控指标与深入分析
    在软件性能测试中,关键监控指标的选取至关重要。主要目的包括:1. 评估系统的当前性能,确保其符合预期的性能标准;2. 发现软件性能瓶颈,定位潜在问题;3. 优化系统性能,提高用户体验。通过综合分析这些指标,可以全面了解系统的运行状态,为后续的性能改进提供科学依据。 ... [详细]
  • 独家解析:深度学习泛化理论的破解之道与应用前景
    本文深入探讨了深度学习泛化理论的关键问题,通过分析现有研究和实践经验,揭示了泛化性能背后的核心机制。文章详细解析了泛化能力的影响因素,并提出了改进模型泛化性能的有效策略。此外,还展望了这些理论在实际应用中的广阔前景,为未来的研究和开发提供了宝贵的参考。 ... [详细]
  • 每日学术推荐:异质图神经网络在抽取式文档摘要中的应用研究
    在抽取式文档摘要任务中,学习跨句子关系是至关重要的一步。本文探讨了利用异质图神经网络来捕捉句子间复杂关系的有效方法。通过构建包含不同类型节点和边的图结构,模型能够更准确地识别和提取关键信息,从而生成高质量的摘要。实验结果表明,该方法在多个基准数据集上显著优于传统方法。 ... [详细]
  • 射频领域的博士学位在信号处理算法方面具有广阔的职业前景,尤其是在射频技术的应用中。例如,加入华为的射频基站部门,从事数字预失真等关键技术的研发工作。在此过程中,需要注意持续跟踪最新的学术和技术进展,保持对行业动态的敏感性,并不断提升自身的实践能力和创新能力。此外,除了技术层面,还应关注行业的整体发展趋势,以便更好地规划职业生涯。 ... [详细]
author-avatar
理想压力正比_635
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有