我想知道是否有任何科学解释为什么像 CBOW 这样的 word2vec 模型在小数据上表现不佳。这是我测试过的;
data=[[context1], [context2], [context3]......[contextn]]
model=trained word2vec model
model.most_similar('word')
output=[word not in even in top-10]
Run Code Online (Sandbox Code Playgroud)
我用 10 倍的数据集重新训练了模型。
model.most_similar(word)
output=[word in the 10 most similar words]
Run Code Online (Sandbox Code Playgroud)
随着数据大小的增加,除了字数随着数据的增加而增加之外,还有什么科学的理由可以解释性能的提高吗?
单词在随机位置开始进行 word2vec 训练,如果 Word2Vec 看到许多有指导性的示例,并且逐渐在所有训练中将这些单词推到相似的位置,则它只能“推断”出一对单词是相似的。它只能排列许多、许多单词,以便在获得许多、许多、许多不同的示例并因此有许多、许多、许多机会逐步将它们全部推向更好的位置的情况下,同时维持所有这些成对的相似性。
\n\n如果您有一个很小的数据集:
\n\n(1) 可能没有或很少有希望相似的单词位于相似的邻近单词上下文中的示例。由于没有共享附近单词的示例,因此几乎没有基础将这对推到同一位置 \xe2\x80\x93 预测附近单词的内部 Word2Vec 任务不需要它们靠近彼此,如果他们每个人都预测完全不同的单词。但即使有几个例子,也存在问题,比如......
\n\n(2) 单词需要从原来的随机位置移动很多,才能最终到达从成功的 word2vec 会话中获得的有用“星座”。如果某个单词仅在数据集中出现 10 次,并且您对数据集进行 10 次迭代训练,则该单词仅获得 100 次 CBOW 微调。相反,如果该单词出现 1000 次,则 10 次训练迭代会为其提供 10,000 次 CBOW 更新 \xe2\x80\x93 ,从而有更好的机会从最初的任意位置移动到有用的位置。因此,有时您可以您可以通过增加训练迭代次数从较小的数据集中获得稍微更好的结果。这在某种程度上模拟了更大的语料库。但在这些重复的上下文中仍然没有真正的变化,所以你仍然遇到......
\n\n(3) 较小的数据集和较大的模型(大量“自由参数”,例如每个上下文单词和预测目标单词的独立坐标)会导致“过度拟合”。也就是说,他们可以真正擅长训练任务,本质上是通过“记住”数据的特性,而不是实现通常希望能够将结果应用于新颖的压缩/泛化。不同的数据。例如,在一个很小的语料库中,有很多内部参数,也许“快乐”和“狂喜”不需要彼此靠近——它们的上下文只有一点点重叠,而且有很多模型内部的“空间”将它们放置在完全不同的位置,但仍然可以很好地预测它们的相邻单词。有时,您可以通过缩小模型来压缩任何可能的泛化能力,例如size,当数据集很小时,使向量参数变得更小。然后它仍然被迫利用任何存在的(少数)上下文相似性。
但 Word2Vec 的本质是使用批量数据和批量训练来强制发现可泛化的模式 \xe2\x80\x93 因此,将小语料库扩展到几乎无法工作的东西的技巧并没有利用它,以最强的方式。
\n| 归档时间: |
|
| 查看次数: |
1096 次 |
| 最近记录: |