2015-07-20 8 views
3

Я хотел знать разницу между двумя мерами сходства gensim word2vec: most_similar() и most_similar_cosmul(). Я знаю, что первый работает с использованием косинусной подобия словесных векторов, в то время как другой использует использование мультипликативной цели комбинации, предложенной Омером Леви и Йоавом Голдбергом. Я хочу знать, как это влияет на результаты? Что дает семантическое сходство? и т.д. Например:Gensim Word2vec: Semantic сходство

model = Word2Vec(sentences, size=100, window=5, min_count=5, workers=4) 
model.most_similar(positive=['woman', 'king'], negative=['man'])    

Результат: [('Королева', 0,50882536), ...]

model.most_similar_cosmul(positive=['baghdad', 'england'], negative=['london']) 

Результат: [(u'iraq», 0,8488819003105164), ...]

ответ

7

из статьи Леви и Goldberg, если вы пытаетесь найти аналогии (или объединения/сравнения более 2-х векторов слов), первый метод (3CosAdd или eq.3 бумаги) является более восприимчивым того, чтобы быть во власти на 1 сравнение, по сравнению со вторым методом (3CosMul или eq.4).

Для смыслового сходства между векторами из 2 слов этот метод не применяется.

Пример, используя Google News Vectors -

model.similarity('Mosul','England') 
0.10051745730111421 

model.similarity('Iraq','England') 
0.14772211471143404 

model.similarity('Mosul','Baghdad') 
0.83855779792754492 

model.similarity('Iraq','Baghdad') 
0.67975755642668911 

Теперь Ирак ближе к Англии, чем Мосул (оба страны), однако значения подобия малы ~ 0,1.

С другой стороны Мосул больше похож на Багдад, чем Ирак (географические/культурные аспекты), со значениями подобия высшего порядка ~ 0,7

Теперь, для аналогии (Англия - Лондон + Багдадский = X) -

3CosAdd - линейная сумма, позволяющая одному большому схожему выражению доминировать над выражением. Он игнорирует, что каждый термин отражает другой аспект сходства, и различные аспекты имеют разные масштабы.

3CosMul, с другой стороны, усиливает различия между небольшими количествами и уменьшает различия между более крупными.

model.most_similar(positive=['Baghdad', 'England'], negative=['London']) 
(u'Mosul', 0.5630180835723877) 
(u'Iraq', 0.5184929370880127) 

model.most_similar_cosmul(positive=['Baghdad', 'England'], negative=['London']) 
(u'Mosul', 0.8537653088569641) 
(u'Iraq', 0.8507866263389587)