Семантический анализ текстов на python

Есть задача: по описанию уязвимости из БДУ ФСТЭК найти подходящие под нее угрозы из той же БДУ. Проблема в том, что до этого мне никогда не приходилось сталкиваться с анализом текстов, поэтому я не знаю как правильно это сделать.

Текущее мое решение работает довольно плохо. Пример результата (здесь топ-5 совпадений):

Уязвимость BDU:2022-07078. "Уязвимость веб-интерфейса управления программного обеспечения администрирования сети Cisco Firepower Management Center (FMC), позволяющая нарушителю осуществлять межсайтовые сценарные атаки"
Угрозы:
УБИ.73 "Угроза несанкционированного доступа к активному и (или) пассивному виртуальному и (или) физическому сетевому оборудованию из физической и (или) виртуальной сети" (score: 0.6584200263023376)
УБИ.192 "Угроза использования уязвимых версий программного обеспечения" (score: 0.6501390337944031)
УБИ.122 "Угроза повышения привилегий" (score: 0.6488211750984192)
УБИ.188 "Угроза подмены программного обеспечения" (score: 0.6458202600479126)
УБИ.98 "Угроза обнаружения открытых портов и идентификации привязанных к ним сетевых служб" (score: 0.645233690738678)

Алгоритм следующий:

  • собираю из БДУ описания всех угроз и уязвимостей
  • каждое описание разбиваю на отдельные слова, привожу к нижнему регистру, привожу к начальной форме, исключаю стоп-слова
  • использую Doc2Vec, модель обучаю на описаниях угроз
  • потом в model.dv.most_similar() передаю вектор описания уязвимости

Подскажите, как можно улучшить мое решение, чтобы находились более подходящие угрозы? Возможно, стоит как-то это реализовать на основе ключевых слов?


Ответы (0 шт):