Codifica delle funzionalità in Neptune ML - Amazon Neptune

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Codifica delle funzionalità in Neptune ML

I valori delle proprietà sono disponibili in formati e tipi di dati diversi. Per ottenere prestazioni ottimali nel machine learning, è essenziale convertire tali valori in codifiche numeriche note come funzionalità.

Neptune ML esegue l'estrazione e la codifica delle funzionalità come parte dei passaggi di esportazione ed elaborazione dei dati, usando le tecniche di codifica delle funzionalità descritte qui.

Nota

Se prevedi di implementare una codifica delle funzionalità personalizzata nell'implementazione di un modello personalizzato, puoi disabilitare la codifica automatica delle funzionalità nella fase di pre-elaborazione dei dati selezionando none come tipo di codifica delle funzionalità. Non verrà quindi eseguita alcuna codifica delle funzionalità sulla proprietà del nodo o dell'arco specifica e i valori delle proprietà non elaborati verranno analizzati e salvati in un dizionario. La pre-elaborazione dei dati crea comunque il grafo DGL dal set di dati esportato, ma il grafo DGL creato non dispone delle funzionalità pre-elaborate per l'addestramento.

Usa questa opzione solo se intendi eseguire una codifica personalizzata delle funzionalità come parte dell'addestramento personalizzato del modello. Per informazioni dettagliate, consulta Modelli personalizzati in Neptune ML..

Funzionalità categoriali in Neptune ML

Una proprietà che può accettare uno o più valori distinti da un elenco fisso di valori possibili è una funzionalità categoriale. In Neptune ML le funzionalità categoriali vengono codificate mediante la codifica one-hot. L'esempio seguente mostra in che modo viene applicata la codifica one-hot al nome della proprietà di diversi alimenti in base alla relativa categoria:

Food Veg. Meat Fruit Encoding --------- ---- ---- ----- -------- Apple 0 0 1 001 Chicken 0 1 0 010 Broccoli 1 0 0 100
Nota

Il numero massimo di categorie in ogni funzionalità categoriale è 100. Se una proprietà ha più di 100 categorie di valore, solo le 99 più comuni vengono inserite in categorie distinte, mentre le altre vengono incluse in una categoria speciale denominata OTHER.

Funzionalità numeriche in Neptune ML

Qualsiasi proprietà i cui valori sono numeri reali può essere codificata come funzionalità numerica in Neptune ML. Le funzionalità numeriche sono codificate utilizzando numeri a virgola mobile.

È possibile specificare un metodo di normalizzazione dei dati da utilizzare per la codifica delle funzionalità numeriche, in questo modo: "norm": "normalization technique". Sono supportate le seguenti tecniche di normalizzazione:

  • "none": non normalizza i valori numerici durante la codifica.

  • "min-max": normalizza ogni valore sottraendo da esso il valore minimo e poi dividendolo per la differenza tra il valore massimo e il valore minimo.

  • "standard": normalizza ogni valore dividendolo per la somma di tutti i valori.

Funzionalità numeriche per bucket in Neptune ML

Invece di rappresentare una proprietà numeriche con numeri non elaborati, è possibile condensare i valori numerici in categorie. Ad esempio, è possibile suddividere l'età delle persone in categorie come bambini (0-20 anni), giovani adulti (20-40 anni), persone di mezza età (40-60 anni) e anziani (dai 60 anni in poi). Usando questi bucket numerici, si trasforma una proprietà numerica in una sorta di funzionalità categoriale.

In Neptune ML per codificare una proprietà numerica come funzionalità numerica per bucket, devi specificare due elementi:

  • Un intervallo numerico nel formato "range": [a, b] , dove a e b sono numeri interi.

  • Un numero di bucket nel formato "bucket_cnt": c , dove c è il numero di bucket, anch'esso un numero intero.

Neptune ML calcola quindi le dimensioni di ogni bucket come  ( b - a ) / c e codifica ogni valore numerico come il numero dell'eventuale bucket in cui rientra. Qualsiasi valore inferiore a a viene considerato appartenente al primo bucket e qualsiasi valore superiore a b viene considerato appartenente all'ultimo bucket.

Facoltativamente, puoi anche far rientrare i valori numerici in più di un bucket, specificando le dimensioni di una finestra scorrevole, come questa: "slide_window_size": s , dove s è un numero. Neptune ML trasforma quindi ogni valore numerico v della proprietà in un intervallo da v - s/2 a v + s/2 e assegna il valore v a ogni bucket incluso nell'intervallo.

Infine, è facoltativamente possibile specificare un modo per inserire i valori mancanti per le funzionalità numeriche e le funzionalità numeriche per bucket. A tale scopo, si usa "imputer": "imputation technique ", dove la tecnica di imputazione è una tra "mean", "median" o "most-frequent". Se non si specifica un imputer, un valore mancante può causare l'interruzione dell'elaborazione.

Codifica delle funzionalità di testo in Neptune ML

Per il testo in formato libero, Neptune ML può utilizzare diversi modelli per convertire la sequenza di token in una stringa del valore della proprietà in un vettore di valori reali a dimensione fissa:

  • text_fasttext: usa la codifica fastText. Si tratta della codifica consigliata per le funzionalità che utilizzano una e solo una delle cinque lingue supportate da fastText.

  • text_sbert: usa i modelli di codifica Sentence BERT (SBERT). Si tratta della codifica consigliata per il testo non supportato da text_fasttext.

  • text_word2vec: usa gli algoritmi Word2Vec originariamente pubblicati da Google per codificare il testo. Word2Vec supporta solo la lingua inglese.

  • text_tfidf: usa un vettorizzatore TF-IDF (Term Frequency—Inverse Document Frequency) per la codifica del testo. La codifica TF-IDF supporta funzionalità statistiche non supportate da altre codifiche.

Codifica fastText dei valori delle proprietà di testo in Neptune ML

Neptune ML può utilizzare i modelli fastText per convertire i valori delle proprietà di testo in vettori di valori reali a dimensione fissa. Si tratta del metodo di codifica consigliato per i valori delle proprietà di testo in una delle cinque lingue supportate da fastText:

  • en   (inglese)

  • zh   (cinese)

  • hi   (hindi)

  • es   (spagnolo)

  • fr   (francese)

Tieni presente che fastText non può gestire frasi contenenti parole in più di una lingua.

Il metodo text_fasttext può facoltativamente usare un campo max_length che specifica il numero massimo di token nel valore di una proprietà di testo che verrà codificato, dopodiché la stringa viene troncata. In questo modo è possibile migliorare le prestazioni quando i valori delle proprietà di testo contengono stringhe lunghe, perché se non si specifica max_length, fastText codifica tutti i token indipendentemente dalla lunghezza della stringa.

Questo esempio specifica che i titoli dei film in francese sono codificati utilizzando fastText:

{ "file_name" : "nodes/movie.csv", "separator" : ",", "node" : ["~id", "movie"], "features" : [ { "feature": ["title", "title", "text_fasttext"], "language": "fr", "max_length": 1024 } ] }

Codifica Sentence BERT (SBERT) delle funzionalità di testo in Neptune ML

Neptune ML può convertire la sequenza di token in un valore della proprietà stringa in un vettore di valori reali a dimensione fissa utilizzando i modelli Sentence BERT (SBERT). Neptune supporta due metodi SBERT: text_sbert128, che è il metodo predefinito se si specifica solo text_sbert e text_sbert512. La differenza tra i due sta nella lunghezza massima di una stringa di valori della proprietà di testo codificata. La codifica text_sbert128 tronca le stringhe di testo dopo aver codificato 128 token, mentre text_sbert512 tronca le stringhe di testo dopo aver codificato 512 token. Di conseguenza, l'utilizzo di text_sbert512 richiede tempi di elaborazione superiori rispetto a text_sbert128. Entrambi i metodi sono più lenti di text_fasttext.

La codifica SBERT è multilingue, quindi non è necessario specificare una lingua per il testo del valore della proprietà da codificare. SBERT supporta molte lingue e può codificare una frase che contiene più di una lingua. Se si codificano valori di proprietà contenenti testo in una o più lingue non supportate da fastText, SBERT è il metodo di codifica consigliato.

L'esempio seguente specifica che i titoli dei film sono codificati come SBERT fino a un massimo di 128 token:

{ "file_name" : "nodes/movie.csv", "separator" : ",", "node" : ["~id", "movie"], "features" : [ { "feature": ["title", "title", "text_sbert128"] } ] }

Codifica Word2Vec delle funzionalità di testo in Neptune ML

Neptune ML può codificare i valori delle proprietà stringa come funzionalità Word2Vec (gli algoritmi Word2Vec sono stati inizialmente pubblicati da Google). Il metodo text_word2vec codifica i token in una stringa come vettore dense utilizzando uno dei modelli addestrati da spaCy. Supporta solo la lingua inglese utilizzando il modello en_core_web_lg.

L'esempio seguente specifica che i titoli dei film sono codificati con Word2Vec:

{ "file_name" : "nodes/movie.csv", "separator" : ",", "node" : ["~id", "movie"], "features" : [ { "feature": ["title", "title", "text_word2vec"], "language": "en_core_web_lg" } ] }

Nota che il campo della lingua è facoltativo, poiché il modello en_core_web_lg in lingua inglese è l'unico supportato da Neptune.

Codifica TF-IDF delle funzionalità di testo in Neptune ML

Neptune ML può codificare i valori delle proprietà di testo come funzionalità text_tfidf. Questa codifica converte la sequenza di parole nel testo in un vettore numerico utilizzando un vettorizzatore TF-IDF (Term Frequency—Inverse Document Frequency), seguito da un'operazione di riduzione della dimensionalità.

TF-IDF (Term Frequency—Inverse Document Frequency) è un valore numerico destinato a misurare l'importanza di una parola in un set di documenti. Viene calcolato dividendo il numero di volte in cui una parola compare in un determinato valore delle proprietà per il numero totale di tali valori delle proprietà in cui compare.

Ad esempio, se la parola "kiss" compare due volte nel titolo di un determinato film (ad esempio, "kiss kiss bang bang") e "kiss" compare nel titolo di 4 film in tutto, allora il valore TF-IDF di "kiss" nel titolo "kiss kiss bang bang" sarà 2 / 4 .

Il vettore creato inizialmente ha d dimensioni, dove d è il numero di termini univoci in tutti i valori delle proprietà di quel tipo. L'operazione di riduzione della dimensionalità utilizza una proiezione sparse casuale per ridurre tale numero a un massimo di 100. Viene quindi generato il vocabolario di un grafo unendo tutte le funzionalità text_tfidf al suo interno.

È possibile controllare il vettorizzatore TF-IDF in diversi modi:

  • max_features: usando il parametro max_features è possibile limitare il numero di termini nelle funzionalità text_tfidf a quelli più comuni. Ad esempio, se si imposta max_features su 100, vengono inclusi solo i primi 100 termini più utilizzati. Il valore predefinito per max_features, se non viene impostato esplicitamente, è 5.000.

  • min_df: usando il parametro min_df è possibile limitare il numero di termini nelle funzionalità text_tfidf a quelli con almeno una frequenza nel documento specificata. Se ad esempio si imposta min_df su 5, vengono utilizzati solo i termini che compaiono in almeno 5 valori delle proprietà diversi. Il valore predefinito per min_df, se non viene impostato esplicitamente, è 2.

  • ngram_range: il parametro ngram_range determina quali combinazioni di parole vengono trattate come termini. Se ad esempio si imposta ngram_range su [2, 4], nel titolo "kiss kiss bang bang" verranno trovati i 6 termini seguenti:

    • Termini di 2 parole: "kiss kiss", "kiss bang" e "bang bang".

    • Termini di 3 parole: "kiss kiss bang" e "kiss bang bang".

    • Termini di 4 parole: "kiss kiss bang bang".

    L'impostazione predefinita per ngram_range è [1, 1].

Funzionalità datetime in Neptune ML

Neptune ML può convertire parti dei valori della proprietà datetime in funzionalità categoriali codificandole come array one-hot. Usa il parametro datetime_parts per specificare una o più delle seguenti parti da codificare: ["year", "month", "weekday", "hour"]. Se non imposti datetime_parts, per impostazione predefinita vengono codificate tutte e quattro le parti.

Ad esempio, se l'intervallo di valori datetime comprende gli anni dal 2010 al 2012, le quattro parti della voce datetime 2011-04-22 01:16:34 sono le seguenti:

  • year: [0, 1, 0].

    Poiché l'intervallo comprende solo 3 anni (2010, 2011 e 2012), l'array one-hot contiene tre voci, una per ogni anno.

  • month: [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0].

    Qui, l'array one-hot ha una voce per ogni mese dell'anno.

  • weekday: [0, 0, 0, 0, 1, 0, 0].

    Lo standard ISO 8601 dichiara che il lunedì è il primo giorno della settimana e, poiché il 22 aprile 2011 era un venerdì, il valore one-hot del giorno della settimana nell'array si trova in quinta posizione.

  • hour: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0].

    L'ora è impostata sulla 1:00 in un array one-hot a 24 membri.

Il giorno del mese, il minuto e il secondo non sono codificati in modo categoriale.

Se l'intervallo datetime totale in questione include solo date comprese in un singolo anno, non viene codificato alcun array year.

È possibile specificare una strategia di imputazione per inserire i valori datetime mancanti, utilizzando il parametro imputer e una delle strategie disponibili per le funzionalità numeriche.

Codifica delle funzionalità auto in Neptune ML

Anziché specificare manualmente i metodi di codifica delle funzionalità da utilizzare per le proprietà del grafo, puoi impostare auto come metodo di codifica delle funzionalità. Neptune ML tenta quindi di dedurre la migliore codifica delle funzionalità per ogni proprietà in base al tipo di dati sottostante.

Ecco alcune delle euristiche utilizzate da Neptune ML per selezionare le codifiche di funzionalità appropriate:

  • Se la proprietà ha solo valori numerici e può essere convertita in tipi di dati numerici, Neptune ML generalmente la codifica come valore numerico. Tuttavia, se il numero di valori univoci per la proprietà è inferiore al 10% del numero totale di valori e la cardinalità di tali valori univoci è inferiore a 100, Neptune ML utilizza una codifica categoriale.

  • Se i valori delle proprietà possono essere convertiti in un tipo datetime, Neptune ML li codifica come funzionalità datetime.

  • Se i valori delle proprietà possono essere impostati su valori booleani (1/0 o True/False), Neptune ML utilizza la codifica delle categorie.

  • Se la proprietà è una stringa con valori univoci per più del 10% e numero medio di token per valore maggiore o uguale a 3, Neptune ML deduce che il tipo di proprietà è testo e rileva automaticamente la lingua utilizzata. Se la lingua rilevata è una di quelle supportate da fastText, ovvero inglese, cinese, hindi, spagnolo e francese, Neptune ML utilizza text_fasttext per codificare il testo. Altrimenti, Neptune ML utilizza text_sbert

  • Se la proprietà è una stringa non classificata come funzionalità di testo, Neptune ML presume che sia una funzionalità categoriale e utilizza la codifica delle categorie.

  • Se ogni nodo ha il proprio valore unico per una proprietà che viene dedotta come una funzionalità di categoria, Neptune ML elimina la proprietà dal grafo di addestramento perché probabilmente si tratta di un ID non informativo per l'apprendimento.

  • Se è noto che la proprietà contiene separatori di Neptune validi come punto e virgola (";"), Neptune ML può trattare la proprietà solo come MultiNumerical o MultiCategorical.

    • Neptune ML tenta innanzitutto di codificare i valori come funzionalità numerica. Se ha esito positivo, Neptune ML utilizza la codifica numerica per creare funzionalità vettoriali numeriche.

    • In caso contrario, Neptune ML codifica i valori come multi-categoriali.

  • Se Neptune ML non è in grado di dedurre il tipo di dati dei valori di una proprietà, Neptune ML elimina la proprietà dal grafo di addestramento.