Combinare modelli e regole

NLP avanzato con spaCy

Ines Montani

spaCy core developer

Predizioni statistiche vs. regole

Modelli statistici Sistemi basati su regole
Casi d'uso l'app deve generalizzare dagli esempi                                                                                                
Esempi reali nomi di prodotti, nomi di persone, relazioni soggetto/oggetto                                                                                                
Funzionalità spaCy riconoscitore di entità, parser di dipendenze, POS tagger                                                                                                
NLP avanzato con spaCy

Predizioni statistiche vs. regole

Modelli statistici Sistemi basati su regole
Casi d'uso l'app deve generalizzare dagli esempi dizionario con numero finito di esempi
Esempi reali nomi di prodotti, nomi di persone, relazioni soggetto/oggetto paesi del mondo, città, nomi di farmaci, razze di cani
Funzionalità spaCy riconoscitore di entità, parser di dipendenze, POS tagger tokenizer, Matcher, PhraseMatcher
NLP avanzato con spaCy

Ripasso: matching basato su regole

# 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)
NLP avanzato con spaCy

Aggiungere predizioni statistiche

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
NLP avanzato con spaCy

Matching di frasi efficiente (1)

  • PhraseMatcher è come espressioni regolari o ricerca per parola chiave, ma con accesso ai token!
  • Usa oggetti Doc come pattern
  • Più efficiente e veloce di Matcher
  • Ottimo per grandi liste di parole
NLP avanzato con spaCy

Matching di frasi efficiente (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
NLP avanzato con spaCy

Ayo berlatih!

NLP avanzato con spaCy

Preparing Video For Download...