Общий подход для извлечения ключевого текста из предложения (nlp)

27

Дано предложение вроде:

Complimentary gym access for two for the length of stay ($12 value per person per day)

Какой общий подход я могу использовать для определения слова спортзал или доступ в спортзал?

Уильям Сокол
источник
Посмотрите на Термина и документы, связанные с проектом: nactem.ac.uk/software/termine
MrMeritology

Ответы:

30

Малая N atural л anguage Р rocessing техника может быть использована для извлечения концепции из предложения.

-------------------------------------------

Неглубокие этапы техники НЛП:

1) преобразовать предложение в нижний регистр

2) Удалите стоп-слова (это общие слова, встречающиеся в языке. Такие слова, как for, very, и, of, are и т. Д., Являются общими стоп-словами)

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

4) Назначьте синтаксическую метку (существительное, глагол и т. Д.)

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

-------------------------------------------

Давайте рассмотрим результаты применения вышеуказанных шагов к вашему предложению Complimentary gym access for two for the length of stay ($12 value per person per day).

1-грамм. Результаты: тренажерный зал, доступ, продолжительность, пребывание, ценность, человек, день

Summary of step 1 through 4 of shallow NLP:

1-gram          PoS_Tag   Stopword (Yes/No)?    PoS Tag Description
-------------------------------------------------------------------    
Complimentary   NNP                             Proper noun, singular
gym             NN                              Noun, singular or mass
access          NN                              Noun, singular or mass
for             IN         Yes                  Preposition or subordinating conjunction
two             CD                              Cardinal number
for             IN         Yes                  Preposition or subordinating conjunction
the             DT         Yes                  Determiner
length          NN                              Noun, singular or mass
of              IN         Yes                  Preposition or subordinating conjunction
stay            NN                              Noun, singular or mass
($12            CD                              Cardinal number
value           NN                              Noun, singular or mass
per             IN                              Preposition or subordinating conjunction
person          NN                              Noun, singular or mass
per             IN                              Preposition or subordinating conjunction
day)            NN                              Noun, singular or mass

Step 4: Retaining only the Noun/Verbs we end up with gym, access, length, stay, value, person, day

Позволяет увеличить n, чтобы сохранить больше контекста и удалить стоп-слова.

2-граммовые результаты: бесплатный тренажерный зал, посещение тренажерного зала, длительность пребывания, стоимость проживания

Summary of step 1 through 4 of shallow NLP:

2-gram              Pos Tag
---------------------------
access two          NN CD
complimentary gym   NNP NN
gym access          NN NN
length stay         NN NN
per day             IN NN
per person          IN NN
person per          NN IN
stay value          NN NN
two length          CD NN
value per           NN IN

Step 5: Retaining only the Noun/Verb combination we end up with complimentary gym, gym access, length stay, stay value

Результаты 3 грамма: бесплатный доступ в тренажерный зал, длительность пребывания, человек в день

Summary of step 1 through 4 of shallow NLP:

3-gram                      Pos Tag
-------------------------------------
access two length           NN CD NN
complimentary gym access    NNP NN NN
gym access two              NN NN CD
length stay value           NN NN NN
per person per              IN NN IN
person per day              NN IN NN
stay value per              NN NN IN
two length stay             CD NN NN
value per person            NN IN NN


Step 5: Retaining only the Noun/Verb combination we end up with complimentary gym access, length stay value, person per day

То, что нужно запомнить:

  • Обратитесь к банку дерева Penn, чтобы понять описание тега PoS https://www.ling.upenn.edu/courses/Fall_2003/ling001/penn_treebank_pos.html
  • В зависимости от ваших данных и бизнес-контекста вы можете выбрать значение n, чтобы извлечь n-грамм из предложения
  • Добавление стоп-слов для конкретного домена повысит качество извлечения концепции / темы
  • Техника Deep NLP даст лучшие результаты, т. Е. Вместо n-граммы, обнаружит отношения в предложениях и представит / выразит как сложную конструкцию для сохранения контекста. Для получения дополнительной информации, пожалуйста, обратитесь /stats//a/133680/66708

Инструменты:

Вы можете рассмотреть возможность использования OpenNLP / StanfordNLP для тегов части речи. Большинство языков программирования имеют вспомогательную библиотеку для OpenNLP / StanfordNLP. Вы можете выбрать язык в зависимости от вашего комфорта. Ниже приведен пример кода R, который я использовал для маркировки PoS.

Пример кода R:

Sys.setenv(JAVA_HOME='C:\\Program Files\\Java\\jre7') # for 32-bit version
library(rJava)
require("openNLP")
require("NLP")

s <- paste("Complimentary gym access for two for the length of stay $12 value per person per day")

tagPOS <-  function(x, ...) {
  s <- as.String(x)
    word_token_annotator <- Maxent_Word_Token_Annotator()
    a2 <- Annotation(1L, "sentence", 1L, nchar(s))
    a2 <- annotate(s, word_token_annotator, a2)
    a3 <- annotate(s, Maxent_POS_Tag_Annotator(), a2)
    a3w <- a3[a3$type == "word"]
    POStags <- unlist(lapply(a3w$features, `[[`, "POS"))
    POStagged <- paste(sprintf("%s/%s", s[a3w], POStags), collapse = " ")
    list(POStagged = POStagged, POStags = POStags)
  }

  tagged_str <-  tagPOS(s)
  tagged_str

#$POStagged
#[1] "Complimentary/NNP gym/NN access/NN for/IN two/CD for/IN the/DT length/NN of/IN stay/NN $/$ 12/CD value/NN per/IN     person/NN per/IN day/NN"
#
#$POStags
#[1] "NNP" "NN"  "NN"  "IN"  "CD"  "IN"  "DT"  "NN"  "IN"  "NN"  "$"   "CD" 
#[13] "NN"  "IN"  "NN"  "IN"  "NN" 

Дополнительные чтения по Shallow & Deep NLP:

  • Обработка мелкой и глубокой НЛП для обучения онтологии: краткий обзор Нажмите здесь

  • Интеграция Shallow и Deep NLP для извлечения информации Нажмите здесь

Манохар Сваминатан
источник
Отличный ответ (+1). Только одно предложение: если возможно, предоставьте литературу или, по крайней мере, общие ссылки на технику поверхностного НЛП, которую вы упомянули.
Александр Блех
1
Огромное спасибо. Два вопроса, могу ли я сделать это с помощью nltk? Могу ли я использовать tf-idf, чтобы сделать то же самое, а затем взять самые уникальные слова (самые высокие баллы) в качестве моих ключевых слов?
Уильям Сокол
@ Александр Блех, спасибо. Я добавил дополнительные ссылки для чтения, чтобы узнать больше о мелкой и глубокой НЛП. Надеюсь, это поможет
Manohar Swamynathan
@ Уильям Сокол, спасибо. 1) Да, вы можете использовать nltk. 2) Безусловно, можно использовать TF-IDF, если вы пытаетесь найти концепцию или тему на уровне документа (ов).
Манохар Сваминатан
3

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

Что касается доступных программных инструментов для реализации вышеупомянутого подхода и выше, я бы предложил рассмотреть либо программное обеспечение NLTK (если вы предпочитаете Python), либо программное обеспечение StanfordNLP (если вы предпочитаете Java). Для многих других платформ NLP, библиотек и поддержки программирования на разных языках, смотрите соответствующие разделы (NLP) в этом превосходном списке .

Александр Блех
источник
0

Если вы пользователь R, есть много полезной практической информации на http://www.rdatamining.com . Посмотрите на их примеры добычи текста.
Кроме того, взгляните на пакет ТМ.
Это также хороший сайт агрегации - http://www.tapor.ca/

Майкл Кокс
источник
Ссылки не считаются правильными ответами на этом сайте. Пожалуйста, ответьте на оригинальный вопрос в своем посте и используйте ссылки, чтобы дополнить свой ответ.
Шелдонкрегер