Python:下采样令牌或下采样word2vec模型

2024-04-26 06:51:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要一些关于下采样问题的帮助。我必须制作一个更大的语料库(665440个句子,19592258个标记)来与一个更小的语料库(15607个句子,927711个标记)相比较,以便在两个可比较的word2vec模型上实现它们。 每个语料库都是一个列表列表,其中每个列表都是一个标记化句子: e、 g.[['the', 'boy', 'eats']['the', 'teacher', 'explains']...]

我希望对最大的一个进行下采样,使其具有与较小的一个相同数量的标记(保持原始数据结构:对句子进行下采样,直到获得指定数量的标记)。我是一名编程新手,我想到了两种可能的方法,但我不确定如何实现它们: -对列表列表进行下采样 -对经过训练的word2vec模型进行下采样(我在论坛上看到有参数“sample”可以对最频繁的单词进行下采样,但我想得到随机的句子)

你能帮我吗

非常感谢!!:)


Tags: the标记模型列表数量原始数据编程word2vec
1条回答
网友
1楼 · 发布于 2024-04-26 06:51:13

让我们明确指出您提到的一些事情:

语料库-A665440个句子,19592258个标记(每个句子2.9个标记)

语料库B15607个句子,927711个标记(每个句子60个标记)

我会马上观察到,语料库-A句子的平均大小很小,这表明它们可能不是那种自然语言,不像word2vec通常所针对的词。而且,这种简短的句子可能不会产生这种训练中最典型的window大小的上下文。(无论您选择window,窗口都会非常小。请注意,一个带有单个标记的句子不能进行任何训练,这是不可操作的。)

因此,在过程结束时,语料库A的任何缩放/采样(其句子为aaround 3标记)都不会像语料库B(其更典型的句子为数十到数百个标记)。他们不会真的相似,除非在一些你选择的单一测量目标

如果事实上您有足够的内存在RAM中完全操作语料库-A,那么使用标准Python函数选择15607个句子的随机子集-以匹配语料库-B的句子数非常简单:

import random
corpus_a_subset = random.sample(corpus_a, len(corpus_b))

当然,这个特殊的corpus_a_subset只会匹配语料库b中的句子数量,但事实上,考虑到语料库A句子的平均大小要短得多,原始单词的数量要小得多,大约47k个标记长

如果您的目标是大约927k的标记长度子集,以匹配语料库-B标记计数,那么您需要大约(927k/3=)309000个句子:

corpus_a_subset = random.sample(corpus_a, 309000)

尽管如此,虽然这应该使corpus_a_subsetcorpus_b的原始单词数非常匹配,但就唯一标记、标记的相对频率,甚至训练上下文的总数而言,它仍然可能是一个非常不同的语料库——因为句子较短的上下文通常会受到句子结尾的限制,而不是完整的window-长度。(尽管底线标记计数相似,但训练时间可能会明显不同,特别是当window较大时。)

如果您的主要兴趣只是能够像较小的语料库一样快速地在语料库-A子集上进行训练,那么除了舍弃许多句子来精简它之外,还有其他方法:

  • sample参数增加了随机跳过频繁出现的单词的速率。在典型的子夫式词频中,常见词在所有可能的不同用法中出现了很多次,因此可以安全地忽略其中许多多余的词。此外,通过允许相对更多地关注较稀有的单词,丢弃许多过度的示例,通常可以提高最终单词向量的总体有用性。特别是在非常大的语料库中,选择一个更具攻击性(更小的)sample值可以丢弃大量语料库,加快训练速度,但仍然可以得到更好的向量

  • 提高min_count参数会丢弃更多不太频繁的单词。与任何“数据越多越好”的直觉相反,这通常会提高幸存单词向量的有用性。这是因为只有几个用法示例的单词往往不会得到很好的向量——这些示例不会显示其多样性&;需要的代表性——然而如此多罕见但缺乏充分证明的词语的流行仍然妨碍了其他词语的训练

只要还有足够多的更频繁和重要的单词的例子,针对大型语料库的samplemin_count的攻击性设置可能会将有效大小减少90%或更多,并且仍然会为剩余的单词创建高质量的向量

但也要注意:两者都不是of你的小体相当大,最适合word2vec训练。它从大而多样的细胞中获益匪浅。特别是,与大量的word2vec工作相比,您的语料库-B非常小,虽然您可以通过更多的训练时间,使用更小的向量或更小的幸存词汇,在一定程度上“扩展”语料库的影响,但您仍然可能低于word2vec最有效的语料库大小。因此,如果可能的话,我会寻找方法来增加语料库-B,而不是缩小语料库-A

相关问题 更多 >