Codifica proprietà di testo multilingue in Amazon Neptune per addestrare modelli predittivi PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Codifica proprietà di testo multilingue in Amazon Neptune per addestrare modelli predittivi

Amazon Nettuno ML è una capacità di machine learning (ML) di Amazon Nettuno che ti aiuta a fare previsioni accurate e veloci sui dati del tuo grafico. Sotto il cofano, Neptune ML utilizza Graph Neural Networks (GNN) per sfruttare simultaneamente la struttura del grafo e le proprietà del nodo/bordo per risolvere il compito in questione. I metodi tradizionali utilizzano solo proprietà e nessuna struttura a grafo (ad esempio, XGBoost, Reti Neurali), o solo una struttura a grafo e nessuna proprietà (ad esempio, node2vec, Label Propagation). Per manipolare meglio le proprietà del nodo/bordo, gli algoritmi ML richiedono che i dati siano dati numerici che si comportano bene, ma i dati grezzi in un database possono avere altri tipi, come il testo non elaborato. Per utilizzare questi altri tipi di dati, abbiamo bisogno di fasi di elaborazione specializzate che li convertano dal loro tipo nativo in dati numerici e la qualità dei risultati ML dipende fortemente dalla qualità di queste trasformazioni di dati. Il testo grezzo, come le frasi, è tra i tipi più difficili da trasformare, ma i recenti progressi nel campo dell'elaborazione del linguaggio naturale (NLP) hanno portato a metodi efficaci in grado di gestire testo proveniente da più lingue e un'ampia varietà di lunghezze.

A partire dalla versione 1.1.0.0, Neptune ML supporta codificatori di testo multipli (testo_testo veloce, testo_sbert, testo_parola2vece testo_tfidf), che apportano i vantaggi dei recenti progressi nella PNL e consentono il supporto per proprietà di testo multilingue, nonché requisiti di inferenza aggiuntivi sulle lingue e sulla lunghezza del testo. Ad esempio, in un caso d'uso di raccomandazione di lavoro, i posti di lavoro in diversi paesi possono essere descritti in lingue diverse e la lunghezza delle descrizioni dei lavori varia considerevolmente. Inoltre, Neptune ML supporta un auto opzione che sceglie automaticamente il miglior metodo di codifica in base alle caratteristiche della caratteristica del testo nei dati.

In questo post, illustriamo l'utilizzo di ciascun codificatore di testo, ne confrontiamo vantaggi e svantaggi e mostriamo un esempio di come scegliere i codificatori di testo giusti per un'attività di raccomandazione di lavoro.

Che cos'è un codificatore di testo?

L'obiettivo della codifica del testo è convertire le proprietà edge/node basate su testo in Neptune in vettori di dimensioni fisse da utilizzare nei modelli di apprendimento automatico a valle per la classificazione dei nodi o per attività di previsione dei collegamenti. La lunghezza della funzione di testo può variare molto. Può essere una parola, una frase, una frase, un paragrafo o anche un documento con più frasi (la dimensione massima di una singola proprietà è 55 MB in Nettuno). Inoltre, le funzioni di testo possono essere in diverse lingue. Potrebbero esserci anche frasi che contengono parole in diverse lingue, che definiamo come commutazione di codice.

A partire dalla versione 1.1.0.0, Neptune ML consente di scegliere tra diversi codificatori di testo. Ciascun codificatore funziona in modo leggermente diverso, ma ha lo stesso obiettivo di convertire un campo di valori di testo da Nettuno in un vettore di dimensioni fisse che utilizziamo per costruire il nostro modello GNN utilizzando Nettuno ML. I nuovi encoder sono i seguenti:

  • testo_testo veloce (nuovo) – Usi Fasttext codifica. FastText è una libreria per l'apprendimento efficiente della rappresentazione del testo. text_fasttext è consigliato per le funzionalità che utilizzano una e una sola delle cinque lingue supportate da fastText (inglese, cinese, hindi, spagnolo e francese). Il text_fasttext il metodo può facoltativamente prendere il max_length campo, che specifica il numero massimo di token in un valore di proprietà di testo che verrà codificato, dopodiché la stringa viene troncata. Puoi considerare un token come una parola. Ciò può migliorare le prestazioni quando i valori delle proprietà di testo contengono stringhe lunghe, perché if max_length non è specificato, fastText codifica tutti i token indipendentemente dalla lunghezza della stringa.
  • testo_sbert (nuovo) – Utilizza la frase BERT (SBERTO) metodo di codifica. SBERT è una sorta di metodo di incorporamento di frasi che utilizza i modelli di apprendimento della rappresentazione contestuale, BERT-Networks. text_sbert è consigliato quando la lingua non è supportata da text_fasttext. Nettuno supporta due metodi SBERT: text_sbert128, che è l'impostazione predefinita se si specifica text_sberte text_sbert512. La differenza tra loro è il numero massimo di token in una proprietà di testo che vengono codificati. Il text_sbert128 la codifica codifica solo i primi 128 token, mentre text_sbert512 codifica fino a 512 token. Di conseguenza, utilizzando text_sbert512 può richiedere più tempo di elaborazione di text_sbert128. Entrambi i metodi sono più lenti di text_fasttext.
  • testo_parola2vec - Utilizza Parola2Vec algoritmi originariamente pubblicati da Google per codificare il testo. Word2Vec supporta solo l'inglese.
  • testo_tfidf – Utilizza un termine frequenza inversa della frequenza del documento (TF-IDF) vettorizzatore per la codifica del testo. La codifica TF-IDF supporta funzionalità statistiche che le altre codifiche non supportano. Quantifica l'importanza o la rilevanza delle parole in una proprietà del nodo tra tutti gli altri nodi.

Si noti che text_word2vec ed text_tfidf sono stati precedentemente supportati e i nuovi metodi text_fasttext ed text_sbert sono consigliati rispetto ai vecchi metodi.

Confronto di diversi codificatori di testo

La tabella seguente mostra il confronto dettagliato di tutte le opzioni di codifica del testo supportate (text_fasttext, text_sberte text_word2vec). text_tfidf non è un metodo di codifica basato su modello, ma piuttosto una misura basata sul conteggio che valuta quanto sia rilevante un token (ad esempio una parola) per le caratteristiche del testo in altri nodi o bordi, quindi non includiamo text_tfidf per confronto. Si consiglia di utilizzare text_tfidf quando vuoi quantificare l'importanza o la pertinenza di alcune parole in un nodo o proprietà edge tra tutte le altre proprietà nodo o edge.)

. . testo_testo veloce testo_sbert testo_parola2vec
Capacità del modello Lingua supportata Inglese, cinese, hindi, spagnolo e francese Più di 50 lingue Inglese
Può codificare proprietà di testo che contengono parole in lingue diverse Non Non
Supporto di lunghezza massima Nessun limite di lunghezza massima Codifica la sequenza di testo con la lunghezza massima di 128 e 512 Nessun limite di lunghezza massima
Costo del tempo Caricamento in corso Circa 10 secondi Circa 2 secondi Circa 2 secondi
Inferenza Connessione Rallentare Medio

Nota i seguenti suggerimenti per l'utilizzo:

  • Per i valori delle proprietà di testo in inglese, cinese, hindi, spagnolo e francese, text_fasttext è la codifica consigliata. Tuttavia, non può gestire i casi in cui la stessa frase contiene parole in più di una lingua. Per altre lingue oltre alle cinque che fastText sostiene, usa text_sbert codificante.
  • Se hai molte stringhe di testo del valore di proprietà più lunghe, ad esempio, di 120 token, usa il max_length campo per limitare il numero di token in ogni stringa che text_fasttext codifica.

Per riassumere, a seconda del caso d'uso, consigliamo il seguente metodo di codifica:

  • Se le tue proprietà di testo sono in una delle cinque lingue supportate, ti consigliamo di utilizzare text_fasttext per la sua rapida inferenza. text_fasttext è la scelta consigliata e puoi anche usarla text_sbert nelle due eccezioni seguenti.
  • Se le tue proprietà di testo sono in lingue diverse, ti consigliamo di utilizzare text_sbert perché è l'unico metodo supportato in grado di codificare proprietà di testo contenenti parole in diverse lingue.
  • Se le tue proprietà di testo sono in una lingua che non è una delle cinque lingue supportate, ti consigliamo di utilizzare text_sbert perché supporta più di 50 lingue.
  • Se la lunghezza media delle tue proprietà di testo è maggiore di 128, considera l'utilizzo text_sbert512 or text_fasttext. Entrambi i metodi possono utilizzare la codifica di sequenze di testo più lunghe.
  • Se le tue proprietà di testo sono solo in inglese, puoi utilizzare text_word2vec, ma si consiglia di utilizzare text_fasttext per la sua rapida inferenza.

Demo caso d'uso: attività di raccomandazione del lavoro

L'obiettivo dell'attività di raccomandazione del lavoro è prevedere per quali lavori si candidano gli utenti in base alle loro domande precedenti, alle informazioni demografiche e alla cronologia del lavoro. Questo post utilizza un set di dati Kaggle aperto. Costruiamo il set di dati come un grafico di tipo a tre nodi: lavoro, Utentee città.

Un lavoro è caratterizzato da titolo, descrizione, requisiti, città situata e stato. Un utente viene descritto con le proprietà di specializzazione, tipo di laurea, numero di esperienze lavorative, numero totale di anni di esperienza lavorativa e altro. Per questo caso d'uso, il titolo del lavoro, la descrizione del lavoro, i requisiti del lavoro e le major sono tutti sotto forma di testo.

Nel set di dati, gli utenti hanno le seguenti proprietà:

  • Regione / Stato – Ad esempio, CA o 广东省 (cinese)
  • Maggiore – Ad esempio, Human Resources Management o Lic Cytura Fisica (spagnolo)
  • Tipo di laurea – Ad esempio, Bachelor, Master, PhD o Nessuno
  • Conteggio della storia del lavoro – Ad esempio, 0, 1, 16 e così via
  • Totale anni di esperienza – Ad esempio, 0.0, 10.0 o NAN

I lavori hanno le seguenti proprietà:

  • Titolo – Ad esempio, assistente amministrativo o Lic Cultura Física (spagnolo).
  • Descrizione – Ad esempio, "Questa posizione di assistente amministrativo è responsabile dell'esecuzione di una serie di funzioni di supporto amministrativo e d'ufficio nei settori delle comunicazioni, ..." Il numero medio di parole in una descrizione è di circa 192.2.
  • Requisiti – Ad esempio, “REQUISITI DI LAVORO: 1. Attenzione ai dettagli; 2.Capacità di lavorare in un ambiente frenetico;3.Fatturazione…”
  • Regione / Stato: – Ad esempio, CA, NY e così via.

Il tipo di nodo città come Washington DC e Orlando FL ha solo l'identificatore per ogni nodo. Nella sezione seguente, analizzeremo le caratteristiche delle diverse caratteristiche del testo e illustreremo come selezionare i codificatori di testo appropriati per le diverse proprietà del testo.

Come selezionare diversi codificatori di testo

Per il nostro esempio, il Maggiore ed Titolo le proprietà sono in più lingue e hanno brevi sequenze di testo, quindi text_sbert è raccomandato. Il codice di esempio per il parametri di esportazione è come segue. Per il text_sbert tipo, non ci sono altri campi di parametro. Qui scegliamo text_sbert128 diverso text_sbert512, perché la lunghezza del testo è relativamente inferiore a 128.

"additionalParams": {
    "neptune_ml": {
        "version": "v2.0",
        "targets": [ ... ],
        "features": [
            {
                "node": "user",
                "property": "Major",
                "type": "text_sbert128"
            },
            {
                "node": "job",
                "property": "Title",
                "type": "text_sbert128",
            }, ...
        ], ...
    }
}

I Descrizione ed Requisiti le proprietà sono solitamente in lunghe sequenze di testo. La lunghezza media di una descrizione è di circa 192 parole, che è maggiore della lunghezza massima di input di text_sbert (128). Possiamo usare text_sbert512, ma potrebbe risultare in un'inferenza più lenta. Inoltre, il testo è in un'unica lingua (inglese). Pertanto, consigliamo text_fasttext con la en valore della lingua a causa della sua inferenza veloce e della lunghezza di input non limitata. Il codice di esempio per il parametri di esportazione è come segue. Il text_fasttext la codifica può essere personalizzata utilizzando Lingua ed lunghezza massima. language il valore è richiesto, ma max_length è facoltativo.

"additionalParams": {
    "neptune_ml": {
        "version": "v2.0",
        "targets": [ ... ],
        "features": [
            {
                "node": "job",
                "property": "Description",
                "type": "text_fasttext",
                "language": "en",
                "max_length": 256
            },
            {
                "node": "job",
                "property": "Requirements",
                "type": "text_fasttext",
                "language": "en"
            }, ...
        ], ...
    }
}

Maggiori dettagli sui casi d'uso delle raccomandazioni sul lavoro sono disponibili in Tutorial per il quaderno di Nettuno.

A scopo dimostrativo, selezioniamo un utente, ovvero l'utente 443931, che ha conseguito un Master in 'Management e Risorse umane. L'utente ha fatto domanda per cinque diversi lavori, intitolati "Responsabile delle risorse umane (HR)", "Generalista delle risorse umane", "Responsabile delle risorse umane", "Amministratore delle risorse umane" e "Specialista senior del libro paga". Al fine di valutare le prestazioni dell'attività di raccomandazione, eliminiamo il 50% dei lavori applicati (i bordi) dell'utente (qui eliminiamo "Amministratore delle risorse umane" e "Responsabile delle risorse umane (HR)) e proviamo a prevedere il massimo 10 lavori per cui è più probabile che questo utente si candidi.

Dopo aver codificato le caratteristiche del lavoro e le caratteristiche dell'utente, eseguiamo un'attività di previsione dei collegamenti addestrando un modello di rete convoluzionale a grafo relazionale (RGCN). Il training di un modello Neptune ML richiede tre passaggi: elaborazione dei dati, training del modello e creazione di endpoint. Dopo aver creato l'endpoint di inferenza, possiamo formulare raccomandazioni per l'utente 443931. Dai primi 10 lavori previsti per l'utente 443931 (ad es. Resources Administrator", "HR Analyst", et al.), osserviamo che i due lavori eliminati sono tra le 10 previsioni.

Conclusione

In questo post, abbiamo mostrato l'utilizzo dei codificatori di testo appena supportati in Neptune ML. Questi codificatori di testo sono semplici da usare e possono supportare più requisiti. In sintesi,

  • text_fasttext è consigliato per le funzionalità che utilizzano una e solo una delle cinque lingue supportate da text_fasttext.
  • text_sbert è consigliato per il testo che text_fasttext non supporta.
  • text_word2vec supporta solo l'inglese e può essere sostituito da text_fasttext in qualsiasi scenario.

Per maggiori dettagli sulla soluzione, vedere il Repository GitHub. Si consiglia di utilizzare i codificatori di testo sui dati del grafico per soddisfare le proprie esigenze. Puoi semplicemente scegliere il nome di un codificatore e impostare alcuni attributi del codificatore, mantenendo invariato il modello GNN.


Circa gli autori

Codifica proprietà di testo multilingue in Amazon Neptune per addestrare modelli predittivi PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Jiani Zhang è uno scienziato applicato di AWS AI Research and Education (AIRE). Lavora alla risoluzione di applicazioni del mondo reale utilizzando algoritmi di apprendimento automatico, in particolare problemi relativi al linguaggio naturale e ai grafici.

Timestamp:

Di più da Apprendimento automatico di AWS