Modellen en regels combineren

Geavanceerde NLP met spaCy

Ines Montani

spaCy core developer

Statistische voorspellingen vs. regels

Statistische modellen Regelgebaseerde systemen
Use cases app moet op basis van voorbeelden generaliseren                                                                                                
Praktijkvoorbeelden productnamen, persoonsnamen, subject/object-relaties                                                                                                
spaCy-functies entiteitsherkenner, afhankelijkheidsparser, woordsoorttagger                                                                                                
Geavanceerde NLP met spaCy

Statistische voorspellingen vs. regels

Statistische modellen Regelgebaseerde systemen
Use cases app moet op basis van voorbeelden generaliseren woordenlijst met eindig aantal voorbeelden
Praktijkvoorbeelden productnamen, persoonsnamen, subject/object-relaties landen, steden, medicijnnamen, hondenrassen
spaCy-functies entiteitsherkenner, afhankelijkheidsparser, woordsoorttagger tokenizer, Matcher, PhraseMatcher
Geavanceerde NLP met spaCy

Samenvatting: Regelgebaseerd matchen

# Initialize with the shared vocab
from spacy.matcher import Matcher
matcher = Matcher(nlp.vocab)

# Patterns are lists of dictionaries describing the tokens pattern = [{'LEMMA': 'love', 'POS': 'VERB'}, {'LOWER': 'cats'}] matcher.add('LOVE_CATS', None, pattern)
# Operators can specify how often a token should be matched pattern = [{'TEXT': 'very', 'OP': '+'}, {'TEXT': 'happy'}]
# Calling matcher on doc returns list of (match_id, start, end) tuples doc = nlp("I love cats and I'm very very happy") matches = matcher(doc)
Geavanceerde NLP met spaCy

Statistische voorspellingen toevoegen

matcher = Matcher(nlp.vocab)
matcher.add('DOG', None, [{'LOWER': 'golden'}, {'LOWER': 'retriever'}])
doc = nlp("I have a Golden Retriever")

for match_id, start, end in matcher(doc): span = doc[start:end] print('Matched span:', span.text)
# Get the span's root token and root head token print('Root token:', span.root.text) print('Root head token:', span.root.head.text)
# Get the previous token and its POS tag print('Previous token:', doc[start - 1].text, doc[start - 1].pos_)
Matched span: Golden Retriever

Root token: Retriever Root head token: have
Previous token: a DET
Geavanceerde NLP met spaCy

Efficiënt zinsdeelmatchen (1)

  • PhraseMatcher lijkt op reguliere expressies of zoekwoorden – maar met toegang tot tokens!
  • Gebruikt Doc-objecten als patronen
  • Efficiënter en sneller dan Matcher
  • Ideaal voor grote woordenlijsten
Geavanceerde NLP met spaCy

Efficiënt zinsdeelmatchen (2)

from spacy.matcher import PhraseMatcher

matcher = PhraseMatcher(nlp.vocab)

pattern = nlp("Golden Retriever") matcher.add('DOG', None, pattern) doc = nlp("I have a Golden Retriever")
# iterate over the matches for match_id, start, end in matcher(doc): # get the matched span span = doc[start:end] print('Matched span:', span.text)
Matched span: Golden Retriever
Geavanceerde NLP met spaCy

Laten we oefenen!

Geavanceerde NLP met spaCy

Preparing Video For Download...