从微小数据生成单词嵌入的python模块

nonce2vec的Python项目详细描述


GitHub releasePyPI releaseBuildMIT License

非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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用(BluetoothGattCharacteristic)特性中的数据创建、写入和保存csv文件。getValue()   java如何使用groupBy创建一个值为BigDecimal字段平均值的映射?   日期时间Java将iso_即时格式的字符串转换为日期   java如何检索和显示Android firebase的配置文件?   scala AWSJAVASDK:解压缩大小必须小于262144000字节   要应用于列表的java JSTL if条件   java在3个点之间画一个正方形   Kotlin java抽象类IllegaAccessError   java原语双值相等取决于大小?   java有没有一种方法可以对数据集使用compareTo()方法,而不必遍历数据集的每个元素?   java为什么我发送的每个UDP消息都会改变端口源?   重新选择文件时swing Java JTree冻结   java不知道我的游戏是怎么回事   Motif L&F中自定义组合框渲染器中的Java Swing消失文本   java Trade Me API访问前的OAuth