图谱实战 | 丁香园医疗领域图谱的构建与应用

63197617a777e8cb18bd8b2cd86e1073.png

分享嘉宾:付子玉 观澜网络 算法工程师

编辑整理:孙佩霞 中国电信研究院

出品平台:DataFunTalk

导读:丁香园大数据组旨在为用户提供更优质的内容与服务,使用知识/概念图谱、预训练模型挖掘更深层次的用户意图。本文介绍了丁香园nlp组联合华师大团队发表的文章SMedBERT,在医疗垂直领域下将知识图谱的医学实体和实体的结构化信息引入到预训练模型中,并介绍了丁香园在业务场景下的一些应用。全文主要由四个模块组成:

  • 业务场景介绍

  • 医疗图谱构建

  • ACL|SMedBERT

  • 工业落地和思考

01

丁香园业务场景概述

丁香园起点是打造一个专业的医学学术论坛,为医生、医学生、医疗从业者等提供一个信息交流的平台。丁香园的主要用户是医疗从业人员,会在论坛上发布考博、规培分数线、求助医疗文献等内容。随着业务的不断扩展,发展出了丁香医生、丁香妈妈等APP,为大众用户提供了一个健康信息平台。

54b73d0d71fdf6637cdf7be0df304185.png

目前丁香园从早期的医生用户扩展到了大众用户,实现了ToD(To Dcotor),ToC双核心驱动,业务会覆盖这两类人群的日常需求。比如,对医生为主的医疗从业者来说,会涉及到日常的学术问题、经验分享、疑难病例的讨论以及查阅药品说明书、诊疗指南等。对大众用户来说,包括线上问诊、科普知识、健康商城等服务。在2021年,丁香园C端规模达到1.2亿,医生端拥有全国70%的医生作为注册用户。

3a959e128bb0bd5a5877c0fbf55f7366.png

02

医疗图谱构建

首先介绍一下丁香园应用到的医疗健康图谱。医疗健康图谱构建由专业的医疗团队来维护,有医学背景相关同事维护疾病、症状、手术、药品等医学概念以及60多种医学关系。同时,丁香园nlp组会用一些算法去抽取和意图分类等工作,利用算法与人工相结合的方式对实体、关系、实体属性进行扩充。因为丁香园业务模式较多,需要考虑在图谱应用上如何做迁移、融合工作。

e20c8dda4019e5af1b4910ee3d5a79e0.png

为更好的去分析用户意图,构建用户画像,在实际工作中我们使用一种Taxonomy概念图谱。例如,搜索十二指肠溃疡,丁香医生会给出一个搜索结果:“十二指肠溃疡怎么去治疗”,它是消化内科的一个疾病,可以将其定义为一个消化内科的概念。在丁香园搜索规培考试,给对应的规培考试内容标注相关的标签,比如成绩查询、内科的标签考试答案等。

535c4806296b216052ff37358ed2cf50.png

概念图谱会以一个四层结构构建:

第一层底层是entity实体层,例如规培考试、十二指肠溃疡、腹痛等。

往上一层是instance层,也就是文章内容。例如十二指肠溃疡怎么治疗。

concept层是概念层,可以根据文章的用户点击行为、搜索行为、内容聚类,抽象到上层的concept概念结构,比如十二指肠溃疡对应的是消化内科的一种疾病。

最上面一层,建立与业务强相关的topic层

利用层级关系对长短文本进行多层次、丰富主题的刻画,去分析、理解用户的搜索行为。

b6c3387d202a367be5a3a87265a1e166.png

之前提到了两种知识图谱的构建,接下来介绍如何使用算法去优化命名实体识别、关系抽取等。举一个命名实体识别的例子,如“症状性动脉粥样硬化性椎动脉起始部狭窄的治疗”,常规NER可能会把这个识别成三个实体:

  • 疾病:“症状性动脉粥硬化”

  • 身体部位:“椎动脉”

  • 症状:“狭窄”

但这整个长句是属于一个完整的疾病。早期抽取的方式会充分地理解句中显式的词和词序信息。近几年采用一些格子结构做LSTM,把词的表征和潜在的词信息整合到字符CRF中去。如2018年Lattice提到把每个字作为词根或者词尾加入到模型训练中。到2019年Lattice LSTM把类似的短语用Lexicon的方式把字和词构建一个graph,再把graph特征融合到NER。但这种方式的复杂度非常高,而且耗时长。在2020年复旦大学提到FLAT的方式,引入了Transformer结构,利用Transformer的self-attention解决长文本依赖问题。FLAT可以充分利用Transformer格子结构,具备出色的并行化的能力,效率上得到了很大的提升。

eb508610bf1b12ca0ffe4a2104201e0a.png

图谱构建中肯定涉及关系抽取工作,早期关系抽取采用pipeline的方式进行,先做实体识别再做关系分类。但是,pipeline的方式可能会造成实体识别错误,间接会导致关系抽取也出现问题。借鉴了《A Novel Cascade Binary Tagging Framework for Relational Triple Extraction》文章联合学习的方式,实现二分标注的框架。该框架对object、relation、subject 做函数映射,而不像以前地方式去做离散的标签。它分为两个模块subject Tagger和 relation-specific object Taggers:subject Tagger先使用一个二分类去识别出subject的起始位置和结束位置,拿到subject去做表示特征,然后根据关系做一个多分类任务。每一个关系,都是一个二分类识别。根据映射得到object起始位置和结束位置,这样以一种联合的方式拿到实体关系三元组。

340aed8edb6dca540bd2be19f4c01dbe.png

构建概念图谱首先要解决两个问题,第一个问题是如何抽取concept,第二个问题是如何构建concept之间的层级关系,这里借鉴了两篇论文,分别是腾讯的《A User-Centered Concept Mining System for Query and Document      Understanding at Tencent》和阿里的《AliCG: Fine-grained and Evolvable Conceptual Graph Construction for Semantic Search at Alibaba》。

在实体抽取方面,主要分为头部和尾部两部分。头部的instance,由于头部的文章内容丰富,可以用模板去识别。长尾部一直都是比较难的问题,可以通过Phrase Mining,或者数据标注的方式解决。如何构建概念间的层次关系?可以通过用户的搜索点击行为去计算文章和概念的关联程度,根据关联程度判断概念之间的层级。

69f3935ddacc65a41acaabd2734b8c38.png

利用concept层次联合底层的专业医学实体和上层的业务,构建一个完整的业务图谱。以贝叶斯模型为基础去判断一对一的边关系,考虑全局的统计量或者文本的局部特征,生成一些多边的关系。我们借鉴了王仲远老师的一些相关工作,如MDL的原则等去做concept筛选。例如,论坛帖子、药物、商品信息等可以通过中间的concept层与实体之间进行关联。

03

SMedBERT

接下来介绍去年丁香园NLP组联合华师大何晓丰老师团队在ACL发表的文章《A Knowledge-Enhanced Pre-trained Language Model with Structured Semantics for Medical Text Mining》。这篇文章在医疗垂直领域下首次将知识图谱的医学实体和实体的结构化语义信息引入到预训练模型中。

d9cd3fe379e0debb063eb5434945a957.png

SMedBERT优化方向主要有两个,第一个考虑实体类别和关系来丰富语义,

第二个是构建knowledge bridge,将有一跳连接关系的邻居实体加入预训练模型中。

04a624a06be1f0d5d86b4ec5d8e30ed1.png

SMedBERT对于结构信息捕捉,有两个创新点:

首先是Mention-neighbor Hybrid Attention用来学习捕捉异构实体信息。什么是异构实体信息?图谱中有一个新冠病毒节点,与它相关的节点有疾病症状、治疗方案、检测方法等。将与新冠病毒节点一跳的相关实体取出,根据type和节点node信息融合到encoder层。

第二个创新点是Mention-neighbor Context Modeling,主要是将链接实体的上下文信息做mask处理去预测。模型主要由三个模块组成T-Encoder、K-Encoder、Pre-training Tasks。首先T-Encoder可以挑选出比较重要的相邻实体,使用方法是类似于PageRank的一种方式。其次K-Encoder进行mask操作,self attention获得关键实体的信息,对mask任务进行融合。

5bee94de68f43a1e43c7ef42cff192fc.png

在训练数据方面,我们收集了约5G大小的中文医疗文本、30亿左右的token。在实验对比上,选择了openkg、丁香园的KG、丁香园的RE;在Graph Embedding上选用Trans-R;在验证数据上选择了四组公开数据集如CHIP、WebMedQA等进行比较;在模型方面选择了Bert、RoBert、Knowledge-Bert等进行比较。从对比效果上来看准确率有很高的提升,并且在多个任务上都有明显提升效果,然后对不同模型进行实体Embedding相似性能力比较。

D1、D2、D3,主要对不同程度的邻实体覆盖进行划分。如D2使用了高频重合的实体,D3是低频实体去做比较。实验表明SMedBert对具有结构信息的捕捉能力较强。最终我们得到一个结论,将相邻相似实体、相关实体的信息引入到语义信息中,在下游任务上可以得到很明显的提升,其中留下了我们的一些思考:我们现在选择的邻居实体都是在一跳或者是两跳以内的,如果有"farther neighboring"远端的实体关系该如何应用?未来可以考虑如何更好地从长尾低频的医学实体学习语义信息。

04

工业落地与思考

1281ea62cc68a5085be42ca9bd36988f.png

接下来介绍目前丁香园在业务场景的一些应用。

先介绍我们在优化搜索上的底层架构。我们尝试把用户使用搜索的语义理解任务拆分成为五个步骤,每个步骤解决实体识别准确性的问题,包括文本纠错、名词短语抽取、命名实体识别、实体链接、语义理解。我们会通过结构化好的图谱对语义理解做优化,例如进行意图识别时,可以把graph embedding的特征拿过来,也可以通过推理的方式获得相关实体,还可以进行Query联想,联想相关的实体词,例如用户提到了某个品牌的商品,它的主要功能是什么,有什么类似的商品。

3c4e71ed2847a28672e74c679741264b.png

我们利用concept结构图谱对文本结构化上做了一些提升。文本结构化对于提升搜索效果起到了非常重要的作用,有了concept之后可以帮助我们从抽象的层面完成对文本打标签的工作,那业界中比较好的方案就是先用TransE之类的知识表示模型,把知识图谱train出Embedding,然后将这些embedding融合进LDA的模型里面,在模型中,会用vMF分布代替原来的高斯分布去处理实体词的部分。如此以来,我们就会对一篇如“麻醉不良习惯”的帖子中的讨论帖子抽出如“麻醉医学”和“麻醉的不良习惯”这样的关键词。

701d94f8cb06f3d60ea9bc2cb00d3a2f.png

目前Query扩展的问题主要有两类方法:

第一种,利用query词和document词的相关性去构建一个贝叶斯模型,扩展的结果是document词或document中出现的一些词组,帮助在召回阶段扩大潜在用户想要的那些文本。

第二种,把它作为一种翻译模型,思路是从query词翻译到document词。早期比较朴素的方案是用一个EM算法去找两类词的对齐关系。现在新的方案都是上神经网络去train一个生成模型来做这个工作。

有了concept层之后,用一些很简单的策略就能有不错的效果,比如我们会直接使用相关性的方式,也就是第一类方法去建模,就可以把原始query向concept层上扩展。比如,“哈萨克斯坦”可以扩展出“新冠疫情”或“不明肺炎”;同样,在电商场景下,我们可以利用扩展的concept和其他的实体关系做二级扩展,比如“产褥垫”可以扩展出“待产包”,然后再从待产包扩展出“卫生巾”“纸尿裤”。这样的应用也带了一点推荐的意思。

154f34c9266373b3de59da02d8117b3f.png

接下来介绍语义匹配,早期语义匹配使用双塔模型Bi-Encoder实现。Bi-Encoder优势是可以将候选集向量进行离线计算,线上预测只计算Context Encoder。但其中有个问题——把所有的实体信息放到一个固定的向量中去,可能会导致细粒度的语义缺失,无法精准地做匹配。于是,出现了Cross Encoder,它类似Bert预训练的方式,把两个句子进行一个拼接,放入Encoder中去,再去打分。这种方式可以达到很好的语义学习效果,但没办法实时,复杂度比较高,并且比较慢。

前几年出现Poly Encoder,将Context Encoder多个向量进行self-attention后融合,这种方式比Bi-Encoder更好地保留丰富的语义信息,又将candidate embedding做好离线计算,再用向量索引方式去做召回和打分。

我们在Poly Encoder之上做了一些改进,例如把SMedBERT引入到表示层,并且引入对比学习的优化,比较经典的是ConSERT和SimCSE,例如美团去年提到的一个对比学习的方法,实际应用中在计算句子相似度的时候会有很高的打分。这样虽然可以获得想要的内容,但在召回时不好控制召回的数量,误差也比较大。加入对比学习后会发现可以更好地解决BERT坍缩问题。

未来挑战主要有三个方面:

首先,训练数据成本高,因为医学领域数据资源比较少,如何降低人工成本形成一个良性的数据闭环是我们首先要做的。

第二,随着业务的不断扩展,当出现一个新的业务时数据量会比较少,怎么提升已有图谱的复用性,历史相关内容怎么去利用,怎么去做高质量的图谱融合。

最后,对于长尾低频的用户行为,如何更好地理解识别用户意图是未来的一个挑战。

05

Q&A

Q1:SMedBert是否有公开?

A1:在GitHub上已经公开。

Q2:Token Embedding后如何与知识图谱进行融合?

A2:通过Trans方式将知识图谱获得Graph Embedding表示向量与token Embedding进行拼接。之前提到的Poly Encoder可以把context encoder做整合进行self-attention获得更多语义信息,再进行下游任务。在过程中不仅做匹配单任务也对多任务进行优化。之前提到的instance做concept聚类,也可以表示学习上的多任务。

Q3:丁香数据来源有哪些?

A3:医学书籍、药品说明书、科普文章等。


分享嘉宾:

ad5112a524231cc110f802032e166ed4.png


OpenKG

OpenKG(中文开放知识图谱)旨在推动以中文为核心的知识图谱数据的开放、互联及众包,并促进知识图谱算法、工具及平台的开源开放。

e942a0772139472e4ea1a1d2413bfde4.png

点击阅读原文,进入 OpenKG 网站。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/477517.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 722. CPP删除注释(逻辑题)

1. 题目 给一个 C 程序,删除程序中的注释。这个程序source是一个数组,其中source[i]表示第i行源码。 这表示每行源码由\n分隔。 在 C 中有两种注释风格,行内注释和块注释。 字符串// 表示行注释,表示//和其右侧的其余字符应该被…

CVPR 2022 | 天大本科生论文入选!深度学习长尾分类新SOTA

文 | 丰色 发自 凹非寺 源 | 量子位(QbitAI)本科生搞科研到底能做出什么成绩?最新被CVPR 2022收录的一篇论文中,提供了一种新思路来解决深度学习中长尾分布数据的分类问题,最终实现了新SOTA。论文:https://…

Spring Cloud构建微服务架构:Hystrix监控面板【Dalston版】

在上一篇《服务容错保护(hystrix断路器)》的介绍中,我们提到断路器是根据一段时间窗内的请求情况来判断并操作断路器的打开和关闭状态的。而这些请求情况的指标信息都是HystrixCommand和HystrixObservableCommand实例在执行过程中记录的重要度…

学术会议 | 欢迎注册参加第11届国际知识图谱联合会议

11th International Joint Conference On Knowledge Graphs(IJCKG 2022)IJCKG(International Joint Conference On Knowledge Graphs)会议之前是国际语义技术联合会议(the Joint International Semantic Technology Conference (JIST)),JIST …

LeetCode 396. 旋转函数(数学)

1. 题目 给定一个长度为 n 的整数数组 A 。 假设 Bk 是数组 A 顺时针旋转 k 个位置后的数组,我们定义 A 的“旋转函数” F 为: F(k) 0 * Bk[0] 1 * Bk[1] ... (n-1) * Bk[n-1]。计算F(0), F(1), …, F(n-1)中的最大值。 注意: 可以认为 n 的值小…

敬你一杯调参人生

文 | 不会的选C源 | LA PAUSE乐泊一杯上好的手冲咖啡也是作品,就像算法工程师调参已久的模型,建筑师终于定稿的一份设计,一首制作人编排已久的歌曲。从第一次喝到风味开始喝咖啡的人很多,有的喝速溶,有的追星巴克新品&…

Spring Cloud构建微服务架构:服务容错保护(Hystrix断路器)【Dalston版】

前言 在前两篇《Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)》和《Spring Cloud构建微服务架构:服务容错保护(Hystrix依赖隔离)》中,我们对Hystrix提供的服务降级和依赖隔离有了…

LeetCode 934. 最短的桥(2次BFS)

1. 题目 在给定的二维二进制数组 A 中,存在两座岛。(岛是由四面相连的 1 形成的一个最大组。) 现在,我们可以将 0 变为 1,以使两座岛连接起来,变成一座岛。 返回必须翻转的 0 的最小数目。(可…

讲习班 | ISWC 2022 知识感知的零样本学习

前言近年来,深度学习技术依托强大的计算资源、复杂的神经网络和大规模的标注数据集在视觉、语言、医学、金融等广泛的研究领域取得了显著的成就。然而,在现实应用场景中,尤其是在开放世界的背景假设下,随时会有一些新的概念/对象出…

谷歌提出 RNN 版 Transformer,或为长文本建模的当前最优解

文 | 小轶今天给大家介绍一篇谷歌的最新工作,解决的是 Transformer 的长文本处理问题。在原生 Transformer 中,attention 的复杂度是输入序列长度的平方级别,因此限制了它处理长文本的能力。简单来说,本文提出的解决方案就是把 Tr…

Spring Cloud构建微服务架构:服务容错保护(Hystrix依赖隔离)【Dalston版】

前言 在上一篇《Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)》中,我们已经体验了如何使用HystrixCommand来为一个依赖资源定义服务降级逻辑。实现方式非常简单,同时对于降级逻辑还能实现一些更加复杂的…

重点领域知识工程课程群虚拟教研室建设启动会暨第一次教学研讨会在线召开...

重点领域知识工程课程群虚拟教研室启动会暨第一次教学研讨会于2022年10月11日晚在线召开。重点领域教学资源建设项目管理办公室相关负责人、中国中文信息学会语言与知识计算专委会主任李涓子、天津大学智能与计算学部主任李克秋出席会议并致辞。天津大学人工智能学院院长胡清华…

LeetCode 556. 下一个更大元素 III

1. 题目 给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于n。如果不存在这样的32位整数,则返回-1。 示例 1: 输入: 12 输出: 21示例 2: 输入: 21 输出: -1来源:力扣&#x…

这可能是你与 AI 大神们近距离接触的唯一机会……

明人不说暗话:作为粤海街头放飞梦想的有志青年,他们可能是国内最大胆的「狗仔队」。从2016年成立至今,他们报道过:国内外数十场 AI 学术会议动态,写下老中青研究者们在会场前线的精神风采AI 领域的每一个最新研究突破&…

Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)【Dalston版】

前言 在微服务架构中,我们将系统拆分成了一个个的服务单元,各单元应用间通过服务注册与订阅的方式互相依赖。由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服务自身问题出现调…

论文浅尝 | 基于注意力图卷积神经网络的依存驱动关系抽取

笔记整理:王大壮论文链接:https://aclanthology.org/2021.acl-long.344.pdf动机句法信息,特别是依存树,已经被广泛应用于关系提取,以更好地分析与给定实体相关联的上下文信息。然而大多数现有的研究都饱受依赖树噪声的影响,特别是当它们自动生…

别再龟速炼丹了!聊聊怎样科学提升训练效率

文 | Horace He等编 | Juniper源 | 机器之心深度学习是门玄学?也不完全是。每个人都想让模型训练得更快,但是你真的找对方法了吗?在康奈尔大学本科生、曾在 PyTorch 团队实习的 Horace He 看来,这个问题应该分几步解决&#xff1a…

LeetCode 第 17 场双周赛(469/897,前52.3%)

文章目录1. 比赛结果2. 题目LeetCode 5143. 解压缩编码列表 easyLeetCode 5144. 矩阵区域和 mediumLeetCode 5145. 祖父节点值为偶数的节点和 mediumLeetCode 5146. 不同的循环子字符串 hard1. 比赛结果 做出来了1, 3两题,第2题在比赛结束后10分钟提交通过。 2.…

Spring Cloud构建微服务架构:分布式配置中心【Dalston版】

Spring Cloud Config是Spring Cloud团队创建的一个全新项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端与客户端两个部分。其中服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连…

图谱实战 | 知识图谱在美团搜索酒旅场景认知中的应用

分享嘉宾:陈骐 美团 高级算法专家编辑整理:毛佳豪 中国平安浙江分公司(实习)出品平台:DataFunTalk导读:知识图谱凭借能够以图模型描述知识和世界万物关联关系的特性,在各行业领域大放异彩。与此同时,知识图…