用于从微小数据生成词嵌入的 python 模块
项目描述
随机数2vec
欢迎来到 Nonce2Vec!
该存储库的主要分支现在指的是 Kabbach 等人。(2019) ACL SRW 2019 论文Towards incremental learning of word embeddings using context informativeness。
如果您正在寻找 Herbelot 和 Baroni (2017) 存储库,请查看emnlp2017分支。
如果您使用此代码,请引用:
@inproceedings{kabbach-etal-2019-towards,
title = "Towards Incremental Learning of Word Embeddings Using Context Informativeness",
author = "Kabbach, Alexandre and
Gulordava, Kristina and
Herbelot, Aur{\'e}lie",
booktitle = "Proceedings of the 57th Conference of the Association for Computational Linguistics: Student Research Workshop",
month = jul,
year = "2019",
address = "Florence, Italy",
publisher = "Association for Computational Linguistics",
url = "https://www.aclweb.org/anthology/P19-2022",
pages = "162--168"
}
抽象的
在本文中,我们研究了以增量、认知合理的方式从非常稀疏的数据中学习词嵌入的任务。我们专注于信息量的概念,即某些内容对学习过程比其他内容更有价值的想法。我们进一步强调了在线学习的挑战,并认为以前的系统没有实现增量。具体而言,我们将信息性纳入先前提出的随机数学习模型中,将其用于上下文选择和学习率调制。我们测试我们的系统从定义中学习新词的任务,以及从潜在的无信息上下文中学习新词的任务。我们证明,信息量对于在真正的增量设置中获得最先进的性能至关重要。
代码注释
我们对原始 Nonce2Vec 代码进行了重大重构,以使复制更容易并使其与 gensim v3.x 一起使用。您可以使用 Nonce2Vec v2.x 来复制 SRW 论文的结果。但是,要复制原始 ENMLP 论文的结果,请参阅在emnlp2017 分支下找到的 Nonce2Vec v1.x,因为我们不能保证 v1.x 和 v2.x 之间的公平复制。
安装
您可以通过 pip 安装 Nonce2Vec:
pip3 install nonce2vec
或者,在 git clone 之后,通过:
python3 setup.py install
先决条件
要运行 Nonce2Vec,您需要两个 gensim Word2Vec 模型(一个 skipgram 模型和一个 cbow 模型来计算信息量指标)。您可以从以下位置下载 skipgram 模型:
wget backup.3azouz.net/gensim.w2v.skipgram.model.7z
和 cbow 模型来自:
wget backup.3azouz.net/gensim.w2v.cbow.model.7z
或按照以下说明自行生成。
从 Wikipedia 转储生成 Word2Vec 模型
您可以在此处下载 2019 年 1 月的英文维基百科转储:
wget backup.3azouz.net/enwiki.20190120.7z
如果您想为英语或任何其他语言生成一个全新的(标记化的每行一个句子)维基百科转储,请查看WiToKit。
一旦你有一个 Wikipedia txt 转储,你可以通过以下方式生成一个 gensim Word2Vec skipgram 模型:
n2v train \
--data /absolute/path/to/wikipedia/tokenized/text/dump \
--outputdir /absolute/path/to/dir/where/to/store/w2v/model \
--alpha 0.025 \
--neg 5 \
--window 5 \
--sample 1e-3 \
--epochs 5 \
--min-count 50 \
--size 400 \
--num-threads number_of_cpu_threads_to_use \
--train-mode skipgram
和一个 gensim Word2Vec cbow 模型,通过:
n2v train \
--data /absolute/path/to/wikipedia/tokenized/text/dump \
--outputdir /absolute/path/to/dir/where/to/store/w2v/model \
--alpha 0.025 \
--neg 5 \
--window 5 \
--sample 1e-3 \
--epochs 5 \
--min-count 50 \
--size 400 \
--num-threads number_of_cpu_threads_to_use \
--train-mode cbow
要检查您的 word2vec 模型与 MEN 数据集的相关性,请运行:
n2v check-men \
---model /absolute/path/to/gensim/w2v/model
运行代码
在嵌合体数据集的定义上运行 Nonce2Vec 是通过n2v test命令完成的。您可以传入--reload参数以在one-shot模式下运行,没有它的代码默认以增量模式运行。您可以--shuffle在运行 n2v 之前进一步传入参数以对测试集进行洗牌。
您将在下面找到与 SRW 2019 论文中报告的实验相对应的命令列表。例如,要测试 SUM CWI 模型(具有基于上下文词信息性过滤的基本求和模型),它为增量设置中的所有数据集提供了相当稳健的基线,运行定义数据集:
n2v test \
--on def \
--model /absolute/path/to/gensim/w2v/skipgram/model \
--info-model /absolute/path/to/gensim/w2v/cbow/model \
--sum-only \
--sum-filter cwi \
--sum-threshold 0
要在 chimera L4 测试集上运行 N2V CWI alpha 模型,使用改组和一次性评估设置(提供 SOTA 性能),请执行以下操作:
n2v test \
--on l4 \
--model /absolute/path/to/gensim/w2v/skipgram/model \
--info-model /absolute/path/to/gensim/w2v/cbow/model \
--sum-filter cwi \
--sum-threshold 0 \
--train-with cwi_alpha \
--alpha 1.0 \
--beta 1000 \
--kappa 1 \
--neg 3 \
--epochs 1 \
--reload
要按原样测试 N2V(没有背景冻结的原始 N2V 代码),在定义数据集的增量设置中,请执行以下操作:
n2v test \
--on def \
--model /absolute/path/to/gensim/w2v/skipgram/model \
--sum-filter random \
--sample 10000 \
--alpha 1.0 \
--neg 3 \
--window 15 \
--epochs 1 \
--lambda 70 \
--sample-decay 1.9 \
--window-decay 5 \
--replication
要在一次性评估设置中的定义数据集上测试 N2V CWI init(具有基于 CWI 和初始化的原始 N2V),请执行以下操作:
n2v test \
--on def \
--model /absolute/path/to/gensim/w2v/skipgram/model \
--info-model /absolute/path/to/gensim/w2v/cbow/model \
--sum-filter cwi \
--sum-threshold 0 \
--alpha 1.0 \
--neg 3 \
--window 15 \
--epochs 1 \
--lambda 70 \
--sample-decay 1.9 \
--window-decay 5 \
--replication \
--reload