
? 作者:韩信子@ShowMeAI
? 机器学习实战系列:https://www.showmeai.tech/tutorials/41
? 深度学习实战系列:https://www.showmeai.tech/tutorials/42
? 本文地址:https://www.showmeai.tech/article-detail/329
? 声明:版权所有,转载请联系平台与作者并注明出处
? 收藏ShowMeAI查看更多精彩内容

人工智能作为一种新兴技术,是新药研发实现降本增效的重要方式之一,『人工智能+新药研发』成为国内外医药企业加速创新转型的重要驱动力,一个更快、更便宜、更有效的新药物研发时代已经到来。
一款新药从确认研发目标到完成临床试验,往往需要耗费数年时间和数十亿美元,并伴随着超过 90% 的失败概率。高昂的研发成本、漫长的研发周期、高风险低回报率的特性,笼罩在药物研发领域。而正在探索的各种 AI 应用,可以帮助解决这些挑战。

?最近发表的一项分析表明,150 多种小分子药物处于研发阶段,超过 15 种药物已经在临床试验中,这条 AI 生物技术赛道以每年近 40% 的速度急速扩张种。为追赶这波浪潮,制药公司正在建立自己的内部人工智能团队,或与 IT 公司、AI新药研发创新公司进行投资和合作。
利用 AI 进行药物化合物分子结构分析和检索等,是一个助力新药研发的可行思路。Zilliz 公司与全球顶尖制药研发企业共同开发的『MolSearch』化合物分子结构分析软件是一个典型的例子。本篇咱们就一起来了解下这个过程是如何完成的。


在万物皆可 embedding 的深度学习时代,『特征向量表征+向量检索』有巨大作用,在很多数据和业务领域都发挥了巨大作用,例如机器视觉(图片视频检索)、自然语言处理(文本检索、问答)、语音识别等。同样的思路也可以用在医疗医药领域。

比如新药研发过程药物晶型预测,可以结合图像识别和检索的思路,有效地预测出合适的药物晶型。

比如靶点筛选和患者招募过程,可以抽象为对文本语义分析问题,可以结合 NLP 表征与检索方法,快速分析有关药物研发的文本数据等。

AI 可以在新药研发过程中发挥巨大作用的另一个步骤是『虚拟药物筛选』,通过模拟药物筛选的过程,预测化合物可能的活性,对比较有可能成为药物的化合物进行针对性的实体筛选,这个过程可以大大降低药物研发的时间和经济成本。
有不少传统方法方案在尝试,但受限于算法和算力,对千万级别的化合物分子进行相似性、子结构、超结构等分析时,耗时较长(分钟级别),而在AI向量检索技术优化后,能大大加速这个过程(对十亿级的化学式数据极速分析,仅秒级别)。
Zilliz 公司基于 Milvus 向量相似度检索引擎,研发了化合物分析软件 ?MolSearch,大家可以在 ?这里 查看中文说明。

药物化学专家通常根据骨架跃迁对分子模块进行优化,并基于它设计出新药结构并做后续筛选。针对海量化合物的虚拟筛选是非常核心关键的一部,其效果很大程度决定了后期小白鼠实验以及临床试验能否成功,候选底库量级越大,筛选准确率越高,新药研发成功的概率也相应越高。
MolSearch 系统集成向量相似度检索引擎 Milvus ,构建分子检索功能,可以实现十亿级的化学分子结构秒级检索分析能力。
目前 MolSearch 中集成了 8.2 亿 zinc 开放化学式分子式数据集,这些化学式被转换为 2048 位的化学指纹(特征向量),在有表征特征向量之后,借助于高效向量检索引擎,可以实现对分子结构的相似性、子结构和超结构检索。

MolSearch 端到端的检索性能数据如图所示(图中『响应时间(p99)』表示 99% 的检索能在多少时间完成)。
详细展开 MolSearch 的虚拟化合物筛选技术如下图所示,包含以下步骤:

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

MolSearch 中这个环节使用了工具 RDKit ,它会生成 RDKit fingerprint,底层的算法原始是:分析从一个原子开始直至到达指定数量键的路径(path,通常为线性)上所有的分子片段,然后对每一个路径进行哈希(hash)产生指纹(fingerprint)。
上图展示了从NH2(已圈出)开始一直到 6 个长度的所有路径,然后将每个路径 hash 映射为二进制位。
图例是一个单个起始原子出发的片段和比特位,最终的完整指纹生成,是对分子中的每个原子进行这个操作后的结果。可以指定 fpSize 调整生成的向量维度,这个过程对于每个分子都适用,我们把最终生成的向量导入 Milvus 以实现后续检索,完整的指纹向量生成过程示例代码如下:
from rdkit import Chem
mols=Chem.MolFromSmiles(smiles)
fp=Chem.RDKFingerprint(mols,fpSize=VECTOR_DIMENSION)
bit_fp=DataStructs.BitVectToFPSText(fp)
vectors=bytes.fromhex(hex_fp)
我们将生成的指纹向量导入 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={})
Milvus工具本身支持各种常用相似度计算指标,包括『欧氏距离』、『内积』、『汉明距离』和『Jaccard距离』等。因为指纹是二值型数据向量,我们可以选择 Jaccard/Substructure(子结构)/Superstructure(超结构) 距离计算相似度。我们定义以下表示:

根据以上定义,化学式指纹之间的距离和相似度度量计算,可以如下表中描述来计算:

导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc
我正在寻找用于Rails的优质管理插件。似乎大多数现有的插件/gem(例如“restful_authentication”、“acts_as_authenticated”)都围绕着self注册等展开。但是,我正在寻找一种功能齐全的基于管理/管理角色的解决方案——但不是简单地附加到另一个非基于角色的解决方案。如果我找不到,我想我会自己动手......只是不想重新发明轮子。 最佳答案 RyanBates最近做了两个关于授权的railscast(注意身份验证和授权之间的区别;身份验证检查用户是否如她所说的那样,授权检查用户是否有权访问资源
我正在根据Rakefile中的现有测试文件动态生成测试任务。假设您有各种以模式命名的单元测试文件test_.rb.所以我正在做的是创建一个以“测试”命名空间内的文件名命名的任务。使用下面的代码,我可以用raketest:调用所有测试require'rake/testtask'task:default=>'test:all'namespace:testdodesc"Runalltests"Rake::TestTask.new(:all)do|t|t.test_files=FileList['test_*.rb']endFileList['test_*.rb'].eachdo|task|n
我想要像“嘿那里”这样的东西变成,例如,#316583。我希望将任意长度的字符串“归结”为十六进制颜色。我不知道从哪里开始。我在想,每个字符串的MD5散列都是不同的-但如何将该散列转换为十六进制颜色数字? 最佳答案 你可以只取几位前几位:require'digest/md5'color=Digest::MD5.hexdigest('Mytext')[0..5] 关于ruby-如何使用Ruby基于字母数字字符串生成颜色?,我们在StackOverflow上找到一个类似的问题:
文章目录1.自动驾驶实战:基于Paddle3D的点云障碍物检测1.1环境信息1.2准备点云数据1.3安装Paddle3D1.4模型训练1.5模型评估1.6模型导出1.7模型部署效果附录show_lidar_pred_on_image.py1.自动驾驶实战:基于Paddle3D的点云障碍物检测项目地址——自动驾驶实战:基于Paddle3D的点云障碍物检测课程地址——自动驾驶感知系统揭秘1.1环境信息硬件信息CPU:2核AI加速卡:v100总显存:16GB总内存:16GB总硬盘:100GB环境配置Python:3.7.4框架信息框架版本:PaddlePaddle2.4.0(项目默认框架版本为2.3
我正在尝试整个BDD方法并想测试AMQP基于Vanilla的方面Ruby我正在写的应用程序。选择Minitest后作为与其他名副其实的蔬菜框架不同的平衡功能和表现力的测试框架,我着手编写此规范:#File./test/specs/services/my_service_spec.rb#Requirementsfortestrunningandconfigurationrequire"minitest/autorun"require"./test/specs/spec_helper"#Externalrequires#MinitestSpecsforEventMachinerequire
我分1,000个批处理从服务器获取大约20,000个数据集。每个数据集都是一个JSON对象。坚持这会产生大约350MB的未压缩明文。我的内存限制为1GB。因此,我以追加模式将每1,000个JSON对象作为一个数组写入到一个原始JSON文件中。结果是一个包含20个需要聚合的JSON数组的文件。无论如何我都需要触摸它们,因为我想添加元数据。一般RubyYajlParser使这成为可能:raw_file=File.new(path_to_raw_file,'r')json_file=File.new(path_to_json_file,'w')datasets=[]parser=Yajl::
有什么方法可以查看gem是否仅在UNIX/类UNIX系统上受支持?是否有任何gem可以“筛选”所有gem并查看在Windows上使用它是否有任何问题。 最佳答案 简短回答:否。老实说,Windows在Ruby世界里是二等公民。这主要是因为Linux、BSD、OSX和几乎所有其他基于POSIX的系统都同意一件事,而Windows将去做完全不同的事情。即使是用于Windows的gem也可能偶尔会由于开发人员的疏忽而损坏。大多数gem作者没有针对Windows运行并依赖于用户错误报告的持续集成服务器。支持Windows很困难,不仅因为AP