(一)macBert
论文:https://arxiv.org/abs/2004.13922
论文初衷:构造汉语预训练语言模型(Bert主要是针对英文)
BERT:2019年提出,由MLM和NSP两部分组成。
MLM :从输入中随机屏蔽一些标记,目标是仅根据上下文预测原始单词
NSP:预测句子B是否是句子A的下一个句子
macBert改进:将原来MLM任务替换成MLM as correction任务,即用相似词token屏蔽替代原来「Mask」token屏蔽
MacBERT-base, Chinese: 383M
MacBERT-large, Chinese: 1.2G
(二)KECP(代码目前没开源)
KECP是一种面向机器阅读理解的小样本学习算法,采用Prompt-Tuning作为基础学习范式,在仅需要标注极少训练数据的情况下,在给定文章中抽取满足要求的文本作为答案。由原来传统抽取式阅读理解任务转化为基于BERT生成式任务。
步骤:(1)给定一段文章和一个提问,我们首先用启发式规则构造问题查询提示。
(2)知识感知提示编码器,知识增强的语义表征
2.1)文章知识注入
2.2)文章 -提示词 知识注入
(3)跨层次对比学习
增加一些负样本参与训练,通过对比学习,提高模型泛化能力。
工程地址:https://link.zhihu.com/?target=https%3A//github.com/alibaba/EasyNLP
机器阅读理解(MRC)流程:
1:文章大致段落定位
可通过query中实体与context中实体匹配实现。
2:预处理模块
vocab.txt:词表,每一个 token 占一行,行号就是对应的 token ID(从 0 开始)
1)分词:使用分词器 (Tokenizers) 将文本按词、子词、符号切分为 tokens。
2)结构化处理:tokens对齐,即保证送入模型中的tokens 输入大小一致。context太长,需要裁剪,context太短,需要padding补齐。
3)语言特征计算:通过vocab.txt完成query与context分词转token ID。
3:模型调用
模型输入:1)‘input_ids’: [],:字向量,通过vocab.txt词表获得每个token 的id,组成的一维向量
2)‘token_type_ids’: [], :文本向量,初始值:问题字符位置为0,文章字符位置为1
3) ‘attention_mask’: []:位置向量 ,一般情况全1,如果有padding token,在padding token位置标记0.存在的意义:padding token不参与编码,防止引入歧义的上下文语义。
模型输出:1)”start_logits”: 1384向量;”end_logits”: 1384向量;“prediction”
4:后处理
1) 取start_logits和end_logits前N=10个数值大的index,得到start_indexes,end_indexes
2) 遍历start_indexes,end_indexes,得到一组预测答案,取start_logit+end_logit最大的一个答案作为输出。
5:输出答案
Acc=len(pred_answer并label_answer)/len(label_answer)
即:预测回答内容与标签回答内容重合度/标签回答内容总字数
在1329个token的《XX产品概括》语料中,57个提问(《XX产品概括提问》),平均准确率为97%。
表现能力差的地方:
(1)代词不容易理解。
比如:context中有同时有XX_1产品优势和XX_2产品优势,如果被提问XX_1产品优势是什么?,很容易回答成XX_2产品优势。
解决:段落定位
将不同产品放在不同段落,再合并到context中。
(2)不能直接回答判断句
比如:提问:XX_1是否支持手势识别?我们期望回答是:是,或者支持,但模型回答是:XX_1支持21种手势识别。
(3)提问一定要带实体。即问什么产品的什么信息,一定要把产品名称带出来
比如:XX_1产品优势是什么?不能直接问:产品优势是什么?除非context中只有XX_1相关介绍。
基于nlp的问答系统,不管是文本问答,还是知识图谱问答,答案只能在语料中存在才能回答正确,没有总结归纳的能力。比如:context:小红有苹果,梨,香蕉。。。,query:小红有多少种水果?Answer:小红有苹果,梨,香蕉。即nlp不能回答出3种,因为context没有3种。
优点,nlp问答能力可控制性很强。
(1)语料context可以一直扩大,没有大小限制。context越丰富,nlp回答能力越强,两者之间属于强相关。
(2)nlp问答系统前处理和后处理对输出结果影响很大。前处理中段落定位,Prompt提问等策略能够大大提高nlp能力。nlp模型出来的结果是输入的每个token 的start_logits和end_logits,最终的Answer是根据每个token 的start_logits和end_logits处理,得到一组最优start_index和 end_index,最后再映射回文本输出。所以如果前处理和后处理优化的好,nlp问答的能力会很好。