fastText的输入格式是什么,为什么我的模型没有给我有意义的相似输出?

问题描述

我的目标是在单词和文档之间找到相似之处。例如,我想查找“新”和文档之间的相似性,为简单起见,说“ Hello World!”。

我使用了gensim的word2vec,但问题是它找不到未见到的单词的相似性。因此,我尝试使用gensim中的fastText,因为它可以找到词汇量之外的单词的相似性。

以下是我的文档数据示例:

[['This','is','the','only','rule','of','our','household'],['If','you','feel','a','presence','standing','over','while','sleep','do'],['NOT','open','your','eyes'],['Ignore','it','and','try','to','fall','asleep'],['This','may','sound','bit','like','show','Bird','Box','from','Netflix']]

我只是像这样训练数据:

from gensim.models.fasttext import FastText

model = FastText(sentences_cleaned)

因此,我想查找“规则”与本文档之间的相似之处。

model.wv.most_similar("rule")

但是,fastText给了我这个:

[('the',0.1334390938282013),('they',0.12790171802043915),('in',0.12731242179870605),('not',0.12656228244304657),('and',0.11071767657995224),('of',0.08563747256994247),('I',0.06609072536230087),('that',0.05195673555135727),('The',0.002402491867542267),('my',-0.009009800851345062)]

显然,由于“ rule”一词出现在文档的第一句中,因此必须具有“ rule”作为最相似之处。我也尝试过词干/词根化,但这也不起作用。

我的输入格式正确吗?我已经看到很多文档都使用.cor或.bin格式,但我不知道这些是什么。

感谢您的回复

解决方法

model.wv.most_similar('rule')要求该模型的词向量集(.wv)返回与'rule'最相似的词。也就是说,您既没有提供任何文档(多个单词)作为查询,也没有提供FastText模型返回文档本身或任何文档名称的方式。只是言语而已。

虽然FastText在文本(单词列表)上训练,但仅对单词/子单词进行建模。因此,目前尚不清楚您的期望是什么:答案是否正确。

那些看起来不太像'rule'的单词,但是如果您使用大量不同的数据训练它们,那么FastText(以及类似的word2vec算法)只会得到好的结果显示了相关单词的许多微妙的现实用法。

您的sentences_cleaned数据中有多少个文本,有多少个单词? ('rule'和相关词有多少用途?)

在任何真实的FastText / Word2Vec / etc模型中,使用足够的数据/参数进行训练,没有一个句子(如您的第一个句子)可以告诉您有关结果“应该”如何的信息。那只是从完整的丰富数据集中出现的。