从微小数据生成单词嵌入的python模块
nonce2vec的Python项目详细描述
非E2vec
欢迎来到Nonce2vec!
这个知识库的主要分支现在是指kabbach等人。(2019)acl srw 2019论文关于使用上下文信息的单词嵌入的增量学习。
如果您正在查找Herbelot and 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" }
摘要
在本文中,我们研究了以增量的、认知上合理的方式从非常稀疏的数据中学习单词嵌入的任务。我们关注的是信息性的概念,即某些内容比其他内容对学习过程更有价值的概念。我们进一步强调了在线学习的挑战,并认为以前的系统没有实现增量。具体地说,我们将信息性融入到先前提出的nonce学习模型中,将其用于上下文选择和学习速率调制。我们测试系统的任务是从定义中学习新词,以及从潜在的非信息性上下文中学习新词。我们证明,信息性对于在真正的增量设置中获得最先进的性能至关重要。
关于代码的注释
我们对原始的nonce2vec代码进行了显著的重构,以使复制更容易,并使其与gensim v3.x一起工作。您可以使用nonce2vec v2.x来复制srw文件的结果。但是,要复制原始enmlp文件的结果,请参考emnlp2017 branch下的nonce2vec v1.x,因为我们无法保证v1.x和v2.x之间的公平复制。
安装
您可以通过pip安装nonce2vec:
pip3 install nonce2vec
或者,在git克隆之后,通过:
python3 setup.py install
先决条件
要运行nonce2vec,需要两个gensim word2vec模型(skipgram模型和cbow模型来计算信息性度量)。您可以从以下位置下载skipgram模型:
wget http://129.194.21.122/~kabbach/gensim.w2v.skipgram.model.7z
CBOW模型来自:
wget http://129.194.21.122/~kabbach/gensim.w2v.cbow.model.7z
或者按照下面的说明生成两者。
从维基百科转储生成word2vec模型
您可以在这里下载我们2019年1月的英文维基百科垃圾站:
wget http://129.194.21.122/~kabbach/enwiki.20190120.7z
如果要生成一个全新的转储(每行标记一个句子) 关于维基百科,对于英语或任何其他语言,请查看WiToKit。
一旦有了Wikipedia TXT转储文件,就可以通过:
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模型via:
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
运行代码
通过n2v test
命令,对嵌合体数据集的定义运行nonce2vec。您可以传入--reload
参数以one-shot
模式运行,没有它,默认情况下代码以增量模型运行。在运行n2v之前,您可以进一步传入--shuffle
参数来洗牌测试集。
您将在下面找到与SRW 2019论文中报告的实验相对应的命令列表。例如,要测试sum cwi模型(一个基于上下文单词信息过滤的基本sum模型),该模型在增量设置中为所有数据集提供相当健壮的基线,请运行,对于定义数据集:
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模型,使用shuffling和in 一次性评估设置(提供SOTA性能),do:
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