En el procesamiento del lenguaje natural , una incrustación de oraciones se refiere a una representación numérica de una oración en forma de un vector de números reales que codifica información semántica significativa. [1] [2] [3] [4] [5] [6] [7]
Las incrustaciones de última generación se basan en la representación de capa oculta aprendida de modelos de transformadores de oraciones dedicados. BERT fue pionero en un enfoque que implica el uso de un token [CLS] dedicado antepuesto al comienzo de cada oración ingresada en el modelo; el vector de estado oculto final de este token codifica información sobre la oración y se puede ajustar para su uso en tareas de clasificación de oraciones. Sin embargo, en la práctica, la incrustación de oraciones de BERT con el token [CLS] logra un rendimiento deficiente, a menudo peor que simplemente promediar incrustaciones de palabras no contextuales. SBERT logró más tarde un rendimiento de incrustación de oraciones superior [8] al ajustar las incrustaciones de token [CLS] de BERT mediante el uso de una arquitectura de red neuronal siamesa en el conjunto de datos SNLI.
Otros enfoques se basan vagamente en la idea de la semántica distributiva aplicada a las oraciones. Skip-Thought entrena una estructura de codificador-descodificador para la tarea de predicción de oraciones vecinas. Aunque se ha demostrado que esto logra un peor rendimiento que enfoques como InferSent o SBERT.
Una dirección alternativa es agregar incrustaciones de palabras, como las devueltas por Word2vec , en incrustaciones de oraciones. El enfoque más sencillo es simplemente calcular el promedio de vectores de palabras, conocido como bolsa de palabras continua (CBOW). [9] Sin embargo, también se han propuesto soluciones más elaboradas basadas en la cuantificación de vectores de palabras. Uno de estos enfoques es el vector de incrustaciones de palabras agregadas localmente (VLAWE), [10] que demostró mejoras de rendimiento en tareas de clasificación de texto posteriores.
En los últimos años, la incrustación de oraciones ha despertado un creciente interés debido a sus aplicaciones en bases de conocimiento consultables en lenguaje natural mediante el uso de indexación vectorial para búsqueda semántica. LangChain, por ejemplo, utiliza transformadores de oraciones con el fin de indexar documentos. En particular, se genera una indexación generando incrustaciones para fragmentos de documentos y almacenando tuplas (fragmento de documento, incrustación). Luego, dada una consulta en lenguaje natural, se puede generar la incrustación para la consulta. Luego, se utiliza un algoritmo de búsqueda de similitud top k entre la incrustación de la consulta y las incrustaciones de fragmentos de documentos para recuperar los fragmentos de documentos más relevantes como información de contexto para tareas de respuesta a preguntas . Este enfoque también se conoce formalmente como generación aumentada por recuperación [11].
Aunque no son tan predominantes como BERTScore, las incrustaciones de oraciones se utilizan comúnmente para la evaluación de similitud de oraciones, que se utiliza comúnmente para la tarea de optimizar los parámetros de generación de un modelo de lenguaje grande , que a menudo se realiza mediante la comparación de oraciones candidatas con oraciones de referencia. Al usar la similitud de coseno de las incrustaciones de oraciones de las oraciones candidatas y de referencia como función de evaluación, se puede utilizar un algoritmo de búsqueda en cuadrícula para automatizar la optimización de hiperparámetros [ cita requerida ] .
Una forma de probar las codificaciones de oraciones es aplicarlas al corpus de Oraciones que Implican Conocimiento Compositivo (SICK) [12] tanto para implicación (SICK-E) como para relación (SICK-R).
En [13] los mejores resultados se obtienen utilizando una red BiLSTM entrenada en el Corpus Stanford Natural Language Inference (SNLI). El coeficiente de correlación de Pearson para SICK-R es 0,885 y el resultado para SICK-E es 86,3. Una ligera mejora con respecto a las puntuaciones anteriores se presenta en: [14] SICK-R: 0,888 y SICK-E: 87,8 utilizando una concatenación de Gated recurrent unit bidireccional .