Я работаю с графиком, который я извлек из длинной статьи. Направленный взвешенный граф, который на самом деле является не чем иным, как словарем, содержит заголовочные слова в виде вершин, которые связаны через ребра с каждым словом (хвостовыми словами), которое следует за этим словом в статье. Таким образом, если слово «желтый» встречается в статье 3 раза, а за ним следуют слова «кирпич», «кирпич» и «подводная лодка», то «желтая» запись будет представлена следующим образом на графике:
{"yellow": ["brick", "brick", "submarine"]}
Этот график был создан с использованием класса python, который я написал под названием ExtractedGraph
, который помимо метода __init__
, который выполняет работу по генерации графа, имеет метод getProb(self, head_word, tail_word)
, который принимает в качестве входных данных ключевое слово и хвостовое слово и выводит вероятность того, что ключевое слово будет следовать за хвостовым словом, которое является весом ребра, соединяющего узел главного слова и узел конечного слова. Итак, если мы введем «желтый» и «кирпичный», результат будет 2/3.
Мой вопрос заключается в том, как можно выполнить поиск луча на этом графике, чтобы найти предложение с максимальным баллом. В частности, что, если входными данными для функции поиска луча была строка prefix_words
, beam_width
int и sen_length
int (максимальная длина слова предложения). Как будет выглядеть алгоритм? После прочтения об алгоритме Beam Search в Интернете и просмотра многочисленных учебных пособий я не уверен, как будет работать функция Beam Search в этом конкретном сценарии c.