Как использовать НЛП для разделения неструктурированного текстового содержимого на отдельные абзацы?

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

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

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

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


person user193116    schedule 13.07.2010    source источник


Ответы (3)


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

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

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

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. Общая стоимость плана сегментации документа представляет собой совокупность всех затрат на объединение предложений. Чтобы получить окончательную сегментацию, вы выбираете план с наименьшей совокупной стоимостью.

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

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

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

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

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

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

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

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

person benjismith    schedule 13.07.2010

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

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

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

person Tommy Herbert    schedule 20.07.2010