
NLP
星海千寻
学习使我快乐,每天进步一点点,夯实基础,足够努力,未来定可期。缓慢而坚持地学习,
花一年的时间蜕变,他日剑指长虹。
展开
-
NLP《GPT》
按照时间来看,我们先看看这几个大名鼎鼎模型的顺序哈。(1)2017年基于论文《Attention is all you need》,推出了一个超越RNN的神经网络结构,即Transformer,这个我们也是学习过了的。(2)2018年,OpenAI基于Transformer提出了GPT;(3)2019年,Google推出了GPT的对标版本BERT;(4)2019年,OpenAI推出了GPT的升级版GPT2.0。一:GPT(Generative Pre-Training)我们学习过了Transfo原创 2020-11-17 23:57:35 · 2314 阅读 · 3 评论 -
NLP《词汇表示方法(七)BERT》
今天学习超级火热的Bert模型来进行词向量的学习。BERT(Bidirectional Encoder Representations from Transformers)是基于Transfomer机制的,大有替换Word2Vec的趋势。原始词向量,诸如Word2Vec和GloVe的表示方法是无法解决多义词问题,基ELMO(基于RNN)可以解决多义词问题,但是无法并行化,深度也不会很深(无法提取更深层特征)。一:Bert结构Bert是利用Transformer模型的Encoder部分进行词向量训练的原创 2020-11-15 07:44:49 · 737 阅读 · 0 评论 -
NLP《Tranformer和Self-Attention》
一:自注意力模型上一篇文章《seq2seq》中我们学习到了attention机制,它可以看到全局的信息,并且它也可以正确地去关注到相关的有用的信息。原始的encoder是以RNN为基础的,RNN机制实际中存在长程梯度消失的问题,对于较长的句子,我们很难寄希望于将输入的序列转化为(编码为)定长的向量而保存所有的有效信息,所以随着所需处理的句子的长度的增加,这种结构的效果会显著下降。从encoder到特定向量C过程中,会存在信息丢失问题,因为那么多丰富的语言,怎么可能用一个特定长度的向量表示的下呢?很难吧原创 2020-11-14 03:14:19 · 448 阅读 · 0 评论 -
NLP 《seq2seq》
一:RNN的种类结构RNN:每个神经元的输入包括两个方面,一个是前一个神经元的隐藏层状态 h (用于记忆,之前的信息) ,一个是当前的输入 x (当前信息)。神经元得到输入之后经过内部结构的运算,可能是普通RNN,LSTM,GRU等单元的计算,会得到新的隐藏状态 h 和输出 y,然后再传递到下一个神经元。正是因为保存了隐藏状态 h 的计算,这才使得 RNN 具有一定的记忆功能。我们先来回顾下之前学习的循环神经网络的一些种类。根据任务的类别不同,有一些比较常见的是many-to-many,one-to-m原创 2020-11-13 03:14:16 · 554 阅读 · 0 评论 -
NLP《词汇表示方法(六)ELMO》
我们已经学习了多种词向量的表示方法,嵌入词向量,基本上都是通过学习语言模型LM学习来的副产品。但是都有一个很大的缺点就是,每一个单词都假设只有一个特定的嵌入向量表示,这显然还是不太符合我们的语言习惯,因为显然有时候同一个词语会有不同的意思,也就是一词多义,不论是中文英文都有这现象。例如单独看一个词语 Apple,我们不能确定说它的含义是“苹果”还是“苹果公司”,单词表示固然重要,但是必须得结合上下文才能具体表达含义。也就是该词向量一旦训练完成,词向量都是不会变化了的,不论将来使用的上下文如何变化,词向量依原创 2020-11-11 22:37:50 · 423 阅读 · 0 评论 -
NLP《词汇表示方法(五)GloVe》
GloVe也是一个建立词向量的方法,但是这一篇我不打算自己写了,因为让我感到震撼的是,有强大的数学意识和数学思维是多么重要的一件事儿,当你想去设计一个模型,简化一个模型,以及解决这个模型的问题的时候,怎么使用数学手段去实现,当最终公式写出来的时候,你才会发现没有多么复杂的式子啊,人家是怎么想到的呢,其实是每一项的由来都是内含深厚的数学功底的。我是直接学习如下几个文章搞懂的,推荐给大家(自己可看原文哈)。https://blog.youkuaiyun.com/coderTC/article/details/73864原创 2020-11-09 03:23:46 · 203 阅读 · 0 评论 -
NLP《词汇表示方法(四)负采样》
一:负采样在CBOW和Skip-Gram模型中,最后输出的都是词汇的one-hot向量,假如我们的词汇表的数量是10000,嵌入空间的维度是300,再假设此时是以Skip-Gram模型只预测context内的单独一个word的模型为例,那么从隐藏层到输出层的参数数量是300 x 10000的。每次的输出之前都要做softmax操作,对于如此庞大的词汇数量,计算softmax是很耗费时间的,不仅仅是前向计算,在反向传播的时候求偏导数也是很耗费计算的。负采样就是一个简化计算的办法,考虑到我们最终样本输出的原创 2020-11-06 04:48:37 · 634 阅读 · 0 评论 -
NLP《词汇表示方法(三)word2vec》
Word2Vec是2013年Google发布的工具,也可以说是一个产生词向量的一群模型组合,关于词向量,也就是嵌入词向量的解释之前也解释了,这里不赘述。该工具主要包含两个词向量的生成模型,跳字模型(skip-gram)和连续词袋模型(continuous bag of words,简称CBOW),以及两种高效训练的方法:负采样(negative sampling)和层序softmax(hierarchical softmax)。值得一提的是,word2vec词向量可以较好地表达不同词之间的相似和类比关系。原创 2020-11-04 04:32:54 · 494 阅读 · 0 评论 -
NLP《语言模型(三)-- 基于循环神经网络的RNNLM语言模型》
RNNLM,鉴于RNN天生的结构就存在有长期依赖,特别适合于序列的数据,解决了NNLM的不能获得长期依赖的问题(窗口固定导致),RNNLM还能通过BiRNN获得任意上下文的依赖。下面我们学习。本文仅仅学习理论知识,操作实践留给后面的博文。一:RNNLM是一个根据上下文,预测下一个词语概率的模型。这个模型更加贴近于语言模型的定义,得到语言模型中每个因数参数的计算。图示如下:一般训练的时候,使用LSTM,GRU单元Cell的多层双向BiRNN。这里只是用最简单的单层单向的RNN做个模型演示。模型原创 2020-11-02 21:40:11 · 1176 阅读 · 1 评论 -
NLP《语言模型(二)-- 神经网络NNLM语言模型》
所谓的语言模型,就是为了判断某个句子是不是人话,句子S是由多个词语wi构成的式子展开后,每一个因数P(条件概率)都是这个模型的参数,那么怎么求解这个参数呢?通常参数的求解用方法是 N-gram 模型,最大熵模型,HMM,CRF,RNNLM 以及本文正在学习的 NNLM。一:N-Gram模型的缺陷我们最开始接触到的语言模型就是N-Gram模型,这个模型是基于统计计算的,理解和学习起来也很简单。基于马尔科夫假设,当前词语出现的概率只跟前N-1个词语有关。但是这个模型具有一定的缺陷1:参数空间大且稀疏原创 2020-11-02 05:39:03 · 836 阅读 · 0 评论 -
NLP《词汇表示方法(二)词嵌入表示》
用one-hot向量的方式表示词汇无法得到词语之间的相似性和联系性,这个不符合我们的语言习惯,我们很多词语都是有联系的。比如:语义上,“橘子”和“苹果”,都是水果。“你”和“你们”只是复数的区别。“go”和“went”是时态的差异。但是都是具有某种相似性的。然鹅,one-hot向量一开始就把各个代词看成了各个类别,之间毫无关联性。除此之外,且维度很高,数据十分稀疏,不利于计算和存储。因此我们需要一个更加合理的词汇表示方式。一:Word Embedding词嵌入最粗浅的理解,每个词被映射到低维连续向量原创 2020-11-01 21:55:05 · 1818 阅读 · 1 评论 -
NLP《词汇表示方法(一)one-hot向量表示》
词语是NLP里面最基本的要处理的单元,词语组合成能句子,句子组成段落,段落组成文章,因此,最基本要处理的就是词语了,我们知道,词语都是一个个的符号表示的。我们怎么用数值化的方式表示呢,这样才能方便计算机去计算处理。在字符编码中也被分配了一定的数字来代表某个字符,比如UTF-8等字符编码方式。每一个数字都可以对应于某个字符,对于一些离散的应用来说,这个编码也就够了,但是这种编码仅仅能对字符做个区分表示而已。一:词语的表示原始的方法就是one-hot向量的方法。假如我们有个词库,一共有V个词汇,罗列了所原创 2020-11-01 21:53:07 · 2269 阅读 · 1 评论 -
NLP 《隐式马尔科夫链》
一:模型介绍和学习隐式马尔科夫模型,是对马尔科夫链的扩展,是一个双重的随机过程,它包含一个隐藏链层S = {S1, S2, S3, ⋯ , SN}和一个可观测的链层W = {W1, W2, W3, ⋯ , WM},不可见的概率层到可见的概率曾也有一定的转移概率B,那个隐藏层的链层就是隐式马尔科夫的“隐”字来源。HMM模型如上所示:模型表示为:λ = (S,W,A,,B,π)1:Start是初始状态,最初的状态。2:红色线是初始状态到隐藏层各个状态S的转移向量π。3:S是隐藏层的状态S = {S原创 2020-10-15 17:06:54 · 927 阅读 · 0 评论 -
NLP 《马尔科夫链》
定义:是一个离散的随机过程,状态的变化都是依赖于状态转移矩阵,用来描述状态空间中经过从一个状态到另一个状态的转换的随机过程,用图的形式表示如下,下图是截图别人的。马尔科夫链是基于两个假设:有限视野假设:也就是马尔科夫假设,回想到之前学习的Bi-gram,跟这个含义是一样的,每一时刻的状态只和上一时间的状态有关,与更之前时刻的状态没有直接联系。时间独立性:在转移矩阵里面,让一个点随机进行漫步,不论到什么时间,状态转移概率都是保持不变的,不随着时间的变化而变化,因此状态矩阵和时间没有关系。加入上图所原创 2020-10-15 03:45:41 · 555 阅读 · 0 评论 -
NLP《语言模型(一)-- 基于统计的N-Gram语言模型》
前言,上一篇我们学习了一些基于醉打匹配规则的分词方法,这一篇我们介绍基于概率统计的方法之一,概率语言模型LM。一:什么是语言模型?每一句话,都是由若干个词语组成,这些词语的排列组合由若干种,但是只有少量的句子是能被该语言所理解的。中文有中文的语言习惯,英语有英语的语言习惯,那么怎么知道某个句子某个句子Sentence是不是说的是 “正常话” 呢?是不是能被人理解的话呢?假如存在一个评分机制,score(美国, 特朗普)那么一定是大于score(英国, 特朗普)的,我们需要建立这么个评分机制。二:什么原创 2020-10-13 22:36:06 · 761 阅读 · 0 评论 -
NLP 《分词方法》
在NLP中,最基础的处理的就是分词,不论是一个网页还是一片文章,还是一段话,都是需要先分词的才能去搞清楚这段话的意思的,这里介绍两个最经典的方法,都是基本的算法。一:前向最大匹配(forward-max-matching)分词之前,得知道什么才是单个词,就得有个词典库,作为分词的参考基础。因此我们需要一个包含了我们认为的所有词的词典。前向最大匹配就是要匹尽量配出最长的字符串,也就是每次希望找到最长的词出来,方向是从前到后,每一步骤中匹配不成功的话,就把待匹配字段的最后一个字去掉继续进行匹配,这块简单,原创 2020-10-11 23:12:25 · 1166 阅读 · 0 评论