У модели мешка слов есть множество недостатков, особенно в применении к задачам обработки естественного языка, которые могут быть устранены алгоритмами ранжирования графов, такими как TextRank. TextRank может включать информацию о последовательности слов. Пакет слов просто относится к матрице, в которой строки являются документами, а столбцы - словами. Значения, соответствующие документу со словом в матрице, могут быть количеством вхождений слова в документе или использовать tf-idf. Затем матрица пакетов слов передается в алгоритм машинного обучения. Используя подсчет слов или tf-idf, мы можем идентифицировать только ключевые термины из одного слова в документе. В этом сообщении в блоге я опишу алгоритм TextRank, который может определять фразы из нескольких слов и резюмировать текст. Также будет представлена библиотека PyTextRank.
Алгоритм TextRank был представлен в 2004 году Радой Михалча и Полом Тарау. TextRank - это алгоритм ранжирования графа - это просто означает, что узлы в графе могут быть оценены с использованием информации из глобального графа. Хорошо известный алгоритм ранжирования графов - это рейтинг страницы Google. В контексте текста слова - это узлы / вершины, и совпадение слов вместе образует связь / отношения между словами (то есть ребро). Михалча и Тарау вводят алгоритм ранжирования вершин, который учитывает веса ребер. TextRank можно использовать для извлечения ключевых слов и обобщения текста.
Извлечение многословных фраз
Краткое описание процесса извлечения ключевых слов с помощью TextRank:
- Слова токенизируются и аннотируются тегами частей речи.
- Слова добавляются к графу как вершины (но сначала фильтруются в зависимости от того, являются ли они существительными или прилагательными)
- Между словами, которые встречаются в пределах N слов друг от друга, добавляется ребро.
- Алгоритм ранжирования вершин TextRank выполняется до сходимости
- Вершины ранжируются по их количеству очков, а первые T выбираются в качестве ключевых слов.
- Если вершины в верхних T ключевых словах появляются как смежные вершины в графе, они группируются вместе, чтобы сформировать выражение / фразу из нескольких слов.
Извлечение предложений для обобщения
Краткое описание процесса извлечения предложения с использованием TextRank:
- Каждое предложение добавляется как вершина в графе.
- Сочетаемость предложений не может использоваться как отношение между двумя предложениями. Предложения не повторяются в тексте! Вместо этого вычисляется сходство между предложениями (то есть с использованием перекрытия слов) и используется в качестве веса края в статье Михалчи и Тарау. Коэффициент нормализации используется для наказания более длинных предложений. Следует отметить, что здесь может использоваться любая мера сходства - PyTextRank использует расстояние Жаккара.
- Алгоритм ранжирования вершин TextRank выполняется до сходимости
- Предложения (то есть вершины) ранжируются по их баллам, и верхняя буква T может использоваться для обобщения текста.
Глубокий анализ TextRank
PyTextRank - отличная библиотека, но если вы хотите немного углубиться в TextRank и научиться его программировать, я рекомендую начать с более простой реализации. У NLP для хакеров есть сообщение в блоге на TextRank, в котором используются только Numpy и NLTK - ранжирование на графике реализовано в чистом Numpy.
Использование PyTextRank
Приятно понимать, как работает TextRank. Однако нам не нужно реализовывать алгоритм, особенно если вы используете Python. PyTextRank - потрясающая надежная библиотека Python, которая использует spaCy, datasketch и NetworkX. PyTextRank даже используется O’Reilly Media в производстве.
PyTextRank включает Блокнот Jupyter, который предоставляет пошаговые инструкции для загрузки файла json, содержащего текст, и отображения результатов работы алгоритма TextRank.
Пример 1
Это пример абзаца, который используется большинством алгоритмов поиска многословных выражений:
«Совместимость систем линейных ограничений над множеством натуральных чисел. Рассмотрены критерии совместимости системы линейных диофантовых уравнений, строгих неравенств и нестрогих неравенств. Приводятся верхние оценки компонент минимального набора решений и алгоритмы построения минимальных порождающих множеств решений для всех типов систем. Эти критерии и соответствующие алгоритмы построения минимального поддерживающего множества решений могут быть использованы при решении всех рассмотренных типов систем и систем смешанного типа ».
Извлеченное многословное выражение, созданное PyTextRank:
- [«Системы типов», 0,09189173098990264, [24, 2], «np», 1]
- [«Минимальный набор», 0,07308266940796514, [19, 5], «np», 1]
- [«Строгие неравенства», 0,05343195271225413, [11, 12], «нп», 1]
- [«Смешанные типы», 0,04594586549495132, [33, 24], «np», 1]
- [«Натуральные числа», 0,036876246384868736, [6, 7], «np», 1]
- [«Минимальные генераторные установки», 0,03654133470398257, [19, 23, 5], «np», 1]
- [«Линейные ограничения», 0,03206715477373365, [3, 4], «np», 1]
- [«Линейные диофантовы уравнения», 0,028873346046550823, [3, 9, 10], «np», 1]
- [«Нестрогие неравенства», 0,026715976356127064, [13, 12], «np», 1]
2 лучших оцененных итоговых предложения:
«Совместимость систем линейных ограничений над множеством натуральных чисел. Рассмотрены критерии совместности системы линейных диофантовых уравнений, строгих неравенств и нестрогих неравенств ».
Пример 2
В примере 2 TextRank запускается в первом абзаце этого сообщения в блоге. TextRank хорошо справляется с ключевыми словами, но пропускает «набор слов», потому что используются только существительные и прилагательные. Два верхних предложения - это первые два предложения абзаца, которые, как мне кажется, дают хорошее резюме.
Извлеченное многословное выражение, созданное PyTextRank:
- [«Модель слов», 0,09609026248373426, [37, 38], «нп», 1]
- [«Алгоритм textrank», 0,0634849444362508, [66, 21], «np», 1]
- [«Информация о последовательности слов», 0,04804513124186713, [37, 56, 57], «np», 1]
- [«Матрица слов», 0,03930697477654861, [37, 44], «np», 1]
- [«Задачи обработки естественного языка», 0,027496394401730084, [6, 40, 41, 42], «np», 1]
- [«Ключевые термины, состоящие из одного слова», 0,026189952086614007, [60, 61, 37, 62], «np», 1]
- [«Вхождения слова», 0,025826320912548863, [37, 51], «np», 1]
- [«Многочисленные недостатки», 0,023471643384109276, [34, 35], «нп», 1]
- [«Фразы из нескольких слов», 0,018348338660060273, [67, 68], «np», 1]
- [«Сообщение в блоге», 0,011574105593003477, [63, 64], «np», 1]
2 лучших оцененных итоговых предложения:
«У модели мешка слов есть множество слабых мест, особенно когда она применяется к задачам обработки естественного языка, которые могут решить алгоритмы ранжирования графов, такие как TextRank. TextRank может включать информацию о последовательности слов ».
В одном из будущих постов блога я покажу, как TextRank можно использовать для обобщения результатов тематической модели. А пока развлекайтесь с алгоритмами….