首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【技术分享】非常适合构建企业本地知识库的预训练深度学习模型BERT讲解

背景介绍

BERT(Bidirectional Encoder Representations from Transformers)是一种预训练的深度学习模型,已被广泛应用于各种自然语言处理(NLP)任务。本质上是一种只有编码器的Transformer

在没有BERT之前一般使用预训练好的模型来抽取词、句子的特征例如 word2vec,训练好了就一直用,不会更新预训练好的模型,需要构建新的网络来抓取新任务需要的信息,Word2vec只看了一个方向忽略了时序信息语言模型。

然而,BERT的出现极大地改变了这一现状。BERT使用了Transformer架构来编码上下文中的单词,Transformer算法基于多头注意力(Multi-Head attention)机制,而Bert又堆叠了多个Transfromer模型,采用了预训练+微调的方式来解决各种NLP任务,这种方式可以不断更新并优化模型的表现。

BERT的全称即"双向编码表示转换器",这种双向特性意味着模型能够同时考虑单词左右两侧的上下文信息,这是word2vec和单向语言模型所无法做到的。由于其双向性,BERT能够捕获到比这些早期模型更丰富和更复杂的语义信息。

BERT模型在预训练阶段就使用了海量的文本数据,这使得它能够学习到丰富的语义和句法知识。而且,预训练的BERT模型通过一个额外的输出层来进行微调,适用性更广,并且不需要做更多重复性的模型训练工作使其适应新的任务或者通过在特定任务数据上进行微调来进一步优化其表现,可以直接用于各种NLP任务。这种预训练+微调的方式既节省了大量的计算资源,又可以不断更新和优化模型。

目前,预训练的语言模型主要有两种方式,第一种是基于特征的语言模型,比如ELMo模型,另一种是基于fine-tuning的语言模型,如OpenAI GPT模型,而Bert模型对这两种类型取长补短,在各种语言任务中取得优异的表现。

技术讲解

如下图,在NLP领域也采用类似机器视觉的方法,BERT是基于微调的预训练模型, 是利用大量无标签的文本数据来学习丰富的语言知识。在预训练阶段,模型通过自我监督的方式来学习和理解词汇、句法、语义等语言元素,使得它能够生成对文本的深层次和高质量的表示。

通过预训练,模型已经从大量的文本数据中学习到了丰富的语言知识,包括词汇的意义、词语之间的关系、句子的结构等等。这些信息被模型以参数的形式存储起来,并可以被用来理解和生成新的文本。

当我们要使用这个预训练模型来解决一个新的 NLP 任务时,例如文本分类、实体识别、情感分析等,我们并不需要从头开始训练一个新的模型,而只需要在预训练模型的基础上进行微调。微调的过程通常是在具有标签的训练数据上进行,以使得模型能够适应新的任务。

对于新的任务,我们通常只需要在预训练模型的基础上添加一个与任务相关的输出层。例如,对于文本分类任务,我们可以添加一个全连接层和 softmax 函数来输出每个类别的概率。这个输出层的参数在微调过程中会被训练,而预训练模型的其他参数也会被微调,以使得模型能够在新的任务上表现得更好。

在许多自然语言处理(NLP)任务中,原有的Transformers 编码作为输入解码作为输出,然而BERT(Bidirectional Encoder Representations from Transformers)本质上是一种只有编码器的Transformer,他的创新设计允许将要句子分割为句子对输入。

模型的输入不再是单独的句子,而是一对句子。这两个句子会连续地被输入到模型中,在句子的开头加上[CLS]中间通过一个特殊的分隔符(在BERT中,这个分隔符是"[SEP]")来区分。模型会学习到这两个句子之间的关系,这对于理解问答、自然语言推理等任务非常重要。

为了让模型能够区分这一对句子中的每一个,BERT 在输入的句子对中加入了一个额外的“片段嵌入”(也被称为“句子嵌入”)。这是一个可学习的向量,用来表示这个句子是属于第一个句子还是第二个句子。这个片段嵌入会被添加到每个句子的每个词的嵌入向量中,使得模型在处理词汇时能够知道它是来自哪个句子。

此外,BERT 还使用了“位置编码”来帮助模型理解句子中的词的顺序。这是因为 BERT 使用的 Transformer 结构在处理输入时是无序的,也就是说,它默认情况下并不知道词之间的顺序。为了解决这个问题,BERT 在每个词的嵌入向量中添加了一个“位置编码”,这个编码是根据词在句子中的位置生成的。这样,即使 Transformer 是无序的,也能通过位置编码来理解词的顺序。

BERT (Bidirectional Encoder Representations from Transformers) 在预训练阶段利用了两种无监督学习任务来训练其参数。

第一个任务是被称为"Masked Language Model"(MLM)的任务。简单地说,就是在输入的句子中随机选择一部分单词并将其替换或隐藏,然后让模型去预测被隐藏的单词原本是什么,你可以理解为做完形填空。具体而言,BERT 在预训练过程中,会随机选取输入句子中的15%的单词进行处理为"[MASK]", 在微调任务中为了不让模型看到[MASK]就去预测,80%的这些单词被替换为特殊的 "[MASK]" 符号,表示这些位置的单词需要被模型预测;10%的单词会被替换为句子中的其他随机单词;最后10%的单词会保留原样。这种策略旨在让模型学习到词汇在上下文中的分布表示,同时,即使有10%的单词被随机替换,也不会显著影响模型学习到正确的上下文理解。

第二个任务是 "Next Sentence Prediction"(NSP)。在这个任务中,模型需要预测两个输入句子是否是连续的文本。对于一对输入句子 A 和 B,模型需要判断 B 是不是紧跟在 A 后面的句子。在选择 B 的过程中,有50%的概率 B 确实是 A 的后续句子(这种情况下,模型的目标是预测 "IsNext" 标签),另有50%的概率 B 是从语料库中随机抽取的一个句子(这种情况下,模型的目标是预测 "NotNext" 标签)。通过这种预训练任务,BERT 能够学习到句子之间的连续性,这对于理解和生成连贯的文本,以及在问答系统(QA)和自然语言推理(NLI)等任务中理解句子间的关系非常有用。

因为BERT使用的Transformer结构基于自注意力机制,它能够在处理句子时考虑到所有单词之间的关系,而不仅仅是它们在句子中的相对位置。这使得BERT能够应用于各种各样的下游任务,包括分类任务、序列标注任务、问答任务等。

在处理一对句子(A和B)的任务时,一般的做法是先分别对两个句子进行编码,然后再计算它们之间的交叉注意力。但是BERT采取了一种不同的做法,它将两个句子作为一个整体,使用自注意力机制来对它们进行编码。这使得BERT在处理句子对任务时能够同时考虑到两个句子中所有单词之间的关系。

句子对A和B可以是各种不同类型的对,例如意思相同的两种表述、蕴涵的假设-前提对、问答系统中的问题-回答对,或者是文本分类或序列标注任务中的文本对。无论这些句子对的具体类型是什么,BERT都可以通过微调来适应它们。

在输出端,BERT会生成每个输入词的一个向量表示(token表示),这些表示可以用于序列标注或问答系统等分词级的任务。此外,BERT还会生成一个特殊的"[CLS]"向量表示,这个表示被用来捕捉整个句子或句子对的全局信息,可以用于分类任务,如蕴涵分析或情感分析等。

应用方案

我们假设目标是构建一个能处理和回答与企业相关问题的知识库系统。我们将使用BERT模型,需要做的工作大致如下:

1. 数据收集和预处理:

首先,收集企业内部所有相关的文本数据,可能包括报告、手册、电子邮件、产品文档、客户服务记录等。对所有的数据进行预处理,包括去除空值、重复值、标点符号,进行大小写转换,处理缩写等。

2. 数据标注:

为了进行有监督的机器学习,需要对数据进行标注。可以使用企业内部的专业人员或者利用众包服务进行人工标注。标注的任务可能包括:对问题和答案进行配对,对实体(如产品名、人名等)进行标注,对情感(如正面、负面)进行标注等。

3. BERT模型训练:

在预处理和标注过的数据上训练BERT模型。这需要大量的计算资源,并可能需要持续几天甚至几周。如果没有足够的本地计算资源,可以考虑使用云计算服务。

4. 模型微调:

在特定任务上对模型进行微调,例如问答任务、实体识别任务或情感分析任务。微调是一个迭代过程,需要多次尝试和调整模型参数,以获得最好的性能。

5. 模型集成:

将训练和微调后的BERT模型集成到企业的IT系统中。这可能包括搭建一个用户界面,用户可以通过这个界面向知识库提问,并从知识库中得到答案。

6. 模型更新和维护:

随着时间的推移和企业数据的增长,需要定期更新和维护BERT模型,以确保其性能和准确性。

场景应用:

员工可以通过内部网站向知识库提问,例如:“新员工入职手续是什么?”或者“我们的产品X有什么新特性?”等。知识库系统会分析问题,搜索相关的答案,并返回最相关的答案。

这个方案需要大量的人力和计算资源,但是一旦建立,将大大提高企业的工作效率,节省大量的人力资源,如果我们不备投入能力,使用GPT,在结合本地知识库可能是比较好的方案。

添加微信获得支持

微信  findingnoone

  • 发表于:
  • 原文链接https://page.om.qq.com/page/Ooh1IgwWf5wMcN2zwkuQx4Hw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券