一. 引言

现实世界的文本表述如恒河沙数,以惊人的速度变换着,人工智能(AI)在快速识别形形色色的文本之前,必须经过充足的训练数据洗礼。然而,面对复杂多变的文本表述,NLP 模型往往无法从有限的训练数据中获得足够的支撑,寻求外部知识注入就成为了一条必经之路。

作为基底模型,ERNIE 等预训练语言模型普遍选择从知识图谱中获取结构化知识。构建完备的知识图谱,本身就是一项复杂课题,而融合训练更是高度的算力依赖。对于情感分析和攻击语言检测等文本分类场景,是否有更简洁的外部知识注入方式呢?

当然,在 NLP 技术还停留在特征工程时期,文本分类模型便搭建在大量的人工编辑或自动抽取的特征词典之上。进入深度学习时代,拥有卓越用户体验的商业落地系统仍然离不开用于干预黑盒模型的外部词典。尤其是对于大部分的应用场景,分类的判定本身就和关键词密不可分。比如,在情感分析中,情绪词“开心”“痛苦”等具有强烈的极性指向,副词“非常”“有一点”等也都是极其重要的程度线索。在攻击语言检测中,辱骂词“白痴”“傻瓜”就更直白了。

二. 词典表征

融入词典的第一步,是使用“向量”来表征词典命中的情况。如果共有 N 个特征词典,那么文本序列中的每个词,都有一个 N 维的特征向量,记为 feature-embedding。向量中的每个维度,代表当前词在对应词典中的权重得分。如果某一词典不包含权重得分,则命中记为 1.0,未命中记为 0.0。如果该词不在词典中,则记为 0.0。如果某一词典的分值超出区间 [-1,1],则应先进行归一化。

如上图所示,文本序列“我-今天-很-开心”共四个词,共三个特征词典。对应的特征向量分别为 [0.0, 0.0, 0.0],[0.0, 0.0, 0.0],[0.0, 0.7, 0.0],[1.0, 0.0, 0.0]。

三. 特征注入

在神经网络模型中注入额外特征的最直接方式,就是和 word-embedding 拼接在一起,这种朴素方式称为 native concatenation,如下图所示。

仅仅是简单拼接,在情感分类任务上也能获得一定的提升。在论文《Attention-based Conditioning Methods for External Knowledge Integration》中,作者比较了拼接方案在 LSTM 模型上对各个情感分类数据集的效果,如下图所示。

对于 CNN 类模型,还有一种拼接方案为 channel concatenation,即利用网络本身的多通道特定,使用二维卷积核进行编码。对于 feature-embedding比word-embedding 短的位置,用 0 补齐,如下图所示。

然而直接拼接并不是一个普适方案。对于 BERT 等已经完成了预训练的模型,已无法再在 word-embedding 层进行注入。即使是 LSTM 或 CNN 等简单网络,过早地进行融合也会干扰模型对文本本身语义的提取。因此,更加成熟的方案,BERT/LSTM/CNN 在完成了语义编码后,使用隐层向量代替 word-embedding 和 feature-embedding 进行拼接,再输入给 MLP 等单元进行融合,最终完成分类判定。

四. 拼接之后

当然,在完成了拼接注入之后,真正的融合方式不只有线性变换可以选择。从经验来说,效果更好的融合方案,都是“非对称结构”的。即 word 信息和 feature 信息不完全对等,在功能上彼此区别。模型仍然以文本信息作为主要判断依据,综合全局语义进行分类判定。词典信息作为引导,提醒模型关注被标记的关键词。这样的方式也符合人类在完成此类任务时的直观思维方式。

这不就是 attention 机制嘛?不过不是 Transformer 里的 self-attention,而是更古早的 vanilla 版本。该方案不进行任意两个位置之间的关联计算,每个词的权重只由自身决定。先来看看不进行融合时,是怎么对 word-embedding 进行 attention 的。对于一个完整的文本序列,将第 i 个词wi对应的语义向量记为hi,首先计算其 attention 得分:

其中va、wa、ba 都是待学习的模型参数。然后,根据 attention 得分进行各个位置的语义向量的加权,获得最终用于分类判定的r:

将第 i 个词 wi对应的词典特征向量记为c(wi) ,在 feature-embedding 的引入过程中,只修改 attention 得分 ai,不影响加权对象hi ,以实现非对称结构。即修改 f()为:

输出 [0~1] 之间的浮点数,再与hi进行点积,实现门控结构。以词典信息为门,对语义信息进行控制。具体的函数形式可以有多种变化,没有定式,应当在业务数据集上进行尝试,找出最佳的方案。

Attention 模型可以根据权重分数,直观地看到语义抽取的重点。以一个 PsychExp 情感分析数据集上的一个 case 为例,注入外部词典后,建模中心出现了变化,最终分类从 anger 变为了 guilt。如下图所示:

五. 总结

与知识图谱等结构化知识相比,外部词典不仅易于构建和维护,更适合文本分类的应用场景。进行知识引入后,一方面能显著提升模型的召回能力,减少业务漏判,另一方面,在中文互联网这个黑话频出的环境,可以在不更新模型的前提下让应用系统适应外部语言环境的变化发展。比起直接注入,与 attention 结合更符合人类的思考习惯,也更直观便于调试。在追求简洁优美的 end2end 模型时,也不应完全舍弃传统方案。各种结构化非结构化的经验知识,能够帮助我们打造用户体验一流的成熟商用 NLP 系统。

NLP 模型“解语如神”的诀窍:在文本分类模型中注入外部词典相关推荐

  1. R语言构建文本分类模型:文本数据预处理、构建词袋模型(bag of words)、构建xgboost文本分类模型、基于自定义函数构建xgboost文本分类模型

    R语言构建文本分类模型:文本数据预处理.构建词袋模型(bag of words).构建xgboost文本分类模型.基于自定义函数构建xgboost文本分类模型 目录

  2. NLP——文本分类模型(HAN)(三)

    NLP--文本分类模型(HAN)(三) 1.引入 1. NLP--文本分类模型(一) 2. NLP--文本分类模型(二) 在之前的文章中,我们介绍了基于CNN机制是如何应用于文本分类.近些年来Atte ...

  3. 独家 | 教你用Pytorch建立你的第一个文本分类模型!

    作者:Aravind Pai 翻译:王威力 校对:张一豪 本文约3400字,建议阅读10+分钟 本文介绍了利用Pytorch框架实现文本分类的关键知识点,包括使用如何处理Out of Vocabula ...

  4. 文本分类模型_文本分类中的经典深度学习模型

    众所周知,文本分类是NLP领域中十分基础的任务,大部分文本分类模型稍加修改就可以应用到其他任务中.下面介绍几个经典的文本分类模型. 图中被引数来源google学术(2019/5/16) 1. text ...

  5. 文本分类模型_【文本分类】几个可作为Baseline的模型

    点击上方,选择星标或置顶,每天给你送干货! 阅读大概需要9分钟 跟随小博主,每天进步一丢丢 来自:AINLP 作者:老宋的茶书会 知乎专栏:NLP与深度学习 研究方向:自然语言处理 前言 最近,从Te ...

  6. 文本分类模型学习笔记

    文本分类模型学习笔记 TextCNN 模型结构 HAN 模型结构 实验 数据集 预处理 模型内容 模型训练 模型测试 近年来,深度学习模型在计算机视觉和语音识别中取得了显著成果.在自然语言处理中,深度 ...

  7. Datawhale NLP入门:Task5 基于深度学习的文本分类2

    Task5 基于深度学习的文本分类2 在上一章节,我们通过FastText快速实现了基于深度学习的文本分类模型,但是这个模型并不是最优的.在本章我们将继续深入. 基于深度学习的文本分类 本章将继续学习 ...

  8. 文本分类模型的训练、调优、蒸馏

    目前已经完成的事情 目前有12个模型. 其中BERT的七个变种模型,因为使用的是BERT-base-chinese的预训练模型和词表,所以不要自己做embedding,换上数据集和标签就可以跑 Ber ...

  9. 从零开始构建基于textcnn的文本分类模型(上),word2vec向量训练,预训练词向量模型加载,pytorch Dataset、collete_fn、Dataloader转换数据集并行加载

    伴随着bert.transformer模型的提出,文本预训练模型应用于各项NLP任务.文本分类任务是最基础的NLP任务,本文回顾最先采用CNN用于文本分类之一的textcnn模型,意在巩固分词.词向量 ...

最新文章

  1. UVA - 11491 Erasing and Winning(奖品的价值)(贪心)
  2. 【Android】 常用的Intent
  3. linux基础命令篇一
  4. Django Views(视图函数)
  5. Intel官宣开发RISC-V处理器:明年首发7nm工艺
  6. SignalR--Web客户端
  7. JAVA程序员从菜鸟到菜鸟
  8. Google Map 附近查询
  9. Simple Data帮助类
  10. 机器学习之随机森林模型
  11. mantelhean.test r语言_Meta分析常用教程:R语言
  12. 软件盗版受害者解决方法
  13. ad敷铜后还有部分飞线_难以置信!小霸王卡带中居然藏有隐藏游戏,大部分玩家闻所未闻|小霸王|游戏|魂斗罗|卡带|红白机...
  14. 服务器lnixs系统,Navicat for MySQL v12.1.19 强大的数据库管理和开发工具 _ 黑苹果乐园...
  15. 2018年,数万款小程序暴毙在路上
  16. Latex通过bib文件转出bbl文件
  17. 洛谷 U5773 受望先锋
  18. 如何克服自己的懒惰-第二弹
  19. 网易微专业java高级笔记_网易前端微专业------页面架构笔记
  20. python读取配置文件 分段_python分割文件的常用方法

热门文章

  1. java分析测试代码程序执行时间与消耗内存
  2. Java项目Json字符串转对象,去斜杠
  3. chrome各种版本下载地址:
  4. s9 android p 更新时间,重磅福利!三星Galaxy S9将更快获得安卓P更新
  5. 新潮流形势下平台化电商还有优势吗?
  6. php redis 消息队列_PHP Redis实现消息队列
  7. android 录音原始文件_Android 录音详解(一)—— MediaRecorder、AudioRecord、生成wav格式、边录边播...
  8. Jmeter安装教程与使用
  9. 图片怎么转换成JPG格式
  10. flyme服务器升级维修中,魅族Flyme 7体验版上线 修复重大BUG