Подтвердить что ты не робот

Измерение семантического сходства между двумя фразами

Я хочу измерить семантическое сходство между двумя фразами/предложениями. Есть ли какая-либо инфраструктура, которую я могу использовать напрямую и надежно?

Я уже проверил этот вопрос, но его довольно старый, и я не нашел реального полезного ответа там. Было одна ссылка, но я нашел это ненадежным.

например.:
У меня есть фраза: сотрясенный У меня есть несколько вариантов: сила внутрь, измельчение, разрушение эмоционально, перестройка и т.д.
Я хочу найти термин/фразу с самым высоким сходством с первым.
Ответ здесь: разрушенный эмоционально.

Чем больше картинка: я хочу определить, какой кадр из FrameNet соответствует указанному глаголу в соответствии с его использованием в предложении.

Обновление: я нашел эту библиотеку, очень полезную для измерения сходства между двумя словами. Также очень похож на механизм сходства ConceptNet.

и эта библиотека для измерения семантической подобия между предложениями

Если у кого есть какие-либо идеи, пожалуйста, поделитесь.

4b9b3361

Ответ 1

Это очень сложная проблема.

Основной метод, который я могу придумать (прежде чем входить в более сложные процессы НЛП), - это применить косинус (или любую другую метрическую) подобие каждой пары фраз. Очевидно, что это решение было бы очень неэффективным на данный момент из-за проблемы несогласования: предложения могут ссылаться на одну и ту же концепцию с разными словами.

Чтобы решить эту проблему, вы должны преобразовать начальное представление каждой фразы с более "концептуальным" значением. Одним из вариантов было бы расширить каждое слово с помощью его синонимов (т.е. Используя WordNet, другой вариант - применить метрики, такие как семантика распределения DS (http://liawww.epfl.ch/Publications/Archive/Besanconetal2001.pdf), которые расширяют представление каждого слова с более вероятными словами, чтобы появиться с ним.

Пример: Представление документа: { "car", "race" } будет преобразовано в { "автомобиль" , "автомобиль" , "расы" } с синонимами. Хотя с DS это было бы что-то вроде: { "автомобиль" , "колесо", "дорога", "пилот",...}

Очевидно, что это преобразование не будет бинарным. Каждый член будет иметь некоторые связанные веса.

Надеюсь, это поможет.

Ответ 2

Возможно, cortical.io API может помочь с вашей проблемой. Подход здесь состоит в том, что каждое слово преобразуется в семантический отпечаток пальца, который характеризует его смысл с помощью семантических функций 16K. Фразы, предложения или более длинные тексты преобразуются в отпечатки пальцев путем ORing отпечатков пальцев вместе. После этого преобразования в (числовое) двоичное векторное представление семантическое расстояние можно легко вычислить с помощью дистанционных мер, таких как евклидово расстояние или косинус-подобие. Все необходимые функции преобразования и сравнения предоставляются с помощью api.