Лингвистические признаки в spaCy

Обработка естественного языка с помощью spaCy

Azadeh Mobasher

Principal Data Scientist

POS-теггинг

  • Грамматическая классификация слов по функции и контексту в предложении
POS Описание Пример
VERB Глагол run, eat, ate, take
NOUN Существительное man, airplane, tree, flower
ADJ Прилагательное big, old, incompatible, conflicting
ADV Наречие very, down, there, tomorrow
CONJ Союз and, or, but
Обработка естественного языка с помощью spaCy

POS-теггинг в spaCy

 

  • POS-теггинг уточняет значение слова
  • Некоторые слова, например watch, могут быть и существительным, и глаголом
  • spaCy сохраняет POS-теги в признаке pos_ конвейера nlp
  • spacy.explain() объясняет заданный POS-тег

Компонент POS Tagger

Обработка естественного языка с помощью spaCy

POS-теггинг в spaCy

verb_sent = "I watch TV."

print([(token.text, token.pos_, spacy.explain(token.pos_)) for token in nlp(verb_sent)])
[('I', 'PRON', 'pronoun'), 
('watch', 'VERB', 'verb'), 
('TV', 'NOUN', 'noun'), 
('.', 'PUNCT', 'punctuation')]

noun_sent = "I left without my watch."

print([(token.text, token.pos_, spacy.explain(token.pos_)) for token in nlp(noun_sent)])
[('I', 'PRON', 'pronoun'), 
('left', 'VERB', 'verb'), 
('without', 'ADP', 'adposition'), 
('my', 'PRON', 'pronoun'),
('watch', 'NOUN', 'noun'),
('.', 'PUNCT', 'punctuation')]
Обработка естественного языка с помощью spaCy

Распознавание именованных сущностей

  • Именованная сущность — слово или фраза, обозначающая конкретный объект с именем
  • Распознавание именованных сущностей (NER) относит их к заранее определённым категориям
Тип сущности Описание
PERSON Имя человека или фамилия
ORG Компании, организации и т. д.
GPE Геополитическая единица: страны, города и т. д.
LOC Местоположения, не являющиеся GPE: горные хребты и т. д.
DATE Абсолютные или относительные даты и периоды
TIME Промежуток времени менее суток
Обработка естественного языка с помощью spaCy

NER и spaCy

 

  • Модели spaCy извлекают именованные сущности с помощью компонента конвейера NER
  • Именованные сущности доступны через свойство doc.ents
  • spaCy присваивает каждой сущности метку (.label_)

Компонент NER

Обработка естественного языка с помощью spaCy

NER и spaCy

 

import spacy
nlp = spacy.load("en_core_web_sm")
text = "Albert Einstein was genius."
doc = nlp(text)

print([(ent.text, ent.start_char, ent.end_char, ent.label_) for ent in doc.ents])
>>> [('Albert Einstein', 0, 15, 'PERSON')]
Обработка естественного языка с помощью spaCy

NER и spaCy

  • Типы сущностей каждого токена в контейнере Doc также доступны напрямую

 

import spacy
nlp = spacy.load("en_core_web_sm")
text = "Albert Einstein was genius."
doc = nlp(text)

print([(token.text, token.ent_type_) for token in doc])
>>> [('Albert', 'PERSON'), ('Einstein', 'PERSON'),
('was', ''), ('genius', ''), ('.', '')]
Обработка естественного языка с помощью spaCy

displaCy

 

  • spaCy оснащён современным визуализатором: displaCy
  • Визуализатор сущностей displaCy выделяет именованные сущности и их метки
import spacy
from spacy import displacy

text = "Albert Einstein was genius."
nlp = spacy.load("en_core_web_sm")
doc = nlp(text)

displacy.serve(doc, style="ent")

Вывод displaCy NER

Обработка естественного языка с помощью spaCy

Давайте потренируемся!

Обработка естественного языка с помощью spaCy

Preparing Video For Download...