本模型参考了Miklov的Word2Vec,依旧采用上下文预测当前词(短语)来训练词(短语)向量。我们同时训练词向量和短语向量,得到词和短语在同一个向量空间里的表示,模型的具体细节内容参见我的博客PHRASE2VEC——短语向量学习。
=========================================== ###模型参数 模型各个参数介绍如下:
- size:词(短语)向量的维度
- min-wf:最小词频,词频低于该值的词将被忽略
- window:上下文窗口大小
- lr:学习率
- neg-sample:负采样词(短语)数目
- (前面这五个参数和Word2Vec差不多,这里还有另外两个不一样的参数)
- min-pf:短语频率,高于该频率的bi-gram将被认为是一个短语
- margin:正负例的间距
- (还有额外三个参数)
- max-num-epochs:迭代次数
- save-epochs:每迭代多少次保存一下模型
- output:保存模型的文件名
模型训练,在命令行输入:
python Phrase2vec.py [训练语料]
若机器上有GPU,可以使用GPU进行训练,速度比CPU能快很多,输入命令改为:
THEANO_FLAGS='mode=FAST_RUN,device=gpu,floatX=float32' python Phrase2vec.py [训练语料]
训练语料可以选用word2vec的测试语料,text8.zip
###实验结果 用word2vec提供的测试语料训练我们的phrase2vec模型(GPU配置:Tesla K40m,迭代一轮所需时间:大约30h),利用余弦相似度计算词(短语)之间的相似度,以下是与“hong kong”相似的词语:
singapore, beijing, taiwan, shanghai, south africa, of hong, antrim, new zealand, calcutta, in dublin, warwickshire, south korea, germany s, auckland adrift, el salvador, new jersey, ferdinando, in Sweden, woolwich, yangon