Семантический анализ текстов на 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()передаю вектор описания уязвимости
Подскажите, как можно улучшить мое решение, чтобы находились более подходящие угрозы? Возможно, стоит как-то это реализовать на основе ключевых слов?