词嵌入训练

我有一个用于词嵌入的语料库。使用这个语料库,我训练了我的词嵌入。然而,每次我训练词嵌入时,结果都相当不同(这些结果是基于K最近邻(KNN)的)。例如,在第一次训练中,’计算机‘的最近邻词是’笔记本电脑‘、’计算机化‘、’硬件‘。但在第二次训练中,这些KNN词变成了’软件‘、’机器‘…(’笔记本电脑’排名较低!) – 所有训练都是独立进行的,进行了20个周期,超参数都相同。

我想让我的词嵌入训练结果非常相似(例如,’笔记本电脑’排名较高)。我应该怎么做?我应该调整超参数(学习率、初始化等)吗?


回答:

你没有说明你使用的是哪种word2vec软件,这可能会影响相关因素。

word2vec算法本质上使用了随机性,包括初始化和训练的多个方面(如使用负采样的负例选择,或对高频词的随机下采样)。此外,如果你进行多线程训练,操作系统线程调度中的本质随机抖动会改变训练示例的顺序,引入另一个随机性来源。因此,即使使用完全相同的参数和语料库,你也不应该期望后续运行会给出相同的结果。

尽管如此,如果有足够多的好数据、合适的参数和适当的训练循环,相对邻居的结果应该在每次运行中相当相似。如果不是这样,更多的数据或更多的迭代可能会有所帮助。

如果模型过大(维度/词汇量过多)对于你的语料库来说,可能会导致过拟合。也就是说,它通过基本上记住数据的特异性来找到一个很好的配置,而没有达到任何泛化能力。如果这种过拟合是可能的,通常会有许多同样好的这种记忆 – 因此它们在每次运行中可能会非常不同。同时,适当大小的模型和大量数据会捕捉到真正的普遍性,这些在每次运行中会更加一致,尽管有任何随机化。

获取更多数据、使用更小的向量、进行更多的训练轮次,或者提高保留/训练一个词的最小词频计数都可能有所帮助。(非常低频的词无法获得高质量的向量,因此只会干扰其他词的质量,然后随机闯入最相似的列表中。)

为了了解可能还存在什么问题,你应该在问题中澄清以下内容:

  • 使用的软件
  • 使用的模式/元参数
  • 语料库大小,示例数量,平均示例大小(以词为单位),以及唯一词汇计数(在原始语料库中,以及应用最小计数后)
  • 预处理方法
  • 用于训练的代码(如果你自己管理多个训练轮次)

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注