点击查看【bilibili】
前面几节介绍了很多和语音相关的任务,接下来介绍和文字有关的任务

7.1 NLP 任务汇总

NLP 任务通常包括 文字→文字文字→类别 两类
image.png

7.1.1 文字→类别

文字→类别 的 NLP 任务又分为两种类型:

  • 输入一段文字,只输出一个类别
  • 输入一段文字,对每个 token 都输出一个类别

image.png

7.1.2 文字→文字

文字→文字的 NLP 任务通常使用 seq2seq 模型(包含一个 encoder、一个 decoder),有时还需要做 attention

  • 有些时候,需要给 attention 加上 copy 机制,使得 decoder 可以从 encoder 的输入中直接 copy 一些词汇输出

image.png
image.png

7.1.3 输入多个语句

如果输入包含多条语句,如何处理多条输入语句?(对 文字→文字、文字→类别 两类任务都适用)

  • 解法一:对每条输入的 sequence ,分别用一个 model 做 encode,再整合
    • 有时候在 model 之间会加上 attention,因为有时候需要知道上下文的句子才能 encode 好
  • 解法二:直接把多条输入的 sequence 连接起来,连接处加上一个特殊的 token:<SEP>
    • 是近年来比较流行的方法

image.png

7.1.4 NLP 任务分类汇总

根据输入、输出的不同,NLP 任务分类如下:(横轴是输入形式、纵轴是输出形式)


输入一个 sequence 输入多个 sequences
输出一个类别
- 文本情感分类 Sentiment Classification
- 立场侦测 Stance Detection
- 事实侦测 Veracity Prediction
- 意图分类 Intent Classification
- 对话策略 Dialogue Policy

- 自然语言推理 NLI. Natural Language Inference
- 搜索引擎 Search Engine
- 关系抽取 Relation Extraction
每个 token 输出一个类别
- 词性标注 POS tagging
- 分词 Word segmentation
- 抽取式摘要 Extractive Summarization
- 槽填充 Slotting Filling
- 名字实体识别 NER. Name Entity Recognization
输出拷贝自输入
- 抽取式QA(问答系统) Extractive QA
输出 General Sequence
(一般的语句)

- 生成式摘要 Abstractive Summarization
- 机器翻译 Translation
- 语法校正 Grammer Correction
- 自然语言生成 NLG. Natural Language Generalization

- 一般的 QA. General QA
- 面向任务的对话系统 Task Oriented Dialogue
- 聊天机器人 Chatbot
其它输出情况
- 句法分析 Parsing
- 指代消解 Coreference Resolution

7.2 前处理任务

7.2.1 词性标注 Part-of-Speech(POS) Tagging

词性标注:用词性(eg. 动词、形容词、名词)注解句子中的每一个词

  • 输入:sequence
  • 输出:每个 token 的类别(词性)
  • 作用:常被用作下游任务的前处理,先对 sequence 做词性标注得到词性序列,再将词性序列和原来的句子一起输入给后续更复杂的任务(eg. 摘要、翻译等),使后续任务做的更好
    • 但是现在处理下游任务的模型能力越来越强,eg. BERT 本身就有词性标注的能力,因此先做词性标注作为前处理就显得没那么必要

image.png

7.2.2 分词 Word Segmentation

分词:也是前处理常使用的,尤其是中文,往往需要先做分词

  • 输入:sequence
  • 输出:每个 token 的类别(是否是一个词汇的结束边界)
  • 作用:常被用作下游任务的前处理,后续任务就可以将词汇而不是字当作处理的单位
    • 但像 BERT 这种模型处理中文时就以字作为单位(很可能已经自动学到了分词)

image.png

7.2.3 句法分析 Parsing

句法分析

  • 输入:sequence
  • 输出:树状结构

image.png

7.2.4 指代消解 Coreference Resolution

指代消解:找出一篇文章里哪些词汇指的是同一样实体(Entity),尤其是某个代名词(he、she、it)指的是什么

  • 输入:sequence
  • 输出:

在线Demo:AllenNLP - Demo
image.png

7.3 摘要 Summarization

7.3.1 抽取式摘要 Extractive summarization

抽取式摘要:给机器看一篇文章,让它自动挑选出其认为重要的语句,拼接起来,就是摘要

  • 输入:sequence
  • 输出:每个 token(句子) 的类别(二分类:选择、不选择)
  • 缺点:这种方法生成的摘要中的句子都是文本中的原句,因此很难产生好的摘要

image.png

7.3.2 生成式摘要 Abstractive summarization

生成式摘要:不从文章里直接挑句子组成摘要,机器要用自己的话来写摘要

  • 输入:sequence
  • 输出:sequence
  • 使用 seq2seq model
  • 模型需要有 copy 机制,能够直接从输入的原文章中 copy 一些词汇放到输出的摘要中(因为摘要中一般包含原文中的词汇)

image.png

7.4 机器翻译 Machine Translation

机器翻译

  • 输入:sequence
  • 输出:sequence
  • 无监督机器翻译是一个重要的研究方向

image.png

7.5 文法纠错 Grammer Error Correction

文法纠错:可以直接使用 seq2seq model 硬 train 一发,也需要 copy 的机制将一些没有错的词汇直接从输入 copy 到输出

  • 输入:sequence
  • 输出:sequence
    • 简化版本:输出每个 token 的类别(4种类别:正确、置换、插入、删除)

image.png

7.6 文本情感分类 Sentiment Classification

文本情感分类

  • 输入:sequence
  • 输出:一个类别(正面、负面)

image.png

7.7 立场侦测 Stance Detection

立场侦测

  • 输入:两个 sequences(原博文 + 需判断立场的评论)
  • 输出:一个类别(立场:支持、反对、怀疑、评论)

image.png

7.8 事实侦测 Veracity Prediction

事实侦测:判断一段文字的真假

  • 输入:多个 sequences(需判断真假的博文 + 评论 + 维基百科等其它资料)
  • 输出:一个类别(二分类:真、假)

image.png

7.9 自然语言推理 NLI (Natural Language Inference)

自然语言推理 NLI

  • 输入:两个 sequences(前提 + 待判断真假的假设)
  • 输出:一个类别(假设的推理结果:矛盾、蕴含、中立)

image.png

7.10 搜索引擎 Search Engine

搜索引擎

  • 输入:两个 sequences(查询关键字 + 网页文章)
  • 输出:一个类别(二分类:相关/不相关,相关的网页排序就靠前)
  • 谷歌已经把 BERT 用于搜索引擎,使用 BERT 后搜寻结果变得更好(参见博客:Understanding searches better than ever before

image.png

7.11 问答系统 QA (Question Answering)

QA 问答系统

  • 输入:多个 sequences (问题 + 知识来源)
  • 输出:sequence(回答)
  • QA 模型要能处理非结构化的文章(网页),因此也称为 阅读理解

image.png

7.11.1 抽取式问答系统 Extractive QA

抽取式 QA:正确答案在文章中,是普通 QA 的简化版

  • 输入:多个 sequences
  • 输出:两个正数 s,e,代表输入的文章中的第 s 到第 e 个 tokens 为答案

image.png

7.12 对话系统 Dialogue

7.12.1 Chatting 尬聊

在线聊天机器人:cleverbot

Chatting 聊天机器人:使用 Seq2Seq Model

  • 输入:多个 sequences(要把过去的对话语句都丢进去,使得能知道上下文信息)
  • 输出:sequence(下一句要说的话)
  • 同时为了让回答更丰富,希望模型还能考虑人格、同理心、知识等

image.png

7.12.2 面向任务的 Task-oriented

任务导向的对话系统:期望对话是为了知道某些资讯,以帮人完成某件事,而不是尬聊

  • 输入:多个 sequences(过去已有的对话)
  • 输出:sequence(下一句要说的话)

image.png

  • 使用 Seq2Seq model,又可以拆成几个更小的模型:
    • NLU 自然语言理解
      • 意图分类:sequence(用户输入) → class(意图)
      • 槽填充:sequence(用户输入) → 每个 token 的类别(slot)
    • State Tracker:several sequences(历史对话) → sequence(state)
    • Policy:sequence(state) → 类别(action)
    • NLG 自然语言生成:sequence(action) → sequence(回答语句 reply)

image.png

7.12.2.1 NLG 自然语言生成 Natural Language Generation:

NLG 自然语言生成 Natural Language Generation:

  • 输入:sequence(一个 action
  • 输出:general sequence(自然语言,即要说的话)
  • 流程:
    • 先定好机器可以做的有哪些 action(eg. 打招呼、询问入住日等)
    • 将历史对话输入到模型中,输出一个 action
    • 将这个 action 输入 NLG,输出下一句对话

image.png

7.12.2.2 Policy & State Tracker

State Tracker:抽取状态

  • 输入:多个 sequences(历史对话)
  • 输出:sequence(state:相当于对历史对话记录的总结)
  • 使用 Seq2Seq 模型,可以 end-to-end 硬学

Policy

  • 输入:sequence(state,即 State Tracker 抽取出的状态)
  • 输出:一个类别(一个 action
  • 分类问题,根据 state 来决定下一步要执行哪个 action
    • eg. state 中还不知道入住人数,那么就执行询问订房人数的 action

image.png

7.12.2.3 NLU 自然语言理解 Natural Language Understanding

NLU 自然语言理解:将用户输入的 sequence 进行处理再输入到后面的 state tracker 进行后续处理
包含两个模组:

  • 意图分类 Intent Classification:判断句子的意图,是提供资讯还是询问问题
    • 输入:sequence(历史对话)
    • 输出:一个类别(一种意图:eg. 这句话是提供资讯 or 询问问题)
  • 槽填充 Slot Filling
    • 输入:sequence(历史对话)
    • 输出:每个 token 的类别
    • 流程:
      • 先定好一些 slots,每一个 slot 代表跟任务有关的一个咨询,eg. 入住日、退房日
      • 输入句子,输出每个 token 对应的类别(是哪一种 slot)

image.png

7.13 知识图谱 Knowledge Graph

知识图谱:从大量文字中抽取 实体 entity关系relation
分为两个步骤:(下面的介绍实际上是过度简化了的)

image.png

7.13.1 NER 名字实体识别 Name Entity Recognition

名字实体 name entity:人名、机构名、地点等,取决于实际应用关心的点

NER 名字实体识别:抽取实体

  • 输入:sequence
  • 输出:每个 token 的类别(名字实体)

image.png

  • 问题:名字一样可能指不同东西(实体),名字不一样可能指同一个东西(实体)
  • 解决:Entity Linking(之后的课会讲)

7.13.2 关系抽取 Relation Extraction

关系抽取

  • 输入:多个 sequences(相关的语句、两个实体)
  • 输出:类别(两个实体之间的关系)

image.png

7.14 自然语言处理能力评测

  • 过去是每个任务分开做,各有一个模型,那么就难以系统性地评估机器理解人类语言的能力
  • 想法:用同一个模型解多个任务,对比结果
  • 几个比赛:

7.14.1 GLUE

有三大类任务:

  • sequence → class:
    • Corpus of Linguistic Acceptability (CoLA)
    • Stanford Sentiment Treebank (SST-2)
  • 两个 sequences → class(两个句子的意思是否相同)
    • Microsoft Research Paraphrase Corpus (MRPC)
    • Quora Question Pairs (QQP)
    • Semantic Textual Similarity Benchmark (STS-B)
  • NLI 自然语言推理 Natural Language Inference:两个 sequences(前提 + 假设) → class(推理结果)
    • Multi-Genre Natural Language Inference (MNLI)
    • Question-answering NLI (QNLI)
    • Recognizing Textual Entailment (RTE)
    • Winograd NLI (WNLI)

GLUE 网址:GLUE
GLUE 还有中文版本:中文语言理解测评基准(CLUE)
image.png

7.14.2 Super GLUE

随着模型的进步,上面的 GLUE 的难度就显得不够大了,因此就有了进阶版的 GLUE,包含 8 个任务
网址:SuperGLUE

7.14.3 DecaNLP

网址:DecaNLP
DecaNLP 有十个任务,且任务更难,要求用同一个模型解这 10 个任务

  • 可以将所有不同的任务都看作 QA 问题