Давайте поговорим о людях, местах, вещах, ценностях, локациях и многом другом. Мы, люди, легко идентифицируем эти атрибуты, когда читаем статьи или участвуем в наших ежедневных разговорах. Наш мозг автоматически выдает все типы информации, даже если мы не пытаемся. Например, допустим, я выбрасываю имя Снуп Догг. Бьюсь об заклад, ваш мозг уже придумал массу действительно забавных ассоциаций. Некоторые могут включать:

  • Человек: Снуп Догг
  • Местоположение: Калифорния (западное побережье)

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

В области обработки естественного языка перед нами стоит задача обработки как структурированных, так и неструктурированных данных. Один из шагов включает в себя классификацию именованных объектов по соответствующим предопределенным категориям. Мы говорим о таких категориях, как имя, время, события, местоположение, компания и т. д. Этот процесс связан как с распознаванием, так и с классификацией. В НЛП распознавание именованных объектов живет в своей семантической сфере. В сфере смысла и отношений. Важно также помнить, что при изучении языковой модели есть место для интерпретации и двусмысленности. Иногда это приводит к проблемам с классификацией. При этом все зависит от того, какие обучающие данные вы используете для извлечения и классификации сущностей. Если вы хотите расшифровать сообщения Reddit, возможно, не используйте старые английские сонеты в качестве обучающих данных.

Beautiful Soup и Stanza NLP

Чтобы проиллюстрировать это далее, давайте обработаем некоторые данные не что иное, как мое любимое шоу RuPaul’s Drag Race. Я собираюсь использовать Python, Beautiful Soup и библиотеку Stanza NLP для выполнения задачи распознавания именованных объектов. После того, как я собрал данные с веб-сайта Википедия, я использовал NERProcessor в библиотеке Stanza NLP, чтобы получить свои помеченные сущности. Соблюдайте приведенный ниже код.

from bs4 import BeautifulSoup
import requests
import stanza

myLangModel= stanza.Pipeline(lang='en',processors='tokenize,ner')
url = "https://en.wikipedia.org/wiki/List_of_Drag_Race_contestants"
result = requests.get(url)
soup = BeautifulSoup(result.text, 'lxml')
mySoup = soup.find('p')
stanzaSoup = myLangModel(mySoup)
print(*[f'entity: {ent.text} type: {ent.type}' for ent in stanzaSoup.ents], sep='\n')

Пример некоторых результатов, которые мы получаем:

entity: RuPaul's Drag Race      type: WORK_OF_ART
entity: RuPaul  type: PERSON
entity: America type: GPE
entity: Next Top Model  type: WORK_OF_ART

И вуаля! У нас есть точная маркировка наших сущностей. Наши результаты показывают, что классификатор в нашей модели добавил теги категорий, такие как PERSON, WORK_OF_ART и GPE (географическое физическое местоположение), к найденным объектам.

Краткое резюме

В этой статье мы выполнили распознавание именованных объектов или NER с библиотекой Stanza NLP. Это дало нам отличные результаты с точными метками тегов. Если вам понравился этот краткий урок, подписывайтесь на меня, Z. Myricks, чтобы получить больше руководств по всем вопросам Python и обработки естественного языка. Не забудьте подписаться на Простое простое программное обеспечение для получения дополнительных статей о программном обеспечении!