Gensim sort_by_descending_frequency 更改 most_similar 结果
Gensim sort_by_descending_frequency changes most_similar results
似乎在检索最相似的词向量时,按词频排序会改变Gensim
中的结果。
排序前:
from gensim.models import FastText
from gensim.test.utils import common_texts # some example sentences
print(len(common_texts))
model = FastText(vector_size=4, window=3, min_count=1) # instantiate
model.build_vocab(corpus_iterable=common_texts)
model.train(corpus_iterable=common_texts, total_examples=len(common_texts), epochs=1)
model.wv.most_similar(positive=["human"])
[('interface', 0.7432922720909119),
('minors', 0.6719315052032471),
('time', 0.3513716757297516),
('computer', 0.05815044790506363),
('response', -0.11714297533035278),
('graph', -0.15643596649169922),
('eps', -0.2679084539413452),
('survey', -0.34035828709602356),
('trees', -0.63677978515625),
('user', -0.6500451564788818)]
但是,如果我按频率降序对向量进行排序:
model.wv.sort_by_descending_frequency()
model.wv.most_similar(positive=["human"])
[('minors', 0.9638221263885498),
('time', 0.6335864067077637),
('interface', 0.40014874935150146),
('computer', 0.03224882856011391),
('response', -0.14850640296936035),
('graph', -0.2249641716480255),
('survey', -0.26847705245018005),
('user', -0.45202943682670593),
('eps', -0.497650682926178),
('trees', -0.6367797255516052)]
最相似词排名以及词相似度发生变化。知道为什么吗?
更新:
调用排序前:
model.wv.index_to_key
['system',
'graph',
'trees',
'user',
'minors',
'eps',
'time',
'response',
'survey',
'computer',
'interface',
'human']
model.wv.expandos['count']
array([4, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2])
调用排序后:
model.wv.index_to_key
['system',
'user',
'trees',
'graph',
'human',
'interface',
'computer',
'survey',
'response',
'time',
'eps',
'minors']
model.wv.expandos['count']
array([4, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2])
报告的相似性发生变化肯定不应该发生,所以这里肯定出了问题。 (也许,缓存的子词信息没有重新排序。)
还要注意:
- 该方法并不是特别适合在 培训后使用 - 事实上,如果以这种方式使用它,您应该会看到一条警告消息。
- 在词汇发现阶段结束时,所有 2Vec 算法中默认[=21=]应该已经发生这种排序——这是通常的行为,很少关闭。所以再次请求最多应该是空操作。
要深入了解可能出了什么问题,您能否编辑您的问题以显示两者的值……
model.wv.index_to_key
model.wv.expandos['count']
…在 之前和 在 . sort_by_descending_frequency()
调用之后?
似乎在检索最相似的词向量时,按词频排序会改变Gensim
中的结果。
排序前:
from gensim.models import FastText
from gensim.test.utils import common_texts # some example sentences
print(len(common_texts))
model = FastText(vector_size=4, window=3, min_count=1) # instantiate
model.build_vocab(corpus_iterable=common_texts)
model.train(corpus_iterable=common_texts, total_examples=len(common_texts), epochs=1)
model.wv.most_similar(positive=["human"])
[('interface', 0.7432922720909119), ('minors', 0.6719315052032471), ('time', 0.3513716757297516), ('computer', 0.05815044790506363), ('response', -0.11714297533035278), ('graph', -0.15643596649169922), ('eps', -0.2679084539413452), ('survey', -0.34035828709602356), ('trees', -0.63677978515625), ('user', -0.6500451564788818)]
但是,如果我按频率降序对向量进行排序:
model.wv.sort_by_descending_frequency()
model.wv.most_similar(positive=["human"])
[('minors', 0.9638221263885498), ('time', 0.6335864067077637), ('interface', 0.40014874935150146), ('computer', 0.03224882856011391), ('response', -0.14850640296936035), ('graph', -0.2249641716480255), ('survey', -0.26847705245018005), ('user', -0.45202943682670593), ('eps', -0.497650682926178), ('trees', -0.6367797255516052)]
最相似词排名以及词相似度发生变化。知道为什么吗?
更新:
调用排序前:
model.wv.index_to_key
['system', 'graph', 'trees', 'user', 'minors', 'eps', 'time', 'response', 'survey', 'computer', 'interface', 'human']
model.wv.expandos['count']
array([4, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2])
调用排序后:
model.wv.index_to_key
['system', 'user', 'trees', 'graph', 'human', 'interface', 'computer', 'survey', 'response', 'time', 'eps', 'minors']
model.wv.expandos['count']
array([4, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2])
报告的相似性发生变化肯定不应该发生,所以这里肯定出了问题。 (也许,缓存的子词信息没有重新排序。)
还要注意:
- 该方法并不是特别适合在 培训后使用 - 事实上,如果以这种方式使用它,您应该会看到一条警告消息。
- 在词汇发现阶段结束时,所有 2Vec 算法中默认[=21=]应该已经发生这种排序——这是通常的行为,很少关闭。所以再次请求最多应该是空操作。
要深入了解可能出了什么问题,您能否编辑您的问题以显示两者的值……
model.wv.index_to_key
model.wv.expandos['count']
…在 之前和 在 . sort_by_descending_frequency()
调用之后?