植物百科网
当前位置: 首页 农业百科

自然语言处理常用的机器学习算法(一文看懂自然语言处理模型)

时间:2023-07-24 作者: 小编 阅读量: 2 栏目名: 农业百科

BERT模型打破了多项NLP任务的纪录。BERT模型的论文发布之后不久,其研究团队开源了该模型的代码,并发布了可供下载的模型。这个训练阶段被称为微调,源自半监督序列学习和ULMFiT。BERT基本上就是一个经过训练的TransformerEncoder的堆栈。到目前为止,词嵌入一直都是推动NLP模型解决语言任务的主要力量。回顾词嵌入要让机器学习模型能处理词,首先需要将词表示成某种数值形式,以便模型进行计算。根据使用的场景,「stick」可能具有多种含义。

(关注AI新视野,私信‘资料’二字,免费获取50G人工智能视频教程!)

本文精心翻译自:https://jalammar.github.io/illustrated-bert/。

2018 年是自然语言处理(NLP)的一个转折点,如何更好地表征词和句子以及理解其潜在含义和关系是目前的研究热点。此外,NLP 社区也一直都在提出强大的基础模型------可以免费下载它们并将其用在你自己的模型和流程中(这被称为 NLP 的 ImageNet 时刻,是指这类似于多年前用于计算机视觉任务的机器学习的加速发展)。

ULM-FiT 和 Cookie Monster 没任何直接联系,但我想不到其它东西来表示了:)

BERT 的发布是这一领域最近的里程碑 ,被誉为 NLP 新时代的开端。BERT 模型打破了多项NLP任务的纪录。BERT模型的论文发布之后不久,其研究团队开源了该模型的代码,并发布了可供下载的模型(已经在大规模数据集上经过预训练)。这是一个重大的进展,因为它让任何人都可以构建涉NLP模型,并将这种强大工具用作其中的组件------这能节省从头开始训练语言处理模型所需的时间、精力、知识和资源。

BERT 的开发分为两个步骤:

  1. 下载预训练过的模型(在无标注数据上训练过);
  2. 针对特定任务进行调整。

以BERT 的为基础开发近期大量涌现,其中包括但不限于半监督序列学习(来自 Andrew Dai and Quoc Le)、ELMo(来自 Matthew Peters 以及 AI2 和华盛顿大学计算机科学与工程系的研究者)、ULMFiT(来自 fast.ai 创始人 Jeremy Howard 和 Sebastian Ruder)、OpenAI transformer(来自 OpenAI 的研究者 Radford、Narasimhan、Salimans 和 Sutskever)、Transformer(Vaswani et al)。

要恰当地了解 BERT 究竟是什么,需要了解很多概念。所以先来看看如何使用 BERT,之后再介绍涉及该模型的概念。

示例:句子分类

使用 BERT 最直接的方式是将其用于分类单个文本。该模型看起来会是这样的:

为了训练这样一个模型,主要必须训练分类器(Classifier),而让 BERT 模型在训练过程中有尽可能小的变化。这个训练阶段被称为微调(Fine-Tuning),源自半监督序列学习和 ULMFiT。

对于分类器,那么就处于机器学习的监督学习领域。也就是说需要一个有标注的数据集来训练模型。对于这个垃圾邮件分类器例子来说,有标注的数据集即为邮件信息和对应标签构成的列表(每条邮件信息被标注为「垃圾邮件」或「非垃圾邮件」)。

类似的例子还包括:

  • 情感分析输入:电影/产品评论。输出:这个评论是正面的还是负面的?
  • 示例数据集:SST:https://nlp.stanford.edu/sentiment/
  • 事实判断输入:句子。输出:「事实声明」或「非事实声明」。
  • 更雄心勃勃且更有未来感的示例:输入:称述句。输出:「真」或「假」。

模型模型结构

现在已经有一个有关 BERT 使用方式的例子了,下面来仔细看看它的工作方式。

BERT 论文里共提出了两种大小的模型:

  • BERT BASE:与 OpenAI Transformer 大小相当,这是为了比较两者的表现而构建的。
  • BERT LARGE:一个非常巨大的模型,效果是当前最佳的。

BERT 基本上就是一个经过训练的 Transformer Encoder 的堆栈。有关Transformer的文章可以查看 :https://jalammar.github.io/illustrated-transformer/ ;

Transformer 模型是 BERT的基础。

这两种大小的 BERT 模型都有很多编码器层(论文中称之为 Transformer Blocks)------Base 版有 12 层,Large 版有 24 层。相比于 Transformer 初始论文的参考实现的默认配置(6 个编码器层、512 个隐藏单元和 8 个注意头),它们还有更大的前馈网络(分别有 768 和 1024 个隐藏单元)和更多注意头(attention head,分为有 12 和 16 个)。

模型输入

首个输入的 token 由一个特殊的 [CLS] token 填补,原因后面会说明。CLS 表示 Classification。

与 Transformer 的简单纯粹的编码器一样,BERT 以词序列为输入,这些词会在其堆栈中不断向上流动。每一层都包含自注意机制,并会通过一个前馈网络传递结果,然后将其移交给下一个编码器。

在模型结构方面,直到这部分为止都与 Transformer 完全相同(除了规模大小,见上述的配置)。

模型输出

每个位置都会输出一个大小为 hidden_size(BERT Base 为 768)的向量。对于上面看到的句子分类示例,仅关注第一个位置的输出(即传递了特殊的 [CLS] token 的位置)。

这个向量就可以被用作所选择的分类器的输入,这篇论文仅使用单层神经网络作为分类器就取得了非常优良的结果。

如果你有更多标签(比如如果你的电子邮件服务会将邮件标注为「垃圾邮件」、「非垃圾邮件」、「社交」、「广告」),那么你只需要调整分类器网络使其具有更多输出神经元,然后通过 softmax 即可。

对比卷积网络

如果你有计算机视觉的背景,你可能会发现这种向量传递类似于 VGGNet 等网络的卷积部分与网络末端的全连接分类部分之间的情况。

嵌入的新时代

这些新进展带来了词编码方式的转变。到目前为止,词嵌入一直都是推动 NLP 模型解决语言任务的主要力量。word2vec 和 GloVe 等方法在这类任务上得到了广泛的应用。先来看看之前的做法,然后再看现在有什么变化。

回顾词嵌入要让机器学习模型能处理词,首先需要将词表示成某种数值形式,以便模型进行计算。Word2Vec 表明可以使用向量(某种数值列表)来恰当地表征词,使得这些表征能具备词之间的语义或含义关系(比如能说明词的含义是否相似或相反,像是「斯德哥尔摩」和「瑞典」这一组词与「开罗」和「埃及」这一组词之间具有同样的关系)以及句法或基于语法的关系(比如「had」和「has」之间的关系与「was」和「is」之间的关系一样)。

使用在大规模文本数据上预训练后的词嵌入是一个很棒的思路,训练好之后,其他人也可以使用 Word2Vec 或 GloVe 预训练后生成的词嵌入。下面是词「stick」的 GloVe 嵌入示例(嵌入向量大小为 200):

词「stick」的 GloVe 词嵌入,这是一个由 200 个浮点数(四舍五入到两位小数)构成的向量。这里给出的并不完整,总共有 200 个值。

因为这些向量很大而且都是数字,所以本文会使用下面的简单图形来表示它们:

ELMo:上下文很重要如果使用这种 GloVe 表示方法,那么不管上下文如何,词「stick」都会表示成这个向量。很多 NLP 研究者意识到了这种操作并不稳妥,比如 Peters et. al., 2017、McCann et. al., 2017 以及 Peters et. al., 2018 的 ELMo 论文。根据使用的场景,「stick」可能具有多种含义。为什么不根据其所处的语境/上下文来确定词嵌入呢------这样既能获得该词在上下文中的含义,还能得到其它语境信息?为此,语境化词嵌入诞生了。

语境化词嵌入能根据词在句子语境中的含义给予其不同的嵌入。

ELMo 并不为每个词使用一个固定的嵌入,而是会在为句子中的词分配嵌入之前检查整个句子。它使用了一个在特定任务上训练的双向 LSTM 来创建这些嵌入。

ELMo 是向 NLP 预训练所迈出的重要一步。ELMo LSTM 在一个大规模数据集上进行训练,然后可以将其用作其它需要处理语言的模型的组件。

ELMo 有何奥妙?ELMo 的训练方式是预测一个词序列的下一个词,并以此来获得对语言的理解------这个任务被称为语言建模。这是很方便的,因为有大量文本数据,这样的模型无需标签也能学习。

ELMo 的预训练过程中的一步: 给定「Let's stick to」为输入,预测下一个最有可能的词------这是一个语言建模任务。在大型数据集上训练时,模型会开始提取语言模式。在这个示例中,模型不太可能准确猜出下一个词。更现实的情况是,比如在出现了「hang」这个词之后,为「out」分配更高的概率(以拼出「hang out」),而不是「camera」。

可以看到从 ELMo 的头部后面伸出的每个未展开的 LSTM 步骤的隐藏状态。在这个预训练完成之后,它们能用在嵌入过程中。

ELMo 实际上更进了一步,训练了一个双向 LSTM------使其语言模型不仅有对下一个词的感知,还有对前一个词的感知。

一个很赞的介绍 ELMo 的幻灯片:https://goo.gl/Fg5pF9

ELMo 通过一种特定方式(连接之后加权求和)对隐藏状态(和初始嵌入)进行分组,从而构建出语境化的嵌入。

ULM-FiT:解决 NLP 中的迁移学习

ULM-FiT 引入了新的方法,可有效利用模型在预训练阶段学习到的很多东西------不只是嵌入,而且也不只是语境化嵌入。ULM-FiT 引入了一种新语言模型和新处理过程,可针对多种任务对语言模型进行调整。NLP 终于有一种做迁移学习的方法了,或许就像计算机视觉一样。

Transformer:超越 LSTM

Transformer 论文和代码的发布以及其在机器翻译等任务上取得的结果开始让该领域内的一些人思考用 Transformer 替代 LSTM。这是因为事实上 Transformer 在处理长期依赖方面要优于 LSTM。

Transformer 的编码器-解码器结构使其能完美应用于机器翻译。但如何将其用于句子分类呢?怎么将其用于预训练语言模型,然后再针对其它任务调整这个语言模型呢?(该领域将这些利用了预训练的模型或组件的监督学习任务称为下游任务)。

OpenAI Transformer:为语言建模训练 Transformer 解码器事实证明,不需要整个 Transformer,就能将迁移学习和可调节的语言模型用于 NLP 任务。只需要 Transformer 的解码器就够了。解码器是很好的选择,因为这是语言建模的自然选择(预测下一个词),因为它是为得到未来 token 的掩码而构建的------对逐词生成翻译任务而言,这是很有价值的特征。

OpenAI Transformer 是由 Transformer 的解码器堆栈构成的。

该模型堆叠了 12 个解码器层。因为其中没有编码器,所以这些解码器层不会有编码器-解码器注意子层(attention sublayer),而原本的 Transformer 解码器层中有这样的注意子层。但是,OpenAI Transformer 中仍然有自注意层。

使用这种结构,可以继续在同一语言建模任务上训练该模型:使用大规模(无标注)数据集预测下一个词。丢给它 7000 本书的文本让它学习就行了!对这类任务而言,书籍是很棒的数据,因为书籍能让模型学习关联相关的信息,即使这些信息已被大量文本分隔开------当你用微博或文章等短篇幅文本进行训练时,很难学到这类关联属性。

OpenAI Transformer 现在已经准备好基于 7000 本书构成的数据集来预测下一个词了。

迁移学习到下游任务

现在 OpenAI Transformer 已经过了预训练,其中的层也经过了调节,可以合理地处理语言,可以开始将其用于下游任务了。首先来看看句子分类(将邮件消息分类为「垃圾邮件」或「非垃圾邮件」)。

如何使用预训练后的 OpenAI Transformer 来分类句子

OpenAI 的论文罗列了一些输入变换,用以处理不同类型的任务的输入。下图即来自该论文,展示了用于执行不同任务的模型结构和输入变换。

是不是很巧妙?

BERT:从解码器到编码器

OpenAI Transformer 为提供了基于 Transformer 的可微调的预训练模型。但在这种从 LSTM 到 Transformer 的过度中却缺失了一些东西。ELMo 的语言模型是双向的,而 OpenAI Transformer 仅训练一个单向语言模型。能否构建出一种既能向前看也能向后看(即同时基于上文和下文)的基于 Transformer 的模型?

BERT 巧妙的将语言建模任务掩盖输入中 15% 的词,并让模型来预测缺失的词。

寻找合适的任务来训练 Transformer 编码器堆栈是一个复杂的难题,BERT 通过采用来自早期文献的「有掩码的语言模型」概念而解决了这一难题(在早期文献中被称为完形填空任务(Cloze))。

除了掩蔽 15% 的输入,BERT 还混用了一些方法来改善模型之后的调整。有时候它会随机将一个词替换成另一个词,然后让模型预测该位置的正确词。

两句子任务

如果你回头看看 OpenAI Transformer 用以处理不同任务的输入变换,你会发现某些任务需要模型给出有关两个句子的一些知识(比如它们是否只是彼此的复述版本?给定一个维基百科词条以及涉及该词条内容的问题作为输入,能否回答该问题?)

要让 BERT 更好地处理多个句子之间的关系,其预训练过程还包括一项额外任务:给定两个句子(A 和 B),B 是否有可能是 A 后面的句子?

BERT 预训练的这个次级任务是一个两句子分类任务。这幅图中的 token 化过度简化了一些,因为 BERT 实际上是使用 WordPieces 作为 token,而不是使用词------因此某些词会被分解成更小的块。

针对特定任务的模型

BERT 论文展示了一些将 BERT 用于不同任务的方法。

将 BERT 用于特征提取

微调方法并不是使用 BERT 的唯一方式。和 ELMo 一样,你也可以使用预训练后的 BERT 来创建语境化的词嵌入。然后你可以将这些嵌入输入你已有的模型------论文表明,在命名实体识别等任务上,该过程得到的结果并不比微调 BERT 差很多。

哪种向量最适合用作语境化嵌入?我认为这取决于具体任务。这篇论文考察了 6 种选择(对比得到了 96.4 分的微调模型):

实际使用 BERT

尝试 BERT 的最好方式是动手过一遍使用 Cloud TPU 的 BERT 微调,参考托管在 Google Colab 上的笔记:https://goo.gl/vaZRH1。如果你之前从未用过 Cloud TPU,这就是你的上手时机!这些 BERT 代码也适用于 TPU、CPU 和 GPU。

接下来应该看看 BERT 代码库中的代码:https://github.com/Google-research/bert

  • 模型构建在 modeling.py 之中(BertModel 类),基本上与原始的 Transformer 编码器完全一样。
  • run_classifier.py 是一个微调过程的示例。它也构建了这个监督式模型的分类层。如果你想构建自己的分类器,请查阅该文件中的 create_model() 方法。
  • 其中提供了几个可下载的预训练模型。BERT Base 和 BERT Large 模型都有,涵盖英语和汉语等语言,还有一个在维基百科上训练的覆盖了 102 种语言的多语言模型。
  • BERT 并不将词视为 token,而是将 WordPieces 视为 token。tokenization.py 是 token 化算法,可将词转换成适用于 BERT 的 WordPieces。

你还可以查看 BERT 的 PyTorch 实现。AllenNLP 库使用了这一实现,让任何模型都可以使用 BERT 嵌入。

  • BERT 的 PyTorch 实现:https://github.com/huggingface/pytorch-pretrained-BERT
  • AllenNLP:https://github.com/allenai/allennlp

原文链接:https://jalammar.github.io/illustrated-bert/


,
    推荐阅读
  • 突触名词解释(突触是什么意思)

    突触名词解释突触是指一个神经元的冲动传到另一个神经元或传到另一细胞间的相互接触的结构。突触是神经元之间在功能上发生联系的部位,也是信息传递的关键部位。在光学显微镜下,可以看到一个神经元的轴突末梢经过多次分支,最后每一小支的末端膨大呈杯状或球状,叫做突触小体。这些突触小体可以与多个神经元的细胞体或树突相接触,形成突触。从电子显微镜下观察,可以看到,这种突触是由突触前膜、突触间隙和突触后膜三部分构成。

  • 《守望先锋》对战局影响大招top一览 守望先锋对局战绩

    今天小编要为大家带来的是玩家“黑呦酱”分享的《守望先锋》对战局影响大招top一览,感兴趣的玩家赶紧一起来看看吧!守望先锋大招分为四类,控制类,自身BUFF类,辅助类以及伤害类,由于伤害类大部分使用大招时,本体无法进行有效杀伤,且控制类及自身BUFF类需要其他技能的配合,so,此间因素也要加入考量。

  • 运动后喝黑咖啡还能燃脂吗 运动时喝黑咖啡会加快燃脂吗?

    2、运动过程中身体脂肪会加速燃烧,从而具有一定减肥作用;而黑咖啡热量比较小,加上其中含有大量的咖啡因以及维生素、纤维素物质,适量喝可以促进人体肠胃蠕动,加速脂肪代谢分解,对减肥具有促进作用。

  • 斯威汽车质量怎么样(斯威质量好不好)

    2018年6月起,斯威“品质特工队”以四大火炉的重庆作为起点,途径海南、吐鲁番、格尔木三地,历时近一年进行了数十万公里极限环境适应性试验。极端干燥高温环境下,常见车内温度往往会狂飙到60℃以上,而在斯威G01的车厢里,却始终能够保持清新凉爽的状态。一整套严酷考验下来,斯威G01的性能表现完全得以充分认证。这样一算,斯威G01差不多完成了近百万公里的专业级严酷考验。

  • 春天兰花怎么养 春天兰花怎么养浇水

    白墨兰花哪个品种最好白墨兰花是墨兰的珍贵变异品种假鳞茎椭圆形,已有数百年栽培历史,流传至今,不下十数个品种,它叶色莹润、体态优雅、幽香静远、且抗病,白墨兰花比较好的品种一般分企剑和软剑两个品系。什么兰花开花最香兰花品种很多,按花香来排,在兰花界春兰居首,惠兰次之,随后便是建兰、墨兰和寒兰,春兰的花香味最正宗,持久性也极强。

  • 奔驰e300l前进挡总共有几个(你看了奔驰22款E300L升级这套原厂HUD抬头显示效果觉得怎么样)

    从行车安全的角度来考虑,加装一台HUD是非常有必要的。HUD的全称是HeadUpDisplay,中文翻译过来就是抬头显示器。今天星骏汇小陈通过以上的产品配件图了解,我们看到这台奔驰22款E300L升级HUD抬头显示所需要更换的配件有,抬显仪器,高配仪表盖板,高配仪表电脑,雨量传感器,空调管升级HUD抬头显示把仪表台上的那一块盖板换掉,换成高配的预留好显示器孔位的盖板,装上显示器,从而使仪表显示的内容投射到挡风玻璃上面。

  • 儿童葫芦丝表演(通城千人共奏葫芦丝)

    儿童葫芦丝表演香城都市报讯 10月27日,通城县隽水中学参加湖北省“黄鹤杯”美育节节目视频录制现场,七、八年级千名学生,同奏乐曲《龙的传人》。该校相关负责人介绍,本学期,每天下午预备铃响5分钟,七、八年级各班集体合奏葫芦丝。丝竹声声,已渐成校园一道靓丽的风景线。近年来,该校贯彻落实社会主义核心价值观,注重未成年人思想道德建设,坚持开设中华传统和特色民族特色教育课程,促进学生“德智体”全面发展。

  • 鸡娃时代孩子的成长之道(与其1岁就开始鸡娃)

    出生时大脑发育已经完成25%,1岁完成了50%,3岁完成了60%,6岁达到90%。现在小学虽然是零基础入学,取消了统一考试,但是它对学生的要求并没有降低。吃够了佛系养娃的亏,橙子家的老二断然不肯再佛系养了。北京卫视于2018年摄制的纪录片《起跑线》中,有一个7岁的北京女孩令人印象深刻。她的家庭,在北京三环内有一套房,一辆车。妈妈认为,孩子从小培养兴趣,靠的是父母的指引。

  • 环氧树脂的作用与用途(环氧树脂有什么作用与用途)

    环氧树脂的作用与用途具有优良的物理和电绝缘性能,强度高、收缩性低,耐腐蚀以及有高绝缘的优势,所以被称为万能胶。电器、电机绝缘封装件的浇注。从常压浇注、真空浇注已发展到自动压力凝胶成型。长时间接触胶水时,有人会有细微的皮肤过敏和细微瘙痒疼痛的情况,建议在运用时戴上防护手套,如果出现了这样的情况,需要用酒精擦洗,然后用清水冲洗干净。

  • 明月曾照江东寒剧情(明月曾照江东寒剧情介绍)

    明月曾照江东寒剧情剧情简介:美少女战清泓是武林副盟主战破敌之女,从小被父亲禁止涉及江湖事。十年一期的武林大会即将来临,战清泓瞒着家人偷跑下山,立志夺取武林盟主之位。战清泓与温宥也开始互生情愫,奈何最终被世俗礼法所阻碍。与此同时,江湖上风起云涌,战清泓发现自己自幼背诵的家训竟是人人趋之若鹜的第一神功《鹤羽剑法》。