Рубрики
Без рубрики

Добыча сущности с Spacy

Узнайте, как настроить трубопровод SPACY NER с использованием моделей по умолчанию и пользовательские модели. Теги с поиском, Python, машинным обучением, AI.

Что такое экстракция сущности?

Извлечение сущности в контексте поиска процесс выяснения, на которые полей должен быть нацелен, а не всегда ударяет все поля. Причина, по которой мы можем захотеть привлекать добычу сущности в поисках, является повышение точности. Например: Как мы говорим, когда пользователь набран в Apple iPhone, намерение было запущено Компания: Apple И Продукт: iPhone ? И не возвращать наклейки телефонов в форме яблока?

Что такое SPACY?

Spacy это рамка Python, которая может сделать много Обработка натурального языка (NLP) задачи. Именованная экстракция сущности (NER) один из них, наряду с Текстовая классификация , Часть от речевой метки , и другие.

Если это звучит знакомо, это может быть потому, что ранее мы писали о разных Python Framework, которые могут помочь нам с экстракцией сущности: Scikit – Учите Отказ Хотя Scikit-Suart – это больше коллекции инструментов машинного обучения, а не рамки NLP. Spacy ближе, с точки зрения функциональности, до Opennlp. . Мы использовали все три для добычи сущности во время нашего Активировать презентацию 2018 Отказ

Получение SPACY так просто, как:

pip install spacy

В этом посте мы будем использовать предварительно построенную модель для извлечения объектов, то мы создадим собственную модель.

Используя предварительно построенную модель

Spacy поставляется с Предварительные модели для многих языков Отказ Например, чтобы получить английский, вы бы сделали:

python -m spacy download en_core_web_sm

Затем в вашем приложении Python это нагрузка:

nlp = spacy.load('en_core_web_sm')

И тогда вы можете использовать его для извлечения объектов. В нашем Активировать пример , мы сделали:

doc = nlp(u"#bbuzz 2016: Rafał Kuć - Running High Performance And Fault Tolerant Elasticsearch")
for entity in doc.ents:
    print(entity.label_, ' | ', entity.text)

Какие выходы:

MONEY | #bbuzz
DATE | 2016
PERSON | Rafał Kuć - Running High

Для этого конкретного примера этот результат «приблизительно» в лучшем случае. 2016 действительно дата, но #bbuzz не деньги. И я сомневаюсь, что Rafał бегал высоко, давая эту презентацию.

Для этого использования нам нужно будет построить собственную модель.

Обучение новой модели

Чтобы тренировать новую модель, нам сначала необходимо создать трубопровод, который определяет, как мы обработаем данные. В этом случае мы хотим извлечь субъекты. Затем мы наведем модель, запустив тестовые данные через этот трубопровод. Как только модель обучается, мы можем использовать его для извлечения объектов из новых данных.

Давайте увеличить на каждый шаг.

Спативные трубопроводы

С Spacy вы можете сделать гораздо больше, чем просто экстракция сущности. Например, перед извлечением субъектов вам может понадобиться Предварительный процесс текста , например, через stemming. Или мы можем захотеть сделать Часть от речевой метки : Это слово глагол или существительное?

Для объема нашего учебника мы создадим пустую модель, дайте ей имя, а затем добавить его на него простой трубопровод. Этот простой трубопровод будет делать только с именем экстракции сущности (NER):

nlp = spacy.blank('en') # new, empty model. Let's say it's for the English language
nlp.vocab.vectors.name = 'example_model_training' # give a name to our list of vectors
# add NER pipeline
ner = nlp.create_pipe('ner') # our pipeline would just do NER
nlp.add_pipe(ner, last=True) # we add the pipeline to the model

Данные и этикетки

Чтобы тренировать модель, нам понадобится некоторые учебные данные. В случае поиска продукции они были бы запросами, где мы предпринимаем объекты. Например:

DATA = \[
  (u"Search Analytics: Business Value & BigData NoSQL Backend, Otis Gospodnetic ", {'entities': [ (58,75,'PERSON') ] }),
  (u"Introduction to Elasticsearch by Radu ", {'entities': [ (16,29,'TECH'), (32, 36, 'PERSON') ] }),
  # …
]

Наши учебные данные имеют несколько характеристик:

  • Сам текст – Unicode
  • Массив сущностей содержит список кортежей. Каждый кортеж – это сущность, помеченная из текста
  • Каждый кортеж содержит три элемента: начните смещение, конечное смещение и сущность название

Обучение модели

Перед тренировкой мы должны знать нашу модель о возможных объектах. Для этого мы добавляем все этикетки, о которых мы знаем:

nlp.entity.add_label('PERSON')
nlp.entity.add_label('TECH')
# ...

Теперь мы можем начать обучение. Нам понадобится выделить модели и получить оптимизатор через нашу модель ‘s begin_training () Метод:

optimizer = nlp.begin_training()

Затем мы обновляем модель с нашими учебными данными. Каждый текст, с его аннотациями (эти меченые объекты), будет передан на Обновление () Функция нашей модели Отказ Наряду с недавно созданным оптимизатором:

nlp.update([text], [annotations], sgd=optimizer)

В нашем Активировать пример потому что у нас мало учебных данных Мы просто петлю через нее несколько раз, в случайном порядке:

for i in range(20):
    random.shuffle(DATA)
    for text, annotations in DATA:
        nlp.update([text], [annotations], sgd=optimizer)

И это все! Теперь у нас есть модель, построенная для нашего собственного использования.

Прогнозирующие сущности

Модель, которую мы просто построили, уже загружены в память. Если вы не хотите тренировать его каждый раз, вы можете сохранить его на диск и загрузить это при необходимости. С помощью модели загружена, вы будете использовать его для прогнозирования объектов так же, как вы будете с предварительно построенной моделью:

doc = nlp(u"#bbuzz 2016: Rafał Kuć - Running High Performance And Fault Tolerant Elasticsearch")
for entity in doc.ents:
    print(entity.label_, ' | ', entity.text)

Даже с этим небольшим набором данных результаты как правило, Смотри лучше, чем с моделью по умолчанию:

PERSON | Rafał Kuć
TECH | Elasticsearch

Я упомянул как правило, Потому что на разных пробегах из-за рандомизации модель выглядит по-другому. В конечном итоге, если вы хотите точные результаты, нет заменителя для учебного набора размеров. Если что-то действительно не было рыбным с Rafał. В 2016 году, потому что иногда я получаю:

PERSON | Rafał Kuć
TECH | High

Выводы и следующие шаги

Как в Пример OpenNLP Мы показали ранее, SPACY поставляется с предварительно построенными моделями и позволяет легко создавать свои собственные. Это также поставляется с инструмент обучения командной строки . Тем не менее, это менее настраивается – или, по крайней мере, у вас нет всех вариантов, сколько доступных, как в целенаправленном инструменте, например Scikit – Учите Отказ Для добычи объекта SPAcy будет использовать Сверточная нейронная сеть , но вы можете Подключите свою собственную модель Если вам нужно.

Если вы найдете этот материал, присоединяйтесь к нам: Мы нанимаем по всему миру Отказ Если вам нужна добыча объекта, настройка актуальности или любая другая помощь в вашей поисковой инфраструктуре, пожалуйста Добраться до потому что мы предоставляем:

Оригинал: “https://dev.to/sematext/entity-extraction-with-spacy-fi”