vectores - vecteezy
¿Cómo se puede convertir una oración o un documento en un vector? (4)
Tenemos modelos para convertir palabras a vectores (por ejemplo, el modelo word2vec). ¿Existen modelos similares que convierten oraciones / documentos en vectores, usando quizás los vectores aprendidos para las palabras individuales?
1) Método Skip gram: papel aquí y la herramienta que lo usa, google word2vec
2) Usando LSTM-RNN para formar representaciones semánticas de oraciones.
3) Representaciones de oraciones y documentos . El vector de párrafo se presenta en este documento. Básicamente es un algoritmo no supervisado que aprende representaciones de características de longitud fija de fragmentos de texto de longitud variable, como oraciones, párrafos y documentos.
4) Aunque este paper no forma vectores de oración / párrafo, es bastante simple hacer eso. Uno puede simplemente conectar los vectores de palabras individuales (se encuentran los vectores de palabras Glove para obtener el mejor rendimiento) y luego puede formar una representación vectorial de la oración / párrafo completo.
Hay muchas formas de responder esta pregunta. La respuesta depende de tu interpretación de frases y oraciones.
Estos modelos de distribución, como word2vec
que proporcionan una representación vectorial para cada palabra, solo pueden mostrar cómo una palabra se usa generalmente en un contexto de ventana base en relación con otras palabras. En función de esta interpretación de las relaciones contexto-palabra, puede tomar el vector promedio de todas las palabras en una oración como representación vectorial de la oración. Por ejemplo, en esta oración:
los vegetarianos comen vegetales
Podemos tomar el vector normalizado como representación vectorial:
El problema está en la naturaleza compositiva de las oraciones. Si toma los vectores de palabras promedio como se indica anteriormente, estas dos oraciones tienen la misma representación vectorial:
las verduras comen los vegetarianos.
Hay muchas investigaciones en la moda de distribución para aprender estructuras de árboles a través del procesamiento de corpus. Por ejemplo: Análisis con Gramáticas de vectores composicionales . Este video también explica este método.
Nuevamente quiero enfatizar en la interpretación. Estos vectores de oraciones probablemente tengan sus propios significados en su aplicación. Por ejemplo, en el análisis del sentimiento en este proyecto en Stanford , el significado que están buscando es el sentimiento positivo / negativo de una oración. Incluso si encuentra una representación vectorial perfecta para una oración, hay debates filosóficos que no son significados reales de las oraciones si no puede juzgar la condición de verdad (David Lewis "General Semantics" 1970). Es por eso que hay líneas de trabajos que se enfocan en la visión por computadora ( este documento o este ). Mi punto es que puede depender completamente de tu aplicación e interpretación de vectores.
Todo depende de:
- qué modelo de vector estás usando
- cuál es el propósito del modelo
- su creatividad en la combinación de vectores de palabras en un vector de documentos
Si ha generado el modelo usando Word2Vec, puede probar:
- Doc2Vec : https://radimrehurek.com/gensim/models/doc2vec.html
- Wiki2Vec : https://github.com/idio/wiki2vec
O puede hacer lo que algunas personas hacen, es decir, sumar todas las palabras de contenido en los documentos y dividir por las palabras de contenido, por ejemplo, https://github.com/alvations/oque/blob/master/o.py#L13 (nota: línea 17-18 es un truco para reducir el ruido):
def sent_vectorizer(sent, model):
sent_vec = np.zeros(400)
numw = 0
for w in sent:
try:
sent_vec = np.add(sent_vec, model[w])
numw+=1
except:
pass
return sent_vec / np.sqrt(sent_vec.dot(sent_vec))
Una solución que está un poco fuera de la plataforma, pero probablemente sea difícil de superar en términos de precisión si tiene algo específico que está tratando de hacer:
Construya un RNN (con celdas de memoria LSTM o GRU, comparación aquí ) y optimice la función de error de la tarea real que está tratando de lograr. Alimenta tu oración y la entrena para producir la salida que deseas. Las activaciones de la red después de alimentar su oración son una representación de la oración (aunque es posible que solo le interese la salida de la red).
Puede representar la oración como una secuencia de caracteres codificados en caliente, como una secuencia de palabras codificadas en caliente, o como una secuencia de vectores de palabras (por ejemplo, GloVe o word2vec ). Si usas vectores de palabras, puedes seguir reprogramando los vectores de palabras, actualizando sus pesos, para que también obtengas vectores de palabras personalizados adaptados específicamente para la tarea que estás haciendo.