2020-10-13

中文语言理解基准测(CLUE):
https://www.cluebenchmarks.com/index.html

生成对抗网络GAN:


GAN的结构

生成对抗网络中有一个生成器和一个判别器,生成器尽可能地生成会让判别器识别错误的样本,而判别器需要尽可能地识别出错误的样本,随着迭代次数的增加,最终需要达到的效果是,生成器与判别器达到一个平衡,生成器生成的假样本和实际输入的真样本在判别器中被预测的概率分别是0.5,也就是判别器此时无法区分真假样本。因此就有了个最大最小化博弈:


tensorflow中部分函数学习:

tensorflow.placeholder(),placeholder是占位符的意思,在tensorflow中类似于函数参数,在执行的时候再赋具体的值。

参数含义:
dtype:数据类型。常用的是tf.float32,tf.float64等数值类型
shape:数据形状。默认是None,就是一维值,也可以是多维,比如[2,3], [None, 3]表示列是3,行不定
name:名称

tf.nn.embedding_lookup函数的用法主要是选取一个张量里面索引对应的元素。tf.nn.embedding_lookup(params, ids):params可以是张量也可以是数组等,id就是对应的索引

tf.nn.dropout()是tensorflow里面为了防止或减轻过拟合而使用的函数,它一般用在全连接层
Dropout就是在不同的训练过程中随机扔掉一部分神经元。也就是让某个神经元的激活值以一定的概率p,让其停止工作,这次训练过程中不更新权值,也不参加神经网络的计算。但是它的权重得保留下来(只是暂时不更新而已),因为下次样本输入时它可能又得工作了
参数说明:
x:指输入,输入tensor
keep_prob: float类型,每个元素被保留下来的概率,设置神经元被选中的概率,在初始化时keep_prob是一个占位符, keep_prob = tf.placeholder(tf.float32) 。tensorflow在run时设置keep_prob具体的值,例如keep_prob: 0.5
noise_shape : 一个1维的int32张量,代表了随机产生“保留/丢弃”标志的shape。
seed : 整形变量,随机数种子。
name:指定该操作的名字
dropout必须设置概率keep_prob,并且keep_prob也是一个占位符,跟输入是一样的:keep_prob = tf.placeholder(tf.float32)
train的时候才是dropout起作用的时候,test的时候不应该让dropout起作用

tensorflow.nn.bidirectional_dynamic_rnn()函数:

def bidirectional_dynamic_rnn(
cell_fw, # 前向RNN
cell_bw, # 后向RNN
inputs, # 输入
sequence_length=None,# 输入序列的实际长度(可选,默认为输入序列的最大长度)
initial_state_fw=None,  # 前向的初始化状态(可选)
initial_state_bw=None,  # 后向的初始化状态(可选)
dtype=None, # 初始化和输出的数据类型(可选)
parallel_iterations=None,
swap_memory=False, 
time_major=False,
# 决定了输入输出tensor的格式:如果为true, 向量的形状必须为 `[max_time, batch_size, depth]`. 
# 如果为false, tensor的形状必须为`[batch_size, max_time, depth]`. 
scope=None
)

outputs为(output_fw, output_bw),是一个包含前向cell输出tensor和后向cell输出tensor组成的二元组。假设 time_major=false, 而且tensor的shape为[batch_size, max_time, depth]。实验中使用tf.concat(outputs, 2)将其拼接。
output_states为(output_state_fw, output_state_bw),包含了前向和后向最后的隐藏状态的组成的二元组。

tf.nn.softmax_cross_entropy_with_logits()的用法,详见下面的链接,这是个很强大的函数,可以一步计算出loss的结果,具体的参数和用法见作者的博客:
https://blog.csdn.net/zj360202/article/details/78582895

读论文

1.Chinese NER Using Lattice LSTM
这篇文章主要是研究了一种格LSTM结构用于中文NER,它编码一个字符序列以及与词典匹配的所有潜在单词


该模型的核心思想是:通过Lattice LSTM表示句子中的单词,将潜在的词汇信息融合到基于字符的LSTM-CRF中
如上图所示,红色的cell部分是词汇产生的信息(就是LSTM的输出cell),关键在于这些输出怎样融合到主干LSTM中,作者提出了类似于LSTM的门控单元,具体细节见下面的公式:


其中,x(b,e,w)代表预训练的词向量,h(b,c)代表词首字符的cell输出


其中,x(e,c)代表当前字符的字符向量


作者运用了一种归一化的算法求出当前字符cell各种输入的权重。分母看起来有点复杂,其实就是句子中以当前词结尾的所有词汇的权重以及当前字符输入门的求和(取以e为底的指数使得结果为正)


最后,当前字符的cell就算出来了

2.FLAT: Chinese NER Using Flat-Lattice Transformer
这篇文章主要是对网格LSTM的改进,由于网格LSTM的复杂性和动态性,现有的网格LSTM很难充分利用GPU的并行计算,因此作者就提出了一种带有跨距的平面的网格结构,每个跨距对应于一个字符或单词在原始格中的位置,分为开始位置和结束位置:

Flat-Lattice TransformerLattice LSTM的改进主要有以下两点:
1.无损引入词汇信息:由于Transformer采用全连接的自注意力机制,因此Flat可以直接建模字符与所有匹配的词汇信息之间的交互
2.相对位置编码,让Transformer适应NER任务:

ps:这部分文章中给出的具体公式我还没看懂。。。。。。
很多解析都是参考这位大神的文章:
中文NER的正确打开方式: 词汇增强方法总结 (从Lattice LSTM到FLAT)
https://zhuanlan.zhihu.com/p/142615620?utm_source=wechat_session

你可能感兴趣的:(2020-10-13)