странное сходство приводит к просторности - PullRequest
0 голосов
/ 28 апреля 2018

Я играю с функцией подобия в Spacy и заметил кое-что, чего я не понимаю:

import spacy
nlp = spacy.load('en_core_web_sm')  
doc1 = nlp("Honda Civic Toyota")
doc2 = nlp("Honda Civic Toyota car Christian God")

for token in doc1:
    print (token.text, doc1[0].similarity(token))
for token in doc2:
    print (token.text, doc2[0].similarity(token))

Выход:

Honda 1.0
Civic 0.6631208
Toyota 0.4700994
Honda 1.0
Civic 0.6806056
Toyota 0.54713947
car 0.22469836
Christian 0.5016042
God 0.4778438

Слово Honda сравнивается со всеми другими словами в doc1 и doc2, и можно заметить, что при сравнении Honda с Civic и Toyota сходство отличается в doc1 и doc2. Насколько я понимаю, сходство вычисляется из консиного сходства вектора слов Glove, который загружается из 'en_core_web_sm'. Если это так, не должно ли сходство между одной и той же парой слов быть одинаковым независимо от контекста?

Я думаю, что я что-то неправильно понимаю, был бы признателен, если бы кто-то мог прояснить это.

1 Ответ

0 голосов
/ 29 апреля 2018

Как уже упоминалось в Векторы слов и семантическое сходство Док:

Сходство определяется путем сравнения векторов слов или «вложений слов», многомерных смысловых представлений слова. Чтобы сделать их компактными и быстрыми, маленькие модели spaCy (все пакеты, которые конец в см) не поставляются с векторами слов, а включают только контекстно-зависимые тензоры. Это означает, что вы все еще можете использовать similarity() методы для сравнения документов, диапазонов и токенов - но результат не будет таким хорошим, а отдельные токены не будут иметь векторов так что для использования векторов реальных слов вам необходимо скачать большую модель

поэтому маленькие модели не используют векторы слов для сходства.

...