En primer lugar, antes de comenzar, le recomiendo que consulte preguntas similares en la red, como /datascience/25053/best-practical-algorithm-for-sentence-similarity y https: // stackoverflow. com / preguntas / 62328 / is-there-an-Algoritmo-que-dice-la-semejanza-semántica-de-dos-frases
Para determinar la similitud de las oraciones, debemos considerar qué tipo de datos tenemos. Por ejemplo, si tuviera un conjunto de datos etiquetado, es decir, oraciones similares y oraciones diferentes, entonces un enfoque directo podría haber sido utilizar un algoritmo supervisado para clasificar las oraciones.
Un enfoque que podría determinar la similitud estructural de las oraciones sería promediar los vectores de palabras generados por algoritmos de inclusión de palabras, es decir, word2vec. Estos algoritmos crean un vector para cada palabra y la similitud del coseno entre ellos representa la similitud semántica entre las palabras. (Daniel L 2017)
Usando vectores de palabras podemos usar las siguientes métricas para determinar la similitud de las palabras.
- Distancia coseno entre las incrustaciones de palabras
- Distancia euclidiana entre incrustaciones de palabras
La similitud del coseno es una medida de la similitud entre dos vectores distintos de cero de un espacio interno del producto que mide el coseno del ángulo entre ellos. El ángulo del coseno es la medida de superposición entre las oraciones en términos de su contenido.
La distancia euclidiana entre dos vectores de palabras proporciona un método efectivo para medir la similitud lingüística o semántica de las palabras correspondientes. (Frank D 2015)
Alternativamente, puede calcular el vector propio de las oraciones para determinar la similitud de las oraciones.
Los vectores propios son un conjunto especial de vectores asociados con un sistema lineal de ecuaciones (es decir, ecuación matricial). Aquí se genera una matriz de similitud de oración para cada grupo y se calcula el vector propio para la matriz. Puede leer más sobre el enfoque basado en Eigenvector para la clasificación de oraciones en este documento https://pdfs.semanticscholar.org/ca73/bbc99be157074d8aad17ca8535e2cd956815.pdf
Para el código fuente, Siraj Rawal tiene un cuaderno de Python para crear un conjunto de vectores de palabras. Los vectores de palabras se pueden usar para encontrar la similitud entre las palabras. El código fuente está disponible aquí https://github.com/llSourcell/word_vectors_game_of_thrones-LIVE
Otra opción es un tutorial de Oreily que utiliza la biblioteca gensin Python para determinar la similitud entre documentos. Este tutorial utiliza NLTK para simular y luego crea un modelo tf-idf (término frecuencia de documento inverso de frecuencia) a partir del corpus. El tf-idf se usa para determinar la similitud de los documentos. El tutorial está disponible aquí https://www.oreilly.com/learning/how-do-i-compare-document-similarity-using-python