非 R 用户可以使用命令行来使用 GloVe 算法,她在独立的仓库中,text2vec-cli。
这是 text2vec-cli
的 README 内容:
text2vec-cli
适用于不了解 R,但是希望使用 GloVe 其他实现的用户,相比于原有的实现,text2vec
的速度更快,是它的两倍。text2vec
同时使用了 L1 正则化,这对于小数据集十分有用,比单纯的 GloVe 具有更好的泛化性。
text2vec
的一个限制是,它在内存中计算共现统计量。这个对于大语料库来说可能是一个问题。比如,你可以在一个 32gb 的机器上使用 window=10 的设置来处理包含 400000 独立字段的英文 wikipedia 文本。
你需要安装 R 3.2+,参见 CRAN 。
对于主流的 linux 发行版,安装则更为简单:
# change following line accordingly to your system:
# https://cran.r-project.org/bin/linux/ubuntu/
# here is string for ubuntu 14.04
echo 'deb https://cloud.r-project.org/bin/linux/ubuntu trusty/' | sudo tee --append /etc/apt/sources.list
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9
sudo apt-key update
# install dependencies
sudo apt-get install -y libssl-dev libcurl4-openssl-dev git
# isntall R
sudo apt-get install -y r-base r-base-dev
R 安装后,克隆这个仓库,同时将脚本设置为可执行的,
git clone https://github.com/dselivanov/text2vec-cli.git
cd text2vec-cli
# make scripts executable
chmod +x install.R vocabulary.R cooccurence.R glove.R analogy.R
安装 text2vec:
./install.R
wget http://mattmahoney.net/dc/text8.zip
./vocabulary.R files=text8.zip vocab_file=vocab.rds
./cooccurence.R files=text8.zip vocab_file=vocab.rds vocab_min_count=5 window_size=5 cooccurences_file=tcm.rds
./glove.R cooccurences_file=tcm.rds word_vectors_size=50 iter=10 x_max=10 convergence_tol=0.01
./analogy.R
text2vec-cli
是为非 R 用户设计的,我们假设他们熟悉自己的编程语言,并能够使用它们熟悉的工具来预处理输入数据。
同时,与 text2vec R包相比,text2vec-cli
是单线程的(除了 GloVe 训练时多线程的)。
text2vec 按行来处理数据文件,他将每个文件读入内存,处理文件,然后读取下一个文件。如果你的文本集是一个大文本,比如若干GB我们推荐使用 split
工具将它分割成区块。
比如,你的数据是 BIG_FILE.gz
:
gunzip -c BIG_FILE.gz | split --line-bytes=100m --filter='gzip --fast > ./chunk_$FILE.gz'
对于 OS X 用户,可以安装 coreutils
:brew install coreutils
或者使用 gsplit
而不是 split。
我们假设:
为了拟合 GloVe 模型,用户需要下面的步骤,
./vocabulary.R files=text8.zip vocab_file=vocab.rds
参数:
files
- 输入文件的文件名 多个文件使用英文逗号进行分割 files=file1,file2
。dir
- 目录下的文件都会被使用vocab_file
- 输出文件的文件名./cooccurence.R files=text8.zip vocab_file=vocab.rds vocab_min_count=5 window_size=5 cooccurences_file=tcm.rds
参数:
files
- 输入文件的文件名 多个文件使用英文逗号进行分割 files=file1,file2
。dir
- 目录下的文件都会被使用vocab_file
- 词汇表文件vocab_min_count
- 删减词汇表,只使用出现超过指定次数的字段。window_size
- 使用多少个临近的词汇用来计算共现信息。cooccurences_file
- 输出文件./glove.R cooccurences_file=tcm.rds word_vectors_size=50 iter=10 x_max=10 convergence_tol=0.01
参数:
cooccurences_file
- 共现信息文件名word_vectors_size
- 词向量的维度iter
- 优化算法的迭代次数x_max
- 最大共现值。与原有实现的 X_MAX
对应。convergence_tol
- 0.01
默认值。若每个 epoch 的模型改进小于指定值,则停止训练。lambda
- L1 正则化参数. 一般在 1e-4 到 1e-5 之间.learning_rate
- 0.2
默认值. AdaGrad 到初始速率. 不推荐修改。clip_gradients
- 10
默认值。用这个数值来裁剪梯度。不推荐修改。alpha
- 0.75
默认值。./analogy.R