Gensim sort_by_descending_frequency изменяет наиболее похожие результаты

#python #nlp #gensim #word2vec #fasttext

Вопрос:

Похоже, что при извлечении наиболее похожих векторов слов сортировка по частоте слов изменит результаты 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']
 

массив([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']
 

массив([4, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2])

Ответ №1:

Это изменение сообщенного сходства определенно не должно произойти, так что здесь что-то определенно идет не так. (Возможно, информация о кэшированных подсловах не подвергается повторной сортировке.)

Но также обратите внимание:

  • Этот метод не был специально предназначен для использования после тренировки — действительно, вы должны видеть предупреждающее сообщение, если используете его таким образом.
  • Такая сортировка уже должна происходить по умолчанию во всех алгоритмах 2Vec в конце фазы обнаружения вокала-это обычное поведение, которое редко отключается. Так что повторный запрос в лучшем случае должен быть отказом.

Чтобы разобраться в том, что может быть неправильно, вы можете отредактировать свой вопрос, чтобы показать значения обоих…

  • model.wv.index_to_key
  • model.wv.expandos['count']

…до и после . sort_by_descending_frequency() звонка?

Комментарии:

1. Спасибо @gojomo. Я обновил свой вопрос.

2. Спасибо! Обновление указывает, что повторная сортировка не является «стабильной» -слова, которые были связаны и в определенном порядке, могут находиться в другом порядке после повторной сортировки. Это может быть частью проблемы для вас, но изменение значений sim-карты для пар слов, безусловно, также является какой-то другой ошибкой. Тем не менее, на данный момент обходной путь таков: не делайте этот ненужный звонок. Ваши слова уже отсортированы по частоте. Я также добавлю несколько комментариев по поводу связанной с Github ошибки: github.com/RaRe-Technologies/gensim/issues/3196