GloVe学习笔记

来源:互联网 发布:特效照相机软件下载 编辑:程序博客网 时间:2024/06/05 16:35


          GloVe是一种用于获取词汇向量表示的无监督学习算法。 对来自语料库的聚合全局字词同现统计进行训练,并且所得到的表示展示了词向量空间的有趣的线性子结构。

 

官网主页地址:https://nlp.stanford.edu/projects/glove/

Githubhttps://github.com/stanfordnlp/GloVe

论文下载地址:https://nlp.stanford.edu/pubs/glove.pdf

 

GloVeWord 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.shdemo.sh主要做了这几步事情:

1.    下载text8并且解压

2.    把解压之后的text8用于训练模型,输出vectors.txtvectors.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代码进行训练,不需要进行修改,其他部分的代码可以删除,然后就可以训练了。



原创粉丝点击