本门课程是2020年李宏毅老师新课:Deep Learning for Human Language Processing(深度学习与人类语言处理)
课程网站
B站视频
公式输入请参考:在线Latex公式
本节主要涉及下面两种任务
先来看任务的分类:
对于吃文字,吐类别任务,这个类任务可以分两种:
一种是将句子进行分类,例如情感识别
另外一种是按token进行分类,例如NER
对于吃文字,吐文字任务一般都是attention+seq2seq模型,而且这个attention通常还可以有copy mechanism,可以将输入的部分内容copy到输出。
以上是只有单个sequence作为输入的情况,当有多个sequence作为输入的时候:
有两种解决方案:
第一种比较简单,就直接把多个sequence进行concat操作后,视为一个sequence,进入模型
第二种是将不同的sequence进入各自对应的模型中,并对sequence直接进行attention,也就是模型与模型直接要有交互。
总结起来根据输入和输出的种类可以把NLP任务分为8类,就是下面的表格:
One Sequence | Multiple Sequences | |
---|---|---|
One Class | Sentiment Classification Stance Detection Veracity Prediction Intent Classification Dialogue Policy |
NLI Search Engine Relation Extraction |
Class for each Token | POS tagging Word segmentation Extraction Summarization Slotting Filling NER |
|
Copy from Input | Extractive QA | |
General Sequence | Abstractive Summarization Translation Grammar Correction NLG |
General QA Task Oriented Dialogue Chatbot |
Other: Parsing, Coreference Resolution
Annotate each word in a sentence with a part-ofspeech (e.g. Verb, Adjective, Noun)
词性标注。
Input: sequence
Output: class for each token
分词,这个任务是针对中文而言的,英文是有空格进行分割的。
Input: sequence
Output: class for each token
根据sequence产生树状结构。Parsing有两种类型,属于other类型。
指代消解,如下图所示,同样结果可以用于下游任务,属于other类型。
抽取式摘要
Extractive summarization,Here a token is a sentence。模型可以看做是Binary classification的任务,把每个句子都进行二分类,是否做为摘要,当然这样的原文进行摘要比较low。
Input: sequence
Output: class for each token
Abstractive summarization:
Input: sequence
Output: sequence
为了不失原义,通常都是从原文中copy关键字,然后进行改写,因此模型需要有copy的能力。
机器翻译
Input: sequence
Output: sequence
如果某个语言没有文字,那么第三种模型就非常适用。
Unsupervised machine translation is a critical research direction.由于语言种类太多,无监督学习非常重要。
语法纠错
Input: sequence
Output: sequence
这个任务也需要模型有copy的能力。
还可以把这个任务看做是分类问题,例如把每个token分为几个类别,先对比different,然后R代表replace,A代表add:
情感分析,在电商评论分析用得较多。
Input: sequence
Output: class
立场检测
Input: two sequences
Output: a class
Many systems use the Support, Denying, Querying, and Commenting (SDQC) labels for classifying replies
这个任务可以用在Veracity Prediction
类似信息、新闻的真假判别。
Input: several sequences
Output: class
这里模型吃新闻、评论以及维基百科相关内容,然后输出判断结果。
自然语言推断
Input: two sequences
Output: a class(矛盾、包含、中立)
例如:
根据上面的图片,下面有三个说法,要给出判断。
Input: two sequences
Output: a class
输入搜索的关键字,以及对比的文章,然后计算结果是否相关。
下面的例子来自谷歌,在使用BERT之前,搜索引擎将stand和stand-alone混为一谈,而BERT出现后,模型就可以正确区分词义了。
问答系统
Input: several sequences
Output: sequence
图中表示得非常清楚,不多说。
还有一种Extractive QA: Answer in the document
一般从原文中copy答案,s代表开始位置,e代表结束位置
最常见的就是Chatting(chat bot)
一般的Chatting就是尬聊,好一点的就是会根据聊天对象的Personality、Empathy、Knowledge等进行不同的交流
当然还有Task-oriented的Dialogue
例如自动订房机器人:
这里要涉及Natural Language Generation (NLG)
先定义一些Action
在聊天的过程中,不能尬聊别的东西,要按照动作列表进行聊。
更具体一点要构造Policy & State Tracker
State: What has happened in this dialogue.
这里 State Tracker 不能直接处理对话,而是吃NLU处理的结果
Natural Language Understanding (NLU)分为两大块,一块是Intent Classification,用于识别客户是提供信息还是询问问题。
另外一块是Slot Filling,输入sequence,输出得到每个token对应的类别
(warning: The following description oversimplifies the task)
Step 1: Extract Entity
Step 2: Extract Relation
抽取Node的技术叫做:
Name Entity没有非常严谨的定义,通常是指句子中包含的任务所关心的实体,常见的有:people, organizations, places
Input: sequence
Output: class for each token
just like POS tagging, slot filling
抽取边的技术叫:
例如上面的例子在标记出三个实体之后,需要对这三个实体两两之间进行关系标注,如果关系是事先定好了的,例如有30种关系,那么这个问题就可以用分类的思想来求解。
Input: sequence
Output: class
General Language Understanding Evaluation (GLUE)一个集合,用来评价机器理解人类语言的程度。
根据句子判断类别,第一个判断语法,第二个判断情感
• Corpus of Linguistic Acceptability (CoLA)
• Stanford Sentiment Treebank (SST-2)
下面三个都是给两个句子,需要判断两个句子意思是否一样。
• Microsoft Research Paraphrase Corpus (MRPC)
• Quora Question Pairs (QQP)
• Semantic Textual Similarity Benchmark (STS-B)
下面四个属于NLI的任务,给两个句子,一个句子是描述,另外一个是需要根据描述需要判别的内容。
• Multi-Genre Natural Language Inference (MNLI)
• Question-answering NLI (QNLI)
• Recognizing Textual Entailment (RTE)
• Winograd NLI (WNLI)
GLUE also has Chinese version (https://www.cluebenchmarks.com/)
BERT出现后,GLUE对于机器而言太简单了,因此出现了更加难的任务集合,叫Super GLUE,共有八个任务,基本都和QA有关。都可以转换为分类的问题来解。
https://super.gluebenchmark.com/
还有一个类似的任务集合
Decathlon是十项全能的意思,这个任务集合有10个任务,都用同一个模型来解,以此来评测机器理解人类语言的程度。
可以把这些所有的任务都转换为QA任务,再进行求解。