Facebook最近开源了其图嵌入算法Pytorch-Biggraph。这个算法完全基于CPU进行运算不需要GPU支持,而且号称能够应对上亿节点。
其实人物关系图、知识图谱等只是图嵌入的一种展示方式,Facebook的Pytorch-Biggraph算法不是用来做这种图像渲染的,而是计算机用来理解图片含义的一种方式。
从词嵌入说起
之前机器学习在图像处理方面做到了很多非常令人难以想象的成绩,之前笔者也曾经介绍过AI能换脸(),甚至能换人(),不过计算机好像很难理解图像的含义。
而在自然语言处理方面也是同样的问题,计算机很难处理人类的语言。不过2013年,一位谷歌的技术大牛Mikolov在论文“Efficient Estimation of Word Representation in Vector Space”开创性的提出了一种词嵌入的算法(Word to Vector),其核心理念是用一个单词附近的其它单词,去定义这个单词本身。
简要的讲word2vec的算法就是将单词转化为向量(一般是500维),并保持词与词之间的关系,例如下图
词向量的平面投影
由此可以看到将单词转化的向量过程中会有两个目标:
首先是意思相近的单词其距离要的短,比如同为男士衬衫品牌泰芝朗、欧比森和优沙在词空间中就要距离比较近。可以通过dist函数找到与一个单词意思最为相近的其它单词,说的就是这个意思。例子如下:
dist<-distance(file_name='d:/beyondma.bin',search_word='推荐',num=10)
dist
word dist
1 强烈推荐 0.991746842861176
2 买入 0.983411431312561
3 给予 0.982171237468719
4 维持 0.979804515838623
5 评级 0.977733969688416
其次是存在类比关系的单词做向量减法的结果要尽量保持一致。如Vector(男版)-Vector(男)=Vector(女版)-Vector(女)
简要的讲word2vec就是通过文章中单词出现的顺序及条件概率,将每个单词嵌入到向量空间的对应位置。从而将文字转换为向量序列,以便计算机处理。
让计算机理解图像
近些来互相网的大规模应用,使图像也有了序列化的信息,如用户在INSGRAM、微信朋友圈上顺序点击的图片或者在淘宝上搜索商品所依次进入的图片介绍,这些操作都形成了非常有价值的信息链,而且Word2vec算法之父Mikolov也从谷歌跳槽到了Facebook,这些都使Graph2vec变成可能。
Facebook的深度学习框架是Pytorch,而Biggraph算法也正是基于Pytorch的,从本质来说Biggraph图嵌入与之前的Word2vec没有太大区别,都是通过图片出现的序列信息及前后依赖的条件概率,将图片转为向量便于计算机处理。
Biggraph的安装与数据集下载
Biggraph安装起来非常简单,只需要用pip install torchbiggraph命令就能完成安装。
其训练数据下载地址为:https://dl.fbaipublicfiles.com/starspace/fb15k.tgz
其github的地址是:https://github.com/facebookresearch/PyTorch-BigGraph
论文地址是:https://www.sysml.cc/doc/2019/71.pdf