Función ML.BAG_OF_WORDS

Usa la función ML.BAG_OF_WORDS para calcular una representación de documentos con asignación de token como la bolsa (multiconjunto) de sus palabras, sin tener en cuenta el orden de las palabras y la gramática. Puedes usar ML.BAG_OF_WORDS dentro de la cláusula TRANSFORM.

Sintaxis

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

Argumentos

ML.BAG_OF_WORDS toma los siguientes argumentos:

  • tokenized_document: el valor ARRAY<STRING> que representa un documento al que se le asignó un token. Un documento con asignación de token es una colección de términos (tokens), que se usan para el análisis de texto. Para obtener más información sobre la asignación de token en BigQuery, consulta TEXT_ANALYZE.
  • top_k: Argumento opcional. Toma un valor INT64, que representa el tamaño del diccionario, sin incluir el término desconocido. Los términos top_k que aparecen en la mayoría de los documentos se agregan al diccionario hasta que se cumple este límite. Por ejemplo, si este valor es 20, los 20 términos únicos principales que aparecen en la mayoría de los documentos se agregan y, luego, no se agregan términos adicionales.
  • frequency_threshold: Argumento opcional. Toma un valor INT64 que representa la cantidad mínima de documentos en los que debe aparecer un término para que se incluya en el diccionario. Por ejemplo, si el valor es 3, un término debe aparecer al menos tres veces en el documento con asignación de token para que se lo agregue al diccionario.

Los términos se agregan a un diccionario de términos si cumplen con los criterios para top_k y frequency_threshold; de lo contrario, se consideran término desconocido. El término desconocido siempre es el primer término del diccionario y se representa como 0. El resto del diccionario está en orden alfabético.

Salida

ML.BAG_OF_WORDS muestra un valor para cada fila en la entrada. Cada valor tiene el siguiente tipo:

ARRAY<STRUCT<index INT64, value FLOAT64>>

Definiciones:

  • index: el índice del término que se agregó al diccionario. Los términos desconocidos tienen un índice de 0.
  • value: Los registros correspondientes en el documento.

Cuotas

Consulta Cuotas y límites de las funciones del servicio de Cloud AI.

Ejemplo

En el siguiente ejemplo, se llama a la función ML.BAG_OF_WORDS en una columna de entrada f, sin términos desconocidos:

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;

El resultado es similar al siguiente:

+----+---------------------------------------------------------------------------------------+
| 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"}] |
+----+---------------------------------------------------------------------------------------+

Ten en cuenta que no hay un índice 0 en el resultado, ya que no hay términos desconocidos.

En el siguiente ejemplo, se llama a la función ML.BAG_OF_WORDS en una columna de entrada 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;

El resultado es similar al siguiente:

+----+---------------------------------------------------------------------------------------+
| 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"}] |
+----+---------------------------------------------------------------------------------------+
 

Ten en cuenta que los valores de b y d no se muestran como aparecen en un solo documento cuando el valor de frequency_threshold se establece en 2.

En el siguiente ejemplo, se llama a la función ML.BAG_OF_WORDS con un valor menor de 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;

El resultado es similar al siguiente:

+----+---------------------------------------------------------------------------------------+
| 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"}] |
+----+---------------------------------------------------------------------------------------+
 

Ten en cuenta cómo no se muestra el valor de b, ya que especificamos que queremos los dos términos principales y b solo aparece en un documento.

El siguiente ejemplo contiene dos términos con la misma frecuencia. Uno de los términos está excluido de los resultados debido al orden alfabético.

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;

Los resultados se ven de la siguiente manera:

+----+---------------------------------------------------------------------------------------+
| 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"}] |
+----+---------------------------------------------------------------------------------------+

¿Qué sigue?