跟着我一起背NLP算法八股文
导读:一提到NLP算法,必须手推bert模型。当小白问起bert与word2vec之间的区别时,如何简单易懂的说明这个问题呢?接下来,我将尝试说明。
首先,word2vec将中文转变为可计算的向量,需要说明的是使用不同语料训练的word2vec不尽相同,需要看自己的任务文本和通用w2v训练使用的文本差距;bert预训练模型则是根据上下文训练出来的词向量,在同一个语料中每个token是不固定的,关于本部分细节可以查看层次softmax和霍尔曼编码相关知识。bert通过预训练,训练神经网络的隐藏层,使用隐藏层权重作为词向量,使用该模型时候就像查字典,每个token对应一个词向量,每次查完字典以后还要回到模型里再计算,这个计算就可以把整个语境计算进去,因此称为语境化的向量,这也就是大家说的bert是结合了语境了的,就是一个词在不同的句子里且在相同的bert模型中,输出的词向量是不一样的。所以说,bert比word2vec更加先进。
(1)为什么bert有3个嵌入层(Embedding),它们如何实现?
首先3个嵌入层分别为Token Embedding、Segment Embedding和Position Embedding。
首先,bert将输入文本中的每一个词(token)送入token embedding层从而将每一个词转换成词向量的形式,但不同于其它模型,bert多了2个嵌入层即segment embedding和position embedding。
首先说一下,token embedding实现过程,输入文本首先进行tokenization处理,此外,2个特殊的token会被插入tokenization的结果的开头([CLS])和([SEP]),它们为后面分类任务和划分句子对服务。
Token Embedding层将每一个wordpiece token转换成768维的向量。
其次,bert使用segment embeddings实现句子对中2个句子的区分。segment embeddings层只有2种向量表示,前一个向量是把0赋给第一个句子中的各个token,后一个向量把1赋给第二个句子的token。
第三,加入position embedding可以让bert理解,不同句子中出现的同一个单词的含义。
总结:bert能够处理最长512个token的输入序列,position embeddings layer实际上是一个大小为(512,768)的lookup表。
第一个嵌入是为了获得词的向量表示;第二个是为了区分句子对中2个句子的向量表示;第三个是为了让bert学习到输入的顺序属性。
作者:lbertj
来源链接:https://blog.csdn.net/weixin_42419825/article/details/120319533
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。