赞
踩
CBOW和Skip-Gram模型的训练目标:
skip-gram训练的 loss function:
更多细节参考浅谈word2vec。
命名实体识别 本质有两个任务组成:
1)精确匹配评估
注:其中 #TP 表示识别出的实体且是正确实体的数量(被正确检测的实体), #FP 表示识别出的实体却是不存在实体的数量(被错误检测的实体), #FN 表示是正确的实体却没被识别出的数量(漏检)。当然,除此之外,像macro-f1、micro-f1也会用来作评估。
2)宽松匹配评估
1. 基于深度学习的命名实体识别方法 相比于 基于机器学习的命名实体识别方法的优点?
2 基于深度学习的命名实体识别方法 的 结构是怎么样?
3 分布式输入层 是什么,有哪些方法?
1. 什么是 BiLSTM-CRF?网络结构?
2. 为什么要用 BiLSTM?
由于 BiLSTM 能够捕获句子的长距离依赖信息。
1. 标签解码器是什么?
标签解码器是NER模型的最后一个阶段。它接受上下文相关的表示作为输入,并基于输入产生相关的序列标签。
2 MLP+softmax层 介绍?
3. 条件随机场CRF层 介绍?
4. 循环神经网络RNN层 介绍?
5. 指针网路层 介绍?
1. 什么是实体嵌套?
实体嵌套是指在一句文本中出现的实体,存在某个较短实体完全包含在另外一个较长实体内部的情况,如“南京市长”中地名“南京”就嵌套在职务名“南京市长”中。
2. 与 传统命名实体识别任务的区别
传统的命名实体识别任务关注的都是平坦实体(Flat entities),即文本中的实体之间不交叉、不嵌套。
3. 解决方法
3.1 方法一:序列标注
3.2 方法二:指针标注
层叠式指针标注
MRC-QA+指针标注
3.3 方法三:多头标注
3.4 方法四:片段排列
十分直接,如下图(f)所示。对于含T个token的文本,理论上共有 = (+1)/2 种片段排列。如果文本过长,会产生大量的负样本,在实际中需要限制span长度并合理削减负样本。
迁移学习
半监督策略,即引入虚拟对抗;
Cross Validation:简言之,就是进行多次train_test_split划分;每次划分时,在不同的数据集上进行训练、测试评估,从而得出一个评价结果。
模型训练过程中,训练 loss 和 验证 loss 在训练初期都是 呈下降趋势;当训练到达一定程度之后, 验证 loss 并非继续随 训练 loss 一样下降,而是 出现上升的趋势,此时,如果继续往下训练,容易出现 模型性能下降问题,也就是我们所说的过拟合问题。
早停法 就是在训练中计算模型在验证集上的表现,当模型在验证集上的表现开始下降的时候,停止训练,这样就能避免模型由于继续训练而导致过拟合的问题。所以说 早停法 结合交叉验证法可以防止模型过拟合。
标签平滑法是一种正则化策略,主要是通过soft one-hot来加入噪声,减少了真实样本标签的类别在计算损失函数时的权重,最终起到抑制过拟合的效果。推荐阅读:标签平滑Label Smoothing
1. 类别不平衡场景
数据均衡场景:
数据不均衡场景:
注:precision 使用 注意点:
没有特殊情况,不要用准确率(accuracy),一般都没什么帮助
如果使用precision,请注意调整分类阈值,precision@n更有意义
2. 解决类别不平衡中的“奇淫巧技”有什么?
注:第一种和第二种方法都会明显的改变数据分布,我们的训练数据假设不再是真实数据的无偏表述。在第一种方法中,我们浪费了很多数据。而第二类方法中有无中生有或者重复使用了数据,会导致过拟合的发生。
1. 什么是 Warm up?
Warmup 是在 ResNet 论文中提到的一种学习率预热的方法,它在训练开始的时候先选择使用一个较小的学习率,训练了一些 epoches 或者 steps (比如 4 个 epoches,10000steps),再修改为预先设置的学习来进行训练。
2. 为什么需要 Warm up?
在训练的开始阶段,模型权重迅速改变。 刚开始模型对数据的“分布”理解为零,或者是说“均匀分布”(当然这取决于你的初始化);在第一轮训练的时候,每个数据点对模型来说都是新的,模型会很快地进行数据分布修正,如果这时候学习率就很大,极有可能导致开始的时候就对该数据“过拟合”,后面要通过多轮训练才能拉回来,浪费时间。当训练了一段时间(比如两轮、三轮)后,模型已经对每个数据点看过几遍了,或者说对当前的batch而言有了一些正确的先验,较大的学习率就不那么容易会使模型学偏,所以可以适当调大学习率。这个过程就可以看做是warmup。那么为什么之后还要decay呢?当模型训到一定阶段后(比如十个epoch),模型的分布就已经比较固定了,或者说能学到的新东西就比较少了。如果还沿用较大的学习率,就会破坏这种稳定性,用我们通常的话说,就是已经接近loss的local optimal了,为了靠近这个point,我们就要慢慢来。
mini-batch size较小,样本方差较大。第二种情况其实和第一种情况是紧密联系的。在训练的过程中,如果有mini-batch内的数据分布方差特别大,这就会导致模型学习剧烈波动,使其学得的权重很不稳定,这在训练初期最为明显,最后期较为缓解(所以我们要对数据进行scale也是这个道理)。
1. 知识表示学习的基本概念
知识表示学习的目标是通过机器学习将研究对象的语义信息表示为稠密低维实值向量。以知识库中的实体 e e e和关系 r r r为例,我们将学校得到的模型表示为 l e l_e le 和 l r l_r lr。在该向量空间中,我们可以通过欧氏距离或余弦距离等方式,计算任意两个对象之间的语义相似度。像我们常说的词向量就属于知识表示学习。
2. 知识表示的理论基础
知识表示学习得到的低维向量表示是一种分布式表示(distributed representation),之所以这么命名,是因为孤立地看向量中的每一维,都没有明确对应的含义;而综合各维形成一个向量,则能够表示对象的语义信息。这种表示方案并非凭空而来,而是受到人脑的工作机制启发而来
3. 知识表示相对于one-hot表示的优势
独热表示的问题在于,需要设计专门的图算法计算实体键的语义和推理关系,计算复杂度高、可扩展性差,同时在大规模语料的建模中,会出现数据稀疏的问题。
而知识表示学习实现了对实体和关系的分布式表示,它具有以下主要优点:
(1)词袋模型和N-gram模型
最基础的文本表示模型是词袋模型。顾名思义,就是将每篇文章看成一袋子词,并忽略每个词出现的顺序。具体地说,就是将整段文本以词为单位切分开, 然后每篇文章可以表示成一个长向量,向量中的每一维代表一个单词,而该维对应的权重则反映了这个词在原文章中的重要程度。常用TF-IDF来计算权重,公式为
T
F
−
I
D
F
(
t
,
d
)
=
T
F
(
t
,
d
)
×
I
D
F
(
t
)
TF-IDF(t, d) = TF(t, d) \times IDF(t)
TF−IDF(t,d)=TF(t,d)×IDF(t)
其中TF(t,d)为单词t在文档d中出现的频率,IDF(t)是逆文档频率,用来衡量单词t对表达语义所起的重要性,表示为
I
D
F
(
t
)
=
l
o
g
(
文
章
总
数
包
含
单
词
t
的
文
章
总
数
+
1
)
IDF(t) = log(\frac{文章总数}{包含单词t的文章总数+1})
IDF(t)=log(包含单词t的文章总数+1文章总数)
直观的解释是,如果一个单词在非常多的文章里面都出现,那么它可能是一个比较通用的词汇,对于区分某篇文章特殊语义的贡献较小,因此对权重做一定惩罚。
将文章进行单词级别的划分有时候并不是一种好的做法,比如英文中的natural language processing(自然语言处理)一词,如果将natural,language,processing这 3个词拆分开来,所表达的含义与三个词连续出现时大相径庭。通常,可以将连续 出现的n个词(n≤N)组成的词组(N-gram)也作为一个单独的特征放到向量表示 中去,构成N-gram模型。另外,同一个词可能有多种词性变化,却具有相似的含义。在实际应用中,一般会对单词进行词干抽取(Word Stemming)处理,即将不 同词性的单词统一成为同一词干的形式。
(2)主题模型
基于词袋模型或N-gram模型的文本表示模型有一个明显的缺陷,就是无法识别出两个不同的词或词组具有相同的主题。因此,需要一种技术能够将具有相同 主题的词或词组映射到同一维度上去,于是产生了主题模型。主题模型是一种特殊的概率图模型。想象一下我们如何判定两个不同的词具有相同的主题呢?这两个词可能有更高的概率同时出现在同一篇文档中;换句话说,给定某一主题,这 两个词的产生概率都是比较高的,而另一些不太相关的词汇产生的概率则是较低的。假设有K个主题,我们就把任意文章表示成一个K维的主题向量,其中向量的 每一维代表一个主题,权重代表这篇文章属于这个特定主题的概率。主题模型所 解决的事情,就是从文本库中发现有代表性的主题(得到每个主题上面词的分 布),并且计算出每篇文章对应着哪些主题。常见的主题模型有:pLSA(Probabilistic Latent Semantic Analysis),LDA(Latent Dirichlet Allocation)。
(3)词嵌入与深度学习模型
词嵌入是一类将词向量化的模型的统称,核心思想是将每个词都映射成低维 空间(通常K=50~300维)上的一个稠密向量(Dense Vector)。K维空间的每一维也可以看作一个隐含的主题,只不过不像主题模型中的主题那样直观。
由于词嵌入将每个词映射成一个K维的向量,如果一篇文档有N个词,就可以用一个N×K维的矩阵来表示这篇文档,但是这样的表示过于底层。在实际应用中,如果仅仅把这个矩阵作为原文本的表示特征输入到机器学习模型中,通常很 难得到令人满意的结果。因此,还需要在此基础之上加工出更高层的特征。在传统的浅层机器学习模型中,一个好的特征工程往往可以带来算法效果的显著提升。而深度学习模型正好为我们提供了一种自动地进行特征工程的方式,模型中的每个隐层都可以认为对应着不同抽象层次的特征。从这个角度来讲,深度学习模型能够打败浅层模型也就顺理成章了。卷积神经网络和循环神经网络的结构在文本表示中取得了很好的效果,主要是由于它们能够更好地对文本进行建模,抽取出一些高层的语义特征。与全连接的网络结构相比,卷积神经网络和循环神经网络一方面很好地抓住了文本的特性,另一方面又减少了网络中待学习的参数, 提高了训练速度,并且降低了过拟合的风险。
表示学习在自然语言处理领域受到广泛关注起源于Mikolov等人与2013年提出的word2vec词表示学习模型和工具包,利用该模型,Mikolov等人发现词向量空间中的平移不变现象,例如:
C
(
K
I
N
G
)
−
C
(
Q
U
E
E
N
)
≈
C
(
M
A
N
)
−
C
(
W
O
M
A
N
)
C(KING)-C(QUEEN) \approx C(MAN)-C(WOMAN)
C(KING)−C(QUEEN)≈C(MAN)−C(WOMAN)
这里的 c ( w ) c(w) c(w)表示利用word2vec学习得到的单词 w w w的词向量。也就是说,词向量能够捕捉到单词KING和QUEEN之间、MAN和WOMAN之间的某种相同的隐含语义关系。Mikolov等人通过类比推理实验【4, 5】发现,这种平移不变现象普遍存在于词汇的语义关系和句法关系中。
DeepWalk算法借鉴了word2vec算法的思想,word2vec是NLP中一种常用的word embedding方法,word2vec通过语料库中的句子序列来描述词与词的共现关系,进而学习到词语的向量表示。DeepWalk算法与word2vec类似,使用图中节点与节点的共现关系来学习节点的向量表示。在DeepWalk中通过使用随机游走(RandomWalk)的方式在图中进行节点采样来模拟语料库中的语料,进而使用word2vec的方式学习出节点的共现关系。
具体来说,DeepWalk 通过将节点视为单词并生成短随机游走作为句子来弥补网络嵌入和单词嵌入之间的差距。然后,可以将诸如 Skip-gram 之类的神经语言模型应用于这些随机游走以获得网络嵌入。其优点是首先其可以按需生成随机游走。由于 Skip-gram 模型也针对每个样本进行了优化,因此随机游走和 Skip-gram 的组合使 DeepWalk 成为在线算法。其次,DeepWalk 是可扩展的,生成随机游走和优化 Skip-gram 模型的过程都是高效且平凡的并行化。最重要的是,DeepWalk 引入了深度学习图形的范例。
node2vec模型是在DeepWalk的架构上,优化了随机游走的序列抽取策略。node2vec采用有偏随机游走,在广度优先(bfs)和深度优先(dfs)图搜索之间进行权衡,从而产生比DeepWalk更高质量和更多信息量的嵌入。
Transformer本身是一个典型的encoder-decoder模型,Encoder端和Decoder端均有6个Block,Encoder端的Block包括两个模块,多头self-attention模块以及一个前馈神经网络模块;Decoder端的Block包括三个模块,多头self-attention模块,多头Encoder-Decoder attention交互模块,以及一个前馈神经网络模块;需要注意:Encoder端和Decoder端中的每个模块都有残差层和Layer Normalization层。
GELU函数是RELU的变种,形式如下:
Bert的结构主要是Transformer的encoder部分,其中Bert_base有12层,输出维度为768,参数量为110M,Bert_large有24层,输出维度为1024,参数总量为340M。
Bert的目标是利用大规模无标注语料训练,获得文本包含丰富语义信息的表征。
Bert的输入:token embedding,segment embedding,position embeddimg,三个向量相加作为模型的输入。
问题:中文BERT是以汉字为单位训练模型的,而单个汉字是不能表达像词语或者短语具有的丰富语义。
改进:ERNIE模型,给模型输入知识实体,在进行mask的时候将某一个实体的汉字全都mask掉,从而让模型学习知识实体。
BERT-WWM:短语级别遮盖(phrase-level masking)训练。
问题:NSP任务会破坏原本词向量的性能。
改进:RoBERTa,移除了NSP任务,同时使用了动态Mask来代替Bert的静态mask。
随机mask每一个句子中15%的词,用其上下文来做预测,其中,
80%的是采用[mask],my dog is hairy → my dog is [MASK]
10%的是随机取一个词来代替mask的词,my dog is hairy -> my dog is apple
10%的保持不变,my dog is hairy -> my dog is hairy
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。