SQLNet阅读笔记
该论文首次提出基于草图(sketch)的生成模型。基于草图的方法要完成的测序任务属于固定模式,不需要预测 SQL 语句中的所有内容,即只预测关键内容。(下图 a 中的标有“$”的部分)
为了解决Seq2SQL使用强化学习效果不明显和WHERE子句条件“顺序问题”的问题,SQLNet将SQL语句分成了SELECT和WHERE两个部分,每个部分设置了几个槽位,只需向槽位中填入相应的符号即可。
SELECT子句部分与Seq2SQL类似,不同地方在于WHERE子句,它使用了一种sequence-to-set(由序列生成集合)机制,用于选取目标SQL语句中的WHERE子句可能出现的列。
基于列注意的序列到集合预测Sequence-to-set预测预测哪些列名出现在感兴趣的子集中,而不是生成一系列列名。
$E_{col}$和$E_Q$是分别为列名col和问句Q的在双向LSTM中的隐藏状态,$u_c$和$u_q$是两个可训练列向量。
Column attention由于$E_Q$仅计算问句的隐藏状态,因此无法记住在预测特定列名时有用的特定信息。如“number”与预测WHERE子句中的列“No.”更 ...
Seq2SQL阅读笔记
Seq2SQL将生成的SQL语句分为三个部分:聚合操作Aggregation(SUM、COUNT、MIN、MAX等);SELECT:选取列;WHERE:查询条件。
首先对query的聚合操作进行分类,并添加一个空操作符表示无聚合。接着指向输入表中对应于SELECT列的一列。最后通过pointer network生成SQL查询语句。
聚合操作聚合操作的选择取决于问题。采用注意力机制进行分类。$ a_t^{inp}=W^{inp}h_t^{enc} $,代表输入序列的第t个token的注意力得分,权重矩阵与第t个token的输入编码乘积。归一化总的注意力得分,$ B^{inp}=softmax(a^{inp})$。输入表示$k^{agg}$是由归一化分数$B^{inp}$加权的输入编码$h^{enc}$之和。
k^{agg}=\sum_tB_t^{inp}h_t^{enc}$a^{agg}$表示聚合操作的得分,如COUNT,MIN,MAX和无聚合操作NULL。通过对输入表示$k^{agg}$应用多层感知机(MLP)来计算$a^{agg}$。
a^{agg}=W^{agg}tanh(V^ ...
用Pytorch实现自动写诗
数据集本次实验数据集来自GitHub上中文诗词爱好者收集的5万多首唐诗原文。原始文件是Json文件和Sqlite数据库的存储格式,此项目在此基础上做了两个修改:
繁体中文改为简体中文:原始数据是繁体中文,更能保存诗歌的意境,但是对于习惯简体中文来说有点别扭。
把所有数据进行截断和补齐成一样的长度:由于不同诗歌的长度不一样,不易拼接成一个batch,因此需要将它们处理成一样的长度。
将原始数据集处理成一个numpy的压缩包tang.npz,里面包含三个对象:
data(57580,125)的numpy数组,总共有57580首诗歌,每首诗歌长度为125字符。在诗歌的前面和后面加上起始符和终止符。长度不足125的诗歌,在前面补上空格(用</s>表示)。对于长度超过125的诗歌,把结尾的词截断。之后将每个字都转成对应的序号。
word2ix:每个词和它对应的序号。
ix2word:每个序号和它对应的词。
在data.py中主要有以下三个函数:
_parseRawData:解析原始的json数据,提取成list。
pad_sequences:将不同长度的数据截断或补齐成一样 ...
TextCNN
TextCNN
原理:核心点在于使用卷积来捕捉局部相关性,在文本分类任务中可以利用CNN提取句子中类似n-gram的关键信息。
textcnn详细过程:第一层是图中最左边的7乘5的句子矩阵,每行是词向量,维度=5。然后经过不同 filter_size的一维卷积层(这里是2,3,4),每个filter_size 有filter_num(这里是2)个输出 channel。第三层是一个1-max pooling层,这样不同长度句子经过pooling层之后都能变成定长的表示了,最后接一层全连接的 softmax 层,输出每个类别的概率。
一维卷积(conv-1d):经过词向量表达的文本为一维数据,因此在TextCNN卷积用的是一维卷积。
使用数据集:CNEWS
pytorch代码实现:textcnn_baseline
TextCNN网络
1234567891011121314151617181920212223class TextCNN(nn.Module): """CNN模型""" def __init__(s ...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment
Text2SQL综述
简介Text-to-SQL系统能够将自然语言描述转化成对应的SQL查询语句,这项技术能够有效地辅助人们对海量的数据库进行查询。因此,该项研究引起了工业界和学术界的广泛关注。其中,WikiSQL、Spider等大规模标注数据集进一步指出了该技术目前面临的挑战:泛化性(跨领域)、复杂性(SQL语法)、正确性(问题和表格的对齐关系),也促进了一系列后续算法的研究与系统的开发。
在这里,我们给出Text-to-SQL任务一个相对正式的定义:在给定关系型数据库(或表)的前提下,由用户的提问生成相应的SQL查询语句。下图是一个具体的实例,问题为:有哪些系的教员平均工资高于总体平均值,请返回这些系的名字以及他们的平均工资值。可以看到该问题对应的SQL语句是很复杂的,并且有嵌套关系。
Spider数据集的样例
相关数据集介绍
现有的Text2SQL数据集
早期数据集:ATIS&GeoQueryATIS来源于机票订阅系统,由用户提问生成SQL语句,是一个单一领域且上下文相关的数据集。GeoQuery来源于美国的地理,包括880条的提问与SQL语句,是一个单一领域且上下文无关的数据集。
Wi ...
BPE分词、LabelSmoothing标签平滑正则化
BPE(Byte Pair Encoding)分词BPE是一种根据字节对进行编码的算法。主要目的是为了数据压缩,算法描述为字符串里频率最常见的一对字符被一个没有在这个字符中出现的字符代替的层层迭代过程。基本思路是将使用最频繁的字节用一个新的字节组合代替,比如用字符的n-gram替换各个字符。例如,假设(‘A’, ‘B’) 经常顺序出现,则用一个新的标志’AB’来代替它们。
Transformer NLP 预训练模型都通过 embedding 词典来表征词义,当遇见没见过的词的时候,以前是用”< u nk>”代替,这样会造成对新事物(新词、网络词、简写词)理解能力很差,BPE就是来解决这个问题的。英文中会有词根和造词现象例如: “greenhand” 如果你的词典中没有这个词,那么就可以把它拆成 “green”,“hand”两个词,这里green 向量会跟发芽一类的词相近有新生的意思,hand有操作、手的意思那么就不难推测出greenhand是新手。这个过程中会参考一个词典,这个词典从上往下是一个个词对,对应的顺序就是它出现的频率,越往上的词越高频率。对应中文相当于分词了。
...
Transformer详解
[TOC]
0. Transformer直观认识Transformer 和 LSTM 的最大区别,就是 LSTM 的训练是迭代的、串行的,必须要等当前字处理完,才可以处理下一个字。而 Transformer 的训练时并行的,即所有字是同时训练的,这样就大大增加了计算效率。Transformer 使用了位置嵌入 (Positional Encoding) 来理解语言的顺序,使用自注意力机制(Self Attention Mechanism)和全连接层进行计算。
Transformer 模型主要分为两大部分,分别是 Encoder 和 Decoder。Encoder 负责把输入(语言序列)隐射成隐藏层,然后解码器再把隐藏层映射为自然语言序列。
上图为 Transformer Encoder Block 结构图,注意:下面的内容标题编号分别对应着图中 1,2,3,4 个方框的序号
1. Positional Encoding如下图所示,Transformer模型对每个输入的词向量都加上了一个位置向量。这些向量有助于确定每个单词的位置特征,或者句子中不同单词之间的距离特征。词向量加上位置向量 ...
LSTM
[TOC]
1.LSTM网络 长短期记忆网络( Long Short-Term Memory Network , LSTM ) [Gers et al.,2000; Hochreiter et al., 1997] 是循环神经网络的一个变体,长短期记忆是指长的“短期记忆”,可以有效地解决简单循环神经网络的梯度爆炸或消失问题.
LSTM 网络的循环单元结构
2.LSTM核心思想 LSTM 的关键是 cell 状态,即记忆单元c。cell 状态的传输就像一条传送带,向量从整个 cell 中穿过,只是做了少量的线性操作,这种结构能很轻松地实现信息从整个 cell 中穿过而不做改变(这样就可以实现长时期地记忆保留)。在 LSTM 网络中,记忆单元c可以在某个时刻捕捉到某个关键信息,并有能力将此关键信息保存一定的时间间隔.记忆单元c中保存信息的生命周期要长于短期记忆,但又远远短于长期记忆,因此称为长短期记忆( Long ...
贪心搜索、维特比算法、集束搜索、梯度裁剪
贪心搜索greedy search🍓每一步选择每个输出的最大概率,直到出现终结符或最大句子长度。
维特比算法Viterbi algorithm🍈维特比算法是一种动态规划算法。它用于寻找最有可能产生观测事件序列的维特比路径——隐含状态序列,特别是在马尔可夫信息源上下文和隐马尔可夫模型中。viterbi算法是每次记录到当前时刻,每个观察标签的最优序列,每次只需要保存到当前位置最优路径,之后循环向后走。到结束时,从最后一个时刻的最优值回溯到开始位置,回溯完成后,这个从开始到结束的路径就是最优的。
集束搜索beam search🍒集束搜索可以认为是维特比算法的贪心形式,在维特比所有中由于利用动态规划导致当字典较大时效率低,而集束搜索使用beamsize参数来限制在每一步保留下来的可能性词的数量。集束搜索是在测试阶段为了获得更好准确性而采取的一种策略,在训练阶段无需使用。
假设字典为[a,b,c],beam size选择2,则如下图有:
梯度裁剪Gradient Clipping🍑梯度裁剪是解决梯度爆炸的一种技术,其出发点是非常简明的:如果梯度变得非常大,那么我们就调节它使其保持较小 ...
transformer中文小结
1. 背景🤡Attention机制最早在视觉领域提出,2014年Google Mind发表了《Recurrent Models of Visual Attention》,使Attention机制流行起来,这篇论文采用了RNN模型,并加入了Attention机制来进行图像的分类。
2015年,Bahdanau等人在论文《Neural Machine Translation by Jointly Learning to Align and Translate》中,将attention机制首次应用在nlp领域,其采用Seq2Seq+Attention模型来进行机器翻译,并且得到了效果的提升。
2017 年,Google 机器翻译团队发表的《Attention is All You Need》中,完全抛弃了RNN和CNN等网络结构,而仅仅采用Attention机制来进行机器翻译任务,并且取得了很好的效果,注意力机制也成为了大家近期的研究热点。
2. Transformer🤑大部分序列处理模型都采用encoder-decoder结构,其中encoder将输入序列($ x_1,x_2,…,x ...
Get To The Point: Summarization with Pointer-Generator Networks
一 摘要🐶传统的Seq2Seq+Attention模型存在三个缺陷:
难以准确复述原文细节。
无法处理原文中的未登录词(OOV)。
在生成的摘要中存在一些重复的部分
此文提出一种以两种正交的方式增强了增强标准的Seq2Seq+Attention模型
使用指针生成器网络(pointer-generator network) ,通过指针从源文件中拷贝词,同时保留通过生成器生成新单词的能力。
使用覆盖率(coverage) 机制,追踪哪些信息已经在摘要中,避免生成具有重复片段的摘要。
二 模型🐱
baseline:sequence-to-sequence 模型
指针生成器网络(pointer-generation network)
覆盖率机制(coverage mechanism),可以被加在上述两种模型架构上
2.1 seq2seq + Attention模型
encoder采用单层双向LSTM,训练数据中的文档被一个一个地喂入encoder中,产生encoder的隐藏层状态$h_i$的序列。
decoder部分采用一个单层单向LSTM,每一步的输入是前一步预测的词的词 ...