菜鸟也能训练出优质的大模型,十五分钟后,我会带你把客服问答的准确率提升到百分之九十八,让你的金融审批速度直接四倍秒杀传统系统医疗行业的文本分类啊,做到零误差。 其实你不需要自己造轮子,用 bird 这样的预训练模型,再配合微调,就能快速解决企业里的实际问题。今天我们就来搞懂 bird 的 核心原理和预训练机制。 视频内容一共分为四个部分。首先讲讲 word 这个名字怎么来的,它和 gpt 有 什么不一样,帮你快速建立整体认知。第二部分,搞清楚输入是怎么处理的,这是所有模型读懂文本的第一步。 第三部分,重点拆解 m l m 任务,尤其是那个关键的八十十十野马策略,看看它怎么让模型学会上下文推理。最后聊一聊 n s p 任务, 理解它是怎么帮模型判断句子之间的逻辑关系的。整个流程,从概念到细节,一步步带你吃透 bird 的 核心设计。那我们先从它的名字。 bird 全称是 by directional encoder representations from transformers 听起来有点长,别急,我们拆开来看。 by directional 是 双向的意思,说明它能同时看到一个词的前面和后面的上下文。 encode 指的是它只用了 transformer 架构里面的编码器部分,没有解码器。 representation 呢,是表征,也就是它能够提取词语更丰富的语义信息。最后, from transformer 告诉我们,它的基础其实是 transformer 这个强大的架构。 简单地说, bird 就是 一个基于 transformer 的 双向编码器模型,专门用来学习文本中每个词深层次的语义表示。你看下面这个 t 一 到 t 四代表输入的四个词,它们经过一个多层的 transformer encode 之后啊,就是 bird 的 高维语义向量。 就像我们读一句话的时候,不是孤立地理解每个字,而是会结合前后文去判断这个词的意思。 word 这是模仿了这种人类阅读的方式,把上下文都考虑进去。那么问题来了, word 是 怎么学会这些能力的呢?答案就藏在它的训练流程里面。 word 的 训练其实可以分为两个阶段,预训练 pre training 和微调 fine tuning。 在 预训练阶段, 模型会用海量的无标签的文本,比如说维基百科、新闻文章这些数据去学习通用的语言规律。 这过程呢,不需要人工打标签,但他要完成两个关键任务,一个是 m l m 任务,也就是言码语言建模。另一个是 n s p 任务,句子关系预测。这两个任务我们后面会详细讲,你可以把它想象成一个学生 在上大学之前,先读了一整年的新华字典和各种的经典小说,目的不是为了考试,而是为了培养语感。这个阶段呢,是在积累语言的感悟力。然后到了第二个阶段微调。 这个时候呢,我们把这个已经学了很多知识的模型拿去解决具体的问题,比如情感分析、命名、实体识别,甚至是问答系统。 这就像是那个有语感的学生现在要去参加语文考试了,他不需要从零开始学语法,只需要针对题目做一些调整,就能够表现的非常好。所以 word 的 核心哲学很简单,通过大规模的学习,无间的学习啊,获得通用的语言理解能力,再迁移到具体的下游任务上。 这也是为什么他能在发布后迅速成为 nlp 领域的新基础,因为他真正实现了一次训练,处处可用。 当然,任何技术都不是凭空出现的, bird 之所以能够脱颖而出,是因为它解决了之前很多模型存在的痛点。这里我就对比了 bird 和两种典型的潜在模型, r n 或 l s t m 和 word to back。 我 们先说 r n 和 l s t m 这类训练模型,它们最大的问题是顺序依赖,必须一个一个的读词,不能够并行计算,这就导致了训练速度慢,尤其对长句子来说啊,特别吃力。 而 bird 基于 self attention 机制,可以一次性看到整个句子的所有词,相当于一眼扫完整句话,大大提升了效率。 而且 self attention 还能够捕捉远距离的依赖关系,比如虽然嘚嘚嘚,但是嘚嘚嘚这样的结构,哪怕中间隔了好几个词, bird 也能够准确把握逻辑。 再来说 word to wake, 它有个经典问题,同一个词在不同的语境下意义不一样,比如苹果,可以是水果,也可以是公司。但是 word to wake 给每个词啊,只有一个固定的向量, 这就叫做静态词向量。而 word 呢,它是动态的,它会根据上下文生成不同的表示。比如同样是苹果,在我吃了个苹果,和我在苹果的官网下单,这就是所谓的上下文感知。 所以我们总结一下,或者他的优点很明显,语义理解更深,尤其是在理解复杂句子结构方面,目前仍然是行业的标杆。当然他也有很多的缺点,参数量太多,模型太大,推理时需要更高的更强的算力支持。 这也意味着在移动端或者是实时场景中部署的时候啊,可能需要做压缩或者是优化,但是总的来说,它的优势远远超过了代价,这也是为什么它能成为后来几乎所有大模型的基础之一。好了,那么关于 boss 的 基本概念,训练流程以及它的优势劣势,我们就讲到这里了。 接下来我们要进入更深入的部分, word 是 如何处理输入的,它并不是直接把一句话扔进去,它需要先把文本翻译成一种机器能够理解的形式,这个过程就是我们接下来要讲的输入表示。 具体来说, word 输入是由三个向量相加得到的,也就是所谓的三向量加和模型。这三种向量分别是 token in benny, 代表每一个词或字的基本语义。 section in bending, 这是用来区分两个句子是属于同一个段落还是前后关系。还有 position in bending 告诉模型这个词在句子里面的位置,因为 transform 本身没有顺序感知能力,你可以把它想象成一个三明治的结构, 底层是 token, 中间夹着 segment 和 position, 最后把它们叠到一起送进模型。比如你看下面这张图,每一列呢,分别对应着三个维度的向量, 最终加起来形成一个综合的输入向量。这里还有个小细节要注意, word 会加入两个特殊的标记,首先是 c、 l、 s 放在最前面,用于分类任务, 它的输出通常被用来做整体的判断,还有 s、 e、 p 分 隔两个句子,比如说你在做问答或者是句子匹配的时候就可以用到。 所以你看, word 输入其实不是一个简单的词序列,而是一套精心设计的信息组合包。那么问题来了,这些 tog 是 怎么来的呀?尤其是英文里那些长单词是怎么被拆开的? 那就涉及到下一个关键步骤,分词方法 tokenizer。 不 同语言的处理方法不一样,但是核心目标都一样,把文本切成最小的单位,方便建模。 我们先说英文 word 使用的是 word piece 分 词法,这是一种子词切分策略。举个例子, playing 会被拆成 play 和 ing, 注意后面这个 ing 啊,它前面有两个简号,看到没有,表示它是前一个词的后缀。为什么要这么拆呢?因为很多的生僻词或者是拼写错误的词啊,在训练数据中可能没有见过,这就是所谓的 o o v 问题,如果直接忽略模型就学不会。 而 word piece 通过把词拆成常见的片段,就能够有效缓解这个问题。比如如果你没有见过 planning, 但是你见过 plan 和 ing, 那 模型就能够推断出它的意思。 那我们再来说中文吧。由于中文没有天然的空格来分割,主流的做法呢,是按字级别来切分的。比如说机器学习会被拆成机器学习,虽然看起来有点粗暴,但好处是覆盖全面,而且每个字都有对应的向量。 当然也可以结合 work to wake 的 经验来做出质化提升效果。所以你会发现,无论是英文还是中文, word 都在想办法让模型看得懂更多样化的表达方式。了解了分词之后,我们来实战一下 接下来这个案例呢,会带你一步步看清楚一句普通的话是如何被 word 加工成输入的。大家看啊,这是一个典型的输入案例, a beijing is a beautiful city, e 呢是 i love 倍镜假设我们要判断这两个句子是不是有关联,比如说是否连续啊,或者是否构成问答对,那 bird 是 怎么处理的呢?一共五个步骤。第一步, tognosis, 先分词,并且插入特殊的标记,比如 c l s, 然后 beijing is a beautiful city, 再加一个 s e p i love beijing, 再加一个 s e p。 第二部是 token in bending, 为每个 token 查找对应的语义向量,比如 beijing love city, 都有自己的向量。 第三部是 segment in bending, 为每个 token 打标签,说明它属于哪个句子。比如 a 句的 token 标为零,然后 b 句呢,就标为一。 这样模型就知道哪一部分是第一句话,哪些部分是第二句话。接着第四步, position in bending, 这一步是给每个 token 分 配位置编码,从零开始,比如第一个词的位置零,第二个是一,一直到最后一项,这样模型才能够知道碑径出现在哪里。 最后一步, final summation, 把这三个向量逐个相加,得到最终的输入向量,再送进 transform 编码器。整个过程像你再做一道菜,先备料就是分词,再调味,也就是加语义段落,加位置信息,最后混合炒熟,就是相加送入模型。 这个机制看似简单,却让 but 能够同时理解词语的含义,句子结构和相对位置,为后续的预训练任务打下坚实的基础。 我们刚刚看到 word 在 输入阶段做了非常精细的准备啊,把一句话变成了一个包含语义位置和句段信息的向量训练。那么接下来的问题是,它到底是怎么学语言的呢? 这就引出了 word 的 核心训练机制之一,野马语言建模 masked language model, 简称 m l m。 要理解 m l m, 我 们要先来对比两种常见的语言建模方式。左边是自回归模型,比如说 g p t 系列,它的思路很简单,从左到右,一个词一个词的预测,比如说句子 a b, 然后问号模型会根据前面的词去猜下一个词。这种模式就像我们说话一样,顺着说下去。 那它有一个致命缺点啊,只能看到左边的信息,看不到右边。所以呢,它是单向的,信息流动也是单向的,而右边是字编码模型,也就是 word 所采用的方式,它的核心思想是 context a, predict context b。 你 看这个箭头啊,是什么方向的啊? 也就是说呢,它会随机遮住一个词,然后让模型同时利用这个词的前面和后面的上下文来预测它是什么,这就是所谓的双向模型。这就好比你在做完形填空的时候,老师把一句话中的某个词划掉了, 你要结合前后的句子来猜出那个词。所以 bird 的 本质是通过双向注意力机制全方位捕捉上下文语义,这也是它能够理解复杂语句的关键所在。那 bird 是 怎么完成这个完形填空的任务的呢?比如说这句话, beijing is, 然后 mask beautiful city 模型需要结合北京 is beautiful city 这些上下文来猜出中间这个被遮住的那个词应该是,呃,为 了训练模型具备这种能力,作者会在输入训练中随机屏蔽百分之十五的 token。 也就是说,每句话里大约会有百分之十五的词被替换成 mask 符号。 这个比例可不是随便定的哦,太少的话模型学不到东西,太多的话又会影响整体的语言连贯性。这个百分之十五是一个经过实验验证的黄金比例。 在这里有个关键问题,在微调阶段,我们不会使用 mask 标记,因为在真实的场景中也不会有这种符号。如果模型在预训练的时候过度依赖这个特殊标记,那到了下一个任务可能会表现不佳。 那为了解决这个问题, boss 设计了一个非常聪明的策略,八十十十野马策略。这个策略的核心就是防止模型对 mask 产生路径依赖。具体做法就是,对于那百分之十五被选中的 token, 不 全部替换为 mask, 而是按以下比例来处理。其中百分之八十替换为 mask 符号,这是最常见的形态,用来训练模型学会猜词,然后百分之十替换为一个随机的词汇,比如说把 a 换成的或者是 this。 这样模型必须真正理解上下文,才能够判断出原词应该是什么。剩下的百分之十啊,就保持原词不变,这个词还是原来的词,但模型仍然还要预测它,这相当于给模型压力测试,即使没有被遮住,也要能够准确的识别出来。 那么这样做有什么好处呢?那就是让模型不再死记硬背。 mask 的 规律可以提高泛化能力,让它在没有 mask 的 情况下也能够做出正确预测,而且更加贴近真实的应用场景。 这也正是 word 设计上的精妙之处,既保证了训练效果,又兼顾了实际应用的鲁棒性。好了,当模型完成了这些猜词任务之后,他是怎么知道自己猜的对不对的呢?答案就藏在最后一步,训练与输出预测。 这是一个典型的模型预测链条,看这里,当 burst 处理完输入序号之后,它会对每一个遮盖的位置输出一个向量,这个向量就代表了模型对该位置所有可能词汇的概率分布。接下来呢,这个向量会进入一个带有 softmax 的 前缀神经网络, 最终输出一个词表上的概率分布。比如 er 的 概率是零点七, the 是 零点二,其他词都很低。 然后模型会计算这个预测结果和真实值之间的交叉伤,损失目标是通过梯度下降,不断缩小预测值和真实值之间的差距。 换句话来说,或者是在不断的试错,他猜错了,损失变大了,猜对了,损失就变小。慢慢的,他就学会了如何根据上下文精准还原被遮住的词。这个过程看似简单,实则包含了强大的语言理解能力,因为他逼迫模型必须深入理解每个词在整个句子里面的角色和意义。 所以我们总结一下 m l m 的 任务,就是通过完形填空式的训练,让模型学会从双向的商业文中推理出缺失的信息, 不仅解决了传统语言模型的单向局限,还通过我们刚才说的八十十十策略提升了泛化能力,使得 word 在 各种下游任务中都表现的非常出色。 但不要忘了, m l m 只是 bird 预训练的一半,另一半呢,是另一个重要的任务, n s p next center prediction, 中文叫做下一句预测,也就是判断两个句子是否连续。下面呢,我们就来聊一聊这个任务,看看 bird 是 如何理解句子之间的关系的。 这个任务呢,是一个典型的二、分类任务,目标是判断句子 b 是 否是 a 的 逻辑延续。具体来说,它的标签机制分为两类,一类是 is next, 表示 b, 确实是 a 在 原文中紧跟随其后的句子, 这就是正样本。还有就是 not next, 表示 b 是 随机抽取的其他句子,它和 a 无关,这是负样本。为了保证序列的公平性,数据分布是严格平衡的, 百分之五十是正样本,百分之五十是负样本。这样模型就不会因为数据偏斜而偏向于某一类。举个例子,比如说正样本 a, 嗯,今天天气真好。 b 呢,是我们今天出去散步吧,这就是合理的延续。标记为 it's next。 负样本呢,今天天气真好。然后 b, 我 昨天买的新手机,它肯定没有直接关联啊,所以标记为 not next。 通过这种方式, word 就 学会了识别句子之间的连贯性、因果性、顺延性等高层次的语言结构。 那么模型是怎么做出这个判断的呢? nsp 的 核心在于一个关键的设计,利用 cls 标记的输出向量进行分类。还记得我们在输入阶段提到那个 cls 吗?它原本是用来做分类任务的特殊标记的, 但是在 n s p 中,它的作用被进一步放大了。那模型处理完整个完整的句子之后啊,会输出每个 token 的 表示,其中这个 c l s 位置的向量会被特别提取出来,送入一个二分类层,最终输出是下一句还是不是下一句的概率。那为什么会选择这个 c l s 呢? 因为它在整个 transform 编码过程中,通过 self attention 机制,它聚集了全句的信息,你可以把它理解成一个全句的摘要,代表整段文本的综合语意。 所以, c l s 不 仅仅是一个分类标识,更是一个全句的综合表征,它能够捕捉句子之间的长成依赖关系。这对机器的阅读理解任务啊,非常有用。 比如说,在问答系统中,模型需要判断某个答案是否真的来自原文的上下文。 n s p 训练出来的这种能力,正好帮助模型理解句子之间的因果或者是顺延关系。换句话来说, n s p 让 birds 不 仅能读懂一句话,还能够读懂一段话。 最后,我们来做一个快速的总结,把整个 word 的 精髓浓缩成三句话。第一,模型底座。 word 是 基于 transformer encode 构建的,采用的是双向架构,这意味着它能够同时看到一个词前后的上下文,从而更深入地理解语言。 第二,两大预训练武器就是我们刚才说的 mlm 和 nsp。 第一个 mlm 呢,它是解决局部的语义问题,让模型学会猜词,捕捉词语在上下文中的含义。而 nsp 呢,它解决的是局逻辑问题,让模型学会判断句子之间的连贯性和关系。 第三,最终价值预训练的核心意义在于利用海量数据训练好的参数替代随机出式化, 从而呢,在下游任务中获得极高的起跑线。换句话来说, bird 不是 从零开始学语言,而是先用大量文本自学成才,再把这份知识啊迁移到具体任务上。这就是为什么他能在各种 nlp 任务中表现的如此出色。 希望这次对 bird 核心机制的拆解,能帮你真正看懂这个改变 nlp 格局的模型,不是靠魔法,而是靠精巧的设计和对语言本质深刻的理解。
粉丝8.1万获赞11.3万

波特模型是什么?二零一八年,古狗提出了著名的波特模型,开启了一个新的 nlp 时代。在当年新发布的机器阅读理解榜单中,在评价指标上超过了人类水平,并在多种 nlp 任务中吊打其他算法。波特这么优秀有两点,一是更复杂的模型,利用多层的 transformer 堆叠在一起,让模型具有超强的语言表示能力。二 是训练与微调结合的训练方式。咸鱼训练使用丰富的无标注语料,让模型学到一些基本语法,在针对性的在特定任务上微调你和数据分布, 就好像人先要有一些语言能力和常识,再根据课程学习到新的知识。有了这种预训练架构,训练一个分类模型就不需要太多的数据了,或者说训练的效率变高了,进一步的 what 还能干很多事情。比如在没有数据的情况下,就能把一个文本转化为项链, 从而计算两段文本语音的相似程度,这就是语音搜索。使用这种模型时,找到古狗或开元的运训练好的模型,然后在我们自己的数据上 进行微调,就可以实现一个强大的 nlp 模型。学习如何使用 word 模型,现在点击评论区了解吧,关注我,一分钟了解一个算法,欢迎加算法攻防粉丝团交流!

如上视频承诺的这个视频,给大家整几个使用 birt 做下游任务的例子。第一个是做情感分析的,情感分析本质可以看作是一个分类问题, 比如给一句话分析一下,这句话要表达的意思是积极的还是消极的,这个就用类似 next sentence prediction 的思路做, 虽然有专家说这样去训练 bert, bert 可能学不到太多的东西。对于情感分析的任务,给一个句子,你嫌贵,我还嫌贵呢。它前面加上 c、 l、 s 这个特殊符号,扔进 bert 里,然后 c、 l、 s 做对应的输出,再乘上一个矩阵进行线性变换,紧接着在 soft max 一下, 最终得到概率最大的类别就是这个句子的情感类别。整个这一过程是需要情感分析这个下游任务标记好的数据的,然后用这些数据进行训练,或者说微调。微调 调其实调整的就是相关的参数,在线性转换的这个矩阵里,一开始的参数都是随机生成的,而 burt 中的参数是之前预训练得到的,就是学习作文完全填空得到的,微调调的就是这些参数。 参数稳定以后,最后得到的整个模型才是我们想要的情感分析模型。第二个任务是问答,但是这个问答有点特殊,它的形式有点像。这种相声演员有四门功课,说学逗唱,都有什么呀?嗯, 都有什么呀?说学逗唱啊,哈哈,谜底就在谜面上啊。这个任务里面输入有文章 d 和问题 q, 文章和问题都是序列, 这里每个 d 和每个 q 都表示的是一个中文字,如果是英文的情况,可能每个 d 和每个 q 就代表的是英文的词,然后把 d 和 q 扔到 到问答的模型里,我们让他说出两个正整数 s 和 e, 他俩表示的是从文章的第 s 格到第一个字就是问题 q 的答案 a, 它就等于 d, s 一直到第一。比如说文章 d 是相声演员有四门功课说学逗唱,问题 q 是都有什么呀?那最终输出的 s 和 e 就希望是十和十三,所以十到十三说学逗唱就是答案。如果有时候 s 和 e 是两个一样的值, 比如说都是二,那就说明答案就是文章中的第二个字,这个字就是答案。还有一种情况是,如果 e 的值比 s 小, 就是比如说 s 等于十,但是 e 等于八,正常情况下应该是 e 的值比 s 值的大,那就说明没有正确答案。对于这种任务,要怎么训练 birt 呢?我们输入的内容是文章和问题用 s 皮隔开,并且开头的地方放上了 c、 l、 s 符号,然后 birt 还是会输出一堆项链,只不过这时候咱们要引入两个随机的项链,这俩是我们要从头去领的项链。当然 birt 里的一些参数 也是需要训练或者说是微调的。这两个随机项链的长度和 bird 输出的每个项链的长度得是相同的。比如这个输出的是七百六十八位的项链,那这个红色和蓝色的随机项链也得是七百六十八位的。咱们先把红色的这个项链和文章部分对应的输出项链 做内机,文章输出十三个文字,这边就输出十三个项链,这十三个项链分别和红色的项链做内机,然后一起在做 soft max, 看哪个位置概率高,概率最高的位置所对应的文字就是答案 s。 然后这个蓝色的项链也做同样的工作,只不过 得出来的结果会作为答案结束的位置。所以总的来说,红色的项链是为了计算出答案的起始位置。 s, 蓝色的项链是为了计算出答案的结束位置。一。 本来想下个视频整 gpt 的,但是随着时代的发展,科技的进步,我琢磨新建一个合集,把现在比较火的 aigc 的相关内容,比如 gpt chat, gpt stable, diffusion 啥的都做成视频放进去。所以兄弟们如果感兴趣,麻烦关注一波,谢谢大家了!