GloVe是一种用于获取词汇向量表示的无监督学习算法。 对来自语料库的聚合全局字词同现统计进行训练,并且所得到的表示展示了词向量空间的有趣的线性子结构。
官网主页地址:https://nlp.stanford.edu/projects/glove/
Github:https://github.com/stanfordnlp/GloVe
论文下载地址:https://nlp.stanford.edu/pubs/glove.pdf
GloVe是Word embedding(词嵌入)的一种,通过斯坦福开源的代码训练出来GloVe词向量和word2vec的格式有点不同。即glove训练出来的模型第一行没有:词库大小 维度
Word2vec训练出来格式:
Vocabulary Size
Word1 vector1
Word2 vector1
….
Wordn vector
GloVe 训练出来格式:
Word1 vector1
Word2 vector1
….
Wordn vector
所以,我们使用Glove训练出来的模型在前面加上一行Vocabulary Size,模型的使用方法就和word2vec一样了。官网上提供了很多使用词库训练得到的词向量模型,可以下载下来直接用。
这里我记录一下我使用GloVe训练词向量的过程:
把代码下载到ubuntu系统下:
eval文件是用来评价训练好的词向量模型的.
src是四个过程的源码(源码我都没看):
1. vocab_count:计算原词库的单词统计(生成的vocab.txt,每行为:单词 词频)
2. cooccur:统计词与词的共现(生成cooccurrence.bin)
3. shuffle:对2的共现结果重新整理(生成cooccurrence.shuf.bin)
4. glove: glove算法训练模型
作者提供了一个demo.sh。demo.sh主要做了这几步事情:
1. 下载text8并且解压
2. 把解压之后的text8用于训练模型,输出vectors.txt和vectors.bin模型 ,前者是文本文件,后者是二进制文件
3. 调用eval里面的函数进行评价
语料库
维基百科英文语料,下载地址:http://download.wikipedia.com/enwiki/
维基百科中文语料,下载地址:http://download.wikipedia.com/zhwiki/
可以修改demo.sh的源码,进行训练词向量模型:
CORPUS=text8 把这里换成自己的词典
VOCAB_FILE=vocab.txt 得到的词 词频文件
COOCCURRENCE_FILE=cooccurrence.bin
COOCCURRENCE_SHUF_FILE=cooccurrence.shuf.bin
BUILDDIR=build
SAVE_FILE=vectors 保存为词向量的名字
VERBOSE=2
MEMORY=4.0
VOCAB_MIN_COUNT=5
VECTOR_SIZE=50 词向量维度
MAX_ITER=15 训练迭代次数
WINDOW_SIZE=15 上下文窗口大小
BINARY=2 保存文件类型
NUM_THREADS=8 线程数
X_MAX=10
各种参数,很多我也没搞懂,有问题的还请指出
echo "$ $BUILDDIR/vocab_count -min-count $VOCAB_MIN_COUNT -verbose $VERBOSE < $CORPUS > $VOCAB_FILE"
$BUILDDIR/vocab_count -min-count $VOCAB_MIN_COUNT -verbose $VERBOSE < $CORPUS > $VOCAB_FILE
echo "$ $BUILDDIR/cooccur -memory $MEMORY -vocab-file $VOCAB_FILE -verbose $VERBOSE -window-size $WINDOW_SIZE < $CORPUS > $COOCCURRENCE_FILE"
$BUILDDIR/cooccur -memory $MEMORY -vocab-file $VOCAB_FILE -verbose $VERBOSE -window-size $WINDOW_SIZE < $CORPUS > $COOCCURRENCE_FILE
echo "$ $BUILDDIR/shuffle -memory $MEMORY -verbose $VERBOSE < $COOCCURRENCE_FILE > $COOCCURRENCE_SHUF_FILE"
$BUILDDIR/shuffle -memory $MEMORY -verbose $VERBOSE < $COOCCURRENCE_FILE > $COOCCURRENCE_SHUF_FILE
echo "$ $BUILDDIR/glove -save-file $SAVE_FILE -threads $NUM_THREADS -input-file $COOCCURRENCE_SHUF_FILE -x-max $X_MAX -iter $MAX_ITER -vector-size $VECTOR_SIZE -binary $BINARY -vocab-file $VOCAB_FILE -verbose $VERBOSE"
$BUILDDIR/glove -save-file $SAVE_FILE -threads $NUM_THREADS -input-file $COOCCURRENCE_SHUF_FILE -x-max $X_MAX -iter $MAX_ITER -vector-size $VECTOR_SIZE -binary $BINARY -vocab-file $VOCAB_FILE -verbose $VERBOSE
这里就是调用那四个编译好的C代码进行训练,不需要进行修改,其他部分的代码可以删除,然后就可以训练了。