robot pointing on a wall

Estrarre parole chiave con KeyBert

Qualche anno fa, quando eravamo agli albori di modelli e dataset, estrarre le keyword da un documento era alquanto complicato: ricordo decine di righe di codice che ho scritto, usando Word2Vec, calcolandomi da solo le cosine similarity e con risultati non sempre confortanti.

Ora l’AI si è democratizzata, certi task allora complessi sono diventati banali, basta richiedere il modello giusto e richiamarlo. Può farlo chiunque.

Dovendo fare qualcosa con le keyword predominanti di certi testi, ho fatto una ricerca su google e, in 5 minuti avevo il codice funzionante: il tempo maggiore l’ho perso a scegliere il modello che mi soddisfava di più e a decidere quali stopwords bloccare per l’italiano.

Ecco il codice qualora dovesse interessarvi:

import sys
from keybert import KeyBERT
doc = ' '.join(sys.stdin)
it_stop_words=[
    "a", "ai", "al", "alla", "allo", "allora", "altre", "altri",
    "altro", "anche", "ancora", "avere", "aveva", "avevano", "ben",
    "buono", "che", "chi", "con", "cosa", "cui", "da", "del", "della","dello",
    "dentro", "deve", "devo", "di", "due", "e","ecco", "far", "fare", "fine",
    "fino", "forse", "fra", "giu", "ha", "hai", "hanno", "ho",
    "il", "indietro", "invece", "io", "la", "le", "lei", "lo", "loro",
    "lui", "lungo", "ma", "me", "meglio", "molta", "molti", "molto",
    "nei", "nella", "no", "noi", "nostro", "nove", "nuovi", "nuovo",
    "o", "oltre", "ora", "otto", "peggio", "per", "però", "più", "poi", "poco",
    "primo", "qua", "quarto", "quasi", "quattro", "quello",
    "questo", "qui", "quindi", "quinto", "sara", "secondo", "sei",
    "sembra", "sembrava", "senza", "sette", "sia", "siamo", "siete",
    "solo", "sono", "sopra", "soprattutto", "sotto", "su", "sul", "sulla",
    "tanto", "te", "tempo", "terzo", "tra", "tre", "triplo", "ultimo",
    "un","una","uno","va","vai","vi","voi","vostro" 
    ]
kw_model = KeyBERT(model='paraphrase-multilingual-mpnet-base-v2')
keywords = kw_model.extract_keywords(doc, keyphrase_ngram_range=(1, 3), stop_words=it_stop_words)
print (keywords)

Il codice come vedete fa molto poco: richiede Keybert, unisce l’input proveniente da Stdin, definisce le stop-words desiderate per l’italiano, chiama il modello. Ho richiesto di avere combinazioni da una a tre parole.

Per usarlo basta, una volta installata l’unica dipendenza, fare:

cat testo_da_analizzare.txt | python3 keybert-it.py

L’output a schermo è una lista con le frasi/keyword più confidenti e la relativa confidenza.

Ho deviato però dal discorso, che è la democratizzazione dell’AI: se da un lato gli addetti ai lavori ora si trovano spesso facilitati nell’utilizzo di tecnologie che prima comportavano molto più lavoro, oggi anche chi non ha nessuna competenza di AI può utilizzare con grande facilità anche modelli potentissimi.

Questo è un bene o un male? Da grandi poteri, derivano grandi responsabilità. E queste cose danno senz’altro un certo potere in mano a chiunque. C’è però da dire che non mi risulta che noi addetti ai lavori abbiamo mai studiato etica, quindi su quel piano siamo uguali ad un totale esordiente.

Voi che ne pensate?

Lascia un commento