关于data:科技助力新冠防疫构建-COVID19-知识图谱

4次阅读

共计 9108 个字符,预计需要花费 23 分钟才能阅读完成。

在本篇博文中,咱们将具体介绍如何应用 Amazon Cloud FormationAmazon Neptune 重建亚马逊云科技 COVID-19 常识图谱(简称 CKG),以及如何在亚马逊云科技账户中应用托管在 Amazon SageMaker 上的 Jupyter notebook。COVID-19 常识图谱可能帮忙咱们摸索并剖析托管在亚马逊云科技 COVID-19 数据湖中的 COVID-19 凋谢钻研数据集(CORD-19)。该图谱的强度,由学术文献、作者、迷信概念以及各机构间的关联决定。此外,COVID-19 常识图谱还为 CORD-19 的搜寻页面提供技术根底。

亚马逊云科技 COVID-19 数据湖是一套公共集中存储库,其中包容着对于新型冠状病毒(SARS-CoV-2)及其相干疾病 COVID-19 的流传、特色与其余公开信息的最新数据集。对于更多详细信息,请参阅用于 COVID-19 数据分析的公开数据湖以及摸索亚马逊云科技 COVID-19 公开数据湖。

COVID-19 常识图谱由 Amazon Neptune、CORD-19 数据集以及来自 Amazon Comprehend Medical 提供的正文独特构建而成。截至 2020 年 4 月 17 日,CORD-19 数据集中共蕴含超过 52000 篇学术文献,其中 41000 篇为全文收录。这些数据来自多个渠道,包含 PubMed、bioArxiv 以及 medRxiv 等。在艾伦人工智能研究所与钻研行业的密切合作之下,数据集规模仍在持续增长,信息规范化与数据品质改善工作也在稳步推动。这套数据集波及多个学科,次要涵盖病毒学、转化医学以及流行病学层面的统计数据。

📢 想要理解更多亚马逊云科技最新技术公布和实际翻新,敬请关注在上海、北京、深圳三地举办的 2021 亚马逊云科技中国峰会!点击图片报名吧~上海站峰会曾经圆满闭幕,更多精彩内容,敬请期待北京、深圳分会吧!

图构造

COVID-19 常识图谱属于有向图。下表总结了其中各节点与边之间的关系。各有向边以指定的边权重从源节点指向指标节点。

下图所示,为 123 中的示例图谱。请留神,从论文(Paper)节点到作者(Author)及概念(Concept)节点延长出的连贯,以及从作者(Author)节点到钻研机构(Institution)节点间的连贯。

图中的蓝色节点代表论文,由黄色节点所代表的作者撰写而成,而作者又隶属于绿色节点代表的钻研机构。一篇论文能够有多位作者,而这些作者又可能隶属于多家钻研机构。

概念节点(红色节点)是由 Amazon Comprehend Medical Detect Entities V2 通过提取各类医学信息所生成,具体包含医学情况、药物剂量、解剖信息、医治程序以及药物类型等。

主题节点(上图中未显示)则是由通过扩大的 Latent Dirichlet 调配模型负责生成。这类生成模型依照察看到的内容对文件进行分组,并为每份文件调配一条主题向量混合指标。对于每一篇论文,该模型都会参考其中的纯文本题目、摘要以及注释局部,同时疏忽掉表格、数字与书目等局部。

通过将作者、钻研机构、论文以及论文主题等因素分割起来,这些节点独特形成了丰盛的图谱体系。

解决方案概述

在亚马逊云科技数据湖中,咱们能够 应用内置的 Amazon CloudFormation 模板创立一个 Amazon CloudFormation 栈。Amazon CloudFormation 栈属于各项可独立作为单元进行治理的亚马逊云科技资源的汇合。对于更多详细信息,请参阅如何应用栈。

要建设 COVID-19 常识图谱,咱们须要利用预置模板创立一套 Amazon CloudFormation 栈。该模板负责创立必要的亚马孙云科技资源,并摄取数据以增加至图谱当中。

在亚马逊云科技账户当中实现 COVID-19 常识图谱构建之后,咱们即可应用 Gremlin-Python 运行各类根底及高级查问。

根底查问包含对图谱的摸索与搜寻,目标在于对图谱内容建设初步认知,并纯熟应用 gremlin-python 进行图谱查问。

在高级查问方面,本文中波及的具体操作包含:

  1. 查问 COVID-19 常识图谱以获取与特定概念相干的论文。
  2. 依据作者的业余程度对论文进行排名,确定须要优先浏览的论文。
  3. 应用图查问机制创立相干论文举荐引擎,借此确定接下来须要浏览的论文。

先决条件

在开始本轮演练之前,大家首先须要满足以下先决条件:

  • 拜访亚马逊云科技账户。
  • 具备创立 Amazon CloudFormation 栈的权限。

应用 Amazon CloudFormation 模板

要在您的亚马逊云科技账户当中配置图谱与示例查问 notebook,咱们首先须要应用 Amazon CloudFormation 模板创立一个 Amazon CloudFormation 栈。

启动以下一键式模板,并在栈创立过程中呈现提醒时,应用以下参数(其余未提及的参数皆保留默认值):AutoIngestData: True

模板将主动实现以下操作:

  • 创立一个 Amazon Neptune 数据库集群。
  • 创立一个 Virtual Private Cloud(VPC)。

所有 Amazon Neptune 集群都必须在 VPC 内运行,因而该模板还将在 VPC 内设置公有与公共子网,确保 Amazon Neptune 在失常拜访互联网的同时、免受未受权拜访的影响。

  • 创立一个 Amazon SageMaker notebook 实例,并通过权限设置容许其拜访 VPC 当中的 Amazon Neptune 集群。

整套栈将大量 Python 库加载至 notebook 实例中,帮忙用户与图形进行交互。

此 notebook 实例中还蕴含 Jupyter 演示 notebook,用于展现如何实现图谱查问。

  • 将数据摄取至图谱当中。此图谱中的所有数据都将存储在公开亚马逊云科技 COVID-19 数据湖中。

在模板操作执行实现之后,咱们能够拜访 Amazon SageMaker notebook 实例与示例 Jupyter notebook。对于更多具体阐明,请参阅拜访 Notebook 实例。

Amazon Neptune 与 Gremlin

Amazon Neptune 全面兼容 Apache TinkerPop3 与 Gremlin 3.4.1,因而大家能够应用 Gremlin 图遍历语言间接查问 Amazon Neptune 数据库实例。Gremlin-Python 则在 Python 语言中实现了 Gremlin。对于 Gremlin 的更多详细信息,请参阅 GREMLIN 实战:Apache TInkerPop 教程。

咱们能够通过 gremlin-python 间接查问 Amazon Neptune。对于更多详细信息,请参阅应用 Gremlin 拜访 Amazon Neptune 图。

根底查问

以下列出的几项根底查问,展现了如何在 Amazon SageMaker Jupyter notebook 中应用 gremlin-python 实现根本的图浏览与搜寻。通过前文介绍的操作,咱们曾经顺利完成 Amazon SageMaker notebook 实例的创立,大家能够在其中执行各类查问操作。须要留神的是,因为数据集仍在一直倒退,因而您的理论输入可能与本文中列出的输入有所不同。

图摸索

以下查问用于获取节点数量与每一种节点类型对应的数量。要提取图中的所有顶点,请应用 g.V()  与  hasLabel(NODE_NAME)  对图进行特定节点类型过滤,并应用 count() 获取节点数量。最终步骤 next() 将返回以下后果。

1nodes = g.V().count().next()
2papers = g.V().hasLabel('Paper').count().next()
3authors = g.V().hasLabel('Author').count().next()
4institutions = g.V().hasLabel('Institution').count().next()
5topics = g.V().hasLabel('Topic').count().next()
6concepts = g.V().hasLabel('Concept').count().
7
8print(f"papers: {papers}, authors: {authors}, institutions: {institutions}")
9print(f"topics: {topics}, concepts: {concepts}")
10print(f"Total number of nodes: {nodes}")

以下代码为输入后果:

1papers: 42220, authors: 162928, institutions: 21979
2topics: 10, concepts: 109750
3Total number of nodes: 336887

以下查问将返回边数与各种具体边类型的对应数量。要提取图中的所有边,请应用 g.E()  与  hasLabel(EDGE_NAME) 以过滤各边,并应用 count() 获取边计数。最终步骤 next() 将返回以下后果。

1paper_author = g.E().hasLabel('authored_by').count().next()
2author_institution = g.E().hasLabel('affiliated_with').count().next()
3paper_concept = g.E().hasLabel('associated_concept').count().next()
4paper_topic = g.E().hasLabel('associated_topic').count().next()
5paper_reference = g.E().hasLabel('cites').count().next()
6edges = g.E().count().next()
7
8print(f"paper-author: {paper_author}, author-institution: {author_institution}, paper-concept: {paper_concept}")
9print(f"paper-topic: {paper_topic}, paper-reference: {paper_reference}")
10print(f"Total number of edges: {edges}")

以下代码为输入后果:

1paper-author: 240624, author-institution: 121257, paper-concept: 2739666
2paper-topic: 95659, paper-reference: 134945
3Total number of edges: 3332151

图搜寻

以下查问会过滤图中的所有作者节点,并应用  valueMap(), limit() 及  toList() 从 COVID-19 常识图谱中抽取五位作者,最终返回一份字典:

1g.V().hasLabel('Author').valueMap('full_name').limit(5).toList()

以下代码为输入后果:

1[{'full_name': ['· J Wallinga']},
2 {'full_name': ['· W Van Der Hoek']},
3 {'full_name': ['· M Van Der Lubben']},
4 {'full_name': ['Jeffrey Shantz']},
5 {'full_name': ['Zhi-Bang Zhang']}]

下列查问用于过滤图中的各主题节点。该查问应用 hasLabel() 与 has() 过滤特定主题,随后由 both() 从该主题节点的传入与传出边获取论文节点,limit() 用于限度后果,而 values() 则用于从该主题节点处获取特定属性。最终步骤 toList() 将后果以列表模式返回:

1g.V().hasLabel('Topic').has('topic', 'virology').both()\
2.limit(3).values('title').toList()

以下代码为对应输入后果:

1['Safety and Immunogenicity of Recombinant Rift Valley Fever MP-12 Vaccine Candidates in Sheep',
2 'Ebola Virus Neutralizing Antibodies Detectable in Survivors of theYambuku, Zaire Outbreak 40 Years after Infection',
3 'Respiratory Viruses and Mycoplasma Pneumoniae Infections at the Time of the Acute Exacerbation of Chronic Otitis Media']

高级查问

下图所示,为咱们能够从 COVID-19 常识图谱中获取的各种信息类型。大家能够应用 COVID-19 常识图谱进行论文排名,并提取繁多论文的相干信息(后文将具体解释)。

围绕特定概念进行论文排名

对于此类用例,咱们能够查问 COVID-19 常识图谱以获取病毒抗性相干论文,并按第一作者对论文者排名。要查找对于该主题的所有论文,请应用以下代码:

1concept = 'viral resistance'
2papers = g.V().has('Concept', 'concept', concept).both().values('SHA_code').toList()
3
4print(f"Number of papers related to {concept}: {len(papers)}")

以下代码为相应输入后果:

1Number of papers related to viral resistance: 74

要进行论文排名,请应用以下代码:

1def author_prolific_rank(graph_results, groupby='SHA_code'):
2    P = g.V()\
3        .has('Paper', 'SHA_code', within(*graph_results))\
4        .group().by(__.values(groupby))\
5        .by(6            __.out('authored_by').local(__.in_('authored_by').simplePath().count()).mean()
7        ).order(local).by(values, desc).toList()[0]
8
9    return P
10
11def sha_to_title(sha):
12    title_list = g.V().has('Paper', 'SHA_code', sha)\
13    .values('title').toList()
14
15    return ''.join(title_list)
16author_ranked = author_prolific_rank(papers)author_ranked_df = pd.DataFrame(17    [author_ranked], index=['Score']
18).T.sort_values('Score', ascending=False).head()
19author_ranked_df['title'] = author_ranked_df.index.map(sha_to_title)
20
21for row in author_ranked_df.drop_duplicates(subset='title').reset_index().iterrows():
22    print(f"Score: {round(row[1]['Score'], 2)}\tTitle: {row[1]['title']}")

以下代码为对应的输入后果:

1Score: 27.5    Title: Surveillance for emerging respiratory viruses
2Score: 11.45    Title: Third Tofo Advanced Study Week on Emerging and Re-emerging Viruses, 2018
3Score: 10.5    Title: The Collaborative Cross Resource for Systems Genetics Research of Infectious Diseases
4Score: 10.0    Title: RNA interference against viruses: strike and counterstrike
5Score: 9.0    Title: Emerging Antiviral Strategies to Interfere with Influenza Virus Entry

相干论文举荐

在此类用例中,咱们心愿依据以后浏览的论文,确定接下来有必要浏览的其余相干论文。要开发这样一套举荐引擎,基本思路天然是应用图查问机制。论文与概念,在图中为通过边连贯的两类节点。各项概念由 Amazon Comprehend Medical 利用机器学习派生而来,其中蕴含一项置信度得分 conf,用于示意机器学习对于概念 c 在论文 p 中的置信度量化指标。

要确定两篇论文是否互相关联,咱们首先须要定义一个类似度评分 S。在 COVID-19 常识图谱当中,不同论文节点之间由概念节点实现连通。

要依据特定论文 P 生成一份论文列表,咱们须要在 P 与 COVID-19 常识图谱中其余论文之间生成类似度评分,而后对后果进行排名。类似度评分越高的论文,其与论文 P 之间的相关性就越高。

两篇论文之间的相似性评分,为两篇论文间所有门路的加权总和。以矩阵模式,候选论文 P. 的得分为向量 P 与 P. 的点积,其中向量 P 与候选论文 P. 的大小别离为[N_{概念}, 1]。论文与概念 i 间的边权重示意为元素 e.,如果二者之间没有边连贯,则记为 0。

下图所示,为示例中的举荐框架。

在此图中,两篇论文之间的连通门路为术语“rhinovirus”。每一条论文 - 概念边都领有一条置信度得分 conf。

对于两篇论文之间的每一条门路,咱们能够将其置信度得分相乘。要计算两篇论文之间的类似度得分,则须要对所有置信度得分的乘积进行相加。

首先,获取以下论文的相干论文,详见下列操作代码:

1sha = "f1716a3e74e4e8139588b134b737a7e573406b32"
2title = "Title: Comparison of Hospitalized Patients With ARDS Caused by COVID-19 and H1N1"
3print(f"Title: {title}")
4print(f"Unique ID: {sha}") 

应用此前定义的算法查问常识图谱,详见以下操作代码:

1Title: Comparison of Hospitalized Patients With ARDS Caused by COVID-19 and H1N1
2Unique ID: f1716a3e74e4e8139588b134b737a7e573406b32

下表总示,为整顿得出的输入后果:

总结

亚马逊云科技 COVID-19 数据湖收费托管在 Amazon Simple Storage Service(Amazon S3)之上,指向这类公开数据湖存储桶的数据申请不会产生 Amazon S3 规范费用,大家能够间接收费应用。但在通过 Amazon CloudFormation 栈在亚马逊云科技账户当中构建 COVID-19 常识图谱时,应用由 Amazon SageMaker 托管的 Amazon Neptune 与 Jupyter notebook 可能产生相应费用。对于更多详细信息,请参阅 Amazon Neptune 计费规范与 Amazon SageMaker 计费规范。

为了防止反复计费,请在演练实现之后删除 Amazon CloudFormation 栈。对于具体阐明,请参阅在 Amazon CloudFormation 管制台上删除栈。另外,请确保删除 root 栈(咱们之前创立实现的栈)以删除所有嵌套栈。

您也能够应用 Amazon CloudFormation 模板构建常识图谱,并应用第三方图可视化工具 Tom Sawyer 图数据库浏览器等实现图谱可视化。对于更多详细信息,请参阅应用 Amazon Neptune、Amazon Comprehend Medical 以及 Tom Sawyer 图数据库浏览器进行 COVID-19 科学研究。

置信在各参与方与迷信学科之间的通力合作之下,咱们终将博得这场 COVID-19 抗疫战斗的胜利。应用 COVID-19 常识图谱,咱们能够提出并答复与 COVID-19 迷信文献相干的各类问题。咱们深信,将数据、技术与迷信等畛域的成绩同凋谢精力联合起来,咱们必然能够激发洞见、促成单干,最终遏制、缓解并消涂 COVID-19 疫情。

原文链接(英文版):
https://aws.amazon.com/cn/blo…

本篇作者


Miguel Romero
亚马逊云科技机器学习解决方案实验室数据科学家

他构建的各类解决方案旨在帮忙客户轻松采纳机器学习与 AI 解决方案解决各类业务问题。他目前次要负责为体育界客户开发与赛事播放相干的预测模型,借此进步粉丝群体的参与度。


Colby Wise
亚马逊云科技机器学习解决方案实验室数据科学家兼经理。

他次要负责帮忙来自各行各业的亚马逊云科技客户减速 AI 与云服务采纳进度。


George Price
亚马逊云科技机器学习解决方案实验室深度学习架构师

他次要负责帮忙亚马逊云科技客户构建模型与架构。在此之前,他还曾负责 Amazon Alexa 我的项目软件工程师。

正文完
 0