word2vec中文相似词计算和聚类的使用说明及c语言源码

本文介绍了如何使用word2vec工具在中文语料上进行词向量训练,通过调整参数生成词向量文件,并展示了计算相似词、进行词类聚类的操作。提供了详细的命令行示例,包括训练词向量、寻找相似词、三词关系预测和关键词聚类。此外,还讨论了训练参数的影响和聚类算法的细节。
摘要由CSDN通过智能技术生成
运行 make 编译word2vec工具:
Makefile的编译代码在makefile.txt文件中,先改名makefile.txt 为Makefile,然后在当前目录下执行make进行编译,生成可执行文件(编译过程中报出很出Warning,gcc不支持pthread多线程命令,注释即可)。
再运行示例脚本:./demo-word.sh 和 ./demo-phrases.sh:
a). 从http://mattmahoney.net/dc/text8.zip 在线下载了一个文件text8 ( 一个解压后不到100M的txt文件,可自己下载并解压放到同级目录下),可替换为自己的语料
b). 执行word2vec生成词向量到 vectors.bin文件中
c). 如果执行 sh demo-word.sh 训练生成vectors.bin文件后,下次可以直接调用已经训练好的词向量,如命令 ./distance vectors.bin




2、中文语料


语料是我使用Selenium爬取的三大百科(百度、互动、维基)文本信息,其中每个百科有100个国家,总共300个国家(0001.txt~0300.txt),然后使用Jieba工具进行中文分词处理。最后输出Result_Country.txt文件,它把所有文本合并,共300行,每行对应一个国家的分词文本信息。




3、参数介绍


下图参数源自文章:Windows下使用Word2vec继续词向量训练 - 一只鸟的天空
Java推荐参考文章:word2vec使用指导


 


demo-word.sh文件,参考:http://jacoxu.com/?p=1084
[plain] view plain copy 在CODE上查看代码片派生到我的代码片
make    
#if [ ! -e text8 ]; then    
#  wget http://mattmahoney.net/dc/text8.zip -O text8.gz    
#  gzip -d text8.gz -f    
#fi    
time ./word2vec -train Result_Country.txt -output vectors.bin -cbow 1 -size 200 -window 8 -negative 25 -hs 0 -sample 1e-4 -threads 20 -binary 1 -iter 15    
./distance vectors.bin    
具体命令解释如下:
-train Result_Country.txt 表示的是输入文件是Result_Country.txt
-output vectors.bin 输出文件是vectors.bin
-cbow 0 表示不使用cbow模型,默认为Skip-Gram模型
-size 200 每个单词的向量维度是200
-window 8 训练的窗口大小为8,就是考虑一个词前八个和后八个词语(实际代码中还有一个随机选窗口的过程,窗口大小小于等于5)
-negative 0 表示是否使用NEG方,0表示不使用
-hs 1 是否使用HS方法,0表示不使用,1表示使用HS方法
-sample 指的是采样的阈值,如果一个词语在训练样本中出现的频率越大,那么就越会被采样
-binary 1 为1指的是结果二进制存储,为0是普通存储(普通存储的时候是可以打开看到词语和对应的向量的)
除了以上命令中的参数,word2vec还有几个参数对我们比较有用比如:
-alpha 设置学习速率,默认的为0.025
–min-count 设置最低频率,默认是5,如果一个词语在文档中出现的次数小于5,那么就会丢弃
-classes 设置聚类个数,看了一下源码用的是k-means聚类的方法
要注意-threads 20 线程数也会对结果产生影响。




4、计算相似词语


命令:sh demo-word.sh
demo-word.sh 中指令:
[plain] view plain copy 在CODE上查看代码片派生到我的代码片
make  
#if [ ! -e text8 ]; then  
#  wget http://mattmahoney.net/dc/text8.zip -O text8.gz  
#  gzip -d text8.gz -f  
#fi  
time ./word2vec -train Result_Country.txt -output vectors.bin -cbow 1 -size 200 -window 8 -negative 25 -hs 0 -sample 1e-4 -threads 20 -binary 1 -iter 15  
./distance vectors.bin  
运行结果如下图所示:






如果想要不训练调用上次训练的vectors.bin文件,则输入 ./distance vectors.bin
输入"阿富汗"输出相似次及相似距离,如"喀布尔"阿富汗首都,"坎大哈"阿富汗城市,类似中东国家"伊拉克"等。






输入"国歌"输出相似词如下图所示:






不仅仅名词可以获取相似词,动词也可以。如输入"位于",输出如下:






distance.c 源码:
[cpp] view plain copy 在CODE上查看代码片派生到我的代码片
//  Copyright 2013 Google Inc. All Rights Reserved.  
//  
//  Licensed under the Apache License, Version 2.0 (the "License");  
//  you may not use this file except in compliance with the License.  
//  You may obtain a copy of the License at  
//  
//      http://www.apache.org/licenses/LICENSE-2.0  
//  
//  Unless required by applicable law or agreed to in writing, software  
//  dist
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值