本文经授权转载自机器之心(almosthuman2014),未经授权禁止二次转载与摘编。

本文长度为3200字,建议阅读9分钟

本文带你了解亚马逊AI实验室的开源机器学习工具。

[ 摘要 ]最近,来自亚马逊上海 AI 实验室、亚马逊 AI 北美、明尼苏达大学、俄亥俄州立大学、湖南大学等机构的团队,正式开源了大规模药物重定位知识图谱 DRKG和一套完整的用于进行药物重定位研究的机器学习工具,助力新冠及其他疾病的药物重定位研究。

自 2019 年 12 月至今,新型冠状病毒在全球迅速扩散已导致近 760 万人感染,40 余万人死亡。目前急需快速有效的新冠病毒有效药物的发现路径。药物重定位是一种将现有药物用于治疗新的适应症的药物发现方式。相比较传统的新药开发,它可以有效缩短药物研发周期,降低成本,规避风险,是一种非常有前景的新冠肺炎治疗策略。

近日,亚马逊上海 AI 实验室联合来自亚马逊 AI 北美、明尼苏达大学、俄亥俄州立大学、湖南大学的研究者,共同构建了大规模药物重定位知识图谱 DRKG(Drug Repurposing Knowledge Graph),以及一套完整的用于进行药物重定位研究的机器学习工具,并将其在 github 上开源给全世界研究机构,帮助相关研究人员更有效地对新冠病毒及其它疾病(如阿尔茨海默病)进行药物重定位研究。

项目地址:

https://github.com/gnn4dr/DRKG

如下图所示,DRKG 是一个综合型生物医药知识图谱,包含人类基因、化合物、生物过程、药物副作用、疾病和症状等六个主要方面的数据。DRKG 从六个公开的大型医药数据库以及近期新冠病毒的相关医学文献中挖掘并数据,并进行整理和规范。DRKG 知识图谱包含分属于 13 种实体类型 97238 个实体,以及分属于 107 种关系类型 5874261 个三元组数据。

Drug Repurposing Knowledge Graph

机器学习工具使用了先进的深度图学习方法(DGL-KE)来学习 DRKG 中实体和关系的低维向量表示(embeddings), 并使用这些 embedding 来预测药物治疗疾病的可能性或药物与疾病靶点结合的可能性。

DGL-KE 是亚马逊上海 AI 实验室开源的一款专门针对大规模知识图谱嵌入表示的训练工具,同时支持单机多 GPU 和多机分布式训练。在 AWS EC2 平台上,一台 p3.16xlarge(8 GPUs)可以在 100 分钟内训练完成 Freebase 数据集(8600 万节点,3 亿条边)。4 台 r5dn.24xlarge(4*48 CPUs) 可以在 30 分钟内完成训练。

项目地址:

https://github.com/awslabs/dgl-ke

DRKG 在其开源代码仓库中提供了使用 DGL-KE 来生成 DRKG 知识图谱中实体和关系的低纬嵌入向量表示的案例以及基于预训练的 DRKG 知识图谱嵌入向量表示预测新冠病毒候选药物的案例。

案例链接:

https://github.com/gnn4dr/DRKG/blob/master/embedding_analysis/Train_embeddings.ipynb

https://github.com/gnn4dr/DRKG/blob/master/drug_repurpose/COVID-19_drug_repurposing.ipynb

初步的实验结果表明:使用此类机器学习工具进行冠状病毒的药物发现,能以较高的分数识别出目前正在进行临床试验的多种冠状病毒候选药物。

使用 DGL-KE 生成 DRKG 知识图谱的低纬嵌入向量表示

DGL-KE 是一个基于 DGL 图深度学习框架(https://github.com/dmlc/dgl),面向知识图谱嵌入学习方法领域的高性能、高可扩展的开源软件库,DRKG 利用 DGL-KE 软件包进行 DRKG 知识图谱的低纬嵌入向量表示的生成。

  • 下载 DRKG 知识图谱,DRKG 知识图谱已开源:

    https://dgl-data.s3-us-west-2.amazonaws.com/dataset/DRKG/drkg.tar.gz

import sys
sys.path.insert(1, '../utils')
from utils import
download_and_extractdownload_and_extract()
drkg_file = '../data/drkg/drkg.tsv'
  • DRKG 知识图谱包含一个 tsv 格式文件 drkg.tsv,其中包含了知识图谱的所有三元组,在训练之前,我们将数据集随机按照 0.9:0.05:0.05 的比例划分成训练集、验证集和测试集。

import pandas as pd
import numpy as npdf = pd.read_csv(drkg_file, sep="\t")
triples = df.values.tolist()
seed = np.arange(num_triples)
np.random.shuffle(seed)train_cnt = int(num_triples * 0.9)
valid_cnt = int(num_triples * 0.05)
train_set = seed[:train_cnt]
train_set = train_set.tolist()
valid_set = seed[train_cnt:train_cnt+valid_cnt].tolist()
test_set = seed[train_cnt+valid_cnt:].tolist()with open("train/drkg_train.tsv", 'w+') as f:for idx in train_set:f.writelines("{}\t{}\t{}\n".format(triples[idx][0], triples[idx][1], triples[idx][2]))with open("train/drkg_valid.tsv", 'w+') as f:for idx in valid_set:f.writelines("{}\t{}\t{}\n".format(triples[idx][0], triples[idx][1], triples[idx][2]))with open("train/drkg_test.tsv", 'w+') as f: for idx in test_set: f.writelines("{}\t{}\t{}\n".format(triples[idx][0], triples[idx][1], triples[idx][2]))
  • 随后直接调用 DGL-KE 软件包的命令行进行 DRKG 知识图谱的低纬嵌入向量表示训练,案例中我们选用 TransE_l2 知识图谱嵌入算法,并使用了 AWS p3.16xlarge 实例进行多 GPU 并行进行训练(使用其他知识图谱嵌入算法以及其他机型可以参考 https://aws-dglke.readthedocs.io/en/latest/index.html 中的说明)。

!DGLBACKEND=pytorch dglke_train --dataset DRKG --data_path ./train --data_files
drkg_train.tsv drkg_valid.tsv drkg_test.tsv --format 'raw_udd_hrt' --model_name
TransE_l2 --batch_size 2048 \--neg_sample_size 256 --hidden_dim 400 --gamma
12.0 --lr 0.1 --max_step 100000 --log_interval 1000 --batch_size_eval 16 -adv --
regularization_coef 1.00E-07 --test --num_thread 1 --gpu 0 1 2 3 4 5 6 7 --
num_proc 8 --neg_sample_size_eval 10000 --async_update
  • 训练完成后我们将得到两个文件: 1) DRKG_TransE_l2_entity.npy, DRKG 中实体的低维向量表示和 2)DRKG_TransE_l2_relation.npy,DRKG 中关系的低维向量表示。后续我们可以使用训练好的实体和关系的低维向量表示进行药物预测。

node_emb = np.load('./ckpts/TransE_l2_DRKG_0/DRKG_TransE_l2_entity.npy')
relation_emb =
np.load('./ckpts/TransE_l2_DRKG_0/DRKG_TransE_l2_relation.npy')

完整案例可以在此获取:

https://github.com/gnn4dr/DRKG/blob/master/embedding_analysis/Train_embeddings.ipynb

使用预训练的 DRKG 知识图谱的嵌入向量预测新冠病毒候选药物

在论文《Repurpose Open Data to Discover Therapeutics for COVID-19 using Deep Learning》中,亚马逊 AI、湖南大学、克里夫兰诊所勒纳中心基因组医学研究所、明尼苏达大学的研究者提出了结合使用知识图谱的嵌入和基因集富集分析的方法来进行新冠病毒老药新用药物的预测。DRKG 基于该论文的思路,提供了基于预训练的 DRKG 知识图谱嵌入向量表示进行新冠病毒候选药物预测案例。

论文地址:

https://arxiv.org/abs/2005.10831

首先我们将基于 DRKG 知识图谱的新冠病毒的药物预测问题定义为预测药物和新冠病毒实体之间存在'Hetionet::CtD::Compound:Disease'‘GNBR::T::Compound:Disease'关系(即治疗 treatment 关系)的置信度评估问题。

首先,我们选取 DRKG 中来自 Drugbank 的分子量 (molecule weight) 大于 250 的 FDA 获准药物实体作为可选药物集,同时选取 DRKG 知识图谱中存在的 34 个新冠病毒相关实体作为目标病毒集。然后,我们预测所有可能的(药物,治疗,病毒)三元组组合在 TrainsE_l2 算法下的分数(score),并最终对分数进行排序,并选取分数最高的 100 个药物作为推荐药物。具体方法实施如下:

  • 设定目标病毒实体、药物实体和治疗关系。

# 目标新冠病毒相关实体
COV_disease_list = ['Disease::SARS-CoV2 E','Disease::SARS-CoV2 M', ...]# 药物疾病治疗相关关系
treatment = ['Hetionet::CtD::Compound:Disease','GNBR::T::Compound:Disease']# 获取来自 Drugbank 的分子量 (molecule weight) 大于 250 的 FDA 获准药物实体(已在 infer_drug.tsv 中提供
drug_list = []with open("./infer_drug.tsv", newline='', encoding='utf-8') as csvfile: reader = csv.DictReader(csvfile, delimiter='\t', fieldnames=['drug','ids'])   for row_val in reader: drug_list.append(row_val['drug'])
  • 获取预训练 DRKG 知识图谱的嵌入表示

# 读取预训练 embedding
entity_emb = np.load('../data/drkg/embed/DRKG_TransE_l2_entity.npy')
rel_emb = np.load('../data/drkg/embed/DRKG_TransE_l2_relation.npy')drug_ids = th.tensor(drug_ids).long()
disease_ids = th.tensor(disease_ids).long()
treatment_rid = th.tensor(treatment_rid)drug_emb = th.tensor(entity_emb[drug_ids])
treatment_embs = [th.tensor(rel_emb[rid]) for rid in treatment_rid]
  • 所有可能(的药物,治疗,病毒)三元组组合在 TrainsE_l2 算法下的分数(score),计算公式如下:

其中,h  为 head 即药物,r 为关系,t 为 tail 即病毒。gamma 为训练中使用的常数。

import torch.nn.functional as fngamma=12.0
def transE_l2(head, rel, tail): score = head + rel - tail return gamma - th.norm(score, p=2, dim=-1)scores_per_disease = []dids = []# 针对两种治疗关系分别计算(药物,治疗,病毒)三元组的分数,并最终合并for rid in range(len(treatment_embs)): treatment_emb=treatment_embs[rid] for disease_id in disease_ids: disease_emb = entity_emb[disease_id]  score = fn.logsigmoid(transE_l2(drug_emb, treatment_emb, disease_emb))   scores_per_disease.append(score)   dids.append(drug_ids)
scores = th.cat(scores_per_disease)
  • 对分数进行排序

idx = th.flip(th.argsort(scores), dims=[0])
scores = scores[idx].numpy()
dids = dids[idx].numpy()
  • 获取最终 topk 的药物推荐

topk=100
_, unique_indices = np.unique(dids, return_index=True)
topk_indices = np.sort(unique_indices)[:topk]
# top100 的药物 ID
proposed_dids = dids[topk_indices]
# top100 的分数
proposed_scores = scores[topk_indices]
  • 最终得到的药物中,目前已经处于临床实验的有 6 例,具体结果如下(排名,药物名称,相关分数)

[0]    Ribavirin          -0.21416784822940826[4]    Dexamethasone      -0.9984006881713867[8]    Colchicine         -1.080674648284912[16]   Methylprednisolone -1.1618402004241943[49]   Oseltamivir        -1.3885014057159424[87]   Deferoxamine       -1.513066053390503

完整案例可以在此处获取:

https://github.com/gnn4dr/DRKG/blob/master/drug_repurpose/COVID-19_drug_repurposing.ipynb

编辑:黄继彦

探索“老药新用”最短路径:亚马逊AI Lab开源大规模药物重定位知识图谱DRKG相关推荐

  1. 半小时训练亿级规模知识图谱,亚马逊AI开源知识图谱嵌入表示框架

    来源:AI 科技大本营 本文约2300字,建议阅读9分钟 亚马逊 AI 团队开源了一款专门针对大规模知识图谱嵌入表示的新训练框架 DGL-KE,能让研究人员和工业界用户方便.快速地在大规模知识图谱数据 ...

  2. 亚马逊 ai 解雇_绿色是使用AI的新的黑色节约型亚马逊雨林

    亚马逊 ai 解雇 新成果 /使用AI的节约环境/哈佛 AI促进社会公益 / IEEE SMC 2020 接受 (New results / Saving Environment using AI / ...

  3. 新睿云 亚马逊_等待亚马逊新的可穿戴需求,让我穿着内衣

    新睿云 亚马逊 Amazon says your semi-nude pictures will be automatically deleted from its servers after 3D ...

  4. 跨境电商行业:现在新卖家入驻亚马逊还有机会吗?自发货模式又如何?

    很突兀的不知道怎么回事,大概也就是在2018年下半年10月份左右到今年年初,电商行业圈里突然刮起了一阵跨境风,一下子很多人开始去接触并了解运作无货源跨境电商.很多做惯了国内电商平台的朋友也都问我,大致 ...

  5. 微虚拟机服务器,亚马逊AWS发布开源虚拟化技术,可125毫秒内启动微虚拟机!

    原标题:亚马逊AWS发布开源虚拟化技术,可125毫秒内启动微虚拟机! 在AWS Lambda发布4年后,每月为数十万活跃客户处理数万亿次执行,作为当下最热的无服务器计算技术,AWS没有停下探索的步伐. ...

  6. 半小时训练亿级规模知识图谱,亚马逊AI开源知识图谱嵌入表示框架DGL-KE

    出品 | AI科技大本营(ID:rgznai100) 知识图谱 (Knowledge Graph)作为一个重要的技术,在近几年里被广泛运用在了信息检索,自然语言处理,以及推荐系统等各种领域.学习知识图 ...

  7. 亚马逊 ai 解雇_解雇社区成员

    亚马逊 ai 解雇 欢迎大家,在我的" 六度"专栏中发表第二篇文章. 当我很高兴返回时,你们都把我的第一篇专栏文章搞砸了. 我在思索有关Ubuntu手机对开放源代码的影响方面的文章 ...

  8. 亚马逊AI又遭抗议:一个好端端的美国官员,怎么就成罪犯了?

    李根 发自 凹非寺  量子位 报道 | 公众号 QbitAI 哈哈哈. 如果你近期稍微关注到亚马逊在美遭遇的抗议和diss,想必对ACLU这个组织不会陌生. ACLU,全称The American C ...

  9. 霍金最后一篇论文上线;世界最快的深度算法现身;波士顿机器人跑酷;亚马逊AI招聘重男轻女被骂下架...

    大家好,我是为人造的智能操碎了心的智能禅师. 今天是美好的周一,也是国际调节椅子日.经常坐椅子工作的人,因为久坐不动,时间长了就会产生各种问题.所以设立这个节日也是为了提醒大家,椅子一定要买人体工程学 ...

最新文章

  1. MATLAB作二维傅里叶变换所需要注意和知道的东西(im2double、fft2、abs、imshow、二维傅里叶变换的物理意义)
  2. 大学加权平均分计算器_英国排名前20的大学GPA要求
  3. LUA实现单词替换功能
  4. vscode angular智能提示_【线下活动】手把手教你玩转 VS Code 插件开发
  5. mysql堆溢出_为什么这个MySQL触发器会导致堆栈溢出?
  6. 注意升级Oracle 19c:SE2标准版不再支持RAC
  7. Android(java)学习笔记114:Service生命周期
  8. java中复选框组件_Java Swing JCheckBox:复选框组件
  9. 学单片机的动力是什么,学单片机来做什么,需要多长时间把它学会
  10. 计算机等级考试网络数据,全国计算机等级考试三级信息、网络、数据库上机编程题15道...
  11. 绘制自己的人际关系图_如何系统的绘制自己的人际关系网络图?
  12. 手把手教你制作手机离线地图
  13. ThinkPHP 漏洞检测
  14. 自偏置电流镜设计实例
  15. 原生开发跟混合开发两者有什么区别
  16. 土豆网电影在线观看客户端官方版
  17. android抽屉式listview,Android实现列表抽屉展示效果
  18. 【解决办法】解决OneDrive登陆界面空白的方法
  19. 使用DataDynamics.ActiveReports 创建子报表
  20. html+css+js制作点名器

热门文章

  1. linux+传输文件时卡住,linux - rsync 同步文件时卡住不动
  2. java override 访问权限_java 重写(Override)的规则
  3. 五轴编程_HyperMILL五轴编程培训HyperMILL 软件的特点
  4. centos7配置br0_centos 7.2 网卡配置文件 及 linux bridge的静态配置
  5. 关于素数常用结论--威尔逊定理、欧拉定理、费马小定理、米勒罗宾算法
  6. HTTP与服务器的四种交互方式
  7. CodeForces 631D Messenger
  8. apt-get 404 not found 问题解决
  9. [转]预备知识—程序的内存分配
  10. Lock/Unlock Account - Active Directory