2016-04-22 3 views
0

предположит, что вы имеете два пользователя с наборами атрибутов, как так:Jaccard сходства по всем наборам с синонимами

userA = {"happy", "excited"} 
userB = {"sad", "anxious"} 

Теперь, если мы должны были вычислить Jaccard подобия этого, было бы 0. Тем не менее, мы хотим чтобы определить, что excited очень похож на anxious.

Вопрос в том, как это можно структурировать?

Могу ли я определить другой набор слов, которые являются синонимами для excited? Как я тогда буду учитывать это в вычислении индекса Jaccard?

ответ

0

Я предлагаю создавать кластеры синонимов с использованием своего рода тезауруса. Каждое слово будет принадлежать не более чем одному кластеру.
Для каждого кластера выберите «канонический» представитель.
Теперь, когда вам нужно вычислить сходство Jaccard, замените каждое слово представителем из его кластера. Затем продолжайте, как обычно.

Пример кластеров (представители, выделенные жирным шрифтом):
1. Хорошо, большой, отличный, позитивный, ценный
2. Bad, бедный, грустный, ужасный

Допустим, вы хотите, чтобы вычислить сходство двух пользователей:
Пользователь = { "положительный"}
USERB = { "хорошо"}

Затем преобразовать их в
USERA '= { "хороший"} (так как "хорошо" является представителем кластера, что "положительное" принадлежит)
UserB' = { "хороший"}

Сходство = 1/1 = 1.

0

Вы не можете делать это со словами, так как они могут быть неоднозначными, но если вы смогли получить то, что WordNet называет «смысловыми чувствами», вы можете сопоставить это с синтезами, которые кодируют все синонимы, которые имеют смысловое значение которые совпадают.

См, например, этот пример Python NLTK для разрешения лексической многозначности: http://www.nltk.org/howto/wsd.html

кластеризация на synset ID даст желаемый результат (при условии, что anxious и excited на самом деле, по крайней мере, один синонимический смысл слова в базу данных, которую вы используете для устранения неоднозначности).

Смежные вопросы