Мовні ознаки в spaCy

Обробка природної мови (NLP) зі 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
Обробка природної мови (NLP) зі spaCy

POS-розмітка в spaCy

 

  • POS-розмітка уточнює значення слова
  • Деякі слова, як-от watch, можуть бути іменником і дієсловом
  • spaCy зберігає POS-теґи у властивості pos_ конвеєра nlp
  • spacy.explain() пояснює заданий POS-теґ

Компонент POS Tagger

Обробка природної мови (NLP) зі 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')]
Обробка природної мови (NLP) зі spaCy

Розпізнавання іменованих сутностей

  • Іменована сутність — це слово або фраза, що позначає конкретний об'єкт із власною назвою
  • Розпізнавання іменованих сутностей (NER) класифікує їх у наперед задані категорії
Тип сутності Опис
PERSON Іменована особа або родина
ORG Компанії, установи тощо
GPE Геополітичні одиниці: країни, міста тощо
LOC Не-GPE локації: гірські хребти тощо
DATE Абсолютні або відносні дати чи періоди
TIME Час менш ніж доба
Обробка природної мови (NLP) зі spaCy

NER і spaCy

 

  • Моделі spaCy виділяють іменовані сутності за допомогою компонента конвеєра NER
  • Іменовані сутності доступні через властивість doc.ents
  • spaCy також позначає кожну сутність її міткою (.label_)

Компонент NER

Обробка природної мови (NLP) зі 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')]
Обробка природної мови (NLP) зі 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', ''), ('.', '')]
Обробка природної мови (NLP) зі 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

Обробка природної мови (NLP) зі spaCy

Давайте потренуємось!

Обробка природної мови (NLP) зі spaCy

Preparing Video For Download...