
自然语言处理
JessssseYule
数学博士在读,主要研究方向:预训练,自监督学习,神经科学
展开
-
公式分析self attention如何解决一词多义问题
今天无意中想到了一个问题,之前一直都在说,embedding向量可能会包括多个语义,所以我们才需要BiLSTM或者self attention提取出这个词在句子中的具体含义,当时我还觉得这种说法有点玄乎,今天想了一下才发现确实有道理。首先我们要回顾一下word2vec,不论是CBOW还是skip-gram,它们的思路都是通过上下文的词来分析中心词的语义,上图就是一个简单的CBOW,假设我们完成了训练,那么中间的h就是embedding向量,通过与W’的线性变换,输出的是所有词中出现在其上下文中的概率,原创 2020-12-15 16:56:31 · 616 阅读 · 0 评论 -
知识图谱系列(三):基于医疗知识图谱实现简单的对话系统
之前我们已经构建了一个简单的医疗知识图谱,这次就来看看怎么利用这个知识图谱建一个简单的对话系统,构筑的流程还是参考之前的项目,以后我们再结合深度学习进行改进。上图就反映了这个对话系统的分析思路,整体上接近一个基于规则的对话系统,首先我们需要对用户输入进行分类,其实就是分析用户输入涉及到的实体及问题类型,也就是Neo4j中的node、property、relationship,然后我们利用分析出的信息,转化成Neo4j的查询语句,最后再把查询的结果返回给用户,就完成了一次问答。整体上涉及到三个模块,问题原创 2020-12-02 18:11:55 · 4895 阅读 · 3 评论 -
知识图谱系列(二):构建一个医疗知识图谱
之前我们简单介绍了怎么构建一个知识图谱,这次就来看看一个完整的构筑流程,以QASystemOnMedicalKG作为参考,主要想展示一下从最初收集非结构化的数据、到一步步处理并通过知识图谱展示的简单流程。具体的爬虫过程可以看看这个博客的文章,我主要想快速过一遍这个流程,看看最后知识图谱是如何辅助对话系统的。首先,我们的数据来源是寻医问药,随便打开一个疾病,可以看到基本的信息:需要爬取的信息包括疾病名、所属目录、症状、治疗方案等等,都可以从页面上获取,得到了这些信息,我们就可以构建知识图谱,思路上原创 2020-12-02 13:04:42 · 14847 阅读 · 0 评论 -
知识图谱系列(一):如何构建一个简单的知识图谱
之前在了解对话系统的时候,就发现其实一个有应用价值的对话系统,需要引入外部知识辅助决策分析,所以我就打算最近学习一下知识图谱,并尝试结合知识图谱构建一个对话系统。知识图谱是谷歌提出的一个概念,从定义上来说,知识图谱就是结构化的语义知识库,是一种基于图的数据结构,用于描述物理世界中的概念及其相互关系。既然是图就有边和节点,边指的是事物之间的关系,而节点这里简单地分成两种,第一种是实体,所谓实体就是指现实世界中的一些具体的事物,比如说一个人、一座城市、一家公司等等,都属于实体的范畴。除此之外,我们可以考虑一原创 2020-12-01 21:49:22 · 26768 阅读 · 8 评论 -
对话系统在机票业务中的应用
最近打算深入研究对话系统,大致的计划是先了解对话系统在各个领域中的具体应用,看看其中涉及到的知识点、遇到的问题以及未来的发展方向,这次就先来看看去哪儿的机票业务智能客服。首先,我们需要了解机票业务的工作是什么,智能客服对于机票业务工作有什么帮助。一般来说,机票业务包括票号查询、购票、出票进度、出票问题、修改信息等等,对于客服而言,确定了具体的业务之后,需要根据订单的状况、航班的状况、客户的具体情况等信息给出合适的回答,这要求客服具备专业能力和信息获取能力。真人客服的数量终究是有限的,如果智能客服能帮助公原创 2020-11-12 19:38:04 · 354 阅读 · 0 评论 -
深度学习建模训练总结(七):梳理NLP发展里程碑——BERT
bert是近两年非常火的模型,最近简单看了一下,确实有几个很惊艳的地方,这次就来看看bert到底是一个什么运作原理。在正式讨论bert之前,首先需要讨论transformer到底还有什么缺点,之前也提到,transformer完全可以看成是完美版本的RNN,它一方面能够实现动态输入输出,同时也避免了长期依赖的问题,但是,在实际应用的时候,人们还是发现了几点不足,作为特征提取器,直接使用transformer和LSTM、RNN一样,只能单向处理信息,即使使用双向transformer,也不是真正意义上的双向原创 2020-09-28 09:00:44 · 588 阅读 · 0 评论 -
深度学习建模训练总结(六):梳理NLP发展里程碑——细看transformer
之前也提到了,一般而言我们会采用LSTM处理输入的句子,根据上下文等信息调整词向量,但是LSTM终究有长期依赖问题,这是它的结构决定的,而self-attention的出现,既可以实现以上的目的,同时又避免了长期依赖问题,那为什么不用self-attention替代LSTM进行分析呢,这就是transformer提出的缘由。简单来说,transformer就是在seq2seq的基础上,引入multi-head attention,用注意力机制全面替代CNN、LSTM、RNN,从结构上来说,虽然看起来复.原创 2020-09-17 13:26:42 · 642 阅读 · 0 评论 -
深度学习建模训练总结(五):梳理NLP发展里程碑——各种注意力机制对比分析
之前提到,seq2seq的一大缺点是单一的语义向量难以表达长序列的完整语义,而改善这一问题的一个有效方法就是结合注意力机制,在不同的时刻针对输出计算包含不同语义的语义向量:所谓注意力机制,本质上就是在分析过程中引入权重,在本文,我主要介绍两种注意力计算框架:原始的计算框架和multi-head attention,从原始的框架中又进一步划分为:soft attention(key=value)、soft attention(key!=value)、self-attention(query=key=va.原创 2020-09-17 13:22:58 · 6779 阅读 · 1 评论 -
深度学习建模训练总结(四):梳理NLP发展里程碑——seq2seq
因为我自己是比较希望做NLP方向的研究,之前简单回顾了一下基础的神经网络之后,接下来打算就从NLP的角度,来看看模型是怎么一步步改进发展的。对于自然语言处理,首先想到的问题肯定是怎么把自然语言转化为向数字表示,毕竟机器没办法理解人类的语言,只能处理数字,所以人们就研究出了很多embedding模型,关于embedding我想在之后详细谈谈,这里先暂时跳过。假设我们已经对自然语言进行了embedding,那么首先想到的自然就是使用最基本的神经网络进行处理和分析,也就是CNN和LSTM(RNN),这算是N.原创 2020-09-17 13:18:28 · 519 阅读 · 0 评论 -
对话系统综述
初看对话系统,感觉涉及到的知识理论比较广,所以这里特意整理一下,当然限于篇幅我也只能简单谈一下,没办法做到面面俱到,也可能有所不足,欢迎交流。首先,对话系统一般可以分为任务导向型对话系统和非任务导向型对话系统,任务导向型最经典的例子就是订票系统,除此之外,知识问答系统、乃至推荐系统我觉得都可以归类到任务导向型,因为他们都有一定的目标,提供了相关的功能,而非任务型对话系统最常见的例子就是聊天机器人...原创 2020-03-30 20:50:48 · 1163 阅读 · 0 评论 -
自然语言生成简述
终于来到pipeline任务型对话系统的最后一个模块,也就是自然语言生成,这次就来简单看一下自然语言生成到底在做什么。其实自然语言生成和自然语言理解几乎可以看成是一个逆过程,因为自然语言理解就是把人类的语言翻译成机器能理解的语言,而自然语言生成则是把机器内部处理的结果翻译成人类能理解的语言,所以这两个模块就像是人类和机器交流的翻译员。根据输入数据形式的不同,自然语言生成可分为数据到文本的生成和...原创 2020-03-30 15:50:58 · 3243 阅读 · 1 评论 -
DST与Neural Belief Tracker
之前介绍了自然语言理解、对话管理,其中对话管理包括DST和DPL,简单再说一遍,NLU是为了分析单一输入的语义,通过intent和slot表示语义,而DST是为了结合当前输入、上一时刻的输入和上一时刻系统的action分析出综合语义state(一般都是指slot-value),一般是指对NLU得到的slot进行更新,而DPL则是基于得到的state分析action。这里主要结合具体的模型讲一下...原创 2020-03-28 19:56:41 · 1129 阅读 · 0 评论 -
对话管理( Dialogue Manage)简述
对一个pipeline任务导向型对话系统来说,最重要的三个模块是自然语言理解、对话管理、自然语言生成,之前已经讨论过自然语言理解,这次就来谈一下对话管理,为了避免翻译上的偏差,接下来部分名词都直接用英语。首先思考一个问题,为什么一个对话系统需要对话管理,好像即使只有自然语言理解和自然语言生成也可以构成一个对话系统,确实如此,但这样的对话系统只能实现单轮对话,或者说,这样的系统是没有记忆的,比如一...原创 2020-03-28 18:56:48 · 4910 阅读 · 1 评论 -
再谈意图识别与语义槽填充
对话系统可以分为任务导向型和非任务导向型,其中任务导向型又可以分为pipeline和end to end两类方法,其中pipeline很多情况下都包括三大模块:自然语言理解、对话管理和自然语言生成,之前在自然语言理解的概述中就简单介绍了意图识别(分类)和语义槽填充的概念,这次就详细介绍一下它们的应用和模型。首先回顾一下意图识别的发展,最早的意图识别是基于规则模版的方法,但是不同的表达方式会导致规...原创 2020-03-25 22:03:57 · 5716 阅读 · 1 评论 -
自然语言理解概述
在文章的开头,我必须说明,自然语言理解的定义、理论在网上有太多不同的说法,我在这里给出的是我个人认为比较好理解、能梳理清楚各个子领域的一种概述,如果有哪里出错了麻烦指正。所谓自然语言理解,就是希望机器能像人类一样,具备理解语言的能力,就像另一半说没有生气,到底是真的没有生气还是气到肺都炸了,这就需要很高的语言理解能力了。具体来说,我觉得自然语言理解要解决两个问题,第一个是理解什么,第二个是机...原创 2020-03-17 20:01:39 · 8522 阅读 · 0 评论 -
深度学习半年学习心得(如何入门)
从一句代码都不会写到现在学习自然语言处理已经有一年多,虽然标题写的是深度学习的学习心得,但其实更多是这一年多的时间里,关于编程、模型等等的学习的回顾和反思。首先我本科学的是数学,不过说实话学得也不好,很多知识理论考完试就忘了,印象最深的只有实变函数,因为难得逆天,所以实际上,我的背景就是数学学得不好,编程也没怎么接触过(除了用过matlab做数学建模),这样的我却因为一些巧合去了一家企业实习做...原创 2019-10-16 19:53:05 · 16034 阅读 · 16 评论 -
CNN, RNN, Transformer关于特征提取的对比分析
在自然语言领域,不论是什么问题,首先都会有一种比较主流的操作,就是先对输入基于预训练的词向量做embedding,再用一个结构(特征提取器)结合上下文去做多一次embedding,这样得到的词向量,就可以有效地反映出自身的含义,以及在句子中与其他词之间的联系了。即使特征提取器五花八门,但总的来说可以认为都是基于CNN、RNN、transformer的改进版本,所以他们或多或少都有着这几个模型的...原创 2019-10-16 17:06:54 · 6357 阅读 · 0 评论 -
word2vec
之前介绍了词袋模型,词袋模型是一种用向量表示句子的方法,像这样把一段文本转换成数值形式,就称为词嵌入(word embedding),除了词袋模型之外还有很多方法可以对文本进行转换,现在就来介绍另外一种非常著名的方法word2vec。之前就提到了,通过词袋模型表示句子并没有考虑到词与词之间的联系,同时需要注意的是,如果我们用词袋法表示一个词,就相当于独热编码的方法,会产生一个稀疏矩阵。而我们现...原创 2019-08-21 16:53:13 · 2648 阅读 · 0 评论 -
GloVe(Global Vector)
之前介绍了word2vec模型,简单来说,它就是通过一个个句子去发掘出词与词之间的关系,再通过向量去表示出这种关系。而现在将要介绍的GloVe,我觉得它的思想也是和word2vec接近的。word2vec是通过一个个句子去分析词与词之间的关系,而GloVe是通过整个语料库所有的句子去分析词与词之间的关系,在具体说明之前,首先介绍一下共现矩阵(co-occurrence matrix)。共现矩...原创 2019-08-21 17:13:11 · 1907 阅读 · 1 评论 -
seq2seq
seq2seq可以说是基于RNN提出的生成序列的模型,一般来说,对于基础的RNN我们可以输入一段序列数据得到一个输出结果,而seq2seq则可以输出一段序列结果。seq2seq分为encoder(编码)和decoder(解码)两个过程:下方就是一个正常的RNN,输出C称为语义向量,用来表示输入的整个序列的含义,得到语义向量之后,就来到解码过程,把语义向量输入到另一个RNN,RNN基于语义向...原创 2019-09-06 14:49:26 · 1619 阅读 · 0 评论 -
注意力机制
之前介绍了seq2seq模型,简单来说它分为两个过程,第一个是encoder,将输入的序列压缩成一个语义向量,然后在decoder过程中再利用RNN重新转换成新的序列。seq2seq主要有一个问题,因为在encoder中使用了RNN处理输入序列,这就意味着对于序列的开头,语义向量包含了较少的信息,在模型的学习过程中,序列开头的贡献也较少,所以就提出了结合注意力机制对seq2seq进行改进。所...原创 2019-09-06 14:53:38 · 438 阅读 · 0 评论 -
文本匹配与ESIM模型详解
ESIM(Enhanced Sequential Inference Model)是一个综合应用了BiLSTM和注意力机制的模型,在文本匹配中效果十分强大,也是目前为止我见过结构最复杂的模型,下面将会结合公式和感性的理解去一步步推导这个模型。首先什么是文本匹配,简单来说就是分析两个句子是否具有某种关系,比如有一个问题,现在给出一个答案,我们就需要分析这个答案是否匹配这个问题,所以也可以看成是一...原创 2019-09-06 15:01:44 · 9891 阅读 · 1 评论 -
概率图模型
概率图模型是一类用图来表示变量之间的关系的概率模型,把一个个变量看成图中的一个个节点,变量之间如果存在关系就用线连起来,根据线的有向和无向,可以进一步划分为有向图模型和无向图模型:所谓有向无向就是指变量之间到底是单向的依赖还是互相依赖,具体来说,就是如何求一系列变量发生的联合概率P(x1,x2,…,xn)。对于有向图来说,联合概率的求法是:P(x1,...,xn)=∏i=0P(xi∣π(...原创 2019-09-21 19:52:28 · 413 阅读 · 0 评论 -
隐马尔可夫模型
之前介绍了概率图模型,而隐马尔可夫模型就属于其中的有向图模型。首先来回顾一下马尔可夫假设:无记忆性,也就是这一时刻的状态只受前一时刻的影响,而不受再往前时刻的状态影响。现在来举一个例子说明一下什么是隐马尔可夫模型:上面就是一个概率图模型,可以看出这是有向图,一共有三种状态:sunny、rainy、cloudy,同时上图也表明了状态之间的转移概率,这些状态是不可被观察的,也被称为隐变量。除...原创 2019-09-21 19:55:47 · 565 阅读 · 0 评论 -
条件随机场详解
为了更好地理解条件随机场,这里主要以命名实体识别为例子,介绍如何和LSTM结合,进行NER。首先什么是NER,就是针对一句话的每个词,都标注出它们的词性,比如输入一句"Dog play football",就输出"名词 动词 名词",一开始,我们往往会想到seq2seq这类模型,但是有一个问题,单纯的LSTM、seq2seq这类模型,输出会选择针对输入序列最优的输出,可是并没有考虑到输出序列应...原创 2019-09-21 20:04:47 · 2897 阅读 · 0 评论 -
self attention(自注意力机制)
self attention是注意力机制中的一种,也是transformer中的重要组成部分,本文先重新回归一下注意力机制,再做进一步介绍。正如之前说的,注意力机制的目的是根据我们的目标,去关注部分细节,而不是基于全局进行分析,所以核心就是如何基于目标确定我们要关注的部分,以及在找到这部分细节之后进一步进行分析。这里先以文本匹配作为例子进行介绍。假设我们要分析两个文本是不是重复的:Iama...原创 2019-09-28 19:37:35 · 59372 阅读 · 8 评论 -
transformer模型分析
在介绍self attention时也提到,用CNN、RNN处理序列数据的时候,无法很好地进行并行计算,同时也会存在信息的丢失,因而transformer就选择直接舍弃CNN、RNN,完全由attention机制构成。学习一个模型,我觉得最重要的是首先要明白模型要做什么,以及它为什么这样做,对transformer来说,它本质上还是一个encoder-decoder(seq2seq)模型,在之...原创 2019-09-28 19:45:36 · 1544 阅读 · 1 评论 -
词袋模型(BOW)
做自然语言处理,第一步肯定是数据的预处理了,对于图像数据,我们可以把图像转化为矩阵,那么对于自然语言,我们又应该进行怎样的转化呢。方法有很多,在网上一搜,会发现word2vec、分布式表示、word embedding等等一大堆名次,但是可以说,他们都是为了让文本能够以数字的形式呈现,要么是一维向量,要么是矩阵等等,不同的方法模型有不同的优缺点,这里先从比较简单的方法说起,也就是本文的主角词袋...原创 2019-08-21 16:40:45 · 7807 阅读 · 1 评论