Распознавание именованных объектов (NER) — важнейшая задача обработки естественного языка (NLP), которая включает в себя идентификацию и классификацию именованных объектов, таких как имена людей, организаций, местоположения, даты и т. д., в тексте. Spacy, популярная библиотека Python, обеспечивает отличную поддержку задач NER благодаря предварительно обученным моделям и настраиваемому конвейеру. В этой статье мы рассмотрим различные методы выполнения NER с использованием Spacy, а также приведем примеры кода, которые помогут вам освоить эту важную технику НЛП.
Метод 1: использование предварительно обученных моделей Spacy
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 entity in doc.ents:
print(entity.text, entity.label_)
Выход:
Apple Inc. ORG
New York City GPE
Метод 2: обучение пользовательских моделей NER
Spacy позволяет вам обучать собственные модели NER, используя размеченные данные. Этот подход полезен, когда у вас есть определенный домен или типы объектов, которые недостаточно хорошо охвачены предварительно обученными моделями. Вот упрощенный пример обучения пользовательской модели NER:
import spacy
from spacy.training import Example
nlp = spacy.blank('en')
ner = nlp.add_pipe('ner')
TRAIN_DATA = [
("I love OpenAI.", {"entities": [(7, 13, "ORG")]}),
("I live in Paris.", {"entities": [(10, 15, "LOC")]}),
# Add more training examples here
]
for text, annotations in TRAIN_DATA:
doc = nlp.make_doc(text)
example = Example.from_dict(doc, annotations)
nlp.update([example], losses={ner: 10.0})
# Now test your model
text = "I love OpenAI."
doc = nlp(text)
for entity in doc.ents:
print(entity.text, entity.label_)
Выход:
OpenAI ORG
Метод 3. Добавление пользовательских правил сущности
Помимо обучающих моделей, Spacy позволяет добавлять собственные правила распознавания объектов. Эти правила могут быть основаны на простом сопоставлении с образцом или на более сложных лингвистических правилах. Вот пример:
import spacy
from spacy.pipeline import EntityRuler
nlp = spacy.load('en_core_web_sm')
ruler = EntityRuler(nlp)
patterns = [
{"label": "GPE", "pattern": [{"LOWER": "new"}, {"LOWER": "york"}, {"LOWER": "city"}]},
# Add more patterns here
]
ruler.add_patterns(patterns)
nlp.add_pipe(ruler, before='ner')
text = "I recently visited New York City."
doc = nlp(text)
for entity in doc.ents:
print(entity.text, entity.label_)
Выход:
New York City GPE
В этой статье мы рассмотрели несколько методов распознавания именованных объектов с использованием библиотеки Spacy. Мы рассмотрели использование предварительно обученных моделей, обучение пользовательских моделей NER и добавление пользовательских правил сущностей. Используя мощные возможности Spacy, вы можете легко извлекать значимую информацию из текста и получать ценную информацию. Включение NER в ваши конвейеры НЛП открывает широкий спектр приложений: от извлечения информации до анализа настроений. Так что вперед, экспериментируйте со Spacy и раскройте потенциал распознавания именованных объектов в своих проектах!