stringtranslate.com

Modelo de bolsa de palabras

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]

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 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.


.

Solicitud

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 ).

Implementación de Python

# 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 )

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 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.

Ver también

Notas

  1. ^ Sivic, Josef (abril de 2009). "Búsqueda visual eficiente de vídeos emitidos como recuperación de texto" (PDF) . TRANSACCIONES IEEE SOBRE ANÁLISIS DE PATRONES E INTELIGENCIA DE MÁQUINAS, VOL. 31, núm. 4 . oposición. págs. 591–605.
  2. ^ McTear y otros 2016, pág. 167.
  3. ^ Harris, Zellig (1954). "Estructura distributiva". Palabra . 10 (2/3): 146–62. doi :10.1080/00437956.1954.11659520. 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.
  4. ^ Youngjoong Ko (2012). "Un estudio de esquemas de ponderación de términos que utilizan información de clase para la clasificación de textos". SIGIR'12 . ACM .
  5. ^ Weinberger, KQ; Dasgupta A.; Langford J.; Smola A.; Attenberg, J. (2009). "Hashing de funciones para el aprendizaje multitarea a gran escala". Actas de la 26ª Conferencia Internacional Anual sobre Aprendizaje Automático . págs. 1113-1120. arXiv : 0902.2206 . Código Bib : 2009arXiv0902.2206W. doi :10.1145/1553374.1553516. ISBN 9781605585161. S2CID  291713.

Referencias