Мовні ознаки

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

Azadeh Mobasher

Principal Data Scientist

Розмітка POS

  • POS-теги залежать від контексту, сусідніх слів і їхніх тегів
import spacy
nlp = spacy.load("en_core_web_sm")
text = "My cat will fish for a fish tomorrrow in a fishy way."
print([(token.text, token.pos_, spacy.explain(token.pos_)) 
        for token in nlp(text)])

Приклад розмітки POS

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

Чому POS важливі?

 

  • Краща точність для багатьох задач NLP

 

I will fish tomorrow.

I ate fish.

 

  • Приклад для систем перекладу

 

verb -> pescaré

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

Чому POS важливі?

 

  • Зняття багатозначності слова (WSD) — це задача визначення, в якому значенні слово вжито в реченні.
  • Визначення значення може бути критичним для машинного перекладу тощо.

Приклад WSD

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

Зняття багатозначності слів

import spacy
nlp = spacy.load("en_core_web_sm")

verb_text = "I will fish tomorrow."
noun_text = "I ate fish."


print([(token.text, token.pos_) for token in nlp(verb_text) if "fish" in token.text], "\n") print([(token.text, token.pos_) for token in nlp(noun_text) if "fish" in token.text])
[('fish', 'VERB', 'verb')] 
[('fish', 'NOUN', 'noun')]
Обробка природної мови (NLP) зі spaCy

Розбір залежностей

  • Досліджує синтаксис речення
  • Зв'язки між двома токенами
  • Результат — дерево

Приклад розбору залежностей

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

Розбір залежностей і spaCy

 

  • Мітка залежності описує тип синтаксичного зв'язку між двома токенами

 

Dependency label Description
nsubj Іменниковий підмет
root Корінь
det Означник
dobj Прямий додаток
aux Допоміжне дієслово
Обробка природної мови (NLP) зі spaCy

Розбір залежностей і displaCy

  • displaCy може малювати дерева залежностей
doc = nlp("We understand the differences.")

spacy.displacy.serve(doc, style="dep")

Приклад парсера залежностей у displaCy

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

Розбір залежностей і spaCy

  • Атрибут .dep_ для доступу до мітки залежності токена

 

doc = nlp("We understand the differences.")
print([(token.text, token.dep_, spacy.explain(token.dep_)) for token in doc])
[('We', 'nsubj', 'nominal subject'), ('understand', 'ROOT', 'root'),
('the', 'det', 'determiner'), ('differences', 'dobj', 'direct object'),
('.', 'punct', 'punctuation')]
Обробка природної мови (NLP) зі spaCy

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

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

Preparing Video For Download...