最近在腾讯新闻上看到报道张首晟组做的一个工作发在了PNAS上面, 原文章有个前词 Atom2Vec. 习惯原因我就继续用atom2vec 来指代这份工作了. 戳链接可看新闻. 感叹老板牛逼真的是可以为所谓欲为啊哈哈. 刚好半年之前导师让我重复过这篇文章(最近可算是重复出来了, 有个小地方神坑啊=.=), 所以放在这里讲讲.
idea
2013, Google开发的一套Word2Vec工具, 把词的one-hot表示推进到分布表示, 并且有了类比: king-queen ~= man - woman. 网上关于这个已经有很多相关的工作, 感兴趣的可以自己去查阅相关文章. 这里不做这方面的具体阐述, 我也不是完全了解. 不过Atom2vec的想法跟word2vec可以说是很像: 一个原子的性质可以由他周围的原子表示. 对比word2vec: 一个词的词义由周围的词表示.
基于这样的类似想法, 就可以构建一整套工具来得到原子的向量表示. 只不过这里用的方法跟word2vec里面的不太一样. 其实方法很简单, 真的...
workflow
构建(atom, environment)数据
SVD
聚类
构建数据
按照原文章, 用 Bi2Se3 做例子说明(原因的话有兴趣的读者可以了解一下 Bi2Se3 为何物). Bi2Se3这种物质包括两种原子(Bi, Se), 按照一个原子由周围原子表示的想法: 取 Bi 原子(atom), 2个 Bi 原子周围有3个 Se 原子 (environment) , 得到一个(Bi, 2Se3). 再取Se原子, 3个 Se 原子对应2个 Bi 原子, 得到一个(Se, 3Bi2). 对大概六万种化合物做类似的划分得到许许多多个 pair.
文章有些图很形象说明了这个方法.
示例用的几种化合物
Bi2Se3分解的pair
SVD
接着, 构造一个大的零矩阵, 行号对应所有元素, 列号对应上面得到的所有environment. 这样每一个pair就等价成了这个矩阵的坐标了. 把得到的所有pair对应位置 += 1. 这个矩阵记作 X .
其实到这里本质的事情就已经全部做完了. X 矩阵的shape可能是 (100, 100000). 每一个原子的表示可能是十万维, 拿来用不方便. 考虑到X矩阵其实是个稀疏矩阵, 可以对这个矩阵进行归一化然后奇异值分解降维. 按照文章取的值, 降维之后取d=20.
UDV = svd(X)
f ~= U[:d] D[:d]
聚类
X 矩阵降维之后得到的f是近似的, 但是基本上可以表示 X. 这样就可以拿 f 进行聚类. 文中用的聚类方法是single, 先把每一原子分为一类. 然后逐步提高聚类, 将相近的原子(或类)合并, 直到全部合并成一个类. 距离衡量的方法是 cosine.
主族分类的结果挺好的. 基本上同一个族的元素都能分类到一起. 个别元素不行
过渡金属区的结果一团糟来形容吧
用更加容易看的结果是(这是我自己做的)
基本上主族同族元素能够靠在一起, 过渡金属的镧系和锕系聚集在两个角落.其他的元素吗, 散落各地...
小结:
这种方法只考虑了原子的价态, 如果一个元素的价态稍多, 如过渡金属, 基本上这个方法就崩溃了. 如果能考虑具体化合物的结构, 相信会好很多. 至于说这个有什么用吗, 就有可能有很多用途了. 看谁脑洞大了.
这篇文章其实方法还挺简单的, 但是这个idea真的很厉害就是了. 至于新闻稿吗, 有时候看看就好, 感觉跟AI没啥关系. 这里面坑真的很多啊, 简简单单的一个方法, 哎......
领取专属 10元无门槛券
私享最新 技术干货