cw2vec 是一种基于 skip-gram,并辅以笔画信息来训练中文词向量的模型,详见文章:https://www.aaai.org/ocs/index.php/AAAI/AAAI18/paper/download/17444/16786
声明:此实现非 cw2vec 的官方实现,所有观点皆非 cw2vec 官方观点,如有错误请指正。
此实现力求忠于原文,除了以下:
- 相似度的计算:此代码在原文的基础上,乘了
1 / |S(w)|
,这是因为在使用原文的公式时,观察到了嵌入中出现 NaN 的现象。 - 在 skip window 中采样使用的是
random.sample()
,原文未作说明。 - batch 的处理并没有使用断句,原文未作说明。
- 对于笔画长度太短的词,代码进行了 padding,原文未作说明,(这样的词较少)。
此代码库只有为数不多的几个 commit,这是因为内部的代码库使用了 Git LFS,有许多大文件,所以使用了新的代码库。
git clone https://github.com/noobiegz/cw2vec.git
cd cw2vec
conda create -n cw2vec python=3.6
source activate cw2vec
conda install --file requirements.txt
# 编译,注意,这里要求 gcc >= 5,这包括用来编译 TensorFlow 的 gcc。
# 对于更早的 gcc 的支持请参照:
# https://www.tensorflow.org/extend/adding_an_op
./compile.sh
# 详细参数(如训练语料,超参数等)请参见 train.py
CUDA_VISIBLE_DEVICES='' python -m train --cmd=train
https://github.com/noobiegz/cw2vec/releases
- 运算速度
- 断句
- 参数调优
受限于时间预算,并没有用相同的参数、分词方式及语料训练各个模型来进行比较。下面的比较中:
- cw2vec: 使用本库 commit 8f789ed 训练,(其中包含详细参数),语料为中文维基百科,epochs=8
- word2vec: 使用 gensim 的 word2vec 训练,语料为中文维基百科(与 cw2vec 非同一份,但接近),epochs=5
- score: cosine 相似度
与“森林”相似的词:
cw2vec score | cw2vec word | word2vec word | word2vec score |
---|---|---|---|
0.750604 | 林地 | 对诺定 | 0.686841 |
0.724008 | 湿地 | 沼泽 | 0.686402 |
0.700475 | 沼泽 | 林地 | 0.677119 |
0.697006 | 雨林 | 布雷顿 | 0.674078 |
0.688101 | 沼泽地 | 草原 | 0.652401 |
0.684015 | 草原 | 球会诺定 | 0.641564 |
0.681602 | 次生林 | 原野 | 0.64027 |
0.665787 | 热带雨林 | 于诺定 | 0.636917 |
0.665439 | 山林 | 热带雨林 | 0.63283 |
0.663163 | 茂密 | 雪伍 | 0.63075 |
与“地道”相似的词:
cw2vec score | cw2vec word | word2vec word | word2vec score |
---|---|---|---|
0.603195 | 黄泥 | 东么 | 0.607535 |
0.595496 | 坑道 | 海旁 | 0.569167 |
0.591545 | 小巷 | 闹市 | 0.557204 |
0.585134 | 防空洞 | 油街 | 0.548172 |
0.574345 | 地底 | 对出 | 0.546444 |
0.574298 | 入口 | 雪厂 | 0.544023 |
0.555908 | 沿路 | 加连威 | 0.541257 |
0.555483 | 葡式 | 弥敦道 | 0.53981 |
0.554203 | 天桥 | 太古 | 0.538864 |
0.547074 | 铁架 | 尖沙咀 | 0.53674 |
与“水污染”相似的词:
cw2vec score | cw2vec word | word2vec word | word2vec score |
---|---|---|---|
0.808701 | 污染物 | 环境污染 | 0.8823 |
0.80737 | 污染源 | 工业废水 | 0.874002 |
0.798353 | 污染 | 工业污染 | 0.870867 |
0.792276 | 富营养化 | 污染物 | 0.852176 |
0.782273 | 废水 | 污染源 | 0.847119 |
0.772658 | 地表水 | 水土流失 | 0.843561 |
0.767345 | 优养化 | 荒漠化 | 0.832941 |
0.764575 | 排污 | 废水 | 0.823486 |
0.755194 | 酸雨 | 大气污染 | 0.82276 |
0.742726 | 水体 | 空气污染 | 0.821326 |
与“仿佛”相似的词:
cw2vec score | cw2vec word | word2vec word | word2vec score |
---|---|---|---|
0.81085 | 似的 | 眼前 | 0.83014 |
0.806375 | 好像 | 萦绕 | 0.804456 |
0.791631 | 犹如 | 阴暗 | 0.796338 |
0.785168 | 样子 | 般地 | 0.784732 |
0.778468 | 眼前 | 好似 | 0.782319 |
0.777897 | 隐约 | 脑海 | 0.776568 |
0.777875 | 感觉 | 隐约 | 0.773886 |
0.772368 | 诡异 | 喧嚣 | 0.766031 |
0.768422 | 看著 | 冰冷 | 0.763594 |
0.766752 | 脑海 | 充满著 | 0.762369 |
与“心照不宣”相似的词:
cw2vec score | cw2vec word | word2vec word | word2vec score |
---|---|---|---|
0.784952 | 照料者 | 掏肺 | 0.803912 |
0.783772 | 结结巴巴 | 偷改 | 0.801685 |
0.78354 | 不幸者 | 上津役 | 0.784095 |
0.782021 | 测谎仪 | 马面亚 | 0.78059 |
0.781118 | 鼓励性 | 旱坑子 | 0.780149 |
0.775456 | 血浓于水 | 分清是非 | 0.778836 |
0.775402 | 直观性 | 亮家 | 0.778631 |
0.773511 | 共谋者 | 镇东埔 | 0.776044 |
0.772164 | 清况 | 宁南伯 | 0.774432 |
0.771717 | 双语者 | 大巧若拙 | 0.771338 |