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

自然语言处理——基于预训练模型的方法——第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) / totalM = 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) = 0if positive:M[M < 0] = 0.0return MM_pmi = pmi(M)np.set_printoptions(precision=2)
print(M_pmi)

(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()

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

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

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

  1. 自然语言处理:基于预训练模型的方法(一)

    自然语言处理:基于预训练模型的方法 1.2 自然语言处理的难点 1.3 自然语言处理任务体系 1.2 自然语言处理的难点 1.2.1 抽象性 语言是由抽象符号构成的,每个符号背后都对应着现实世界或人们 ...

  2. 《自然语言处理:基于预训练模型的方法》读书笔记:第2章 自然语言处理基础

    目录 第2章 自然语言处理基础 2.1 文本的表示 2.1.1 词的独热表示 2.1.2 词的分布式表示 2.1.3 词嵌入表示 2.1.4 文本的词袋表示 2.2 自然语言处理任务 2.2.1 语言 ...

  3. 《自然语言处理:基于预训练模型的方法》第七章 预训练语言模型

    预训练模型并不是自然语言处理领域的"首创"技术. 在计算机视觉领域,通常会使用ImageNet进行一次预训练,让模型从海量图像中充分学习如何从图像中提取特征.然后,会根据具体的任务 ...

  4. 【自然语言处理(NLP)】基于预训练模型的机器阅读理解

    [自然语言处理(NLP)]基于预训练模型的机器阅读理解 作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资源建设专 ...

  5. 论文阅读:Pre-trained Models for Natural Language Processing: A Survey 综述:自然语言处理的预训练模型

    Pre-trained Models for Natural Language Processing: A Survey 综述:自然语言处理的预训练模型 目录 Pre-trained Models f ...

  6. 基于预训练模型 ERNIE 实现语义匹配

    基于预训练模型 ERNIE 实现语义匹配 本案例介绍 NLP 最基本的任务类型之一 -- 文本语义匹配,并且基于 PaddleNLP 使用百度开源的预训练模型 ERNIE1.0 为基础训练效果优异的语 ...

  7. 基于预训练模型的军事领域命名实体识别研究

    摘要 [目的]为了解决开源非结构化军事领域数据的命名实体识别问题.[方法]本文提出基于预训练模型(Bidirectional Encoder Representations from Transfor ...

  8. NeurIPS 2020 | MiniLM:通用预训练模型压缩方法

    基本信息 机构: 微软研究院 作者: Wenhui Wang, Furu Wei, Li Dong, Hangbo Bao, Nan Yang, Ming Zhou 论文地址: https://arx ...

  9. CV之NS之VGG16:基于预训练模型VGG16训练COCO的train2014数据集实现训练《神奈川冲浪里》风格配置yml文件

    CV之NS之VGG16:基于预训练模型VGG16训练COCO的train2014数据集实现训练<神奈川冲浪里>风格配置yml文件 目录 一.训练 1.<神奈川冲浪里>风格 2. ...

  10. Perturbed Masking:和参数无关的预训练模型分析方法

    ©PaperWeekly 原创 · 作者|蔡杰 学校|北京大学硕士生 研究方向|问答系统 论文标题: Perturbed Masking: Parameter-free Probing for Ana ...

最新文章

  1. 在创建的Silverlight Control中使用图片
  2. Python中的高级变量类型
  3. Ubuntu下eclipse indigo版在线安装struts插件
  4. leetcode 202. Happy Number
  5. clodeblocks debug断点调试_idea debug调试————简单常用,适合初学者
  6. Spring整合JMS——基于ActiveMQ实现(一)
  7. Linux下XPath对xml解析
  8. solaris perl print不输出_IC设计中的perl编程
  9. 一起谈.NET技术,VS2010 测试功能之旅:编码的UI测试(4)-通过编写测试代码的方式建立UI测试(下)...
  10. 以项目管理的理念制作高质量的标书
  11. 32位ubuntu 编译android源码,ubuntu 下编译android源码错误解决记录
  12. 计算机同步增长率公式,行测资料分析增长率的计算技巧
  13. 网口压线顺序_水晶头压线顺序
  14. vue-element-ui组件 layout布局(网格系统)
  15. 前车之鉴:从被回绝的系列原因出发,解读应聘阿里的注意事项
  16. 教大家如何去做外链才是最好的
  17. Yolo学习(框架分析)
  18. 全网最好用的图文识别、证件扫描、PDF转换等工具,已解锁永久会员!
  19. linux 删除行首空格
  20. 2023计算机毕业设计SSM最新选题之java健身俱乐部5jz0z

热门文章

  1. visual studio多工程项目管理
  2. VS 201x C++ 编译错误解决方法集
  3. 大学计算机基础知识课本,大学计算机基础 教材简介
  4. win7硬盘安装工具_扔掉U盘和光驱,一键从硬盘安装操作系统,这个硬盘装机工具真爽...
  5. Golang中如何处理tcp粘包
  6. 导频矢量推导与离散信号傅里叶变换
  7. rda冗余分析步骤_使用CANOCO进行CCA或RDA教程分析.ppt
  8. MCS-51单片机总体概述(二)
  9. C++批量创建文件夹
  10. dns服务器怎么优化,SmartDNS 高性能本地DNS服务器,优化网速