Gensim:word2vec模型的质量似乎和训练中的迭代次数无关

2024-09-30 18:24:39 发布

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

我在玩gensim的wordvec,并尝试使用大型医学同义词库中的术语作为句子来构建一个模型。大约有100万个术语(我把大多数多词术语当作句子处理),希望是,如果{}看到像“乳腺癌”和“乳腺肿瘤”等术语,它将能够得出“癌症”和“肿瘤”有些相似的结论。在

我做了一些实验,在这些实验中,当使用不同数量的迭代时,我跟踪类似的术语有多相似,但结果似乎并不相关。我认为当考虑词对时,比如(伤口,病变),(胸部,肺),(癌症,肿瘤)等,当从5到100次迭代时,会有一种趋势(即使很小),随着迭代次数的增加,一对中的一个词与另一个词“更相似”。但不,结果看起来很随机,甚至越来越糟。在

具体地说:我用1,5,10,20,50100次迭代循环,训练一个w2v模型,然后对于上面的单词对,检查第一个单词(比如“thorax”)的相似单词列表中第二个单词(比如“lung”)的排名(如w2v返回的单词),然后求和并构建平均值。平均排名在增长(!)不减少,这意味着随着训练的进行,“肺”和“胸”的载体会越来越远离对方。在

我没想到gensim能检测出干净的同义词,也许“只有”100万个词(句子)是不够的,但我仍然对这种效果感到困惑。在

有人怀疑吗?在

=======================================================

在收到评论和反馈后添加:

谢谢你的详细反馈,戈乔莫。我以前检查过很多问题:

  • 是的,同义词库术语(“句子”)格式正确,例如[乳腺癌',“癌症”]

  • 是的,在~1mio术语中,超过850.000是多字的。很明显,一个单词的术语不会提供任何上下文。但多词术语应该有充分的证据

  • 我举的例子(‘诊所’、‘癌症’、‘肺癌’、…)出现在数百个术语中,通常有数千个。这是我觉得奇怪的一点:即使是对于单词这种频繁出现的非常好的类似单词的建议。

  • 您需要代码:这里是https://www.dropbox.com/s/fo3fazl6frj99ut/w2vexperiment.py?dl=0,它希望被称为(python3),其中有模型的名称,然后是Snomed等大型同义词库的SKOS-XML文件

    python w2vexperiment.pysnomed-w2v.型号SKOS/*.SKOS

  • 我在代码中看到,我用每个新实验创建一个新模型(迭代次数不同),这样就不会有一次运行污染另一次运行的影响(错误的学习率等)

  • 我已将min_count设置为10

不过:随着迭代次数的增加,模型不会变得更好,但往往会变得更糟。即使是更好的(5或10次迭代)也会给我测试词带来奇怪的结果。。。在


Tags: 代码模型skos单词次数句子术语癌症
1条回答
网友
1楼 · 发布于 2024-09-30 18:24:39

我怀疑你的语料库准备或训练有问题——通常word2vec可以很好地对这些相似性进行排名。在

您是单独提供术语(例如['breast, 'tumor']或{}作为非常小的句子),还是将术语加上定义/同义词作为一些较长的句子?在

后者会更好。在

如果是前者,那么1个单词的‘句子’一无所获:word2vec没有相邻的‘上下文’来学习任何东西,它们基本上被跳过了。在

仅仅两个词的句子可能会收到一些效果,但不一定提供有助于训练的不同语境来诱导有用的向量排列。在

另外,如果它是100万个句子,每个句子只有1-4个单词,那么这是一个小的数据集,单个单词可能出现的频率可能不够高,在稍微不同的上下文中,它们无法获得好的向量。您应该在model.wv.vocabdict中检查感兴趣的单词/标记,以获得一个count值,该值表示有足够的示例来诱导一个好的向量-理想情况下,每次出现10+次(而且越多越好)。在

所以:更多的数据,以及来自相关领域的更多不同的用法,总是一个好主意。在每个“句子”中有同义词的同义词词库(5到几十个)就足够了。在

你不显示你的代码或训练参数,但人们调整默认值,或遵循过时的在线示例,往往会破坏算法的有效性。在

例如,人们在自己的迭代循环中多次调用train()来管理学习率alpha的情况非常普遍,以至于有些迭代的alpha值为负,这意味着每一次反向传播都将上下文向量推向目标词的可预测性,与应该发生的事情完全相反。(最好在Word2Vec初始化时提供语料库iter调用train()一次。只有高级修补程序才需要多次调用train()。)

同样地,虽然天真的直觉往往是“保持更多的单词/信息必须更好”,因此人们将min_count降低到1或0,但这样的低频单词并不能仅出现1次(或几个)就得到好的向量,但由于它们数量非常多(总共),它们会干扰其他单词的有意义训练。(当低频词被丢弃时,幸存的、更频繁的单词得到更好的向量。)

祝你好运!在

相关问题 更多 >