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,每一步的输入是前一步预测的词的词 ...
多模态机器学习
什么是多模态机器学习🍌每一种信息的来源或者形式,都可以称为一种模态。例如,人有触觉,听觉,视觉,嗅觉;信息的媒介有语音、视频、文字等;多种多样的传感器,如雷达、红外、加速度计等。
同时,模态也可以有非常广泛的定义,比如我们可以把两种不同的语言当做是两种模态,甚至在两种不同情况下采集到的数据集,亦可认为是两种模态。
因此,多模态机器学习,英文全称 MultiModal Machine Learning (MMML),旨在通过机器学习的方法实现处理和理解多源模态信息的能力。目前比较热门的研究方向是图像、视频、音频、语义之间的多模态学习。
多模态学习的分类多模态学习可以划分为以下五个研究方向:
1.多模态表示学习 Multimodal Representation2.模态转化 Translation3.对齐 Alignment4.多模态融合 Multimodal Fusion5.协同学习 Co-learning
多模态表示学习🍏单模态的表示学习负责将信息表示为计算机可以处理的数值向量或者进一步抽象为更高层的特征向量,而多模态表示学习是指通过利用多模态之间的互补性,剔除模态间的冗余性,从而 ...