Разбор языка для поиска важных слов

9

Я ищу некоторый вклад и теорию о том, как подходить к лексической теме.

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

Давайте посмотрим на несколько примеров того, что я имею в виду.

Пример № 1:

«Я действительно хочу Кейрига, но я не могу себе его позволить!»

Это очень простой пример, всего одно предложение. Как человек, я легко вижу, что «Keurig» является самым важным словом здесь. Кроме того, «позволить» является относительно важным, хотя это явно не основной пункт предложения. Слово «я» появляется дважды, но оно совсем не важно, поскольку на самом деле оно не сообщает нам никакой информации. Я мог бы ожидать увидеть хэш слова / оценки примерно так:

"Keurig" => 0.9
"afford" => 0.4
"want"   => 0.2
"really" => 0.1
etc...

Пример № 2:

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

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

Приведя пару таких примеров, как бы вы поступили так же? Существуют ли какие-либо (с открытым исходным кодом) библиотеки или алгоритмы в программировании, которые уже делают это?

Мэтт Хаггинс
источник
Кроме того, это мой первый пост на programmers.stackexchange.com. Извините, если это неправильное место и принадлежит на StackOverflow или другом сайте SE. Рад переместить вопрос, если это необходимо.
Мэтт Хаггинс
Я не понимаю из вопроса, что вы пытаетесь достичь. В частности, для первого примера слова «Keurig» и «позволить» можно идентифицировать с помощью простой статистической проверки: среди слов предложения эти два слова встречаются в английском языке реже, чем другие. Так что, если бы у вас была база данных частот слов, вы могли бы легко идентифицировать эти слова.
Qwertie

Ответы:

5

Определенно есть люди, которые думают о проблеме, которую вы описываете. Ранжирование Жоао Вентуры и Жоаким Феррейра да Силва и выделение соответствующих отдельных слов в тексте (pdf) - хорошее введение в существующие методы ранжирования, а также предложения по улучшению. Все техники, которые они описывают, опираются на корпус (много текста) против одной или двух строк текста. Ваш корпус должен представлять собой коллекцию всех образцов или, возможно, множество корпусов собранных образцов из определенных источников. Имейте в виду, что релевантность одного слова (униграммы) является в значительной степени нерешенной проблемой. Как написано в статье:

«... используя чисто статистические методы, этот вид классификации не всегда прост или даже точен, потому что, хотя понятие релевантности является концепцией, которую легко понять, обычно нет единого мнения о границе, которая отделяет релевантность от неактуальности. Например, такие слова, как «Республика» или «Лондон», имеют значительную релевантность, а такие слова, как «или» и «с тех пор», вообще не имеют никакого значения, но как насчет таких слов, как «прочитать», «прекратить» и «следующий»? слов проблематичны, потому что обычно нет единого мнения об их семантической ценности ".

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

Я наиболее знаком с Natural Language Toolkit (NLTK) . Он прост в использовании, хорошо документирован и описан в книге « Обработка естественного языка с Python» (свободно доступна в Интернете). В качестве простого примера того, что NLTK может сделать для вас, представьте, что вы используете его метку части речи . Определив часть речи каждого слова, вы можете считать собственные имена очень важными, а прилагательные - менее важными. Глаголы могут быть важны, а наречия менее важны. Это ни в коем случае не самый современный рейтинг, но вы получаете полезную информацию без особых усилий. Когда вы будете готовы перейти к более сложному анализу, встроенная в NLTK возможность маркировать, маркировать, разбивать на блоки и классифицировать позволит вам сосредоточиться на других деталях вашего решения.

Корбин Март
источник
1

Обработка естественного языка - это отдельная дисциплина, в которой достаточно много формальных исследований. Я бы начал с поиска там.

Я также пересмотрю свои потребности. Даже после 50 с лишним лет исследований лучшим компьютерным ученым удалось придумать Сири. Я не ожидал бы, что компьютер успешно сделает то, о чем вы говорите, с регулярностью.

Если в речи есть определенные ограничения (например, если Сири предполагает, что у вас простая команда или вопрос), это может быть лучше. Пересмотр моих потребностей (при условии, что мне нужен НЛП) будет включать определение моих ограничений. После этого я, вероятно, буду охотиться за кучей примеров. Частично, чтобы проверить все, что я придумаю, но многие современные решения включают машинное обучение. Мне нужны эти примеры в качестве входных данных для кривой обучения.

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

Telastyn
источник
+1 за Сири копать ... или продвижение ...
Аарон Макивер