Освоение моделей сущностей: практическое руководство по улучшению обработки естественного языка

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

  1. Распознавание именованных объектов (NER):
    Одним из фундаментальных методов моделирования объектов является распознавание именованных объектов (NER). Цель NER — идентифицировать и классифицировать именованные объекты, такие как имена людей, местоположения, организации, даты и т. д. Давайте посмотрим на фрагмент кода Python с использованием популярной библиотеки spaCy:
import spacy
nlp = spacy.load("en_core_web_sm")
text = "Apple Inc. is planning to open a new store in New York City."
doc = nlp(text)
for ent in doc.ents:
    print(ent.text, ent.label_)

Выход:

Apple Inc. ORG
New York City GPE
  1. Извлечение отношений.
    Модели сущностей также можно использовать для извлечения связей между сущностями в тексте. Например, учитывая предложение «Барак Обама родился в Гонолулу», мы можем извлечь связь «родился_в(Барак Обама, Гонолулу)». Вот пример кода с использованием библиотеки OpenNRE:
from opennre import SentenceRE
model = SentenceRE("wiki80_bertentity_softmax")
text = "Barack Obama was born in Honolulu."
result = model.infer({'text': text})
print(result)

Выход:

[('Barack Obama', 'born_in', 'Honolulu')]
  1. Разрешение корреляций.
    Разрешение корреляций направлено на идентификацию всех выражений в тексте, которые относятся к одному и тому же объекту. Это полезно для понимания местоимений и их предшественников. Давайте рассмотрим пример с использованием библиотеки Stanford CoreNLP:
from stanfordcorenlp import StanfordCoreNLP
nlp = StanfordCoreNLP(r'path/to/stanford-corenlp/')
text = "John is a talented musician. He plays the piano beautifully."
result = nlp.coref(text)
print(result)

Выход:

[('John', 'He')]
  1. Связывание сущностей.
    Связывание сущностей связывает упоминания сущностей в тексте с соответствующими сущностями в базе знаний, такой как Википедия. Это полезно для устранения неоднозначности между объектами с одинаковым именем. Вот пример использования DBpedia Spotlight API:
import requests
text = "I love listening to Madonna."
response = requests.get(f"http://api.dbpedia-spotlight.org/en/annotate?text={text}")
print(response.json())

Выход:

{
    "@text": "I love listening to Madonna.",
    "@confidence": "0.999",
    "@support": "215",
    "@types": "MusicalArtist,Person",
    "@sparql": "",
    "@policy": "whitelist",
    "Resources": [
        {
            "@URI": "http://dbpedia.org/resource/Madonna",
            "@support": "215",
            "@types": "MusicalArtist,Person",
            "@surfaceForm": "Madonna",
            "@offset": "20",
            "@similarityScore": "1.0",
            "@percentageOfSecondRank": "2.342716634079277E-7",
            "@contextualScore": "0.999",
            "@priorScore": "0.000"
        }
    ]
}

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