У модели мешка слов есть множество недостатков, особенно в применении к задачам обработки естественного языка, которые могут быть устранены алгоритмами ранжирования графов, такими как TextRank. TextRank может включать информацию о последовательности слов. Пакет слов просто относится к матрице, в которой строки являются документами, а столбцы - словами. Значения, соответствующие документу со словом в матрице, могут быть количеством вхождений слова в документе или использовать tf-idf. Затем матрица пакетов слов передается в алгоритм машинного обучения. Используя подсчет слов или tf-idf, мы можем идентифицировать только ключевые термины из одного слова в документе. В этом сообщении в блоге я опишу алгоритм TextRank, который может определять фразы из нескольких слов и резюмировать текст. Также будет представлена ​​библиотека PyTextRank.

Алгоритм TextRank был представлен в 2004 году Радой Михалча и Полом Тарау. TextRank - это алгоритм ранжирования графа - это просто означает, что узлы в графе могут быть оценены с использованием информации из глобального графа. Хорошо известный алгоритм ранжирования графов - это рейтинг страницы Google. В контексте текста слова - это узлы / вершины, и совпадение слов вместе образует связь / отношения между словами (то есть ребро). Михалча и Тарау вводят алгоритм ранжирования вершин, который учитывает веса ребер. TextRank можно использовать для извлечения ключевых слов и обобщения текста.

Извлечение многословных фраз

Краткое описание процесса извлечения ключевых слов с помощью TextRank:

  1. Слова токенизируются и аннотируются тегами частей речи.
  2. Слова добавляются к графу как вершины (но сначала фильтруются в зависимости от того, являются ли они существительными или прилагательными)
  3. Между словами, которые встречаются в пределах N слов друг от друга, добавляется ребро.
  4. Алгоритм ранжирования вершин TextRank выполняется до сходимости
  5. Вершины ранжируются по их количеству очков, а первые T выбираются в качестве ключевых слов.
  6. Если вершины в верхних T ключевых словах появляются как смежные вершины в графе, они группируются вместе, чтобы сформировать выражение / фразу из нескольких слов.

Извлечение предложений для обобщения

Краткое описание процесса извлечения предложения с использованием TextRank:

  1. Каждое предложение добавляется как вершина в графе.
  2. Сочетаемость предложений не может использоваться как отношение между двумя предложениями. Предложения не повторяются в тексте! Вместо этого вычисляется сходство между предложениями (то есть с использованием перекрытия слов) и используется в качестве веса края в статье Михалчи и Тарау. Коэффициент нормализации используется для наказания более длинных предложений. Следует отметить, что здесь может использоваться любая мера сходства - PyTextRank использует расстояние Жаккара.
  3. Алгоритм ранжирования вершин TextRank выполняется до сходимости
  4. Предложения (то есть вершины) ранжируются по их баллам, и верхняя буква 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 можно использовать для обобщения результатов тематической модели. А пока развлекайтесь с алгоритмами….