专栏首页Reinvent Data ScienceMilvus 赋能 AI 药物研发

Milvus 赋能 AI 药物研发

新药研发领域长期以来都以耗时长、成本高、风险大、回报率低而著称,一款新药的平均研发成本已经高达 26 亿美元,而平均耗时需要十年。尽管付出了如此高昂的研发成本和漫长的研发周期,却依然无法保证所研发的药物能够顺利通过全部临床实验而投放市场。即便是难度较低的仿制药研发,其研发的进程也是十分缓慢。

伴随深度学习等一系列 AI 技术的不断发展,将 AI 技术与药物研发相结合,可以很大程度上减少新药研发时间、降低新药研发成本,也可以加速仿制药的研发和入市,毫无疑问人工智能和机器学习将开创一个更快速、更低价、更高效的药物研发时代。

Zilliz 公司联手全球顶尖制药研发企业共同开发了 MolSearch 化合物分子结构分析软件,为 AI 药物研发探索出了一个新的技术突破点。

| Milvus 向量搜索引擎

Milvus 作为一款开源的特征向量相似度搜索引擎,凭借其强大的非结构化数据处理能力已经广泛应用于 AI 技术的重点领域如:机器视觉(图片视频处理)、自然语言处理、语音识别等。

随着 AI 技术与药物研发领域的深度结合,Milvus 在这一领域也有着广阔的应用前景。 比如新药研发过程药物晶型预测可以结合 Milvus 在图像识别的应用,有效的预测出合适的药物晶型;靶点筛选和患者招募过程可以抽象为对文本语义分析问题,可以结合 Milvus 在自然语言处理的应用,快速分析有关药物研发的文本数据等。

虚拟药物筛选是新药研发过程中的一个关键步骤,通过模拟药物筛选的过程,预测化合物可能的活性,对比较有可能成为药物的化合物进行针对性的实体筛选,极大的降低了药物研发的成本。这过程在传统的方案受限于算法和算力,在对千万级别的化合物分子进行相似性、子结构、超结构等分析时,耗时在分钟级别,而集成了 Milvus 的方案能够对十亿级的化学式数据进行秒级分析,这一技术突破能够极大的提升新药研发的效率。

Milvus 能够广泛的应用在药物研发的各个阶段,通过将成熟的 AI 模型结合 Milvus 向量搜索引擎,一定会为药物研发领域带来更多颠覆性的技术突破。

| MolSearch 虚拟药物筛选工具

MolSearch 是基于 Milvus 向量相似度检索引擎研发的一款开源化合物分析软件,前端设计参考了开源软件 MolView[1],具体搭建和功能介绍可以参考 https://github.com/zilliztech/MolSearch

药物化学专家通常根据骨架跃迁对分子模块进行优化,在此基础上设计出新药结构供后续筛选。我们共同研发 MolSearch 的初衷,是为了加速对海量化合物的虚拟筛选。虚拟筛选是新药研发中必不可少也是十分重要的一步,它的结果很大程度决定了后期小白鼠实验以及临床试验能否成功,虚拟筛选时化合物底库数量越多,筛选的准确率越高,那么新药研发成功的可能性也就越高。

MolSearch 系统中分子检索功能通过集成 Milvus 作为核心检索引擎,实现了十亿级的化学分子结构进行秒级分析的能力,这也是 MolSearch 在药物研发领域的一个重要技术突破。目前在 MolSearch 中集成了8.2亿 zinc 开放化学式分子式数据集[2],通过将化学式转换为 2048 位的化学指纹(特征向量)在 Milvus 中进行高性能向量计算而实现对分子结构的相似性、子结构和超结构检索,其端到端的检索性能如下:

表中的 p 表示百分比,响应时间(p99)表示99%的检索能在多少时间完成。

| 系统概览

MolSearch 系统中运用的虚拟化合物筛选技术,首先通过 RDKit 工具[3]将化合物分子的化学式转换为化学式指纹 (Chemical Fingerprint),就是一组特征向量,然后通过计算这些向量之间的距离来分析化合物分子之间的相似性。

1. 化学指纹生成

化学指纹通常用来做结构检索和相似度检索,如下图所示,指纹是 (1/0) 位表示的有序列表,每一位代表化学结构中例如指定元素,分子片段等的存在。

MolSearch 系统中利用 RDKit 工具生成 RDKit fingerprint,该算法分析从一个原子开始直至到达指定数量键的路径(path,通常为线性)上所有的分子片段,然后对每一个路径进行哈希(hash)产生指纹(fingerprint),如下图中展示了从NH2(已圈出)开始一直到 6 个长度的所有路径,然后将每个路径散列为二进制位。

上图仅展示了从一个单个起始原子出发的片段和比特位,对于完整的指纹,将对分子中的每个原子进行重复该过程。此类指纹适用于任意一个分子,并可以指定 fpSize 调整其向量维度,最终生成的 vectors 可以导入 Milvus 并检索。

fromrdkitimportChem
mols=Chem.MolFromSmiles(smiles)
fp=Chem.RDKFingerprint(mols,fpSize=VECTOR_DIMENSION)
bit_fp=DataStructs.BitVectToFPSText(fp)
vectors=bytes.fromhex(hex_fp)

2. 化合物检索

通过将生成的向量导入 Milvus 建立化合物库,根据不同的计算方式可以实现对化合物的相似度检索、子结构检索和超结构检索。

from milvus import *
milvus = Milvus()
milvus.insert(collection_name=MILVUS_TABLE, records=vectors)
milvus.search(collection_name=MILVUS_TABLE, query_records=query_list, top_k=topk, params={}
  • 相似度检索

用于寻找与输入的参考分子比较相似的分子。

  • 子结构检索

检测一个分子结构是否为另一个分子的子结构。

  • 超结构检索

检测一个分子结构是否为另一个分子的超结构。

3. 化学指纹计算

Milvus 支持各种常用的相似度计算指标,包括欧氏距离、内积、汉明距离和杰卡德距离等。针对二值型数据 MolSearch 系统选择 Jaccard/Substructure/Superstructure 距离计算相似度。

根据以上参数,化学式指纹计算可以描述为:(完整公式请到留言区点击CSDN链接)

| 总结

Milvus 凭借其先进的软、硬件算法,能够为各类 AI 应用提供企业级的稳定、高性能向量检索支持。MolSearch 系统正式充分发挥了 Milvus 这一特性,实现了对海量分子式的高性能分析能力,颠覆了传统的虚拟药物筛选方案,实现了技术突破。我们相信 Milvus 必将会在药物研发的其他各个领域获得更广阔的应用前景,期待与 AI 药物研发领域的有志同仁携手共建 Milvus 这一 AI 数据处理平台。

| 引用

  1. http://molview.org/
  2. Sterling and Irwin, J. Chem. Inf. Model, 2015, https://pubs.acs.org/doi/abs/10.1021/acs.jcim.5b00559
  3. Landrum, G. 2010. “RDKit.” Q2. https://www.rdkit.org/

本文分享自微信公众号 - ZILLIZ(Zilliztech),作者:陈室余

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Chat with Milvus #16-v0.10.0 & 用 ES 做图片搜索?

    Attendee A:你好顾老师, 我想了解一下 Mishards 它具体在扩容的过程怎么实现的?动态扩容那一步,就是 Milvus readonly 服务它扩...

    ZILLIZ
  • Milvus 线上问答#14- Milvus 非结构数据服务(UDS)概述

    Milvus 究竟是一个计算平台,还是一个数据库?应用在哪些场景?诸如此类的问题我们的开发者常常在群里被小伙伴问到。这次我们对 Milvus 做了一个简单的概述...

    ZILLIZ
  • 视频|5分钟轻松上手Milvus Admin

    Milvus 作为一个开源的基础软件,让用户可以轻松地上手使用也是至关重要的。作为 Milvus 产品化重要的一环,Milvus Admin 就是这样一款面向企...

    ZILLIZ
  • 认识区块链

    一般的账本:中心化管理,单人记账,随时可改,有顺序的交易数据库。如银行内部管理所有用户的交易明细,通常情况下,管理者拥有对账本的最终解释权。

    可爱见见
  • 腾讯优图CVPR中标论文:不靠硬件靠算法,暗光拍照也清晰

    他们提出基于深度学习优化光照的暗光下的图像增强模型,用端到端网络增强曝光不足的照片。

    量子位
  • 两台W7系统的电脑,A电脑可以ping通B电脑,B电脑ping不通A电脑。

    https://zhidao.baidu.com/question/1946500242424659908.html

    墨文
  • java : 调用ImageIO.writer从BufferedImage生成jpeg图像的坑

    生成jpeg图像这是个非常非常简单的东西了,网上很多介绍是直接用com.sun.image.codec.jpeg.JPEGImageEncoder来实现,如下:...

    用户1148648
  • yaffs_guts(一)

    1. 计算所给Block所在位图 static __inline __u8 *yaffs_BlockBits(yaffs_Device *dev, int bl...

    瓜大三哥
  • 利用python写一个自动给手机发邮件程序

    在用python做一些测试时候,不想一直盯着测试结果。当测试完成或者测试出现问题时候,希望能够快速提醒自己。这时候给自己发个邮件,手机邮箱就会收到消息。从而实现...

    python学习教程
  • 应用层发送一个数据包的时候,是如何到达网卡的(下)

    从前面的一篇文章应用层发送一个数据包的时候,是如何到达网卡的(上)可以知道,应用层发送一个数据包的时候首先经过tcp_write和ip_queue_xmit函数...

    theanarkh

扫码关注云+社区

领取腾讯云代金券