Modi per consumare testo con i modelli Tensorflow Decision Forest

Questa è una pagina Markdown della documentazione. Per ulteriori informazioni, consulta la Guida di riferimento a Markdown (go/documentation-reference) e la Guida allo stile della documentazione (go/documentation-style).

Sfondo

Gli algoritmi di apprendimento delle foreste decisionali funzionano in modo diverso rispetto ai modelli basati sulla discesa del gradiente come le reti neurali o i predittori lineari. Queste differenze si manifestano in una varietà di decisioni di modellazione, ma sono particolarmente pronunciate quando un set di dati contiene caratteristiche categoriche di lunghezza variabile, come caratteristiche di testo tokenizzate, che tendono a richiedere la progettazione di caratteristiche specifiche dell'architettura. Questa guida delinea i compromessi tra le diverse strategie di ingegneria delle funzionalità per le funzionalità di testo nei modelli di foreste decisionali.

Nelle sezioni seguenti, faremo riferimento a un set di dati con queste funzionalità e supponiamo di prevedere se un utente acquisterà un prodotto specifico:

Caratteristica ID utente Acquisti precedenti Titolo del prodotto Descrizione del prodotto
Dati di esempio 1234 [“TV”, “Vuoto”] “Router Wi-Fi” "Questo router è..."


In questo esempio, "Acquisti precedenti" è un elemento di testo sparso (o un insieme di elementi categorici). Anche il "Titolo del prodotto" lo è, ma in questo esempio non è tokenizzato. La "Descrizione del prodotto" è una caratteristica del linguaggio naturale, che ha proprietà diverse rispetto alle altre caratteristiche, perché ci aspettiamo che il vocabolario sia ampio (o illimitato), che l'ordine delle parole sia importante e che abbia altre proprietà semantiche e lessicali inerenti alla lingua. Le strategie che descriviamo di seguito sono appropriate per tutte queste funzionalità, ma avranno compromessi diversi per ciascuna di esse.

Riferimento rapido

La soluzione migliore, se i costi di formazione e inferenza non sono un problema, è quella di utilizzare sia i set di categorie che gli incorporamenti pre-addestrati per ciascuna caratteristica del testo, poiché hanno punti di forza e di debolezza complementari. Lo consigliamo a meno che non sia presente uno dei vincoli menzionati di seguito.

Velocità di inferenza Velocità di allenamento Possibilità di memorizzare le relazioni token <> etichetta Generalizzazione
Categorie multiple Il più veloce (++) Il più veloce (++) Limitato Limitato (+)
multi-caldo Veloce (+) Veloce (assumendo una dimensione del vocabolario relativamente piccola) (++) Bene Limitato (+)
Insiemi categoriali Il più veloce (+++) Più lento (+) Migliore Limitato (++)
incorporamento Il più lento (presupponendo operazioni di codifica non banali, come le moltiplicazioni di matrici) da (+ a +++) Il più veloce (presupponendo la dimensione del vocabolario >> dimensione di incorporamento) (+++) Cattivo Buono (da ++ a +++)

N-grammi

N-grammi (es. {"il", "gatto", "è", "blu"} -> {"<inizio> il", "il gatto", "il gatto è", "è blu", "blu < end>"}) può essere utile in molti casi e acquisire informazioni lessicali locali. Sono supportati in tutti i metodi indicati di seguito, ma hanno il costo di un vocabolario notevolmente più ampio, che può renderli poco pratici a causa dei costi di formazione.

Strategie scoraggiate

Codifica one-hot/multi-hot/Sacco di parole

La codifica one-hot è una strategia classica per densificare il testo sparso. Qui assumiamo un'estensione in cui una caratteristica di testo sparso è rappresentata da una vettorizzazione multi-hot (1 per tutti i token contenuti) o basata sul conteggio (il conteggio per ciascun token nel vocabolario).

Ad esempio, se il vocabolario è composto da 4 elementi e indicizzato come ["TV", "Vacuum", "Wifi", "Router"], la funzione "Acquisti precedenti" sarebbe un vettore denso <1, 1, 0, 0 >. Se si prendessero in considerazione i conteggi e la funzione fosse [“TV”, “TV”, “Vacuum”], sarebbe <2, 1, 0, 0>.

Pro

  • Poiché le suddivisioni della foresta decisionale vengono apprese su funzionalità individuali, ciò è meno costoso in fase di addestramento rispetto agli insiemi di categorie.
  • A differenza del primo, non necessita di ritaglio o riempimento e i token hanno la stessa semantica in tutti gli esempi (ad esempio, "TV" sarà costante tra le suddivisioni indipendentemente dalla posizione).

Contro

  • Questa strategia porta spesso a divisioni molto sbilanciate e sparse, che possono rendere gli algoritmi di apprendimento DF più lenti a convergere o scadenti. Questo perché:
    • Sono necessarie più suddivisioni per apprendere le stesse informazioni
    • Gli alberi molto sparsi generalizzano peggio degli alberi bilanciati, di solito risultando in un modello meno accurato.
  • Non tiene conto delle informazioni sulla posizione. Ciò potrebbe compromettere le prestazioni delle funzionalità del linguaggio naturale.
  • L'apprendimento delle suddivisioni numeriche sui dati categorici non è ottimale; ci sono ottimizzazioni per trovare divisioni categoriali che non vengono sfruttate qui.
  • La complessità computazionale dell'addestramento scala linearmente con il numero di elementi del vocabolario (ciascuno verrà consumato come caratteristica numerica). In pratica, a meno che il set di dati non sia molto piccolo (nel qual caso vocabolari di grandi dimensioni possono incoraggiare un adattamento eccessivo), ciò rende molto lento l'addestramento dei vocabolari di > 5k elementi.
  • Il consumo di memoria per l'addestramento sarà di 1 byte (per one-hot) o 4 byte (per conteggi) per elemento del vocabolario per esempio, poiché al momento dell'indicizzazione i dati verranno archiviati come una versione densa dei dati sparsi. Questo può diventare proibitivo per vocabolari e set di dati più grandi.

Caratteristiche categoriali multiple con una lunghezza fissa

Poiché le caratteristiche categoriche possono essere apprese in modo efficiente dagli algoritmi della foresta decisionale, un modo naturale per consumare token sparsi è riempire/ritagliare in modo tale che ci sia un numero fisso di token di input per esempio e ciascuna posizione del token sia una caratteristica separata e indipendente. Nell'esempio sopra, se "Acquisti precedenti" ha al massimo 5 token, possiamo creare caratteristiche f1...f5 che rappresentano i token 1-5 e scartare eventuali token > 5 e aggiungere valori mancanti per gli esempi in cui sono < 5.

Pro

  • Questo è efficiente per allenarsi.
  • Ciò potrebbe non compromettere la qualità del modello se c'è una bassa varianza nel numero di token per esempio e i token sono indipendenti.
  • Ciò potrebbe acquisire semantica aggiuntiva (come l'ordine di acquisto nell'esempio) in modo più naturale rispetto ad altri metodi.

Contro

  • Aggiunge semantica ai token imbottiti "mancanti" che fungeranno da rumore per il modello. Ciò sarà particolarmente pronunciato se c'è una grande variazione nel numero di token per esempio, cosa che può accadere ad esempio con la funzione "Descrizione prodotto".
  • Gli alberi appresi saranno altamente sensibili all'ordinamento, ovvero se la caratteristica è [“A”, “B”] la previsione sarà diversa dalla previsione per [“B”, “A”], e se quest'ultima non è mai stata vista nei dati, il modello non sarà in grado di generalizzare dal primo. In generale, ciò richiederà molti più dati per apprendere l’invarianza di posizione.
  • Per impostazione predefinita, ogni token sarà rappresentato da una funzionalità con un vocabolario diverso. Anche se forzi l'implementazione a considerare lo stesso insieme di elementi del vocabolario per funzione, f1=”TV” sarà un elemento del vocabolario diverso da f2=”TV”. Ciò significa che l'algoritmo sarà meno efficiente nell'apprendere la relazione tra il token "TV" e l'etichetta: dovrà apprenderla separatamente per ciascuna posizione del token.

Strategie migliori

Insiemi categoriali

Gli insiemi categoriali ( https://arxiv.org/pdf/2009.09991.pdf ) sono la rappresentazione delle caratteristiche predefinite di TF-DF per il testo sparso. Un insieme categorico è effettivamente un sacco di parole, ignorando i duplicati e l'ordinamento. Ad esempio, la caratteristica "La TV è la migliore" sarebbe rappresentata dall'insieme categoriale {"la migliore", "è", "la", "TV}.

Lo splitter di set categorico nativo, secondo i benchmark su una varietà di attività (vedi documento), di solito supera le funzionalità categoriche multi-hot e di lunghezza fissa. In teoria, sia le suddivisioni di set categoriali che le suddivisioni booleane su funzionalità codificate a caldo possono apprendere le stesse informazioni. Tuttavia, prendiamo l'esempio seguente, in cui l'albero sta cercando di apprendere la seguente funzione:

if description contains “high” AND “speed” AND “gaming”:
  return True

In questo caso, lo splitter di set categorico nativo apprenderà 1 suddivisione, dove {"high", "speed", "gaming"} => True.

Una rappresentazione calda richiederebbe 3 suddivisioni, su "alto", "split" e "gioco", e dovrebbe trovare nodi foglia ragionevoli per tutte le possibili disgiunzioni di tali categorie (ovvero "alto" e non "velocità"). In pratica, la codifica one-hot porta ad alberi altamente sbilanciati che non possono essere ottimizzati in modo efficiente dagli algoritmi di apprendimento delle foreste decisionali più performanti.

Pro

  • Il migliore nell'apprendimento di informazioni infinite per le foreste decisionali.
  • Altamente efficiente da servire (può essere servito con QuickScorer, che può servire alberi di grandi dimensioni in un tempo fino a meno di un microsecondo per esempio). La complessità del tempo di pubblicazione è lineare nel numero di elementi nell'insieme di categorie di ciascun esempio, che in pratica è molto inferiore alla dimensione del vocabolario.
  • Ottimizza un singolo vocabolario per funzionalità, quindi la semantica è condivisa.

Contro

  • Il costo dell'addestramento di un set categoriale suddiviso in scale con num_examples * dimensione del vocabolario, così simile all'algoritmo one-hot, la dimensione del vocabolario addestrabile può essere piuttosto piccola (N migliaia) in contesti pratici. Si noti che questa velocità di addestramento può essere migliorata regolando la frazione di campionamento dell'algoritmo greedy, ma potrebbe raggiungere una qualità non ottimale.

Incorporamenti

Le reti neurali hanno mostrato prestazioni all'avanguardia su una varietà di compiti di PNL e gli incorporamenti pre-addestrati utilizzati come caratteristiche numeriche empiricamente funzionano bene anche con gli algoritmi della foresta decisionale, nonostante le funzionalità siano utilizzate in modo molto diverso internamente. Si noti che qui ci riferiamo a "incorporamento" come qualsiasi codifica di rete neurale, ad esempio l'output di strati trasformatori/convoluzionali/ricorrenti.

L'uso di incorporamenti pre-addestrati funziona bene con le reti neurali in parte perché l'inizializzazione di uno spazio vettoriale in cui token o frasi simili sono vicini nello spazio euclideo ha dimostrato di trasferirsi bene tra le attività di PNL e i gradienti da tale inizializzazione sono più piccoli e più veloci nel convergere di un'inizializzazione completamente casuale. Tuttavia, gli alberi decisionali utilizzano gli incorporamenti come caratteristiche numeriche individuali e apprendono le partizioni allineate agli assi di tali caratteristiche individuali 1 . Ciò significa che è quasi impossibile utilizzare le stesse informazioni semantiche: un prodotto scalare o una moltiplicazione di matrici, ad esempio, non può essere rappresentato con un insieme di suddivisioni allineate agli assi. Inoltre, a differenza delle reti neurali, che possono aggiornare gli incorporamenti attraverso la discesa del gradiente durante l'addestramento, gli algoritmi decisionali predefiniti di apprendimento della foresta non sono differenziabili, il che significa che gli incorporamenti devono rimanere congelati. Si noti che c’è del lavoro ( https://arxiv.org/pdf/2007.14761.pdf, per esempio) sulle foreste decisionali differenziabili. Tuttavia, forse in parte perché in pratica non tutti i frammenti di informazione in un incorporamento vengono effettivamente utilizzati, anche dalle reti neurali, questa strategia funziona ancora bene con le foreste decisionali.

Pro:

  • Può gestire dimensioni di vocabolario molto più grandi: poiché un incorporamento è effettivamente una densificazione in un piccolo numero di dimensioni di incorporamento, è improbabile che il numero di caratteristiche di input nella foresta decisionale aumenti notevolmente.
  • In teoria è possibile generalizzare meglio, poiché incorporamenti simili possono condividere insiemi di partizioni. Si noti che un grosso avvertimento qui è che, come menzionato sopra, le trasformazioni di base o le rotazioni nello spazio vettoriale possono avere due incorporamenti simili completamente diversi nello spazio partizionato allineato agli assi per le foreste decisionali.
  • Può incapsulare in modo naturale la ricorrenza/l'ordine delle parole, ad esempio se il codificatore contiene convoluzioni, attenzione o un RNN.
  • Può sfruttare le informazioni da un altro set di dati (pre-formazione per il trasferimento dell'apprendimento).

Contro

  • Non è bravo a memorizzare le informazioni: le suddivisioni possono causare classificazioni confuse o un'elevata sensibilità alle frasi (ad esempio "il router è fantastico" rispetto a "un ottimo router") produrranno incorporamenti diversi, che potrebbero essere vicini nello spazio euclideo ma non necessariamente avere simili caratteristiche numeriche.
  • Il più lento da servire, perché il passaggio in avanti completo del codificatore deve essere eseguito al momento dell'inferenza. La latenza effettiva dipende fortemente dall'architettura che ha prodotto gli incorporamenti; vale a dire, un codificatore del trasformatore sarà in genere molto più lento di una ricerca nella tabella di incorporamento grezza con pooling della media.

Note


  1. L'attivazione delle divisioni oblique può consentire l'apprendimento di informazioni non allineate sugli assi, ma ciò avverrà comunque dimensione per dimensione.