96SEO 2026-02-23 15:13 4
。

与最近的语言表示模型不同(Peters等人2018a;Radford等人2018)BERT旨在通过在所有层中对左右上下文进行联合条件反射从未标记的文本中预训练深度双向表示。
因此预训练的BERT模型可以通过一个额外的输出层进行微调从而为广泛的任务(如问答和语言推理)创建最先进的模型而无需对特定于任务的架构进行大量修改。
提了与gpt和ELMo的区别——gpt单向BERT双向ELMo是RNN架构BERT是transformer架构使得BERT微调更简单且有效
BERT在概念上简单经验上强大。
它在11个自然语言处理任务上获得了新的最先进的结果包括将GLUE得分提高到80.5%(绝对提高7.7%)将多项准确性提高到86.7%(绝对提高4.6%)将SQuAD
v1.1问答测试F1提高到93.2(绝对提高1.5分)和SQuAD
语言模型预训练已被证明对改善许多自然语言处理任务是有效的(Dai
2015;Williams等人2018)和释义(Dolan和Brockett,
2005)其目的是通过整体分析来预测句子之间的关系以及词语级任务如命名实体识别和问答其中需要模型在标记级产生细粒度输出(Tjong
其实在BERT之前nlp的预训练想法就比较成熟了只是BERT让预训练在nlp火出圈了
将预训练的语言表示应用于下游任务有两种现有策略:基于特征和微调。
基于特征的方法如ELMo
(Peters等人2018a)使用特定于任务的架构其中包括预训练的表示作为附加特征。
微调方法如生成式预训练转换器(OpenAI
(Radford等人2018)引入了最小的任务特定参数并通过简单地微调所有预训练参数来对下游任务进行训练。
这两种方法在预训练过程中具有相同的目标函数它们使用单向语言模型来学习一般的语言表示。
以ELMo为代表的基于特征的预训练模型将预训练的表示作为额外特征输入网络辅助训练
我们认为当前的技术限制了预训练表征的力量特别是对于微调方法。
主要的限制是标准语言模型是单向的这限制了在预训练期间可以使用的体系结构的选择。
例如在OpenAI
GPT中作者使用左-右架构其中每个token只能关注Transformer自注意力层中的前一个token(Vaswani
2017)。
这种限制对于句子级任务来说是次优的并且在将基于调优的方法应用于诸如问答之类的token级任务时可能非常有害在这些任务中结合两个方向的上下文是至关重要的。
认为单向限制了模型能力不管是在句子级还是单词级任务上双向看句子也理应是合理的
在本文中我们通过提出BERT来自transformer的双向编码器表示来改进基于微调的方法。
1953)启发的“掩模语言模型”(MLM)预训练目标缓解了前面提到的单向性约束。
屏蔽语言模型随机屏蔽输入中的一些标记目标是仅根据其上下文预测被屏蔽词的原始词汇表id。
与左右语言模型预训练不同MLM目标使表示能够融合左右上下文这允许我们预训练深度双向Transformer。
除了屏蔽语言模型我们还使用了“下一个句子预测”任务联合预训练文本对表示。
句子级上随机挑两个句子让模型判断这两个句子是连着的还是随机抽取的
我们证明了双向预训练对语言表征的重要性。
与Radford等人(2018)使用单向语言模型进行预训练不同BERT使用屏蔽语言模型来实现预训练的深度双向表示。
这也与Peters等人(2018a)形成对比后者使用独立训练的从左到右和从右到左的LMs的浅连接。
我们表明预训练的表示减少了对许多重型工程任务特定架构的需求。
BERT是第一个基于调优的表示模型它在大量句子级和单词级任务上实现了最先进的性能优于许多特定于任务的架构。
BERT在11个NLP任务中推进了最先进的技术。
代码和预训练模型可在https://github.com/
几十年来学习广泛适用的单词表示一直是一个活跃的研究领域包括非神经和神经方法。
预训练词嵌入是现代自然语言处理系统的一个组成部分与从零开始学习的嵌入相比它提供了显著的改进。
为了预训练词嵌入向量使用了从左到右的语言建模目标以及在左右上下文中区分正确和不正确单词的目标。
这些方法已经被推广到更粗的粒度如句子嵌入或段落嵌入。
为了训练句子表示之前的工作使用目标对候选下一个句子进行排序根据前一个句子的表示从左到右生成下一个句子单词或者去噪自动编码器派生的目标。
ELMo及其前身将传统的词嵌入研究推广到了一个不同的维度。
他们从从左到右和从右到左的语言模型中提取上下文敏感的特征。
每个标记的上下文表示是从左到右和从右到左表示的连接。
当将上下文词嵌入与现有的任务特定架构集成在一起时ELMo在几个主要的NLP基准测试(包括问答、情感分析和命名实体识别)中提升了技术水平。
Melamud等人提出通过使用lstm从左右上下文中预测单个单词的任务来学习上下文表示。
与ELMo类似他们的模型是基于特征的而不是深度双向的。
Fedus等人表明完形任务可以用来提高文本生成模型的鲁棒性。
与基于特征的方法一样第一种方法只从未标记的文本中预训练单词嵌入参数。
最近产生上下文token表示的句子或文档编码器已经从未标记的文本中进行了预训练并针对监督的下游任务进行了微调。
这些方法的优点是很少有参数需要从头学习。
至少部分由于这一优势OpenAI
GPT在GLUE基准测试的许多句子级任务上取得了以前最先进的结果。
从左到右的语言建模和自动编码器目标已经被用于预训练这样的模型。
也有研究表明大型数据集的监督任务可以有效转移例如自然语言推理(Conneau等人2017)和机器翻译(McCann等人2017)。
计算机视觉研究也证明了从大型预训练模型迁移学习的重要性其中一个有效的方法是对使用ImageNet预训练的模型进行微调(Deng
在有标号的数据集上预训练后放到其他下游任务中的效果并不理想一方面是可能两个任务差别比较大(与CV领域比较)另一方面可能是数据量还不够大
BERT之后的一些工作证明了nlp中在没有标号的大量数据集上训练成的模型比有标号的相对小点的数据集上训练的效果更好
我们将在本节中介绍BERT及其详细实现。
在我们的框架中有两个步骤:预训练和微调。
在预训练过程中模型在不同的预训练任务上对未标记数据进行训练。
对于微调首先使用预训练的参数初始化BERT模型然后使用来自下游任务的标记数据对所有参数进行微调。
每个下游任务都有单独的微调模型即使它们是用相同的预训练参数初始化的。
图1中的问答示例将作为本节的运行示例
预训练时输入没有标号的句子对微调时利用每个任务的有标号的数据训练
BERT的一个显著特征是其跨不同任务的统一架构。
预训练的体系结构和最终的下游体系结构之间的差别很小。
BERT的模型架构是一个多层双向transformer编码器基于Vaswani等人(2017)描述的原始实现并在tensor2tensor库中发布由于Transformer的使用已经变得普遍并且我们的实现几乎与原始版本相同因此我们将省略对模型体系结构的详尽背景描述并将读者推荐给Vaswani等人(2017)以及优秀的指南例如“注释的Transformer”。
在这项工作中我们表示层数(即transformer块)为L隐藏大小为H自注意头的数量为A。
Transformer使用约束自注意力其中每个token只能关注其左侧的上下文。
BERT的模型复杂度与层数L是线性关系与宽度H是平方关系因此BERT
为了使BERT处理各种下游任务我们的输入表示能够在一个token序列中明确地表示单个句子和一对句子(例如h
在整个工作中一个“句子”可以是一个连续文本的任意跨度而不是一个实际的语言句子。
“序列”指的是BERT的输入token序列它可以是一个句子或两个句子组合在一起。
BERT只有一个编码器所以为了能处理两个句子需要把两个句子变成一个序列
2016)和30,000个标记词汇表。
每个序列的第一个标记总是一个特殊的分类标记([CLS])。
与此token对应的最终隐藏状态用作分类任务的聚合序列表示。
句子对被打包成一个单一的序列。
我们用两种方法区分句子。
首先我们用一个特殊的token([SEP])将它们分开。
其次我们为每个标记添加一个学习嵌入表明它是属于句子a还是句子b。
如图1所示我们将输入嵌入表示为E特殊[CLS]标记的最终隐藏向量表示为c2rh第i个输入标记的最终隐藏向量表示为Ti
对于给定的标记其输入表示是通过将相应的token、段和位置嵌入相加来构建的。
图2显示了该结构的可视化。
wordpiece假设按照空格切词一个词作为一个token因为数据量较大导致词典特别大导致计算量过大如果一个词在整个序列中出现的概率不大就把这个词切开看它的子序列如果它的某个子序列是一个词根且出现概率较大则只保留这个子序列。
这样就把相对长的一个词切成了很多段且这些片段经常出现这样就能用小词典表示大文本
序列的第一次词永远是[CLS]BERT希望[CLS]最后的输出代表整个序列的信息。
因为BERT沿用了transformer的自注意力机制所以即使放在第一个也能看见整个序列
为了把句子从序列中分开每个句子的最后加一个[SEP]或学一个嵌入层区分句子是第一个还是第二个
每个词进入BERT的向量表示词本身的embedding在哪一个句子的embedding在句子位置的embedding
(2018)我们不使用传统的从左到右或从右到左的语言模型来预训练BERT。
相反我们使用本节中描述的两个无监督任务来预训练BERT。
此步骤如图1的左侧所示。
直观地说我们有理由相信深度双向模型严格地比从左到右的模型或从左到右和从右到左的浅连接模型更强大。
不幸的是标准条件语言模型只能从左到右或从右到左进行训练因为双向条件反射将允许每个单词间接“看到自己”并且该模型可以在多层上下文中轻松预测目标单词。
为了训练深度双向表示我们只是随机屏蔽一定比例的输入token然后预测这些被屏蔽的token。
我们将这一过程称为“掩码LM”(MLM)尽管在文献中它通常被称为完形填空任务(Taylor,
1953)。
在这种情况下与掩码token相对应的最终隐藏向量被输入到词汇表上的输出softmax中就像在标准LM中一样。
在我们所有的实验中我们随机屏蔽了每个序列中15%的WordPiece
虽然这允许我们获得双向预训练模型但缺点是我们正在创建预训练和微调之间的不匹配因为[MASK]token在微调期间没有出现。
为了减轻这种情况我们并不总是用实际的[MASK]token替换“被屏蔽”的单词。
训练数据生成器随机选择15%的标记位置进行预测。
如果选择了第i个token我们用(1)80%的时间使用[MASK]token(2)10%的时间使用随机token(3)10%的时间使用未更改的第i个token替换第i个token。
然后利用Ti来预测具有交叉熵损失的原始token。
我们在附录C.2中比较了这个过程的变化。
有个问题是在做掩码时把词元替换成一个特殊的token叫作[Mask]但是在微调时是没有[Mask]的导致预训练与微调时见到的数据不太一样
许多重要的下游任务如问答(QA)和自然语言推理(NLI)都是基于理解两个句子之间的关系这是语言建模无法直接捕获的。
为了训练一个理解句子关系的模型我们对一个二值化的下一个句子预测任务进行了预训练该任务可以从任何单语语料库中轻松生成。
具体来说当为每个预训练示例选择句子A和B时50%的时间B是A之后的下一个句子(标记为IsNext)
50%的时间B是语料库中的随机句子(标记为NotNext)。
如图1所示C用于下一个句子预测(NSP)尽管它很简单但我们在5.1节中演示了针对该任务的预训练对QA和NLI都非常有益。
这里的flightless是不会飞的意思但是这个词不常见所以wordpiece用##把它切开了
NSP任务与Jernite等人(2017)和Logeswaran和Lee(2018)中使用的表征学习目标密切相关。
然而在之前的工作中只有句子嵌入被转移到下游任务中BERT将所有参数转移到下游任务中以初始化任务端模型参数。
预训练过程在很大程度上遵循了已有的语言模型预训练文献。
对于预训练语料库我们使用BooksCorpus(800万字)(Zhu
对于维基百科我们只提取文本段落而忽略列表、表格和标题。
为了提取长连续序列使用文档级语料库而不是像十亿词基准(Chelba
微调是直接的因为Transformer中的自注意机制允许BERT对许多下游任务建模——无论它们涉及单个文本还是文本对——通过交换适当的输入和输出。
对于涉及文本对的应用程序常见的模式是在应用双向交叉注意之前对文本对进行独立编码如Parikh等人(2016);Seo等人(2017)。
BERT使用自注意机制来统一这两个阶段因为用自注意编码一个连接的文本对有效地包括两个句子之间的双向交叉注意。
BERT与Encoder-Decoder框架的区别BERT能双向看但是Encoder不能看到Decoder中的东西BERT做不了机器翻译
对于每个任务我们只需将特定于任务的输入和输出插入到BERT中并对所有参数进行端到端的微调。
在输入端来自预训练的句子A和句子B类似于:(1)释义中的句子对(2)蕴涵中的假设-前提对(3)问答中的问题-段落对以及(4)退化的文本-?配对文本分类或序列标记。
在输出端token表示被输入输出层用于token级任务如序列标记或问题回答而[CLS]表示被输入输出层用于分类如蕴意或情感分析。
根据下游任务设计输入输出模型不需要怎么变关键是把输入改成需要的句子对
与预训练相比微调相对便宜。
从完全相同的预训练模型开始论文中的所有结果可以在单个Cloud
TPU上最多1小时内复制或者在GPU上复制几个小时我们将在第4节的相应子节中描述特定于任务的详细信息。
详情见附录A.5。
句子层面的任务BERT把[CLS]最后的向量拿出来学习一个输出层W放进去最后softmax得到标号
QA任务判断词元是不是答案的开头或结尾学两个向量S和E分布对应答案开始的概率和答案结束的概率。
具体来说就是用第一句话中的每个词元与第二句话中的每个词语相乘再softmax
当对SWAG数据集进行微调时我们构建了四个输入序列每个序列包含给定句子(句子A)和可能的延续(句子B)的连接。
引入的唯一特定于任务的参数是一个向量其与[CLS]标记表示C的点积表示每个选择的分数该分数用softmax层进行规范化。
假设去掉下一个句子的预测假设从左到右看假设加上一个双向的LSTM
人们早就知道增加模型大小将导致机器翻译和语言建模等大规模任务的持续改进表6所示的训练数据的LM困惑度证明了这一点。
然而我们相信这是第一个令人信服地证明扩展到极端模型尺寸也会导致非常小规模任务的巨大改进的工作前提是模型已经得到充分的预训练。
Peters等人(2018b)对将预训练的bi-LM大小从两层增加到四层的下游任务影响给出了不同的结果Melamud等人(2016)顺便提到将隐藏维度大小从200增加到600有所帮助但进一步增加到1000并没有带来进一步的改善。
这两项先前的工作都使用了基于特征的方法——我们假设当模型直接在下游任务上进行微调并且只使用非常少量的随机初始化附加参数时特定于任务的模型可以从更大、更有表现力的预训练表征中受益即使下游任务数据非常小。
假设不用BERT做微调而是把BERT的特征作为静态特征输入进去会怎么样
最近由语言模型迁移学习的经验改进表明丰富的无监督预训练是许多语言理解系统的组成部分。
特别是这些结果使低资源任务也能从深度单向架构中受益。
我们的主要贡献是进一步将这些发现推广到深度双向架构允许相同的预训练模型成功地处理广泛的NLP任务。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback