El modelo de bolsa de palabras es una representación simplificadora que se utiliza en el procesamiento del lenguaje natural y la recuperación de información (IR). En este modelo, un texto (como una oración o un documento) se representa como la bolsa (multiset) de sus palabras, sin tener en cuenta la gramática e incluso el orden de las palabras, pero manteniendo la multiplicidad . El modelo de bolsa de palabras también se ha utilizado para la visión por computadora . [1]
El modelo de bolsa de palabras se usa comúnmente en métodos de clasificación de documentos donde la (frecuencia de) ocurrencia de cada palabra se usa como una característica para entrenar a un clasificador . [2]
Una referencia temprana a la "bolsa de palabras" en un contexto lingüístico se puede encontrar en el artículo de 1954 de Zellig Harris sobre Estructura de distribución . [3]
Implementación de ejemplo
A continuación, se modela un documento de texto utilizando una bolsa de palabras. Aquí hay dos documentos de texto simples:
(1) A John le gusta ver películas. A Mary también le gustan las películas.
(2) A Mary también le gusta ver partidos de fútbol.
Sobre la base de estos dos documentos de texto, se construye una lista de la siguiente manera para cada documento:
"Juan" , "me gusta" , "a" , "ver" , "películas" , "María" , "me gusta" , "películas" , "también""María" , "también" , "me gusta" , "para" , "ver" , "fútbol" , "juegos"
Representar cada bolsa de palabras como un objeto JSON y atribuir a la variable de JavaScript respectiva :
BoW1 = { "John" : 1 , "me gusta" : 2 , "to" : 1 , "watch" : 1 , "movies" : 2 , "Mary" : 1 , "too" : 1 }; BoW2 = { "María" : 1 , "también" : 1 , "me gusta" : 1 , "a" : 1 , "ver" : 1 , "fútbol" : 1 , "juegos" : 1 };
Cada clave es la palabra y cada valor es el número de apariciones de esa palabra en el documento de texto dado.
El orden de los elementos es libre, por lo que, por ejemplo, {"too":1,"Mary":1,"movies":2,"John":1,"watch":1,"likes":2,"to":1}
también es equivalente a BoW1 . También es lo que esperamos de una estricta representación de objetos JSON .
Nota: si otro documento es como una unión de estos dos,
(3) A John le gusta ver películas. A Mary también le gustan las películas. A Mary también le gusta ver partidos de fútbol.
su representación de JavaScript será:
BoW3 = { "John" : 1 , "me gusta" : 3 , "to" : 2 , "watch" : 2 , "movies" : 2 , "Mary" : 2 , "too" : 1 , "also" : 1 , "fútbol" : 1 , "juegos" : 1 };
Entonces, como vemos en el álgebra de bolsas , la "unión" de dos documentos en la representación de bolsas de palabras es, formalmente, la unión disjunta , sumando las multiplicidades de cada elemento.
.
Solicitud
En la práctica, el modelo Bag-of-words se utiliza principalmente como herramienta de generación de características. Después de transformar el texto en una "bolsa de palabras", podemos calcular varias medidas para caracterizar el texto. El tipo más común de características o características calculadas a partir del modelo de bolsa de palabras es la frecuencia de los términos, es decir, el número de veces que un término aparece en el texto. Para el ejemplo anterior, podemos construir las siguientes dos listas para registrar las frecuencias de términos de todas las palabras distintas (BoW1 y BoW2 ordenadas como en BoW3):
( 1 ) [ 1 , 2 , 1 , 1 , 2 , 1 , 1 , 0 , 0 , 0 ] ( 2 ) [ 0 , 1 , 1 , 1 , 0 , 1 , 0 , 1 , 1 , 1 ]
Cada entrada de las listas se refiere al recuento de la entrada correspondiente en la lista (esta es también la representación del histograma). Por ejemplo, en la primera lista (que representa el documento 1), las dos primeras entradas son "1,2":
- La primera entrada corresponde a la palabra "John", que es la primera palabra de la lista, y su valor es "1" porque "John" aparece una vez en el primer documento.
- La segunda entrada corresponde a la palabra "me gusta", que es la segunda palabra de la lista, y su valor es "2" porque "me gusta" aparece dos veces en el primer documento.
Esta representación de lista (o vector) no conserva el orden de las palabras en las oraciones originales. Esta es solo la característica principal del modelo Bolsa de palabras. Este tipo de representación tiene varias aplicaciones exitosas, como el filtrado de correo electrónico . [1]
Sin embargo, las frecuencias de términos no son necesariamente la mejor representación del texto. Las palabras comunes como "the", "a", "to" son casi siempre los términos con mayor frecuencia en el texto. Por lo tanto, tener un recuento en bruto alto no significa necesariamente que la palabra correspondiente sea más importante. Para abordar este problema, una de las formas más populares de "normalizar" el término frecuencias es ponderar un término por el inverso de la frecuencia del documento, o tf-idf . Además, para el propósito específico de clasificación, se han desarrollado alternativas supervisadas para dar cuenta de la etiqueta de clase de un documento. [4] Por último, la ponderación binaria (presencia / ausencia o 1/0) se utiliza en lugar de frecuencias para algunos problemas (por ejemplo, esta opción se implementa en el sistema de software de aprendizaje automático WEKA ).
modelo de n -grama
El modelo de bolsa de palabras es una representación de documento sin orden: solo importa el recuento de palabras. Por ejemplo, en el ejemplo anterior "A Juan le gusta ver películas. A María también le gustan las películas", la representación de la bolsa de palabras no revelará que el verbo "me gusta" siempre sigue al nombre de una persona en este texto. Como alternativa, el modelo de n -gramas puede almacenar esta información espacial. Aplicando el mismo ejemplo anterior, un modelo de bigrama analizará el texto en las siguientes unidades y almacenará la frecuencia de término de cada unidad como antes.
[ "A John le gusta" , "le gusta" , "ver" , "ver películas" , "A Mary le gusta" , "le gustan las películas" , "las películas también" , ]
Conceptualmente, podemos ver el modelo de bolsa de palabras como un caso especial del modelo de n-gramas, con n = 1. Para n> 1, el modelo se denomina w-shingling (donde w es equivalente an que indica el número de palabras agrupadas). Consulte el modelo de lenguaje para una discusión más detallada.
Implementación de Python
de keras.preprocessing.text import Tokenizerfrase = [ "A John le gusta ver películas. A Mary también le gustan las películas". ]def print_bow ( oración : str ) -> Ninguno : tokenizer = Tokenizer () tokenizer . fit_on_texts ( frase ) secuencias = tokenizer . textos_a_secuencias ( oración ) word_index = tokenizer . word_index bow = {} para clave en word_index : arco [ clave ] = secuencias [ 0 ] . recuento ( índice_palabra [ clave ]) print ( f "Bolsa de palabras frase 1: \ n { arco } " ) print ( f 'Encontramos { len ( word_index ) } tokens únicos.' )print_bow ( oración )
Truco de hash
Una alternativa común al uso de diccionarios es el truco de hash , donde las palabras se asignan directamente a índices con una función de hash. [5] Por lo tanto, no se requiere memoria para almacenar un diccionario. Las colisiones de hash generalmente se tratan a través de la memoria liberada para aumentar la cantidad de cubos de hash. En la práctica, el hash simplifica la implementación de modelos de bolsa de palabras y mejora la escalabilidad.
Ejemplo de uso: filtrado de spam
En el filtrado de spam bayesiano , un mensaje de correo electrónico se modela como una colección desordenada de palabras seleccionadas de una de dos distribuciones de probabilidad: una que representa el spam y otra que representa el correo electrónico legítimo ("ham"). Imagina que hay dos bolsas literales llenas de palabras. Una bolsa está llena de palabras encontradas en mensajes de spam y la otra con palabras encontradas en correos electrónicos legítimos. Si bien es probable que cualquier palabra esté en alguna parte de ambas bolsas, la bolsa de "spam" contendrá palabras relacionadas con el spam como "stock", "Viagra" y "comprar" con mucha más frecuencia, mientras que la bolsa de "jamón" contendrá más palabras relacionadas con los amigos o el lugar de trabajo del usuario.
Para clasificar un mensaje de correo electrónico, el filtro de spam bayesiano asume que el mensaje es un montón de palabras que se han vertido al azar de una de las dos bolsas, y usa la probabilidad bayesiana para determinar en qué bolsa es más probable que esté.
Ver también
Notas
- ↑ a b Sivic, Josef (abril de 2009). "Búsqueda visual eficiente de videos emitidos como recuperación de texto" (PDF) . TRANSACCIONES IEEE SOBRE ANÁLISIS DE PATRONES E INTELIGENCIA DE MÁQUINAS, VOL. 31, NO. 4 . IEEE. págs. 591–605.
- ^ McTear et al 2016, p. 167.
- ^ Harris, Zellig (1954). "Estructura de distribución". Palabra . 10 (2/3): 146–62. doi : 10.1080 / 00437956.1954.11659520 .
Y esta reserva de combinaciones de elementos se convierte en un factor en la forma en que se hacen elecciones posteriores ... porque el lenguaje no es simplemente una bolsa de palabras, sino una herramienta con propiedades particulares que se han ido formando en el curso de su uso.
- ^ Youngjoong Ko (2012). "Un estudio de los esquemas de ponderación de términos utilizando información de clase para la clasificación de texto". SIGIR'12 . ACM .
- ^ Weinberger, KQ; Dasgupta A .; Langford J .; Smola A .; Attenberg, J. (2009). "Función hash para el aprendizaje multitarea a gran escala". Actas de la 26ª Conferencia Internacional Anual sobre Aprendizaje Automático : 1113–1120. arXiv : 0902.2206 . Código Bibliográfico : 2009arXiv0902.2206W .
Referencias
- McTear, Michael (y otros) (2016). La interfaz conversacional . Springer International Publishing.