当前位置:   article > 正文

自然语言处理——基于预训练模型的方法——第2章 自然语言处理基础_自然语言处理:基于预训练模型的方法

自然语言处理:基于预训练模型的方法

《自然语言处理——基于预训练模型的方法》——车万翔、郭江、崔一鸣

自然语言处理——基于预训练模型的方法——第2章 自然语言处理基础

2.1 文本的表示

2.1.1 词的独热表示

假设词表为V,则其大小为|V|

在这里插入图片描述

在该向量中,词表中第i个词在第i维上被设置为1,其余维均为0。这种表示被称为词的独热表示或独热编码(One-hot Encoding)

问题:不同词使用完全的不同的向量进行表示,导致数据稀疏,当训练数据规模有限时,很多语言现象不能被充分学习到。

2.1.2 词的分布式表示

假设语料库如下所示:

在这里插入图片描述

在这里插入图片描述

表中每行表示一个词的向量,通过计算两个向量之间的余弦函数,可以计算两个词的相似度。如“喜欢”和“爱”,由于有共同的上下文“我”和“学习”,使得它们之间具有一定的相似性。独热则没有任何关系。

直接使用与上下文的共现频次作为词的向量表示,存在的问题:

  • 高频词汇误导计算结果
  • 共现词频无法反映词之间的高阶关系。
  • 仍然存在稀疏问题,即向量中0太多。
解决办法

(1)点互信息 PMI

如何解决高频词误导计算结果的问题。

如果一个词与很多词共现,则降低其权重;反之,如果一个词只与个别词共现,则提高其权重。

对于词w和上下文c,其PMI为:

在这里插入图片描述

P (w, c)、P (w)、P (c)分别是w与c的共现概率,以及w和c分别出现的概率。

Python代码实现PMI

import numpy as np
M = np.array([[0, 2, 1, 1, 1, 1, 1, 2, 1, 3],
              [2, 0, 1, 1, 1, 0, 0, 1, 1, 2],
              [1, 1, 0, 1, 1, 0, 0, 0, 0, 1],
              [1, 1, 1, 0, 1, 0, 0, 0, 0, 1],
              [1, 1, 1, 1, 0, 0, 0, 0, 0, 1],
              [1, 0, 0, 0, 0, 0, 1, 1, 0, 1],
              [1, 0, 0, 0, 0, 1, 0, 1, 0, 1],
              [2, 1, 0, 0, 0, 1, 1, 0, 1, 2],
              [1, 1, 0, 0, 0, 0, 0, 1, 0, 1],
              [3, 2, 1, 1, 1, 1, 1, 2, 1, 0]])

def pmi(M, positive=True):
    col_totals = M.sum(axis=0)
    row_totals = M.sum(axis=1)
    total = col_totals.sum()
    expected = np.outer(row_totals, col_totals) / total
    M = M / expected
    # Silence distracting warnings about log(0):
    with np.errstate(divide='ignore'):
        M = np.log(M)
    M[np.isinf(M)] = 0.0  # log(0) = 0
    if positive:
        M[M < 0] = 0.0
    return M

M_pmi = pmi(M)

np.set_printoptions(precision=2)
print(M_pmi)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

(2)奇异值分解 SVD

解决共现频次无法反映词之间高阶关系的问题。

通过截断奇异值分解所得到的矩阵U中的每一行,则为相应词的d维向量表示,该向量一般具有连续、低维和稠密的性质。由于U的各列相互正交,因此可以认为词表示的每一维表达了该词的一种独立的“潜在语义”,所以这种方法也被称作潜在语义分析(Latent Semantic Analysis,LSA)

在Python的numpy.linalg库中内置了SVD函数,只需要输入共现矩阵,然后调用相应的函数即可。

U, s, Vh = np.linalg.svd(M_pmi)

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']

words = ["我", "喜欢", "自然", "语言", "处理", "爱", "深度", "学习", "机器", "。"]

for i in range(len(words)):
    plt.text(U[i, 0], U[i, 1], words[i])
plt.xlim(0, 0.6)
plt.ylim(-0.5, 0.6)
plt.savefig('svd.pdf')
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在这里插入图片描述

上下文比较相近的词在空间上的距离比较近,如“深度”“学习”等;而“我”和“。”等高频词则与其他词语距离比较远

在信息检索等领域,也经常通过词与其出现的文档构成“词–文档”共现矩阵,此时也可以通过以上介绍的奇异值分解技术进行降维,并在低维空间(潜在语义空间)内计算词语或者文档之间的相似度,该技术也称潜在语义索引(Latent Semantic Indexing,LSI)。

2.1.3 词嵌入式表示

词嵌入表示(Word Embedding)也使用一个连续、低维、稠密的向量来表示词,经常直接简称为词向量,但与分布式表示不同之处在于其赋值方式。

词向量中的向量值,是随着目标任务的优化过程自动调整的。

2.1.4 文本的词袋表示(最简单)

所谓词袋表示,就是假设文本中的词语是没有顺序的集合,将文本中的全部词所对应的向量表示(既可以是独热表示,也可以是分布式表示或词向量)相加,即构成了文本的向量表示。

2.2 自然语言处理任务

2.2.1 语言模型

语言模型(Language Model,LM)(也称统计语言模型)是描述自然语言概率分布的模型,是一个非常基础和重要的自然语言处理任务。

利用语言模型,可以计算一个词序列或一句话的概率,也可以在给定上文的条件下对接下来可能出现的词进行概率分布的估计。

  • N元语言模型(N-gram Language Model)

    语言模型的基本任务是在给定词序列w1w2··· wt−1的条件下,对下一时刻t可能出现的词wt的条件概率P (wt|w1w2··· wt−1)进行估计。一般地,把w1w2··· wt−1称为wt的历史。

    例如,对于历史“我喜欢”,希望得到下一个词为“读书”的概率,即:P(读书|我喜欢)。

在这里插入图片描述

式中,C (·)表示相应词序列在语料库中出现的次数(也称为频次)。

通过以上的条件概率,可以进一步计算一个句子出现的概率,即相应单词序列的联合概率P (w1w2··· wl),式中l为序列的长度。

在这里插入图片描述

式中,wi:j表示由位置i到j的子串wiwi+1··· wj。

然而,随着句子长度的增加,w1:i−1出现的次数会越来越少,甚至从未出现过,那么P (wi|w1:i−1)则很可能为0,此时对于概率估计就没有意义了。为了解决该问题,可以假设“下一个词出现的概率只依赖于它前面n−1个词”,即:

在这里插入图片描述

该假设被称为马尔可夫假设(Markov Assumption)。

  • 平滑(Smoothing)技术

    折扣法:

    基本思想是“损有余而补不足”

    加1平滑(Add-one Discounting)是一种典型的折扣法,也被称为拉普拉斯平滑(Laplace Smoothing)

  • 语言模型性能评价

一种方法是将其应用于具体的外部任务(如机器翻译),并根据该任务上指标的高低对语言模型进行评价。——外部任务评价

目前最为常用的是基于困惑度(Perplexity,PPL)的“内部评价”方式——训练集,测试集

困惑度越小,意味着单词序列的概率越大,也意味着模型能够更好地解释测试集中的数据

2.2.2 自然语言处理基础任务
  • 中文分词

    词(Word)是最小的能独立使用的音义结合体,是能够独立运用并能够表达语义或语用内容的最基本单元。

    中文分词就是将一串连续的字符构成的句子分割成词语序列,如“我喜欢读书”,分词后的结果为“我 喜欢 读书”。

    最简单的分词算法叫作正向最大匹配(Forward Maximum Matching,FMM)分词算法,即从前向后扫描句子中的字符串,尽量找到词典中较长的单词作为分词的结果。正向最大匹配分词算法存在的明显缺点是倾向于切分出较长的词,这容易导致错误的切分结果;切分歧义问题;未登录词问题,也就是说有一些词并没有收录进词典。

  • 子词切分

    将一个单词切分为若干连续的片段。

    原理都是使用尽量长且频次高的子词对单词进行切分。

    字节对编码(Byte Pair Encoding,BPE)算法

在这里插入图片描述

Google推出了SentencePiece开源工具包

  • 词性标注(POS Tagging)

给定一个句子,输出句子中每个词相应的词性。

PN、VV、NN和PU分别代表代词、动词、名词和标点符号

主要难点在于歧义性,因此,需要结合上下文确定词在句子中的具体词性

  • 句法分析(Syntactic Parsing)

    给定一个句子,分析句子的句法成分信息,例如主谓宾定状补等成分。最终的目标是将词序列表示的句子转换成树状结构,从而有助于更准确地理解句子的含义,并辅助下游自然语言处理任务。

    典型的句法结构表示方法包含两种——短语结构句法表示和依存结构句法表示。

    在这里插入图片描述

  • 语义分析

    根据词语出现的不同上下文,确定其具体含义的自然语言处理任务被称为词义消歧(Word Sense Disambiguation,WSD)

    由于语言的语义组合性和进化性,无法像词语一样使用词典定义句子、段落或篇章的语义,因此很难用统一的形式对句子等语言单元的语义进行表示。众多的语言学流派提出了各自不同的语义表示形式,如语义角色标注(Semantic Role Labeling,SRL)、语义依存分析(Semantic Dependency Parsing,SDP)等。

2.2.3 自然语言处理应用任务
  • 信息抽取(Information Extraction,IE)

    从非结构化的文本中自动提取结构化信息的过程,这种结构化的信息方便计算机进行后续的处理。

    子任务:

    • 命名实体识别(Named Entity Recognition,NER)

      在文本中抽取每个提及的命名实体并标注其类型,一般包括人名、地名和机构名等,也包括专有名称等,如书名、电影名和药物名等。

    • 关系抽取

      于识别和分类文本中提及的实体之间的语义关系。如夫妻、子女、工作单位和地理空间上的位置关系等二元关系

    • 事件抽取

      从文本中识别人们感兴趣的事件以及事件所涉及的时间、地点和人物等关键元素。

      • 时间表达式识别
  • 情感分析

主要研究人类通过文字表达的情感

子任务

  • 情感分类

    识别文本中蕴含的情感类型或者情感强度,其中,文本既可以是句子,也可以是篇章

  • 情感信息抽取

    抽取文本中的情感元素,如评价词语、评价对象和评价搭配等

  • 问答系统(Question Answering,QA)

    系统接受用户以自然语言形式描述的问题,并从异构数据中通过检索、匹配和推理等技术获得答案的自然语言处理系统。

    类型:

    • 检索式问答系统
    • 知识库问答系统
    • 常问问题集问答系统
    • 阅读理解式问答系统
  • 机器翻译(Machine Translation,MT)

利用计算机实现从一种自然语言(源语言)到另外一种自然语言(目标语言)的自动翻译。

机器翻译方法一般以句子为基本输入单位,研究从源语言句子到目标语言句子的映射函数。

方法:

  • 理性主义:基于规则的方法

  • 经验主义:指数据驱动的统计方法,在机器翻译领域表现为基于语料库(翻译实例库)的研究方法。

  • 对话系统(Dialogue System)

    指以自然语言为载体,用户与计算机通过多轮交互的方式实现特定目标的智能系统。

    分类:

    • 任务型对话系统

      任务导向型的对话系统,主要用于垂直领域的自动业务助理等,具有明确的任务目标,如完成机票预订、天气查询等特定的任务

      三个模块构成:

      • 自然语言理解
      • 对话管理
      • 自然语言生成
    • 开放域对话系统

      以社交为目标的对话系统,通常以闲聊、情感陪护等为目标

2.3 基本问题

2.3.1 文本分类问题

针对一段文本输入,输出该文本所属的类别,其中,类别是事先定义好的一个封闭的集合。

2.3.2 结构预测问题

在结构预测问题中,输出类别之间具有较强的相互关联性。

三种典型的结构预测问题:

  • 序列标注

    为输入文本序列中的每个词标注相应的标签,如词性标注是为每个词标注一个词性标签,包括名词、动词和形容词等。

  • 序列分割

  • 分词问题,就是将字符序列切分成若干连续的子序列

  • 命名实体识别问题,也是在文本序列中切分出子序列,并为每个子序列赋予一个实体的类别,如人名、地名和机构名等

  • 图结构生成

    输入是自然语言,输出结果是一个以图表示的结构。

    生成算法:

    • 基于图
    • 基于转移
2.3.3 序列到序列问题(Sequence-to-Sequence,Seq2seq)

序列到序列模型也被称为编码器–解码器(Encoder-Decoder)模型。

  • 机器翻译
  • 对话系统中,用户话语可被视为输入序列,机器的回复则可被视为输出序列
  • 文本分类问题也可以被建模为序列到序列问题

2.4 评价指标

  • 准确率(Accuracy)

    最简单、直观的评价指标,经常被应用于文本分类等问题。

  • F值(评价序列分割问题性能)

    是精确率(Precision)和召回率(Recall)的加权调和平均

  • BLEU值(评价机器翻译)

    统计机器译文与参考译文(可以不止一个)中 N-gram匹配的数目占机器译文中所有 N-gram 总数的比率,即N-gram的精确率

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/180780
推荐阅读
相关标签
  

闽ICP备14008679号