Как использовать НЛП для разделения неструктурированного текстового контента на отдельные абзацы? - PullRequest
11 голосов
/ 13 июля 2010

Следующий неструктурированный текст имеет три разные темы - Сталлоне, Филадельфия и Американская революция. Но какой алгоритм или технику вы бы использовали, чтобы разделить этот контент на отдельные абзацы?

Классификаторы не будут работать в этой ситуации. Я также попытался использовать анализатор сходства Jaccard, чтобы найти расстояние между последовательными предложениями, и попытался сгруппировать последовательные предложения в один абзац, если расстояние между ними было меньше заданного значения. Есть ли лучший метод?

Это мой текстовый образец:

Сильвестр Гарденцио Сталлоне по прозвищу Хитрый Сталлоне - американский актер, режиссер и сценарист. Сталлоне известен своими мужественными и голливудскими боевыми ролями. Фильм Сталлоне «Рокки» был включен в Национальный реестр фильмов, а его кинематографический реквизит помещен в Смитсоновский музей. Использование Сталлоне парадного входа в Музей искусств Филадельфии в серии «Рокки» привело к тому, что этот район получил прозвище «Скалистые ступени». Коммерческий, образовательный и культурный центр, Филадельфия когда-то был вторым по величине городом Британской империи (после Лондона). ), а также социально-географический центр первых 13 американских колоний. Это был центральный элемент ранней американской истории, принимающей многие идеи и действия, которые породили американскую революцию и независимость. Американская революция была политическим переворотом во второй половине 18-го века, в который вошли тринадцать колоний в Северной Америке вместе вырваться из Британской империи, объединившись в Соединенные Штаты Америки. Сначала они отвергли полномочия парламента Великобритании управлять ими из-за рубежа без представительства, а затем изгнали всех королевских чиновников. К 1774 году в каждой колонии был создан Провинциальный конгресс или аналогичное правительственное учреждение для формирования отдельных самоуправляющихся штатов.

Ответы [ 3 ]

15 голосов
/ 13 июля 2010

Так что я долгое время работал в НЛП, и это действительно сложная проблема, которую вы пытаетесь решить. Вы никогда не сможете реализовать решение со 100% точностью, поэтому вам следует заранее решить, лучше ли принимать ложно-отрицательные решения (не удается найти точку сегментации абзаца) или ложно-положительные решения (вставляя ложную сегментацию точки). Как только вы это сделаете, соберите совокупность документов и аннотируйте истинные точки сегментации, которые вы ожидаете найти.

После того, как вы это сделаете, вам понадобится механизм для нахождения точек EOS (конец предложения). Затем между каждой парой предложений вам нужно принять двоичное решение: нужно ли вставлять границу абзаца?

Вы можете измерить сплоченность понятий в каждом абзаце на основе разных точек сегментации. Например, в документе с пятью предложениями (ABCDE) существует 16 различных способов его сегментирования:

ABCDE   ABCD|E   ABC|DE   ABC|D|E   AB|CDE   AB|CD|E   AB|C|DE   AB|C|D|E
A|BCDE  A|BCD|E  A|BC|DE  A|BC|D|E  A|B|CDE  A|B|CD|E  A|B|C|DE  A|B|C|D|E

Чтобы измерить сплоченность, вы можете использовать метрику подобия между предложениями (основанную на некотором наборе признаков, извлеченных для каждого предложения). Для простоты, если два смежных предложения имеют показатель сходства 0,95, то для объединения их в один и тот же абзац стоит 0,05 «стоимости». Общая стоимость плана сегментации документа представляет собой совокупность всех затрат на объединение предложений. Чтобы получить окончательную сегментацию, вы выбираете план с наименьшей совокупной стоимостью.

Конечно, для документа с более чем несколькими предложениями существует слишком много различных возможных перестановок сегментации, чтобы методом грубой силы оценить все их затраты. Так что вам понадобится некоторая эвристика для руководства процессом. Динамическое программирование может быть полезным здесь.

Что касается фактического извлечения функции предложения ... ну, вот где это действительно сложно.

Вы, вероятно, хотите игнорировать высокосинтаксические слова (соединительные слова, такие как предлоги, союзы, глаголы помощи и маркеры предложений) и основывать свое сходство на более семантически значимых словах (существительных и глаголах и, в меньшей степени, прилагательных и наречиях) .

Наивная реализация может просто подсчитать количество экземпляров каждого слова и сравнить количество слов в одном предложении с количеством слов в соседнем предложении. Если важное слово (например, «Филадельфия») встречается в двух смежных предложениях, тогда они могут получить высокую оценку сходства.

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

Таким образом, вам необходимо оценить «смысл» каждого слова (его конкретное значение, учитывая окружающий контекст) и обобщить это значение, чтобы охватить более широкую область.

Например, изображение предложения со словом «зеленоватый» в нем. Во время процесса извлечения признаков я бы, конечно, включил точное лексическое значение («зеленоватый»), но также применил бы морфологическое преобразование, нормализуя слово к его корневой форме («зеленый»). Затем я посмотрел бы это слово в таксономии и обнаружил, что это цвет, который может быть далее обобщен как визуальный дескриптор. Таким образом, основываясь на этом одном слове, я мог бы добавить четыре различных свойства к моей коллекции предложений («зеленоватый», «зеленый», «[цвет]», «[визуальный]»). Если бы следующее предложение в документе снова ссылалось на цвет «зеленый», то эти два предложения были бы очень похожи. Если бы в следующем предложении использовалось слово «красный», то они все равно имели бы степень сходства, но в меньшей степени.

Итак, есть несколько основных идей. Вы могли бы развить их до бесконечности и настроить алгоритм для эффективной работы с вашим конкретным набором данных. Существует миллион различных способов решения этой проблемы, но я надеюсь, что некоторые из этих советов помогут вам начать работу.

1 голос
/ 13 июля 2010

Я не знаю много об этом, так что этот ответ - заглушка для лучшего.Тем не менее, две точки

  1. Одним из названий этой проблемы является определение темы, а http://research.microsoft.com/en-us/um/people/cyl/download/papers/thesis97.pdf является часто цитируемой статьей в этой области.
  2. Это, вероятно, очень сложно.Я бы не отделил Филадельфию от американской революции, если бы ты мне не сказал.
0 голосов
/ 20 июля 2010

Для этого примера лучший способ - найти точки остановки, за которыми не следует пробел!

...