• NLP自然语言处理


    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() = 频率/总单词数

    情感分析

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

    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
    VP -> Vt NP
    VP -> VP PP
    NP -> DT NN
    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

  • 相关阅读:
    数据不须要自由,但须要做爱
    编程算法基础-3.2自底向上风格
    Linux管道符
    阿里云 oss python3 样例
    6. Laravel5学习笔记:IOC/DI的理解
    LNMP环境搭建——MySQL篇
    在奋斗的日子里,傻笑出来(三)
    捕获海康威视IPCamera图像,转成OpenCV能够处理的图像(一)
    vs 默认的INC和LIB
    一款DIY移动电源的性能
  • 原文地址:https://www.cnblogs.com/kukafeiso/p/14096256.html
Copyright © 2020-2023  润新知