序
Word2Vec原生是不支持Windows的,索性就用Qt移植了一下。
大概做了下面几件事。
①替换LinuxAPI的pthread为QThread。
②取消了posix_memalign(),内存对齐这玩意据说是编译器的活,不知道Mikolov为什么写出来,难道说源码是Google万能工程师+编译器高手Jeff Dean写的?(论文最后Jeff Dean友情挂名)。[Mikolov13]
看见posix就知道是UNIX/Linux系的API了。本来想换成Windows下的_aligned_malloc的,但是一直没法分配内存,不知道为什么。
然后就是,据说可以让访存提速。我用C++的new替代了,感觉并没有提速多少。
外传:Jeff Dean的超强Coding能力
“编译器从不会给Jeff Dean警告的,Jeff Dean会给编译器警告的。”
解释:当你的代码有误时,编译器会给出警告,但是Jeff比编译器还牛叉。
“Jeff Dean 提交代码前会编译和运行他的代码,只是为了检验编译器和链接器有没有问题。”
解释:Jeff 的代码从不出错,他编译代码只是为了确保编译器和链接器没有bug。
“Jeff Dean 每次只给一条腿穿裤子,但是如果他有很多腿,你会发现他穿裤子的时间复杂度为O(log n)”
解释:Jeff Dean 穿裤子的算法复杂度是对数级的而不是线性级的,这样的话,如果他有很多条腿的话,就会大大节约穿裤子的时间。
“当 Richard Stallman 听说Jeff Dean的自传专属Kindle平台,他就去买了Kindle。”
解释:Richard Stallman是著名的极力反对非*软件的人,并且从来不购买和使用Kindle。但是Jeff Dean就是这样神奇,Richard会因为想要阅读Jeff的自传而去违背自己的原则。”
“Jeff Dean 是直接写二进制机器代码的,他写源代码,是为了给其他开发人员作参考。”
解释:所有的代码在执行前都要先编译成二进制机器码,Jeff是直接写二进制机器码的,他写源代码主要是方便其他程序员理解。
“Jeff来面试谷歌时,被问到等式P=NP成立的条件,他回答,P=0 或者N=1时成立。然后在面试官哈哈大笑的时候,他看了一眼谷歌公有证书,就直接在白板上写出了相应的私钥。”
解释:“P与NP一直是计算机科学领域的一个悬而未决的问题,但是 Jeff Dean把它想成了一个代数问题,他直接用大脑根据谷歌的公有证书算出了相应的私有秘钥,这在超级计算机看来,都是不可能的事。
“X86-64 规范有几项非法指令,标志着‘私人使用’,它们其实是为Jeff Dean专用。”
解释:私有的非法CPU指令是不能被任何人使用的,但是Jeff Dean 就可以用。
“Jeff Dean 进行人体工程学评估,是为了保护他的键盘。”
解释:通常评估人体工程学是纠正坐姿,保护你的健康的,但是Jeff 却是为了保护他的键盘。
“所有的指针都是指向Jeff Dean的。”
解释:指针是C编程的核心,但是Jeff Dean 是编程世界的中心。
“在2000年末的时候,Jeff Dean 写代码的速度突然增长了40倍,原因是他把自己的键盘升级到了USB 2.0。”
解释:是键盘和计算机之间接口的速度影响了Jeff Dean 的编码速度。
继续
③写了GUI,但是超参数提供不全,以后补下。
④只写了训练部分,distance准备用Qt的超强绘图QGraphicsView实现。
GitHub
https://github.com/neopenx/QWord2Vec
QWord2Vec for Windows Release
照顾用Windows的同学,连样例text8文本也打包了。
http://pan.baidu.com/s/1i3ndmBz
Word2Vec Linux原生源码
Code.Google被墙了,CSDN上居然这玩意还收积分。