机器阅读理解 - LSTM与注意力机制 - 斯坦福问答数据集 (SQuAD)

本文介绍注意力机制如何应用于阅读理解类任务, 并介绍了由此任务催生的一些注意力变种. 注意力机制应用于阅读理解 The Standford question and answer dataset (SQuAD) 是由 Rajpurkar 等人提出的一个较有挑战性的阅读理解数据集。该数据集包含 10 万个(问题,原文,答案)三元组,原文来自于 536 篇维基百科文章,而问题和答案的构建主要是通过众包的方式,让标注人员提出最多 5 个基于文章内容的问题并提供正确答案,且答案出现在原文中。SQuAD 和之前的完形填空类阅读理解数据集如 CNN/DM,CBT 等最大的区别在于:SQuAD 中的答案不在是单个实体或单词,而可能是一段短语,这使得其答案更难预测。SQuAD 包含公开的训练集和开发集,以及一个隐藏的测试集,其采用了与 ImageNet 类似的封闭评测的方式,研究人员需提交算法到一个开放平台,并由 SQuAD 官方人员进行测试并公布结果。 由于 SQuAD 的答案限定于来自原文,模型只需要判断原文中哪些词是答案即可,因此是一种抽取式的 QA 任务而不是生成式任务。简单的 SQuAD 的模型框架可以参考seq2seq:Embed 层,Encode 层 和 Decode 层。Embed 层负责将原文和问题中的 tokens 映射为向量表示;Encode 层主要使用 RNN 来对原文和问题进行编码,这样编码后每个 token 的向量表示就蕴含了上下文的语义信息;Decode 层则基于 query-aware 的原文表示来预测答案起始位置。 但这个文本数据集涉及问题,原文,答案三个部分, 特别是需要根据问题在原文中搜寻答案的范围, 这就涉及如果把问题的信息提取出来并作用于原文. 目前各种前沿模型的关注点几乎都是在如何捕捉问题和原文之间的交互关系,也就是在 Encode 层和 Decode 层之间, 使用一个 Interaction 层处理编码了问题语义信息的原文表示,即 query-aware 的原文表示,再输入给 Decode 层。而本来应用机器翻译Attention机制就能很好的处理这种交互。 虽然注意力机制大同小异,但是不同的注意力权重(打分函数)带来的效果是不一样的。比较常用的是就是使用全局注意力机制中提到的 $$ \begin{aligned} score_{general}(t’ t) &= s^\top_{t’} W_\alpha h_t, \\ \end{aligned} $$ 就是用一个交互矩阵$W_\alpha$来捕捉问题和原文之间的交互关系....

2018-07-20 · 12 min · Cong Chan

从头理解注意力机制

注意力机制如何起源的 神经网络中的注意力机制启发自人类的视觉注意力机制,能够(高分辨率地)聚焦于图像中需要重点关注的目标区域(节省大脑资源),同时(低分辨率地)感知周围的图像,然后随着时间的推移调整焦点(状态调整)。 在神经网路中,注意力机制是为了解决什么问题? 在深度学习还没流行的时候, 传统的算法早已应用了注意力机制的思想. 比如一个非线性回归问题,对于代表位置的输入变量${x_1, …, x_m}$ 和 代表位置对应的输出值${y_1, …, y_m}$, 如何预测新的$x_n$对应的输出? Baseline 就是求均值, $$\frac{1}{m} \sum_{i=1}^{m} y_i$$ 当然更好的方案(Watson, Nadaraya, 1964)是根据不同的输入$x_i$给与$y_i$不同的权重, $$y = \sum_{i=1}^{m} \alpha(x, x_i) y_i $$ 这里$x$代表一个新的输入(作为query), 根据$x$和已有的位置$x_i$(作为key)进行某种运算, 得到$x_i$对应的输出$y_i$(作为value)的权重. 如果每一个权重都是一个Guassians分布, 并正则化, 则一个加权的回归预测模型就是:$$f(x) = \sum_i y_i \frac{k(x_i, x)}{\sum_j k(x_j, x)}$$ 这个算法的"深度学习"版本, 就是其权重是通过优化器(如sgd)学习得来, 并且把平均运算改为加权池化(weighted pooling). 如何简单直观地理解注意力机制 虽然注意力机制一开始被应用于图像识别领域,但是后来推广到神经机器翻译(NMT)中(Seq2Seq for Machine Translation, Sutskever, Vinyals, Le ‘14). NMT也是注意力机制在NLP领域最早最成功的应用之一. 在上图中,Echt,Dicke和Kiste词被送到编码器中,并且在特殊信号(未显示)之后,解码器开始生成翻译后的句子。解码器不断生成单词,直到产生特殊的句子结尾标记(如<eos>)。也就是说解码器仅根据最后一个隐含状态$h_3$来生成序列. 假如这个句子很短, 那么效果其实是很好的. 不过对于比较长的句子, 那么这个架构的弱点就暴露无疑了. 首先, 编码器能否把句子的所有信息(语言学上的和常识等知识)都理解/捕捉到? 其次, 受限于目前的实现技术(主要是硬件), 单个隐含状态(如$h_3$这个向量)的维度大小是有限的, 而句子长度以及语言的组合情况是无限的, 单靠$h_3$自身是存储信息能力是有限的. 再者, 解码器是否有足够的解码能力从一个隐含状态中解码出所有的信息? 虽然大部分句子是相对紧凑的, 但语言有个特点, 就是一个词有可能和前面好几步之外的词有联系, 比如一些指代词用于指代文本最开头出现的名词; 语义上, 某个句子的理解, 可能依赖于前面多个句子; 当然往大了说, 要理解一篇文章或一本书, 我们通常需要理解并联系多个段落, 多个章节....

2018-07-10 · 4 min · Cong Chan

循环神经网络

循环神经网络 当人类阅读时,会根据对之前单词的理解和记忆来辅助理解当前看到的每个单词。也就是人能够很好地处理语言的长距离依赖特性(long-term dependency)。在自然语言处理任务中,很多传统的模型无法做到这一点,比如前馈神经网络;而传统的n-gram模型固然可以通过把把n系数增大来捕捉长距离依赖,但带来的非常巨大的内存消耗。 循环神经网络(Recurrent Neural Networks, RNNs)可以看做是多个共享参数的前馈神经网络不断叠加的结果 ![](http://colah.github.io/posts/2015-08-Understanding-LSTMs/img/RNN-unrolled.png “A recurrent neural network and the unfolding in time of the computation involved in its forward computation. “image from: http://colah.github.io”) 这里的核心是想办法解码历史信息, 即通过递归方程$s_i = R(x_i, s_{i−1})$让$s_i$解码序列$x_{1:n}$. 比如把所有历史信息累加就是一种非常简单粗暴的方式, 这样得到的是连续词袋模型(continuous-bag-of-words model)$s_i = R_{CBOW}(x_i, s_{i-1}) = x_i + s_{i−1}$, 虽然简单,但这种RNN其实忽略了数据的时序性质。 一般意义上的RNN是指Elman Network or Simple-RNN (S-RNN)(Elman [1990]), $s_i = R_{SRNN}(x_i, s_{i-1}) = g(x_iW^x + s_{i−1}W^s + b)$, 也就是把历史信息先进行线性变换(乘以矩阵), 再和bias加起来, 再通过一个非线性激活函数(tanh或ReLU). 添加了线性变换再进行非线性激活, 使网络对输入的顺序变得敏感。 在使用时, 给定输入序列(单词序列或语音)得出输出序列的过程如下: 把每个词$x_{t}$(以向量表示)逐个输入RNN 每一时间步$t$都有对应的隐含状态$s_t$,用于解码历史信息: $s_t = g(Ux_t + Ws_{t-1} + b)$....

2018-05-15 · 3 min · Cong Chan

神经网络用于文本分类

文本分类 文本分类是很多业务问题中广泛使用到的NLP/监督机器学习(ML)。文本分类的目标是自动将文本/文档分类为一个或多个预定义类别。目前的成熟思路是用词向量解码文本,然后使用传统机器学习模型或者深度神经网络模型来做分类。 文本分类是学术界和工业界非常活跃的研究领域。本文主要介绍用于文本分类的几种神经网络模型方法,并比较它们的性能,代码实现主要基于Keras。文中代码都在这个DeepTextGitHub项目中. 文本分类的一些示例包括: 从社交媒体中了解受众情绪(😁 😐 😥) 检测垃圾邮件和非垃圾邮件 自动标记客户查询 将新闻文章📰分类为预定义主题 端到端文本分类流水线 端到端文本分类流水线由以下组件组成: 训练文本:输入文本,有监督模型能够通过已标注数据来学习和预测所需的类。 特征向量:特征向量是用于解码输入数据特征的信息的向量。 标签:预定义的类别/类,作为模型预测的目标。 算法模型:能够处理文本分类的算法(在我们的例子中:CNN,RNN,HAN, Fasttext) 预测:已经在历史数据集上训练过的模型,可以用于执行标签预测。 这里使用汽车消费者的评测数据集,在tsv文件中, 第一列是序号对我们没用, 第二列是label(0, 1),分别代表(消极,积极)评价,第三列是文本. 1 操控性舒服、油耗低,性价比高 0 动力的确有点点让我相信了up的确是个代步车而已! 1 1。车的外观很喜欢。2。省油,现在磨合期7.3,相信以后还会下降。 1 内饰的做工和用料同级别同价位最厚道的 0 减震系统太硬! 数据处理使用的类,具体见代码链接 class DataProcessor(object): """ Base class for data converters for sequence classification data sets. helper funcitons [read_tsv, read_text, read_json] """ ... class SampleProcessor(DataProcessor): """ Sample processor for the classification data set. Tranform the text to tensor for training if use pre-train model, need vocabulary file usage: process data files >>> processer = SampleProcessor(config, ) provide your own data in list format [train_X, train_Y, test_X, test_Y] >>> processer = SampleProcessor(config, data) """ 词向量 使用包含外部知识的embedding表达字词是目前的主流方法,经典的如word2vec,GLoVe,较新进的 ELMo,BERT,等预训练向量,集成了关于单词的新信息(词汇和语义),这些信息已经在非常大的数据集上进行了训练和提炼。...

2018-01-15 · 3 min · Cong Chan

信息抽取

信息抽取 1997年MUC会议(MUC-7) 召开时,评测任务已经增加到5个: ① 场景模板(scenario template, ST)填充:定义了描述场景的模板及槽填充规范; ② 命名实体(named entity, NE)识别:识别出文本中出现的专有名称和有意义的数量短语, 并加以归类; ③ 共指(coreference, CR)关系确定:识别出给定文本中的参照表达( referring expressions),并确定这些表达之间的共指关系; ④ 模板元素(template element, TE)填充:类似于人名和组织机构名识别,但是要求系统必须识别出实体的描述和名字,如果一个实体在文本中被提到了多次,使用了几种可能的描述和不同的名字形式,要求系统都要把它们识别出来,一个文本中的每个实体只有一个模板元素[Grishman and Sundheim, 1996]; ⑤ 模板关系(template relation, TR):确定实体之间与特定领域无关的关系。 1999年起美国NIST组织了自动内容抽取(automatic content extraction, ACE)评测会议,旨在研究和 开发自动内容技术以支持对三种不同来源文本(普通文本、经语音识别后得到的文本、 由OCR识别得到的文本)的自动处理,以实现新闻语料中出现的实体、关系、事件等内容的自动抽取。评测任务设计: 实体检测与跟踪(entity detection and tracking, EDT)、数值检测与识别(value detection and recognition, VDR)、时间识别和规范化(time expression recognition and normalization, TERN)、关系检测与描述(relation detection and characterization, RDC)、事件检测与描述(event detection and characterization, EDC)和实体翻译(entity translation, ET)等。 TF-IDF 关键词抽取 import jieba.analyse jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=()) sentence 为待提取的文本 topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20 withWeight 为是否一并返回关键词权重值,默认值为 False allowPOS 仅包括指定词性的词,默认值为空,即不筛选....

2018-01-11 · 1 min · Cong Chan

Topic Modelling - 主题建模以及隐变量模型

本篇介绍 topic modeling, 以及一个经典的算法Latent Dirichlet allocation, 文本挖掘与语义理解的集大成者(至少在深度学习统治之前). 当然LDA不仅仅局限于文本, 还可应用于涉及大量数据集的各种问题,包括协同过滤,基于内容的图像检索和生物信息学等领域的数据。 Topic Modelling 大规模文本挖掘的核心问题, 就是用数学模型代替人力来理解文本语义,目标是找到对集合成员(如一堆文本)的数学/统计描述,以便能够对这些大型集合进行高效处理,同时保留对基本任务(如分类,检测,摘要以及相似性和相关性判断)有用的基本统计关系。 在这方面的研究方法很多,特别是信息检索(IR)领域. 一个基本方法是将语料库中的每个文档向量化,向量中的每个实数代表计数率。比如经典的tf-idf方法,用Document-Term Matrix来表达不同词在不同文档出现的情况差异, 一般term就是word作为features, 所以在这里我们表示document-word matrix(DWM), 就是DWM[i][j] = The number of occurrences of word_j in document_i. Doc 1: I have a fluffy cat. Doc 2: I see a fluffy dog. DWM I have a fluffy cat see dog doc1 1 1 1 1 1 0 0 doc2 1 0 1 1 0 1 1 然后进行normalization, 去和 inverse document frequency count(IDF)进行比较....

2017-12-23 · 4 min · Cong Chan

语言模型

语言模型 语言模型Language modeling(LM)最初是针对语音识别问题而开发的, 现在广泛用于其他NLP应用中, 比如机器翻译需要利用LM来给翻译出的句子打分. 假设我们有一个语料库 - 某种语言的句子的无限集合$\mathcal{V^+}$(这些句子是由有限的词$\mathcal{V}$组成的)。例如,我们可能从网上获得大量文本。给定了此语料库,我们想估计LM的参数。这些参数包含语料库中所有单词的有限集合$\mathcal{V}$, 以及句子的概率分布函数$p(x_1, x_2, …, x_n)$,必须满足 For any $\langle x_1…x_n \rangle \in \mathcal{V^+}$, $p(x_1, x_2, …, x_n) ≥ 0$ $\sum_{\langle x_1…x_n \rangle \in \mathcal{V^+}}p(x_1, x_2, …, x_n) = 1$ 比如,当$\mathcal{V}$只有cat, eat, fish, 那么它组合成的句子按照人类的评价标准, 通顺程度从高到低是: cat eat fish, fish eat cat, cat fish eat, eat cat fish, eat fish cat, fish cat eat. 这些是可能出现的句子(还没出现的不代表未来不会出现), 从概率分布的角度看待, 这些句子的概率之和是1, 因为这三个词只能组成这几个句子. 而LM的意义就在于能够赋予cat eat fish最大的概率, 代替人来判断句子是否准确, 通俗的说是一个句子通顺打分机器. 广义的语言模型, 可以计算任何连续的单词或者任何其他序列数据(比如语音)出现的概率, 当然是以参数的训练样本的角度来看待。除了为每个词序列指定概率之外,语言模型还指定给定的单词(或单词序列)跟随前面的单词序列的似然概率。...

2017-11-12 · 2 min · Cong Chan

Inf Course Note - Accelerated Natural Language Processing

爱丁堡大学信息学院课程笔记 Accelerated Natural Language Processing, Informatics, University of Edinburgh References: Accelerated natural language processing ANLP revision guide Lecture Slides from the Stanford Coursera course Natural Language Processing, by Dan Jurafsky and Christopher Manning 概率模型 Probability Model 概率模型是随机现象的数学表示,由样本空间,样本空间内的事件以及与每个事件相关的概率定义。目标是模拟给一个事件发生的概率 估算概率(Probability Estimation)一般使用最大似然估计(MLE,相关频率):$$p(x_i) = \frac{Count(x_i)}{\sum_{i=0}^nCount(x_i)}$$ 平滑Smoothing 一般用于处理0概率的问题,比如在训练集中看不到, 但出现在测试集中的词。 Language modeling To compute the probability of sentence /sequence of words $P(w_1, w_2, w_3…)$, or to predict upcomming words $P(w|w_1, w_2, w_3…)$… a language model is also a probability model....

31 min · Cong Chan