La funzione ML.BAG_OF_WORDS

Utilizza la funzione ML.BAG_OF_WORDS per calcolare una rappresentazione dei documenti tokenizzati come "bag" (multiset) delle sue parole, senza tenere conto dell'ordine e della grammatica delle parole. Puoi utilizzare ML.BAG_OF_WORDS all'interno della clausola TRASFORMA.

Sintassi

ML.BAG_OF_WORDS(
  tokenized_document
  [, top_k]
  [, frequency_threshold]
)
OVER()

Argomenti

ML.BAG_OF_WORDS accetta i seguenti argomenti:

  • tokenized_document: valore ARRAY<STRING> che rappresenta un documento che è stato tokenizzato. Un documento tokenizzato è una raccolta di termini (token) utilizzati per l'analisi del testo. Per saperne di più sulla tokenizzazione in BigQuery, consulta TEXT_ANALYZE.
  • top_k: argomento facoltativo. Prende un valore INT64, che rappresenta la dimensione del dizionario, escluso il termine sconosciuto. I termini top_k visualizzati nella maggior parte dei documenti vengono aggiunti al dizionario fino al raggiungimento di questa soglia. Ad esempio, se questo valore è 20, vengono aggiunti i primi 20 termini univoci presenti nella maggior parte dei documenti senza aggiungere altri termini.
  • frequency_threshold: argomento facoltativo. Prende un valore INT64 che rappresenta il numero minimo di documenti in cui un termine deve comparire per essere incluso nel dizionario. Ad esempio, se questo valore è 3, un termine deve apparire almeno tre volte nel documento tokenizzato per essere aggiunto al dizionario.

I termini vengono aggiunti a un dizionario se soddisfano i criteri di top_k e frequency_threshold, altrimenti vengono considerati come termine sconosciuto. Il termine sconosciuto è sempre il primo termine del dizionario ed è rappresentato come 0. Il resto del dizionario è in ordine alfabetico.

Output

ML.BAG_OF_WORDS restituisce un valore per ogni riga nell'input. Ogni valore ha il seguente tipo:

ARRAY<STRUCT<index INT64, value FLOAT64>>

Definizioni:

  • index: l'indice del termine aggiunto al dizionario. I termini sconosciuti hanno un indice 0.
  • value: i conteggi corrispondenti nel documento.

Quote

Consulta Quote e limiti delle funzioni di servizio IA di Cloud.

Esempio

L'esempio seguente chiama la funzione ML.BAG_OF_WORDS su una colonna di input f, senza termini sconosciuti:

WITH ExampleTable AS (
  SELECT 1 AS id, ['a', 'b', 'b', 'c'] AS f
  UNION ALL
  SELECT 2 AS id, ['a', 'c'] AS f
)

SELECT ML.BAG_OF_WORDS(f, 32, 1) OVER() AS results
FROM ExampleTable
ORDER BY id;

L'output è simile al seguente:

+----+---------------------------------------------------------------------------------------+
| id |                                        results                                        |
+----+---------------------------------------------------------------------------------------+
|  1 | [{"index":"1","value":"1.0"},{"index":"2","value":"2.0"},{"index":"3","value":"1.0"}] |
|  2 |                             [{"index":"1","value":"1.0"},{"index":"3","value":"1.0"}] |
+----+---------------------------------------------------------------------------------------+

Tieni presente che il risultato non contiene l'indice 0, in quanto non sono presenti termini sconosciuti.

L'esempio seguente chiama la funzione ML.BAG_OF_WORDS su una colonna di input f:

WITH ExampleTable AS (
  SELECT 1 AS id, ['a', 'b', 'b', 'b', 'c', 'c', 'c', 'c', 'd', 'd'] AS f
  UNION ALL
  SELECT 2 AS id, ['a', 'c', NULL] AS f
)

SELECT ML.BAG_OF_WORDS(f, 4, 2) OVER() AS results
FROM ExampleTable
ORDER BY id;

L'output è simile al seguente:

+----+---------------------------------------------------------------------------------------+
| id |                                        results                                        |
+----+---------------------------------------------------------------------------------------+
|  1 | [{"index":"0","value":"5.0"},{"index":"1","value":"1.0"},{"index":"2","value":"4.0"}] |
|  2 | [{"index":"0","value":"1.0"},{"index":"1","value":"1.0"},{"index":"2","value":"1.0"}] |
+----+---------------------------------------------------------------------------------------+
 

Tieni presente che i valori di b e d non vengono restituiti perché vengono visualizzati in un solo documento quando il valore di frequency_threshold è impostato su 2.

L'esempio seguente chiama la funzione ML.BAG_OF_WORDS con un valore inferiore top_k:


WITH ExampleTable AS (
  SELECT 1 AS id, ['a', 'b', 'b', 'c'] AS f
  UNION ALL
  SELECT 2 AS id, ['a', 'c', 'c'] AS f
)

SELECT ML.BAG_OF_WORDS(f, 2, 1) OVER() AS results
FROM ExampleTable
ORDER BY id;

L'output è simile al seguente:

+----+---------------------------------------------------------------------------------------+
| id |                                        results                                        |
+----+---------------------------------------------------------------------------------------+
|  1 | [{"index":"0","value":"2.0"},{"index":"1","value":"1.0"},{"index":"2","value":"1.0"}] |
|  2 |                             [{"index":"1","value":"1.0"},{"index":"2","value":"2.0"}] |
+----+---------------------------------------------------------------------------------------+
 

Nota che il valore di b non viene restituito, poiché specifichiamo che vogliamo i due termini principali e b compare solo in un documento.

L'esempio seguente contiene due termini con la stessa frequenza. Uno dei termini è escluso dai risultati a causa dell'ordine alfabetico.


WITH ExampleData AS (
  SELECT 1 AS id, ['a', 'b', 'b', 'c', 'd', 'd', 'd'] as f
  UNION ALL
  SELECT 2 AS id, ['a', 'c', 'c', 'd', 'd', 'd'] as f
)

SELECT id, ML.BAG_OF_WORDS(f, 2 ,2) OVER() as result
FROM ExampleData
ORDER BY id;

I risultati hanno il seguente aspetto:

+----+---------------------------------------------------------------------------------------+
| id |                                         result                                        |
+----+---------------------------------------------------------------------------------------+
|  1 | [{"index":"0","value":"5.0"},{"index":"1","value":"1.0"},{"index":"2","value":"1.0"}] |
|  2 | [{"index":"0","value":"3.0"},{"index":"1","value":"1.0"},{"index":"2","value":"2.0"}] |
+----+---------------------------------------------------------------------------------------+

Passaggi successivi