Обнаружение синонимов из набора документов с использованием LSA-преобразования в Ruby - PullRequest
3 голосов
/ 29 марта 2011

После применения преобразования LSA к массиву документов, как это можно использовать для генерации синонимов?Например, у меня есть следующие образцы документов:

D1 = Мобилизация
D2 = Светоотражающий тротуар
D3 = Обслуживание движения
D4 = Специальный объезд
D5 = Коммерческие материалы для подъездной дороги

            D1    D2    D3    D4    D5    
commerci[ +0.00 +0.00 +0.00 +0.00 +1.00 ]  
  materi[ +0.00 +0.00 +0.00 +0.00 +1.00 ]  
drivewai[ +0.00 +0.00 +0.00 +0.00 +1.00 ]  
 special[ +0.00 +0.00 +0.00 +1.00 +0.00 ]  
  detour[ +0.00 +0.00 +0.00 +1.00 +0.00 ]  
 mainten[ +0.00 +0.00 +1.00 +0.00 +0.00 ]  
 traffic[ +0.00 +0.00 +1.00 +0.00 +0.00 ]  
 reflect[ +0.00 +1.00 +0.00 +0.00 +0.00 ]  
pavement[ +0.00 +1.00 +0.00 +0.00 +0.00 ]  
  mobil [ +1.00 +0.00 +0.00 +0.00 +0.00 ]  

Применение преобразования TFIDF

            D1    D2    D3    D4    D5  
commerci[ +0.00 +0.00 +0.00 +0.00 +0.54 ]  
  materi[ +0.00 +0.00 +0.00 +0.00 +0.54 ]  
drivewai[ +0.00 +0.00 +0.00 +0.00 +0.54 ]  
 special[ +0.00 +0.00 +0.00 +0.80 +0.00 ]  
  detour[ +0.00 +0.00 +0.00 +0.80 +0.00 ]  
 mainten[ +0.00 +0.00 +0.80 +0.00 +0.00 ]  
 traffic[ +0.00 +0.00 +0.80 +0.00 +0.00 ]  
 reflect[ +0.00 +0.80 +0.00 +0.00 +0.00 ]  
pavement[ +0.00 +0.80 +0.00 +0.00 +0.00 ]  
  mobil [ +1.61 +0.00 +0.00 +0.00 +0.00 ]  

Применение преобразования LSA

            D1    D2    D3    D4    D5  
commerci[ +0.00 +0.00 +0.00 +0.00 +0.00 ]  
  materi[ +0.00 +0.00 +0.00 +0.00 +0.00 ]  
drivewai[ +0.00 +0.00 +0.00 +0.00 +0.00 ]  
 special[ +0.00 +0.00 +0.00 +0.80 +0.00 ]  
  detour[ +0.00 +0.00 +0.00 +0.80 +0.00 ]  
 mainten[ +0.00 +0.00 +0.80 +0.00 +0.00 ]  
 traffic[ +0.00 +0.00 +0.80 +0.00 +0.00 ]  
 reflect[ +0.00 +0.80 +0.00 +0.00 +0.00 ]  
pavement[ +0.00 +0.80 +0.00 +0.00 +0.00 ]  
  mobil [ +1.61 +0.00 +0.00 +0.00 +0.00 ]  

1 Ответ

3 голосов
/ 07 ноября 2011

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

Чтобы понять, как LSA полезен для распознавания синонимов, вам нужно сначала понять, как представление векторного пространства (первая полученная там матрица) вхождений слов полезно в первую очередь для распознавания синонимов. Это потому, что вы можете вычислить расстояние между двумя элементами в этом векторном пространстве высокой размерности как меру их сходства (учитывая, что это мера того, как часто они встречаются вместе). Магия АЛП заключается в том, что она переставляет размеры векторного пространства, так что элементы, которые не встречаются вместе, но встречаются в одинаковых контекстах, объединяются в результате сходства одинаковых измерений друг с другом.

Идея весовой функции TFIDF состоит в том, чтобы выделить различия между документами, придав более высокие значения весам для слов, которые появляются больше в меньшем подмножестве корпуса, и меньшие веса для слов, которые используются повсеместно. Более подробное объяснение.

Преобразование "LSA" на самом деле представляет собой разложение по сингулярному значению (SVD) - обычно скрытый семантический анализ или скрытое семантическое индексирование относится к комбинации TFIDF с SVD - и оно служит для уменьшения размерности векторного пространства или в другом словами, это уменьшает количество столбцов в более краткое и более краткое описание (как описано выше).

Итак, чтобы получить суть вашего вопроса: вы можете сказать, насколько похожи слова, применив функцию расстояния к двум соответствующим векторам (строкам). Существует несколько функций расстояния, из которых наиболее часто используемым является косинусное расстояние (которое измеряет угол между двумя векторами).

Надеюсь, это прояснит ситуацию.

...