¿Cómo uso una incrustación de palabras para asignar un documento a un vector de características, adecuado para su uso con aprendizaje supervisado?
Una incrustación de palabras asigna cada palabra a un vector , donde es un número no demasiado grande (por ejemplo, 500). Las incrustaciones de palabras populares incluyen word2vec y Glove .
Quiero aplicar el aprendizaje supervisado para clasificar documentos. Actualmente estoy asignando cada documento a un vector de características usando la representación de bolsa de palabras, luego aplico un clasificador listo para usar. Me gustaría reemplazar el vector de características de la bolsa de palabras con algo basado en una inclusión de palabras pre-entrenada existente, para aprovechar el conocimiento semántico que contiene la inclusión de palabras. ¿Hay una forma estándar de hacer eso?
Puedo imaginar algunas posibilidades, pero no sé si hay algo que tenga más sentido. Enfoques de candidatos que he considerado:
Podría calcular el vector para cada palabra en el documento y promediarlas todas. Sin embargo, esto parece que podría perder mucha información. Por ejemplo, con la representación de la bolsa de palabras, si hay algunas palabras que son altamente relevantes para la tarea de clasificación y la mayoría de las palabras son irrelevantes, el clasificador puede aprender fácilmente eso; Si promedio los vectores para todas las palabras en el documento, el clasificador no tiene ninguna posibilidad.
La concatenación de los vectores para todas las palabras no funciona, porque no conduce a un vector de características de tamaño fijo. También parece una mala idea porque será demasiado sensible a la ubicación específica de una palabra.
Podría usar la incrustación de palabras para agrupar el vocabulario de todas las palabras en un conjunto fijo de grupos, por ejemplo, 1000 grupos, donde uso la similitud de coseno en los vectores como una medida de la similitud de palabras. Entonces, en lugar de una bolsa de palabras, podría tener una bolsa de grupos: el vector de características que proporciono al clasificador podría ser un vector 1000, donde el componente número cuenta el número de palabras en el documento que son parte del grupo .
Dada una palabra , estas incorporaciones de palabras me permiten calcular un conjunto de las 20 palabras más similares y su puntaje de similitud . Podría adaptar el vector de características tipo bolsa de palabras usando esto. Cuando veo la palabra , además de incrementar el elemento correspondiente a la palabra en , también podría incrementar el elemento correspondiente a la palabra en , incrementar el elemento correspondiente a la palabra en , y así sucesivamente.w 1 , ... , w 20 s 1 , ... , s 20 w w 1 w 1 s 1 w 2 s 2
¿Existe algún enfoque específico que pueda funcionar bien para la clasificación de documentos?
No estoy buscando el párrafo 2vec o doc2vec; esos requieren entrenamiento en un gran corpus de datos, y no tengo un gran corpus de datos. En cambio, quiero usar una incrustación de palabras existente.
Respuestas:
Una técnica simple que parece funcionar razonablemente bien para textos cortos (p. Ej., Una oración o un tweet) es calcular el vector para cada palabra en el documento y luego agregarlos usando la media coordinada, min o max.
TL; DR: Sorprendentemente, la concatenación de min y max funciona razonablemente bien.
Referencia:
Aprendizaje de representación para textos muy cortos utilizando agregación de incrustación de palabras ponderadas Cedric De Boom, Steven Van Canneyt, Thomas Demeester, Bart Dhoedt. Letras de reconocimiento de patrones; arxiv: 1607.00570. resumen , pdf . Ver especialmente las tablas 1 y 2.
Créditos: Gracias a @ user115202 por llamar mi atención sobre este documento.
fuente
Puede usar doc2vec de manera similar a word2vec y usar un modelo previamente entrenado de un corpus grande. Luego use algo como
.infer_vector()
en gensim para construir un vector de documento. El entrenamiento doc2vec no necesariamente debe provenir del conjunto de entrenamiento.Otro método es usar una red RNN, CNN o feed forward para clasificar. Esto combina efectivamente los vectores de palabras en un vector de documento.
También puede combinar características dispersas (palabras) con características densas (vector de palabras) para complementarse entre sí. Entonces, su matriz de características sería una concatenación de la matriz de bolsa escasa de palabras con el promedio de vectores de palabras. https://research.googleblog.com/2016/06/wide-deep-learning-better-together-with.html
Otro método interesante es utilizar un algoritmo similar a word2vec, pero en lugar de predecir una palabra objetivo, puede predecir una etiqueta objetivo. Esto sintoniza directamente los vectores de palabras con la tarea de clasificación. http://arxiv.org/pdf/1607.01759v2.pdf
Para métodos más ad hoc, puede intentar sopesar las palabras de manera diferente según la sintaxis. Por ejemplo, puede pesar los verbos con más fuerza que los determinantes.
fuente
Si está trabajando con texto en inglés y desea comenzar con la inserción de palabras previamente capacitadas, consulte esto: https://code.google.com/archive/p/word2vec/
Esta es la versión C original de word2vec. Junto con este lanzamiento, también lanzaron un modelo entrenado en 100 mil millones de palabras tomadas de los artículos de Google News (ver subsección titulada: "Vectores de palabras y frases pre-entrenados").
En mi opinión y experiencia de trabajar en incrustaciones de palabras, para la clasificación de documentos, un modelo como doc2vec (con CBOW) funciona mucho mejor que una bolsa de palabras.
Como tiene un corpus pequeño, sugiero que inicialice su matriz de incrustación de palabras mediante las incrustaciones previamente capacitadas mencionadas anteriormente. Luego entrene para el vector de párrafo en el código doc2vec. Si se siente cómodo con Python, puede verificar la versión de Gensim, que es muy fácil de modificar.
Consulte también este documento que detalla el funcionamiento interno de word2vec / doc2vec: http://arxiv.org/abs/1411.2738 . Esto facilitará la comprensión del código gensim.
fuente