作者 | 夜小白

整理 | NewBeeNLP

0、前言

NLP任务中,常见的做法是根据「当前输入」进行建模,进而设计出我们的模型,通常用到的信息只有「当前局部的信息」

这和人类最大的区别就是我们在理解语言的时候,我们会用到我们之前学习到的知识,比如说到“自然语言处理”,我们就可以联想到“文本匹配”、“阅读理解”、“BERT”等等,而我们会利用这些外部知识来加强自己的理解,如果没有用额外的知识,比如接触到我们一个不熟悉的领域,我们也很难完全理解语义。而目前NLP常见做法只利用了输入信息,没用利用外部知识,理解层次偏低,举个例子,文本匹配任务中:

Query Title
「新冠肺炎」可以通过完好的皮肤传播吗 「新型肺炎」会通过皮肤传播吗
「IPhone手机」多少钱 「IPhone手机壳」多少钱

一般的文本匹配模型很容易误判上面Query-title为匹配,因为上述Query-title文本字面组成非常相似,比如「新冠肺炎」「新型肺炎」「IPhone手机」「IPhone手机壳」的embedding可能非常相似,导致模型计算出来的相似度很高,其中一个原因就是因为模型没有先验知识,并不知道「IPhone手机」「IPhone手机壳」是两个不同的东西,如果能在模型中引入外部知识,让模型提前了解「IPhone手机」「IPhone手机壳」的概念,那么就提高的模型的理解层次,也能提高任务效果。

现在知识图谱,图卷积神经网络也是非常热门,知识图谱作为一个常用的外部知识库,有很多工作都在研究如何将其引入各种NLP任务进行知识增强,最近也是看了几篇论文,在这里做一下总结。

1、当推荐系统遇上知识图谱

「(RippleNet)」 RippleNet: Propagating User Preferences on the Knowledge Graph for Recommender Systems. Proceedings of the 27th ACM International Conference on Information and Knowledge Management..[PDF][1]

这篇论文在推荐系统的排序任务上引入了知识图谱的信息进行任务增强,主要是从下面三个方面考虑:

  • 知识图谱可以引入各个Item之间的语义相关性,有助于找到潜在的联系,从而提高推荐的准确性

  • 知识图谱还可以通过类型关系,来合理扩展用户的兴趣,增加推荐项目的多样性

  • 知识图谱还可以连接用户的历史记录和推荐记录,从而解决推荐系统冷启动问题,并且可解释性好

从上面可以看出,通过知识图谱我们可以推理出用户看过电影的导演、或者类型,并且可以进一步得到同导演或者同类型的电影,从而对用户进行推荐。

模型结构

论文中提出的RippleNet结构如上图所示,之所以叫Ripple是因为信息在知识图谱上的传播就像雨滴落在水面形成的Ripple,每次都会往外传播一层,并且越外部的信息作用越小。整个模型输入为用户




和物品




,输出为用户点击该物品的概率。

RippleNet运算过程如下:

  • 选取用户点击历史为「知识图谱中的种子」,作为知识图谱的初始三元组集合Ripple Set,这一步主要是利用用户历史信息来进行任务增强

  • 每一步(Hop)会先根据Item embedding




    和Ripple Set(其实就是知识图谱中的三元组集合)来计算得到这一部的隐层表示输出







    ,计算方法类似于attention(加权平均),通过这种方式相当于在知识图谱上进行了知识推理,比如从用户历史The Green Mile我们推理到了导演为Steven Spielberg,进而推理出同样导演的电影Raiders of the Lost Ark,这样的话我们就利用到了外部知识,通过三元组之间的关系来增强任务

  • 最后就是信息的融合,将每步推理得到的隐层输出表示







    相加,作为用户最终 embedding




    ,然后与物品 embedding




    计算得到最终的点击概率(比如说余弦相似度)

引入知识方法

从上面的分析可以看出,RippleNet中引入外部知识的做法主要「通过用户历史信息建立Ripple Set,也就是对应到知识图谱中的节点,并且在每一步都会传播到相邻节点并计算隐层表示输出」 ,计算方法类似于attention(其中query为上一层的输出,key和value为当前的Ripple Set中的实体embedding ),具体的计算公式有兴趣的话可以看论文。

2、当文本匹配遇上知识图谱

Entity-Duet Neural Ranking: Understanding the Role of Knowledge Graph Semantics in Neural Information Retrieval. ACL. [PDF][2]

从前言的例子可以看出,文本匹配中如果我们能够引入实体的外部信息,就能够很好的帮助模型实现更高层次的语义理解,而这篇论文正是将CN-DBpedia构建的知识图谱作为外部知识库,为模型引入额外的实体特征从而进行任务增强。

模型结构

图中的Enriched-entity Embedding即是引入的外部实体信息,通过原始的word embedding与引入的Enriched-entity Embedding矩阵进行交互从而计算出最后的score。Enriched-entity Embedding则由Entity EmbeddingDescription Embedding以及Type Embedding信息融合得到,计算方法如下:

  • 「Entity Embedding」
























    ,从预训练好的知识图谱embedding获取(比如TransE)

  • 「Description Embedding」:从实体的描述信息中获取embedding,首先用CNN对实体描述进行n-gram卷积:

之后使用max-pool获得 Description Embedding:

  • 「Type Embedding」:每个实体可以是多种种类,论文中采用了attention的方式来获得Type Embedding,首先是通过type embedding 层获得各个种类embedding













































之后通过attention计算得到最后的Type Embedding
























































attention score 计算方式如下:

  • 最后Enriched-entity Embedding则由Entity EmbeddingDescription Embedding以及Type Embedding进行信息融合计算得到:

引入知识方法

Entity-Duet Neural Ranking Model 引入外部知识的方式是将文本匹配任务中的输入Query和Document实体在知识图谱中的embedding作为额外的监督信息添加到模型中,不仅用到了实体自身embedding,还用到了实体描述(description)的embedding信息,以及实体种类(Type)的embedding信息,这样的话模型可以理解实体的具体含义,而不是停留在字面上的理解,比如「IPhone手机」「IPhone手机壳」这样的概念,通过引入知识图谱信息就可以很好解决。

3、当预训练模型遇上知识图谱

ERNIE: Enhanced Language Representation with Informative Entities. ArXiv, abs/1905.07129.[PDF][3]

最后要介绍的是在BERT预训练中引入外部知识库,ERNIE这篇论文中使用维基百科语料库进行预训练,并且使用语料中的 Anchor Link 来获取实体,通过 Wikidata 训练出的 TransE向量作为实体的特征,输入BERT模型中预训练作为额外的监督,通过这种方式可以大大提高在 Entity Typing 和 Relation Classification 任务上的效果。

模型结构

ERNIE中修改了BERT中的Encoder为Knowledge-Encoder,从图上可以看出,输入除了原始的句子tokens之外,还有实体tokens,简单说下每个K-Encoder的计算步骤:

  • 首先是input token 和 entity token自己的multi-head self-attentions(就是标准的MH-ATTs)

  • 之后进行aggregate操作,将input tokens与entity tokens进行信息融合,得到这一层的embedding输入,也是下一层的embedding输入

引入知识方法

ERNIE中修改的BERT原始Encoder结构,额外加入了entity embedding输入,并且使用了TransE作为初始输入,通过这种方式,就可以在预训练中引入大量的外部知识,提高下游任务的效果。实验表明在Entity Typing和Relation Classification上取的了很好的效果。

总结

在NLP任务中引入外部知识是一个很好的任务增强方式,带着先验知识进行推理,也正符合人类思考的习惯,从上面总结可以看出,目前利用外部知识库的主要方式都是引入知识图谱中的实体信息。更具体一点,引入实体各种embedding 信息作为模型的额外输入,我在想知识图谱作为一个有结构的图,是不是可以用上知识库中的结构信息呢?我下面说下自己的几点思考:

  • 将文字表达转换为图结构,然后在知识图谱中进行匹配,这样的话可以更好地利用图的结构信息,比如推理路径,也可以使模型更具有可解释性

  • 引入GNN,在图上进行推理,提高语义理解的层次

目前只是将自己学到的引入外部知识的方法做了个小结,应该已经有很多研究尝试将各种知识库引入NLP任务来提供额外信息,以后有机会再详细总结一下啦~

一起交流

想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定要备注信息才能通过)

本文参考资料

[1]

[PDF]: http://dl.acm.org/doi/10.1145/3269206.3271739

[2]

[PDF]: https://arxiv.org/pdf/1805.07591.pdf

[3]

[PDF]: https://arxiv.org/pdf/1905.07129.pdf

END -

我是如何寻找数据集的,一些个人私藏

2021-07-02

word2vec中的数学模型

2021-07-01

万物皆可Graph | 当推荐系统遇上图神经网络(二)

2021-06-28

茫茫社招路,硕士毕业半年的抉择

2021-06-29

NLP任务增强:通过引入外部知识来提供额外信息相关推荐

  1. 【NLP】NLP任务增强:通过引入外部知识来提供额外信息

    作者 | 夜小白 整理 | NewBeeNLP 0.前言 NLP任务中,常见的做法是根据「当前输入」进行建模,进而设计出我们的模型,通常用到的信息只有「当前局部的信息」. 这和人类最大的区别就是我们在 ...

  2. 引入外部知识的社交平台立场检测模型

    摘要 针对社交平台的用户评论进行立场检测,旨在对某一特定话题下的用户评论进行立场分类.现有立场检测研究只关注评论文本的内部语义特征,而忽略了与评论文本相关的外部知识.通过将评论的关键信息映射到知识图谱 ...

  3. 论文浅尝 | 如何利用外部知识提高预训练模型在阅读理解任务中的性能

    论文笔记整理:吴桐桐,东南大学博士生,研究方向为自然语言处理. 链接:https://www.aclweb.org/anthology/P19-1226/ 近年来,机器阅读理解已经逐渐发展为自然语言理 ...

  4. 论文浅尝 | 在生成式多跳机器阅读任务中引入外部常识知识

    Commonsense for Generative Multi-Hop Question Answering Tasks 链接: https://arxiv.org/abs/1809.06309 背 ...

  5. 利用外部知识增加QA答案自然程度,这是阿里的问答模型新思路丨EMNLP

    宋恒宇 发自 凹非寺 量子位 报道 | 公众号 QbitAI 自然语言处理曾被认为是人工智能皇冠上的璀璨明珠,现如今再随着图像识别等技术的长足进步,这颗明珠似乎也显得有些暗淡无光了. 但是,一篇来自阿 ...

  6. 将外部知识整合到群体智能中,以获得更具体的知识

    Incorporating External Knowledge into Crowd Intelligence for More Specific Knowledge Acquisition 关键知 ...

  7. Vue style里面使用@import引入外部css, 作用域是全局的解决方案

    问题描述 使用@import引入外部css,作用域却是全局的 <template></template><script>export default {name: ...

  8. 论文浅尝 - IJCAI | Knowledge is NOT always you need: 外部知识注入预训练模型的利与弊...

    转载公众号 | 浙大KG 论文题目:Drop Redundant, Shrink Irrelevant: Selective Knowledge Injection for Language Mode ...

  9. 引入外部机构需要注意的事项_如何与外部营销机构合作

    引入外部机构需要注意的事项 本文是由两部分组成的系列文章中的第二篇,该系列文章涉及建立营销合作伙伴社区. 阅读第一部分 . 以社区为动力的方法与广泛的营销机构生态系统合作( 如今越来越多的公司正在转向 ...

最新文章

  1. 【java】兴唐第二十五节课(异常和log4j的使用)
  2. 避免死锁的一些注意事项
  3. Class 17 - 1 动态渲染页面爬取 — Selenium使用
  4. java system_深入分析java中的System
  5. 参数列表和数组的相互转换
  6. mysql 空位补0_MySQL-13(表的创建、数值类型整型、float/decimal、ZEROFILL、BIT(M))
  7. C#的百度地图开发(一)发起HTTP请求
  8. python全系列官方中文文档
  9. vue NavigationDuplicated: Avoided redundant navigation to current location
  10. spring5.0之后Log4jConfigListener过期问题
  11. msm8996平台的一些debug方法
  12. 对比DoS攻击与DDoS攻击
  13. SpringBoot项目H5界面手机拍照调用腾讯云OCR卡证识别接口完整例子
  14. 安卓开发拍照时闪退遇到问题: file:///storage/emulated/0/0.jpg exposed beyond app through ClipData.Item.getUri()
  15. 公司企业邮箱怎么登录?这些安全登录邮箱的方法你要知道
  16. 5G时代下的光模块:腾讯云计算技术投资5000亿元(附下载)
  17. TPC/IP协议中与IP相关的知识点简介
  18. CentOS7光盘定制化
  19. 为Debian解决Mercury MW150US无线网卡驱动
  20. 在MMClassification中使用Swin-Transformer开始一个分类任务

热门文章

  1. SAP License:ERP实施如何防止内部信息泄露
  2. SAP License:SAP FI/CO 基本概念
  3. 冷启动阶段的多规则策略如何筛选?
  4. hdu 6348 序列计数
  5. echarts实用小技巧,控制字符串长度,限定整数等
  6. mvc4.0 @Styles.Render(转)
  7. 【高并发解决方案】1、高并发解决方案汇总
  8. Mysql的简单使用(二)
  9. 转载: CentOS下配置Apache
  10. [Buzz.Today]2012.04.29