El modelo de bolsa de palabras es un modelo de texto que utiliza una representación de texto basada en una colección desordenada (o " bolsa ") de palabras. Se utiliza en el procesamiento del lenguaje natural y la recuperación de información (IR). Ignora el orden de las palabras (y, por tanto, cualquier noción no trivial de gramática [ se necesita aclaración ] ), pero capta 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, por ejemplo, la (frecuencia de) aparición de cada palabra se usa como una característica para entrenar un clasificador . [2]
Una referencia temprana a la "bolsa de palabras" en un contexto lingüístico se puede encontrar en el artículo de Zellig Harris de 1954 sobre Estructura distributiva . [3]
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 María también le gusta ver partidos de fútbol.
A partir de estos dos documentos de texto, se construye una lista de la siguiente manera para cada documento:
"John" , "me gusta" , "para" , "ver" , "películas" , "Mary" , "me gusta" , "películas" , "también""María" , "también" , "le gusta" , "a" , "ver" , "fútbol" , "partidos"
Representando cada bolsa de palabras como un objeto JSON y atribuyéndolo a la variable JavaScript respectiva :
BoW1 = { "John" : 1 , "me gusta" : 2 , "para" : 1 , "ver" : 1 , "películas" : 2 , "Mary" : 1 , "también" : 1 }; BoW2 = { "Mary" : 1 , "también" : 1 , "me gusta" : 1 , "para" : 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 representación estricta 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 en JavaScript será:
BoW3 = { "John" : 1 , "me gusta" : 3 , "para" : 2 , "ver" : 2 , "películas" : 2 , "Mary" : 2 , "también" : 1 , "también" : 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.
.
Las implementaciones del modelo de bolsa de palabras pueden implicar el uso de frecuencias de palabras en un documento para representar su contenido. Las frecuencias se pueden "normalizar" mediante la inversa de la frecuencia del documento, o tf–idf . Además, para fines específicos de clasificación, se han desarrollado alternativas supervisadas para tener en cuenta la etiqueta de clase de un documento. [4] Por último, para algunos problemas se utiliza ponderación binaria (presencia/ausencia o 1/0) en lugar de frecuencias (por ejemplo, esta opción se implementa en el sistema de software de aprendizaje automático WEKA ).
# Asegúrese de instalar primero los paquetes necesarios # pip install --upgrade pip # pip install tensorflow desde tensorflow import keras desde escribiendo import List desde 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 : Lista [ str ]) -> Ninguno : tokenizer = Tokenizer () tokenizer . fit_on_texts ( oración ) secuencias = tokenizador . texts_to_sequences ( oración ) word_index = tokenizer . word_index arco = {} para clave en word_index : arco [ clave ] = secuencias [ 0 ] . contar ( índice_palabra [ clave ]) print ( f "Bolsa de oración de palabras 1: \n { bow } " ) print ( f "Encontramos { len ( word_index ) } tokens únicos." )print_bow ( oración )
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 normalmente se resuelven mediante memoria liberada para aumentar el número de depósitos de hash [ aclaración necesaria ] . En la práctica, el hashing simplifica la implementación de modelos de bolsa de palabras y mejora la escalabilidad.
Y este conjunto de combinaciones de elementos se convierte en un factor en la forma en que se toman decisiones posteriores... porque el lenguaje no es simplemente una bolsa de palabras sino una herramienta con propiedades particulares que se han ido forjando en el curso de su uso.