关于我之前关于使用 python 从头开始训练 Word2Vec 模型的问题的额外问题

问题描述 投票:0回答:1

我之前的问题

我确实从这段代码中完成了 word2vec 模型的训练,但我还有一些问题。

首先,我想知道函数generate_training_data是否正确制作了训练数据,因为如果我打印出用名为“preprocess”的函数制作的“语料库”,我会发现语料库是由单个单词组成的,而不是由用 。在我看来,我认为语料库应该具有由几个句子组成的形状 .

我的第二个问题是如何确定我的模型是否经过正确训练?即使使用 word_sim 函数找出 top_n 相似的单词,我也不知道这是一个好的答案,因为我的训练数据(alice_in_wonderland.txt)太大了。

最后,训练的窗口大小应该有多大?我设置为2,但是训练模型后似乎太小了

python nlp word2vec word-embedding
1个回答
0
投票

典型的 word2vec 实现适用于训练数据,该数据是一系列单独的项目,其中每个项目本身就是一个多字文本。

例如,通常要训练数百万个句子,其中每个句子只有几十个单词。或者,数百万个段落,每个段落有数十到数百个单词。或者,很多文章,每篇文章有数百到数千字。

如果您生成的训练数据只是一个巨大的单词列表,那么这是不典型的。如果这是您的训练逻辑所期望的,它可能仍然有效。是吗?

鉴于存在许多其他高性能、经过良好调试和优化的 word2vc 实现,检查您的实现是否正确的一种实用方法是将其结果(在相同参数和数据上进行训练后)与以下结果进行比较:一个完善的替代实现。

请注意,算法中使用的固有随机性,加上其他不影响正确性的任意实现选择,意味着没有两次运行会将单词放置在完全相同的位置,因此任何检查不应该期望达到这种程度的一致性.

相反,正确应用具有相同参数和数据的算法应该会产生最终的词向量排列,在典型的评估中“大约同样有用”。也就是说,如果一个已建立的实现给出了单词 'apple' 的前 10 个最近邻/最相似列表,这对您来说是有意义的,那么您的实现会返回一个非常相似、大约有用的列表(但是成员资格或排名不一定相同)

'apple'
的 10 个最近邻居列表,那么您的实现很有可能正在做大致正确的事情。
如果您的前 10 名成员毫无意义,或者成员截然不同/典型的相似之处,那么您的实现中可能存在问题。

window

的通常默认值是 5。但是,如果有足够的训练数据,即使是

2
(或
1
)也可以给出有意义的结果,只是侧重点略有不同。 (在一些已发表的作品中,据观察,较小的窗口倾向于确保与其他单词完全词性插入的单词主导相似性邻域,而较大的窗口允许相似性也反映更广泛的“使用中”相同域”。)
为了便于针对其他实现进行评估,您可能应该倾向于使用与其他实现相同的默认参数,回到 Google 研究人员的原始 

word2vec.c

代码。

(例如,在另一个问题中,您提到使用

0.1

的起始学习率“alpha”。大多数其他实现使用

0.025
或偶尔使用
0.05
。当然有一个
机会
0.1在某些条件下,效果很好,甚至更好。但是,如果只是学习,并且想要匹配先前的结果,则应仔细选择与平常的偏差,
建立理解/信心的基线之后——不要随机采用未说明的结果原因。)

© www.soinside.com 2019 - 2024. All rights reserved.