本文关注点在于梳理Neural NLP中各个方法、模型的思想,和各个模型之间的相互关联、启发

不对各个模型的具体方程、梯度计算、训练trick等作详细讨论

目录

1. 语言有哪些特点

1.1 前人对语言有哪些研究成果

1.2 语言的基本特点

1.3 词汇、句法结构和语义

2. 语言怎么在计算机中表达

从one-hot encoding到word vector,再到contextual word vector

3. 从RNN、CNN到Transformer

怎么才能更有效的从词汇、短语、语义关联、逻辑结构中理解语言

4. 目前NN模型的短板和NLP尚需解决的问题


1. 语言有哪些特点

1.1 前人对语言有哪些研究成果

当我们尝试用计算机来处理语言,甚至理解、掌握语言的时候,很自然的会先考虑语言本身有什特点。

语言学这门学科就是试图理解语言的本质,用一个明确的系统来定义和描述语言。但是目前几乎很少看到计算机自然语言处理中语言学中的研究成果的应用,历史上(20世纪60-80年代)尝试过把语言学中的系统搬到计算机上,但结果并不好。语言学归纳出了一个规则系统,对词法、句法、段落/篇章文法进行归纳总结,描述成一套规则,实际应用起来有很多问题:

  • “有规则就有列外”,实际应用中面对庞大的真实语料,规则的数量很多
  • 大量规则由人工维护,会出现相互矛盾的规则。
  • 规则难以描述词的多义性,也就是语言的上下文相关性
  • 上下文相关的文法,基于规则进行进行语法分析,计算复杂度是语句长度的六次方,非常耗时

虽然基于规则的自然语言处理走到了尽头,但这主要意味着基于规则的处理方法行不通,传统语言学中对于语言规律、特征的研究和归纳仍然具有参考价值。

1.2 语言的基本特点

人类用语言来描述世界,语言和世界存在对应关系,从而语言中存在很强的规则性(结构和语义),但是由于交流的事物本身具有不确定性,或者我们认知局限带来的不确定性,同时人普遍倾向于用更简单的编码方式来表达,这3个方面都使得语言具有很多结构非规则性和语义不确定性。

语言的基本特点包括如下几个方面,除了上面说到的规则和不规则、不确定并存,语言还有使用指示代词、隐性的依赖常识等特点,这些都让计算机语言理解是一个有难度的课题。

基本特点(基于语言学的观察和归纳)
一义多次
一词多义
相近相似性
词和词之间的组合关系
指示代词
对常识的隐性依赖
潜台词
历史变迁
  • 一义多词——某个概念可以对应到多个词,如下图的可乐,在不同语境下有多种称呼

  • 一词多义——语言有很强的上下文相关性,同一个词在不同的上下文中意思完全不同,如下图的pop

  • 相近相似性——含义相近的词上下文也存在一定的相似性

  • 词语和词语之间的语义组合关系

线性组合

I am going home after this finishes.

嵌套组合关系(树状)

[The person standing next to [the man from [the company that purchased [the firm that you used to work at]]]]

  • 指示代词

  • 对常识的隐性依赖

上下文中不包含任何相关的信息,但是说话时认为双方都已经知晓这些信息

The pen is in the box

The box is in the pen

要正确理解第二句话,应该推断盒子不可能在笔里,pen此处的意思是“围栏”

  • 潜台词

语言要表达的真实意图跟字面意思不一致

例如反讽、暗喻等

这时需要结合说话人的真实意图、说话人的语气语调(感情色彩)等信息,理解出潜台词

  • 历史变迁——随着社会发展和变化,同一个词的含义开始发生变化

1.3 词汇、句法结构和语义

语言学界对语法和语义的认识没有大一统的观点。Chomsky一派的Generative grammar认为

grammar is a system of rules that generates exactly those combinations of words that form the infinite number of possible sentences in a given language.

另一个认知语言学派的观点是

Cognitive grammar hypothesizes that grammar, semantics, and lexicon exist on a continuum instead of as separate processes altogether

虽然每个学派的观点都难以完美解释所有语言实例,但是每个学派都是专业人士长时间深耕形成的观点,我们可以认为每个观点都代表了自然语言一些的典型特征

Cognitive Grammar可能和目前基于神经网络的自然语言处理比较接近,词法、句法信息没有分离,都包含在词向量中进行表示,再通过神经网络对词向量进行层层运算变换,得到语义信息或者句法信息。

目前自然语言处理中最常被提到的来自传统语言学的观点包括如下两项:

1)词义

“You shall know a word by the company it keeps” J. R. Firth 1957

2)句义

Principle of compositionality
The meaning of a sentence is determined by
(1) the meanings of its words and
(2) the rules that combine them.

(当然这个观点也没有得到语义学界的大一统接受,但有相当一部分的支持者)

人类用语言描述世界,语言可以看成是客观世界的一种表达方式,或者说编码方式。语义是语言试图传递的客体(Object),比如某个物理过程如何发生,背后机理是什么;某个商品外观如何,有哪些功效。语法规则是指按何种规则词和词组成某个意思,最终共同表达了某个意思,也就是语法是为理解语义和语义所描述的客体逻辑服务的。

2. 语言怎么在计算机中表达

从one-hot encoding到word vector,再到contextual word vector

语言在计算机中的表达,首先是如何从文本转换为可以进行定量计算的数值,接着是如何表达,才能最有效的抓住语义和文法信息。词的表达对应的文献称呼即word representation。

最早的方式来自Information Retrieval(IR, 例如搜索引擎)领域。文本的一个明显特点就是不同领域的词汇不一样,比如新闻、小说、科技论文。把文本看做bag of words, 而不考虑语义和结构,根据词汇的差异,就可以做到比较make sense的文本匹配和分类。

one hot vector表示词语,每个维度代表一个词汇,向量长度即是词典包含的词汇个数。在这个思路上继续提升匹配精度,有正则化处理(normalization)、给不同的词分配不同权重(比如根据不同词性分配不同权重),oov处理,ngram概率平滑等。

但这种方式的缺点也很明显,按这个定义构成的向量都是稀疏的,并且每个词语占据一个维度,每个维度相互独立,词语和词语之间的含义关系也难以表达。语义都在句子中体现了,但是语义信息并没有进入到one hot vector。

Similarity(kitten, cat) = cosine(kitten, cat) = 0
// kitten和cat没有任何相似性,语言表达能力很差了

解决稀疏问题可以使用矩阵压缩处理,比如矩阵的奇异值分解等。那怎么解决语义表达能力过弱呢?词的语义该如何表达?实际这也是语言学必然会研究的一个问题。这个时候就借鉴了分布式语义Distributional semantics研究领域的观点。

Distributional semantics is a research area that develops and studies theories and methods for quantifying and categorizing semantic similarities between linguistic items based on their distributional properties in large samples of language data.

The basic idea of distributional semantics can be summed up in the so-called Distributional hypothesis: linguistic items with similar distributions have similar meanings.

这个假设也是统计语义分析的基础。更常见的关于这个假设的论述是第一部分提到的

“You shall know a word by the company it keeps” J. R. Firth 1957

基于这个观点,定义一组词作为context word(通常是整个词典),定义一个扫描窗(word window),对每个词,数一数扫描窗范围内出现了哪些context word,得到context word计数向量,作为这个词的语义表达。也就是通过word window中词来提取语义、句法信息,这种方式又叫co-occurrence matrix。

 Similarity(kitten, cat) = cosine(kitten, cat) = 0.58
// kitten和cat有了比较高的相关度,语义表达能力比one-hot vector好多了

每个词一个向量,所有词放在一起就是一个矩阵,这个矩阵叫做word embedding matrix

Co-occurrence matrix是count-based,通过数数获得各个含义维度的数值表达。Context words通常是整个词典。从语言建模、计算的角度来说,这种方式的缺点是词向量稀疏,存在计算问题,对应的模型性能不稳健(robust);同时context word以向量的形式表示,各个维度没有相对位置关系,丢失了语言中的前后位置信息,其中蕴含的结构和语义关系也就丢失了。从维护成本来说,词典变化的时候,词向量的维度要得跟着变;维度高,需要的存储空间也大。

为了解决首要headache:高维稀疏矩阵,很自然的会想到做矩阵压缩,即解决了稀疏问题,又能节省存储空间。当然压缩过程中也有各种各样的tricks,略去不表。

最终得到的是一个经过压缩的低维矩阵。Word representation的发展过程也很连贯,从这点抽出身来看,一个低维但包含了有效高密度信息的矩阵,是一个很不错的word representation,理想情况下它有效提取出了词语的语义和文法信息,同时维度不至于过高,便于put on各种复杂的运算。于是,有没有别的方式,能更便捷的得到这个低维词向量呢?接下来就发展出了neural embedding。从one-hot vector,到count-based co-occurrence matrix,再到neural embedding,整个演变过程是承上启下、比较自然的。

用神经网络的方法得到word embedding,核心就在于神经网络的输出定义为每个词的概率,再用交叉熵或者最大似然函数作为目标函数,进行训练。Edward Grefenstette在oxford-cs-deepnlp-2017课上总结得很好

c(ti)指ti的context words。

两种主要的词向量模型:

CBow(continuous bag of words):用周围的词来预测中心词

Skip-gram model:用中心词来预测周围的词,negative sampling——提升训练效率

word vector和co-occurrence matrix的内在思想是一样的,都是通过word window context来描述词汇。

当语料足够大的时候,覆盖了一个词所有的使用场景,训练出来的词向量,可以看做包含了这个词在各种场景之下的各种词义,是一个mixture。可以指望模型学习到对目标有用的词义。

但是contextual word vector几乎全面提升了各种NLP任务的性能,说明可能上面这种期望考模型自学习出有用特征的想法有些too naïve。

Contextual word vector跟word vector相比,主要的突破在于打破了对fixed size word window的限制,一个词的语义和句法信息,不应该只看有限窗口范围的近邻词汇,而应该基于这个词的完整上下文得到一个表达。而语言模型就是用来表达/编码完整语义的,因此contextual word vector训练的目标不再是单个词汇和邻近词汇的概率关系,而是训练一个语言模型,来获取词向量,词向量需要使整个语言模型达到一个最优的状态,而词和词之间的近邻关系,只是一个局部属性。

词向量最开始是语言模型的前置输入,语言模型基于这些基础输入进行学习,完成指定的任务。比如机器翻译,Recurrent NN模型把语言看作一个离散词汇构成序列,通过逐个吸收每个词汇,来编码整个序列的信息,再把序列进行解码,得到翻译目标语句。整个序列的信息都被编码到了模型状态中,或者说这个编码表达是基于一个完整的句子进行的,那恰恰就是一个很好的context的表达。现在倒过来语言模型成了获取词向量的手段,角度切换带来了break through式的进展。

不同语言模型的实际效果也不一样。因为不同语言模型对context的使用或者说实际表达能力不同,虽然大家的期望都是能最好的编码语言中的所有信息。

ELMo使用了Bi-LSTM,输出层两个方向的LSTM输出向量拼接成一个新的向量,损失函数是词语在指定context出现概率的交叉熵。由于使用了两个方向的信息,所以ELMo生成的预训练词向量在各个任务上的平均表现优于常规word vector,当然也有大数据集进行预训练在起作用,毕竟bigger==better。但是由于两个方向的LSTM生成向量拼在一起组成新的向量,前面也提到过,向量各个维度是相互独立的,这种方式使ELMo的效果没有BERT好。

GPT和BERT使用的Transformer,GPT只使用左侧的context,没有使用右侧的context,GPT选择的训练目标是文本预测,根据已知词汇序列,预测出下一个词,不能预先使用输出来做训练。那BERT使用双向context的方法是什么呢?它发明了一个Masked LM。对一句话,随机mask一部分词汇(论文中说1/7比较好,比例太高预测难度大,比例太低训练量大),模型的训练目标是,正确预测出mask位置的词。(其实双向学习特征到2018年并不是新鲜trick,GPT选定语言模型/训练目标不知不觉中限制了它不能使用双向训练,机缘巧合让BERT占了先机)

3. 从RNN、CNN到Transformer

怎么才能更有效的从词汇、短语、语义关联、逻辑结构中理解语言

上面已经说过,大家都希望设计一个模型能完美的抓住/编码所有的语义和文法信息,设计模型的时候虽然都是奔着这个去的,但是实际模型并不一定能按你期望就具备某个能力。这大概也是理想和现实之间的差距吧。

神经网络模型就不多说了,对特征进行非线性变换,之后再重复进行新一轮的非线性变换,对应的逻辑图一般画的是层次型的,每轮非线性变换叫一层,就这样一层一层往上叠,也就是stacks of layers。这个逻辑结构也像俄罗斯套娃,层层嵌套,上一层的输出作为下一层的输入;也像生孩子,祖母生了妈妈,妈妈再生女儿,基于上一代的基因做一个非线性变换得到下一代,吸收了上一代的特征,也演化出了一些新特征。多项式的阶数如果足够高,就可以拟合任何曲线,x^n的逻辑跟F_layer_n(F_layer_n-1(…(input_layer1)..))是一样的,神经网络堆的stack足够深,也足以拟合任何曲线。

RNN(Recurrent neural network)是一个序列模型,系统的状态由当前的输入和系统的当前状态动态的表示,模型每吸收一个词汇的信息量,就更新自身的状态,序列输入完毕之后,模型就吸收了整个语句的信息。当然了,这是我们对RNN模型的期望,实际过程中,通常模型过多编码了近期处理词汇的信息,而早前处理的信息损失较多。这个是序列模型在梯度迭代中的必然问题,序列过长会有梯度消失和梯度爆炸问题。

梯度爆炸问题比较好解决,梯度值过大时直接截断就可以了。梯度消失的问题很棘手,目前没有方法能彻底解决这个问题,LSTM对梯度消失的改善效果比较好(但是LSTM并不能根除梯度消失的问题),有人证明了LSTM能够拟合任何函数。

RNN、LSTM的发展包括纵向堆更多层,和横向使用双向的序列信息,即Bi-LSTM。Bi-LSTM前面已经说过,分别学习从左到右和从右到左两个序列,拼接在一起构成词向量,拼接对context的提取能力是有限的。

在机器翻译领域,LSTM使用过程中,出现了Attention方法。Attention的主要观点是,既然RNN结构最终的状态过多提取了近期处理的词,又损失了早前处理的词信息,那实际就是说每个时刻都最好的存储了那个时刻对应词的信息,或者说跟最终时刻相比,这个时刻对这个片段的编码更好。因此不再限制在只是用最终状态来解码,而是尽量找到和当前要翻译的词最相关的源语言信息来解码。实现上是对所有状态进行加权,加权使各个状态的贡献度区分出来了,类似于人理解语义的时候,会更多的注意某些词汇,因为每个词对语义的贡献度是不一样的。这样就称为attention,注意力机制。

一会儿Transformer的时候再回到attention,现在接着看Recursive neural network和CNN。

Recursive neural network跟Recurrent neural network相比,更准确的体现了语言的结构特点。语言确实不是一个线性序列,词汇和短语之间的组合,是一个树状结构,attention即是给Recurrent NN打了一个补丁,弥补线性结构的不足。

第一部分的组合原理就是语言学研究的一派观点,Recursive NN相对Recurrent NN能更好的表示词和词之间的组合关系,或许能更好的完成自然语言理解任务。另外,Recurrent NN编码的是一整个语句,系统状态始终是从第一个词到当前处理的词,如果想要获取句子中某个短语的信息,Recurrent NN难以支持,而Recursive NN是先理解每个短语,再把短语组合起来理解整个句子,模型结构很适合解决这类问题。

下图的这两句话,可以比较好的说明文法结构在语义理解中的作用,两句话用词高度相似,但两个动词短语的构成不一样。

Principle of compositionality
The meaning of a sentence is determined by
(1) the meanings of its words and
(2) the rules that combine them.

Recursive NN在构建树结构的过程中,也完成了句子解析(parsing)。树结构比序列式的结构,梯度传递路径更短,相应的梯度消失/爆炸问题也会好一些,不过Recusive NN的梯度计算也比Recurrent NN复杂一些,自身、父节点和子节点都要考虑,但是这并不是硬伤,计算梯度只要有一个成熟的实现,就可以直接复用了。硬伤在于这两个结构都难以并行化,大数据集做训练时,计算非常慢,限制了业界应用场景。

Recursive NN的各种演化版本,核心关注点在于设计一个什么样的结构,才能最好的表达词和词之间的组合关系,这个组合关系承载了句法,更承载了语义。

基本的Recursive NN对所有词使用相同的权重矩阵,随后调整为不同的词给不同的权重,让更重要的信息凸显出来。实践中是根据词性来定,每个词性一个相同的权重矩阵,即Syntactic Untie。

Recursive Neural Tensor Network(Socher et al. 2013)中提出了向量简单拼接在一起,组成新的向量的问题,也是后来BERT提到其他语言模型训练的问题,即拼接这种方式难以充分表示两个向量之间的相互作用。Socher的模型提出了一种新的组合方式,增加了两个向量相乘的部分,这种乘法也类似后来某些attention的融合函数。

Tree LSTM(Tai et al. 2015)借鉴了LSTM的门限思想,对Recursive NN也设计了一套门组件,看起来是一个相当有前途的模型,但是不知道为什么相关研究不多,可能是难以并行,计算耗时,也没有BERT刷新多个领域成绩的强烈吸引力。

CNN在图像处理领域非常成功,对图像也是一个很自然的结构,图像在空间是连续变化的,卷积压缩能提取出来一个区域的信息;图像有多个图层,比如RGBalpha 4个图层,遥感高光谱影像一般有100多个图层,每个图层对应不同波段传感器捕获的信息,对每个图层分别独立做卷积,也是一个非常自然的思路。在NLP领域,CNN跟Recursive NN一样都是树结构,但是Recursive NN只把合法的词语组合在一起,构成节点,CNN则忽视文法限制,基于word window,把所有可能的邻近词组合都考虑进来,生成节点。这种结构相对Recursive NN的优势是覆盖了所有的组合方式,有效信息不会遗漏,但同时吸收的噪声也很多。并且,CNN只考虑连续邻近词的组合,学到的信息比较局部,对于非邻近词的组合,只能在更长的序列中去学习,面临着跟Recurrent一样的问题,序列太长了,你不一定能学到你想学的东西。

CNN中的Max Pooling,乍看之前可能会觉得无厘头,为什么一个channel卷积算出一个向量之后,就取最大值作为这次计算的输出?Christopher Manning给了一个比较合理的解释,他说语言是一种稀疏的表达(sparse representation),一个词表达一个意思,同一句话中几乎不会出现两个词表达一个意思,因此提取出来的最大值就认为是此次运算捕捉到的最强信号,保留这个信号比较接近于保留此次置信度较高的有效信息。一个辅助角度是Average Pooling,把卷积算出来的向量取平均作为输出,实际应用中效果并不好,从信息的角度来看,一平均把有效信息都平滑掉了。

接下来就到了Transformer。Transformer的动机是找一个能并行计算,从而减少训练时间的模型,它的结构可以看成是以Attention作为激活函数的神经网络。

Recurrent NN部分说了Attention的起源,attention到底可以意味什么呢?机器翻译中,attention是为了找到跟目标输出最关联的源语言部分,并且效果不错。那么把attention单拎出来,作为获取词向量的方式,会怎么样呢? Attention计算一个词和其他所有词权重,再基于所有词加权,构成这个词的输出向量。词和词之间是直接关联的,距离变成了常量1,甩掉了结构上的约束(Recurrrent NN的序列式结构、CNN的近邻window、Recursive NN的语法树)。这种每个词都直接相互关联,比Recurrent NN和CNN都更灵活,更能抓到长距离的意义关联。

Attention做的事跟Recursive NN想做的是一样的,提取出词语和词语之间有效的语义组合关系,但看实践效果,Attention更胜一筹。这可能是由于Recursive NN的相关研究早一些,都是基于window-based word vector做的,而Attention/transformer是基于context-based word vector做的,第二部分讨论过,contextual word embedding以表达完整上下文的语句为训练目标,加上attention对关联词语不做任何结构上的约束,能更好的学习到长距离的意义关联。

Attention这种直接建立每个词之间关系的结构,虽然一下子甩掉了距离包袱,但是也丢失了词和词之间的相对位置关系,比如谁在前谁在后,所以transformer模型中也常看到一个额外的position vector,编码每个词在句子中的位置,弥补上这个信息。

Attention的兴起,离远点儿看类似从数数式的co-occurrence matrix过渡到word vector。Co-occurrence matrix经过压缩之后的稠密word embedding matrix才是对语言信息的有效抽取,它才是有价值的部分,于是word embedding就换了一个计算方式,直接计算得到这个稠密矩阵。从神经机器翻译中出现的Attention,类似的,也比隐藏状态能更好的抓到目标词汇需要的信息,这种各个隐藏层状态加权,聚焦到“最值得注意的部分”(其实有些打脸RNN序列模型本身,序列结构中需要加入一个打破序列的补丁),而怎么抽取出有效的关系,是目的,它被单独拎出来形成了Transformer。

4. 目前NN模型的短板和NLP尚需解决的问题

目前的NLP基于都是基于统计的分析,尽管模型能够做拼写检查、命名实体识别、阅读理解、情感类别分析、机器翻译等等,这些背后的支撑点都是统计信息,谁的概率越大,谁就越合理,是一个经验性的相关分析模型,而没有推理和知识提炼。或者说即使有知识提炼,也没有能力运用这些知识来解决新问题。

人类在儿童时期能通过很少语料学会运用语言,并且能够举一反三,把知识用到之前没有见过的事情上。这就跟统计型方法的前提假设不同,统计型分析假定所有样本都服从相同的分布,基于部分数据的分析/训练才能扩展到没有见过的数据上。

依据经验做判断,至少有两个大的缺陷

  1. 系统的健壮性不足,容易被黑

例如一个系统训练动物图像,进行动物识别。应用时如果一张照片是沙滩上的奶牛,那系统可能无法正确识别,因为经验中沙滩和奶牛的相关性很低。

更多例子:98%都认错,图像识别AI遇上对抗性图像竟变“瞎子”

2. 需要大量的数据构成足够一般性的经验

也就是generalization,翻译成了泛化,我觉得说“一般性”更合适。

比如对话系统,按现有模型只能喂大量的对话语料,一个是对话难以收集,第二个是即使喂进去了,也难以让系统学会有逻辑并且内在一致的展开对话。

目前有加强研究机器推理和因果分析的呼声,但显然这是个非常难的课题,目前还处在初期发展阶段,更多信息可以参考 Causality For Machine Learning https://arxiv.org/pdf/1911.10500.pdf

参考资料:

http://cs224d.stanford.edu/syllabus.html

https://web.stanford.edu/class/archive/cs/cs224n/cs224n.1194/

https://github.com/oxford-cs-deepnlp-2017/lectures

从one hot vector到Attention, Bert——NLP基本思想串连回顾相关推荐

  1. attention seq2seq transformer bert 学习总结 _20201107

    https://blog.csdn.net/weixin_44388679/article/details/102575223 Seq2Seq原理详解 一文读懂BERT(原理篇) 2018年的10月1 ...

  2. NLP中的attention机制总结

    目录 1 attention机制原理 2 attention类型 2.1 按照是否可直接BP算法计算梯度进行分类 2.1.1 Soft attention 2.1.2 Hard attention 2 ...

  3. NLP之文本分类:「Tf-Idf、Word2Vec和BERT」三种模型比较

    英语原文:Text Classification with NLP: Tf-Idf vs Word2Vec vs BERT 翻译:雷锋字幕组(关山.wiige) 概要 在本文中,我将使用NLP和Pyt ...

  4. 【NLP】文本相似度的BERT度量方法

    作者 | James Briggs 编译 | VK 来源 | Towards Data Science 这篇文章讨论的是关于BERT的序列相似性. NLP的很大一部分依赖于高维空间中的相似性.通常,一 ...

  5. 站在BERT肩膀上的NLP新秀们:XLMs、MASS和UNILM

    作者丨高开远 学校丨上海交通大学硕士生 研究方向丨自然语言处理 写在前面 在前一篇站在 BERT 肩膀上的 NLP 新秀们(PART I)[1]介绍了两个都叫 ERNIE 的模型,思路也挺相似的,都是 ...

  6. NLP预训练之路——从word2vec, ELMo到BERT

    前言 还记得不久之前的机器阅读理解领域,微软和阿里在SQuAD上分别以R-Net+和SLQA超过人类,百度在MS MARCO上凭借V-Net霸榜并在BLEU上超过人类.这些网络可以说一个比一个复杂,似 ...

  7. 站在BERT肩膀上的NLP新秀们(PART II)

    写在前面 在前一篇站在BERT肩膀上的NLP新秀们(PART I)介绍了两个都叫ERNIE的模型,非常有趣思路也挺相似的,都是给bert模型增加外部知识信息,使其能更好地"感知"真 ...

  8. NLP中遇到的各类Attention结构汇总以及代码复现

    点击下方标题,迅速定位到你感兴趣的内容 前言 Bahdanau Attention Luong Attention Self-Attention.Multi-Head Attention Locati ...

  9. 理解BERT:一个突破性NLP框架的综合指南

    概述 Google的BERT改变了自然语言处理(NLP)的格局 了解BERT是什么,它如何工作以及产生的影响等 我们还将在Python中实现BERT,为你提供动手学习的经验 BERT简介 想象一下-- ...

最新文章

  1. 不存在完美的入门书,但是有些书在某些方面很惊艳
  2. 解决rsync 同步auth failed on module问题
  3. themleft模板库_Thymeleaf 模板的使用
  4. luogu P2791 幼儿园篮球题
  5. 深度学习在文本领域的应用
  6. c++ tinyxml2 解析xml小坑
  7. mysql教程实验4.1_【MySQL】数据库课程实验
  8. JavaScript之面向对象与原型笔记整理--------创建对象之原型(2)
  9. Linux系统时间和java的时间不一致
  10. ArcGIS Engine开发基础总结(一)
  11. Redis 集群中的纪元(epoch)
  12. python爬取拉勾网职位信息_Python爬虫:拉勾网Python的职位信息爬取
  13. OCP题库062新出现的考试题-第23题
  14. 信息管理系统项目前端界面设计
  15. 2048游戏 JavaScript实现
  16. 联想服务器加装显卡无显示,Lenovo双显卡机型安装显卡驱动方案汇总
  17. 微服务的数据聚合Join
  18. 需要u3d资源吗,免费送哦
  19. ChucK初步(2)
  20. 菜鸡小南橙的成长之路————bugkuCTF解题记录(一)

热门文章

  1. c语言单片机计时程序,C51单片机秒表计时(C语言)
  2. 大学计算机多媒体软件应用答案,多媒体软件应用的论文
  3. .NET丶WCF服务
  4. 电脑文件丢了怎么快速恢复
  5. U2D愤怒的小鸟学习笔记
  6. amcap测试软件,AMCap摄像头测试软件使用说明
  7. SpringBoot+Dubbo+Zookeeper分布式项目打包时子模块依赖找不到解决方案
  8. iPhone4 GSM Model A1332升级IOS7.1.2失败后降级IOS5.1.1成功
  9. 信通方恒资产评估行业快讯 - 矿业权管理处 - 推动矿产资源勘查开发高质量发展
  10. 【Mixup】《Mixup:Beyond Empirical Risk Minimization》