NLP自然语言处理

应用例子

  • 垃圾邮件过滤 Spam Filtering
  • 机器翻译 Machine Translation
  • 信息检索 Information Retrieval
  • 问答系统 Question Answering
  • 信息提取 Information Extraction
  • 内容摘要 Summarization
  • 情感分析 Sentiment Analysis
  • 命名实体识别 Entity Recognition

核心技术

  • 语言模型 Language modelling

  • 分词 Segmentation

    它|是|一只|老虎
    
  • 词性标注 Part-of-speech tagging

     DT  VBX   DT   JJ      NN
    This  is   a   simple question.
    
  • 句法分析 Syntactic parsing

nlp-Syntactic-parsing
  • 命名实体识别 Name-entity recognition

  • 语义角色标注 Word sanseis ambiguation

例子

nlp-example

自然语言处理技术历史

基于逻辑(集合论)的模型

例子

所有人都会死
苏格拉底是人
=》
苏格拉底会死

基本法则

  • a is b && b is c => a is c
  • a = not (not a)
  • a is b => not b is not a
  • P->Q => not P || Q =》not (P && not Q)

模糊集合论

nlp-fuzzy-logic

集合论的缺陷

罗素悖论:由所有不包含自身的集合构成的集合

例子:理发师称只给那些不给自己理发的人理发。

基于集合论,理发师无论给自己理发还是不给自己理发都是矛盾的。

因此集合论不是完备的。即使后面冯罗伊德等科学家提出了各种假定条件。

为什么集合论不能适用于自然语言

  • 自然语言不是严格的逻辑
  • 句子的组成规则松散
  • 日常用语常常有语法错误,但人依然可以正确的交流
  • 即使自然语言用规则来描述,但是规则的数量非常庞大,无法完全适用逻辑编程把所有的场景都覆盖
  • 语言的二义性
    • apple => computer/phone/fruit
    • host => n or v
    • I saw a man with a telescope
  • 同一个意思可以有很多种表达

基于概率的模型

由于上述的原因,集合率无法很好的描述自然语言,科学家发现通过概率模型可以更好的描述自然语言。

前一百个单词适用的频率和排名的曲线

nlp-zipf-law

深度学习

深度学习来处理自然语言属于概率模型

涉及数学的知识

函数

nlp-function
  • y=x^2
nlp-x2
  • y=2x3-14x2+24*x
nlp-x3
  • y=sin(x)
nlp-sin
  • 高维函数
nlp-gaojie
  • y=e^x
nlp-ex
  • y=log(x)
nlp-log
  • y=1/(1+e^(-z))
nlp-simog
  • y=max(0, x)
nlp-relu
  • L1: ||x|| = |x1| + |x2|
nlp-L1
  • L1正则化解析
nlp-L1+F

证明最小点位于坐标轴上

h = f+c|x|

由于在x = 0处不可导

h-left'(0)*h-right'(0) = (f'+c)*(f'-c)

那么如果c>|f'(0)|可得,h在0处左右导数异号

0是最值。

那么在损失函数加入L1正则化后,可以得到某些维度容易为0,从而得到稀疏解

  • L2: |x||2 = (|x1|^2 + |x2|2)(1/2)
nlp-l2
  • L2正则化,类似于L1的证明,容易得到比较平均的w,各个w都比较靠近0,从而得到更光滑的曲线

矩阵

nlp-tensor
  • SVD
nlp-svd
  • Jacobian矩阵

    矩阵的一阶导数

  • Hessian矩阵

    矩阵的二阶导数

凸包和凸函数

几乎所有的最优化手段,都将适用凸优化算法来解决

概率

条件概率

P(A|B) = P(A and B) / P(B)

if A and B 独立

=》P(A and B| C) = P(A|C)*P(B|C)

也可以推出

=>A(A|B and C) = P(A|C) (B交C不为空)

二项分布

抛9次硬币,硬币出现正面的概率是0.5,出现k次的概率分布如下如

nlp-binomial

服从正态分布

期望

x的平均值

E = x*p(x) + ...

方差

x相对于期望的偏离

var = (x-E(x))^2

协方差

conv = (x - E(x))*(m - E(m))

描述x,m是否有同分布

按理协方差为0,并不代表x和m没有关系

例如下图

nlp-conv

如果点的分布对称的分布,会得到协方差为0,但是其实他们是有关系的。

联合概率

把每个相关的概率累加,得到联合概率

多项式分布

P(x1=m1,x2=m2...) = n!*P1m1/m1!*P2m2/m2!

伽马函数

T(n) = (n-1)!

T(x)用一条曲线逼近n!,进而可以求得非整数的阶乘

beta分布

由二项式分布推出

P = T(a+b)*x(a-1)*(1-x)(b-1)/(T(a)*T(b))

nlp-beta

泊松分布

nlp-posson

高斯分布

则正态分布

nlp-guess

对数正态分布

nlp-log-gra

指数分布

nlp-exp

语言

信息嫡

nlp-infoEntropy

nlp-infoEntropy-gra

p分布越平均,H越大,代表越不确定

交叉嫡

nlp-crossinfoentro

y为0时,不考虑y‘。y为1时,y'越接近1,越小,越靠近0,越大

把D最小化,迫使y'逼近y

auto-encoder

nlp-auto-encoder

语言概率模型

对于一个句子,有若干单词组成。例如

C1: The dog laughs.

C2: He laughs.

那么计算P(C1) = P(The, Dog, laughs)的概率和P(C2) = P(He, laughs)的概率。

根据历史文本的统计学习。

可以得到P(C1)<<P(C2)

词袋模型

nlp-word-bag

P('I love the game') = P('I')*P('love')*P('the')*P('game')

其中P(<work>) = 频率/总单词数

情感分析

计算一篇文章是积极的还是消极的。

P(y|x) = sigmod(wx)

x是文章内每个单词的频率

y表示积极和消极情感

n-gram模型

P(x1, x2, x3 ... ) 
= P(x1)*P(x2|x1)*P(x3|x1, x2)....*P(xn|x1, x2,...xn-1)

其中P(xk|x1, x2,..xk-1) = frequence(x1, x2 ,, xk)/frequence(x1, x2..xk-1)

n一般不能太大,因为n太大,会导致全文无法找到一摸一样的单词组合,导致概率为0

2-gram模型例子

P('The dog sleeps')
= P(The)*P(dog|the)*P(sleeps|dog)
Interpolation

把多个gram的模型进行线性整合

nlp-interpolation

语言模型评价

交叉嫡

nlp-cross-langues

H越小,Pxn越接近1,模型越好

Perplexity
nlp-perplexity

贝叶斯进行邮件分类

P(y|x1, x2, .. xn) = P(y)*P(x1, x2, ... xn|y) / P(x1, x2, ... xn)

y代表是否是垃圾邮件

x代表单词

分词

广州市长寿路 -》 广州市长|寿路

广州市长寿路 -》 广州市|长寿路

匹配词袋:广州市,广州市长,长寿路

使用最大匹配发,第二个分词更优

使用N-gram模型计算分词
P(结合成分子)
option1: = P(分子|成)P(成|结合)P(结合)
option2: = P(分子|合成)P(合成|结)P(结)
optionn ....

通过统计P(A|B),得出各个option的概率,取最大的概率,则为最后的分词

词表示

one-hot encoding

word => [0, 0 , ... 1, ... 0]

附近词encoding

word => [0, 1, 0, 1, 0, ...]

可以解决词相似性问题

附近词带权重encoding

计算附近词的频率

word => [0, 3, 0, 1, 0, ...]

C&W
nlp-cw

w是附近词的one-hot encoding

score是词的one-hot encoding

最后一层通过softmax,取拟合文本

最终中间层则为词向量

skip-gram
nlp-skip-gram

输入为词one-hot encoding

输出为附近此的one-hot encoding

最后通过softmax预测附近词

最后中间层则为结果词向量

词性标注

nlp-word-tagging
混合模型

混合模型是一种统计模型,问题中包含若干个子问题,每个子问题是一个概率分布,那么总问题就是若干个子问题的组合,也就是若干个子分部的组合,这样就形成了混合模型。

例子

有红黑两种硬币,把它们放在盒子里,从盒子里随机抽取一个硬币并投币,抽到红色的概率是p,红色硬币正面的概率是q,黑色硬币正面的概率是m,假设我们没办法看到抽取出的硬币的颜色,只能看到最终是正面或者反面的结果,例如HTTHTTTTHHH (H:正面 T: 反面)。需要估计p,q,m三个参数。

此时可以计算出

w
pq = a (1-p)m = b
p(1-q) = c (1-p)(1-m) = d

通过EM算法迭代如下:

随机p q m

迭代以下过程:

计算上面table

p = (aC(正)+cC(反))/total

q = aC(正)/(aC正+cC正)

m = bC(正)/(bC正 + dC正)

高斯混合模型
nlp-guessmix

假设有上述数据,需要用混合模型来逼近,通过分析,红色和蓝色数据分别为高斯正态分布,N(u, v)

此时可以得到如下表

x pN红(u, v) (1-p)N蓝(u, v)

p = pN红x/(pN红x+(1-p)N蓝x)

u = pN红x/n

v = pN红(x-u)^2/n

隐马尔可夫模型
nlp-hmm

词性转换概率

V N
V P(V|V) P(N|V)
N P(V|N) P(N|N)

词性到单词的转换概率

go home
V P(go|V) P(home|V)
N P(go|N) P(home|N)

通过EM递归算法,训练以上参数,得到隐马尔可夫模型

PLSA主题模型

主题模型

作用
  • 通过抽象出文档的主题,可以通过比较主题向量的相似性,得到不同文档之间的相似性
  • 得到主题向量,相当于把文档去掉了噪声干扰
  • 得到文档向量,可以进行其他模型的输入,进而对文档进行分类,回归等操作,得到更丰富的结果
词袋模型

只统计词的频率,不计算词的相对位置

LSA模型

计算文档和单词频率的矩阵

w1 ... wn
doc1 3 ... 0
doc2 1 ... 5
... ... ... ...
docn 0 ... 0

进行奇异矩阵分解

nlp-svd

得到A矩阵的压缩U,U中的k则为k个主题

PLSA模型

通过分析,LSA得到的主题是跟现实无法关联,它只是一个量,而没有明显的意义。

PLSA为了解决此问题,引入概率模型,先确定主题个数

然后通过构建Doc->topic的概率table,和topic->word的概率table。

然后通过EM模型,得到这两个table的所有概率值。

进而得到文档的主题表示

LDA模型

PLSA的缺陷是,对于预测未知的doc,无法计算此文档的相关概率。随着doc数量的增加,PLSA模型的参数会线性增加,从而会造成过拟合。

LDA通过引入先验概率来克服PLSA的问题。

nlp-lda

上下文无关句法

CFG
S -> NP VP
VP -> Vi<br />VP -> Vt NP<br />VP -> VP PP
NP -> DT NN<br />NP -> NP PP

类似于编译原理的上下文无法句法分析,一颗语法树

PCFG

通过对CFG引入概率参数

S -> NP VP 1
VP -> Vi P1
VP -> Vt NP P2
VP -> VP PP P3
NP -> DT NN P4
NP -> NP PP P5
评估句子

有了概率,可以计算每颗语法树的极大似然概率,并取最大概率的树为最终输出

RNN

nlp-rnn

上一个状态中间层的输出作为下一隐层的输入

类似于HMM的2-gram模型。t状态受到t-1时刻输出的影响,受t-k的输出的k越大,影响越小

LSTM

由于RNN几乎只受到上一时刻的影响,而忽略了久远信息的影响。从而造成了一定的局限性。

LSTM通过引入长短记忆方法,来维持长记忆的信息。

nlp-lstm
  • 遗忘门:上一刻的输出,会乘以一个sigmod的输出,sigmod的输出,决定了上一时刻的输出会保留多少到下一时刻。
  • 输入门:通过对xt进行tanh处理,并进行输出,通过一个sigmod函数,决定t时刻有保留多少流向下一时刻
  • 输出门:把遗忘门的输出和输入门的输出进行累加并进行tanh处理,并对输出进行sigmod处理,得到下一时刻的输入
  • 遗忘门和输入们的输出累加后,会直接透传到下一时刻

通过训练核内的sigmod函数,使得LSTM可以根据不同的句子,有条件的保留和过滤历史信息,从而达到长记忆的功能。

GRU

nlp-gru

GRU是LSTM的简化版,它只需要处理两个sigmod函数的训练,而LSTM需要三个sigmod函数的训练,减少了训练的参数,加快了训练的速度,但也损失了一部分模型的复杂,在处理较复杂问题时,没有LSTM那么好。

Encoder-Decoder

auto-encoder-decoder
nlp-auto-encoder
Seq2Seq

auto-encoder-decoder的特点是输出的单元数是固定的。对于一般自然语言处理,例如机器翻译,输入的单元个数跟输出单元的个数并不是一一对应的,此时就需要动态的生成输出单元。Seq2Seq通过动态的输出结束符,代表是否输出完成,达到可以动态的根据输入输出不同的单元个数。

seq2seq

seq2seq-detail

Attention Mechanism

seq2seq的缺点是,所有的输入序列都转化为单一的单元c,导致很多信息都将消失,对于不同的输出yi,它可能依赖的输入xj有可能不一样,此时通过加入注意力模型,通过对xi进行softmax处理,并加入到y权重的训练中,可以让不同的y,有不同的x对它进行影响

nlp-attention

nlp-attention-softmax

softmax的输入为输入单元x,和上一个输出单元y,联合产生softmax的权重,进而对不同的序列,对于同一个x,会有不同的注意力到输出

Memory Network 记忆网络

Transformaer

self attention
nlp-self-attention
参数说明

q = Wq(x)

k = Wk(x)

v = Wv(x)

x为词向量

原理

通过训练,得到权重w,从而学习到这一层的softmax注意力参数

multi-head-self-attention
nlp-mult-head-self-attention

R是前一次encoder的输出

通过增加w的数量,产生多个z,并进行堆叠,通过前馈网络,最后产生z

nlp-self-attention-sample
位置编码

在使用self attention处理句子时,是没有考虑单词在句子中的位置信息的。为了让模型可以加入考虑单词的位置信息,加入了位置编码的向量

计算如下:

nlp-positional-encoding

pos为单词在句子中的位置

i为词向量的位置

d为句子的长度

位置编码加上词向量形成tranformer的输入

nlp-word-add-position
transformer总体架构
nlp-transformer
编码器的内部结构
nlp-transformer-coder

加入了归一化和残差网络

最终通过softmax,输出每个单词的概率,并最终输出单词

transformer内部结构
nlp-tranformer-2stack

©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容

  • 命名实体识别 命名实体的提出源自信息抽取问题,即从报章等非结构化文本中抽取关于公司活动和国防相关活动的结构化信息,...
    我偏笑_NSNirvana阅读 10,194评论 1 35
  • 我们在上学的时候经常会做阅读理解的题目,根据文章内容提取出其中的答案。NLP中的阅读理解同样是提出文章中的中心句,...
    小罐子的唠叨阅读 3,266评论 0 0
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,495评论 16 22
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,551评论 0 11
  • 可爱进取,孤独成精。努力飞翔,天堂翱翔。战争美好,孤独进取。胆大飞翔,成就辉煌。努力进取,遥望,和谐家园。可爱游走...
    赵原野阅读 2,716评论 1 1