Đặc trưng ngôn ngữ trong spaCy

Xử lý ngôn ngữ tự nhiên với spaCy

Azadeh Mobasher

Principal Data Scientist

Gắn thẻ POS

  • Phân loại từ theo ngữ pháp, dựa trên chức năng và ngữ cảnh trong câu
POS Mô tả Ví dụ
VERB Động từ run, eat, ate, take
NOUN Danh từ man, airplane, tree, flower
ADJ Tính từ big, old, incompatible, conflicting
ADV Trạng từ very, down, there, tomorrow
CONJ Liên từ and, or, but
Xử lý ngôn ngữ tự nhiên với spaCy

Gắn thẻ POS với spaCy

 

  • Gắn thẻ POS giúp xác nhận nghĩa của từ
  • Một số từ như watch có thể là danh từ hoặc động từ
  • spaCy lưu POS trong thuộc tính pos_ của pipeline nlp
  • spacy.explain() giải thích một thẻ POS

Thành phần POS Tagger

Xử lý ngôn ngữ tự nhiên với spaCy

Gắn thẻ POS với 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')]
Xử lý ngôn ngữ tự nhiên với spaCy

Nhận dạng thực thể có tên

  • Thực thể có tên là từ/cụm từ chỉ một thực thể cụ thể có tên riêng
  • Nhận dạng thực thể có tên (NER) phân loại các thực thể vào các nhóm định sẵn
Loại thực thể Mô tả
PERSON Người hoặc gia đình có tên
ORG Công ty, tổ chức, v.v.
GPE Thực thể địa-chính trị: quốc gia, thành phố, v.v.
LOC Địa điểm không phải GPE: dãy núi, v.v.
DATE Ngày/khung thời gian tuyệt đối hay tương đối
TIME Thời gian nhỏ hơn một ngày
Xử lý ngôn ngữ tự nhiên với spaCy

NER và spaCy

 

  • Mô hình spaCy trích xuất thực thể có tên bằng thành phần pipeline NER
  • Truy cập thực thể qua thuộc tính doc.ents
  • spaCy cũng gán nhãn cho mỗi thực thể (.label_)

Thành phần NER

Xử lý ngôn ngữ tự nhiên với spaCy

NER và 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')]
Xử lý ngôn ngữ tự nhiên với spaCy

NER và spaCy

  • Cũng có thể lấy loại thực thể của từng token trong 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', ''), ('.', '')]
Xử lý ngôn ngữ tự nhiên với spaCy

displaCy

 

  • spaCy có công cụ trực quan hiện đại: displaCy
  • Bộ trực quan thực thể displaCy làm nổi bật thực thể có tên và nhãn của chúng
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")

Kết quả NER của displaCy

Xử lý ngôn ngữ tự nhiên với spaCy

Hãy thực hành!

Xử lý ngôn ngữ tự nhiên với spaCy

Preparing Video For Download...