序
- Word2vec应该是入门NLP的必入之坑,本人算是看过三遍,每一次都看到了不一样的东西,现如今由于要写一个word2vec,所以这次入坑最终拿下了word2vec。本人很惭愧的是,由于python写的过多,思维被固化(看得懂,却也不出来),这次写C的实现版本其实相当于抄了遍源码,最终看懂跑通而已…
- 其实网上资料真的很多,但是你真的不需要那么多,迄今为止,我认为最好的理论讲解只有一个,我认为最好的代码实现就是官方源码,所以简单点,上资料:
资料
理论
-
博客:https://blog.csdn.net/itplus/article/details/37969519
-
上面1博客的PDF版本:https://spaces.ac.cn/usr/uploads/2017/04/2833204610.pdf
(注:感谢苏大佬提供的pdf版本) -
上面的看懂其实完全就够了,这里再贴出苏大佬的word2vec博客:https://spaces.ac.cn/archives/4299
代码
- 代码:https://github.com/chenbjin/RepresentationLearning/blob/master/Word2vec/word2vec.c
(个人原本参考的注释版本链接找不到了,但其实都差不多,就是源码加上了注释,这里随便贴了一个版本) - 源码分析网上很多,就不推荐了。
使用
- 本人Ubuntu系统,这里介绍ubuntu上的用法,各个参数的含义就不一一介绍了,给个跑通命令例子:
- 编译:gcc -o tt main.c -lm -lpthread
- 执行:./tt -size 128 -train clean_sentence.txt -save-vocab vocab.txt -debug 1 -binary 0 -cbow 1 -alpha 0.001 -output embedding.txt -window 5 -sample -hs 1 -negative 0 -threads 12 -iter 5 -min-count 3 -classes 0
- 简单说几个变动参数:
- -train : 训练语聊的文件名(该文件格式:一个句子一行)
- -output: 输出文件名
- -classes:0 表示保存训练好词向量,不为0表示K-means聚类个数(注意,不为0不会保存词向量,而是Save the K-means classes)
END
加油!!!