Antes de começar, recomendo que você consulte perguntas semelhantes na rede, como /datascience/25053/best-practical-algorithm-for-sentence-similarity e https: // stackoverflow. com / questions / 62328 / existe um algoritmo que diz a semelhança semântica de duas frases
Para determinar a semelhança das sentenças, precisamos considerar que tipo de dados temos. Por exemplo, se você tivesse um conjunto de dados rotulado, isto é, sentenças semelhantes e sentenças diferentes, uma abordagem direta poderia ser usar um algoritmo supervisionado para classificar as sentenças.
Uma abordagem que poderia determinar a similaridade estrutural das sentenças seria calcular a média dos vetores de palavras gerados pelos algoritmos de incorporação de palavras, ou seja, word2vec. Esses algoritmos criam um vetor para cada palavra e a semelhança de cosseno entre elas representa semelhança semântica entre as palavras. (Daniel L 2017)
Usando vetores de palavras, podemos usar as seguintes métricas para determinar a similaridade das palavras.
- Distância cosseno entre incorporação de palavras das palavras
- Distância euclidiana entre incorporação de palavras das palavras
A similaridade de cosseno é uma medida da semelhança entre dois vetores diferentes de zero de um espaço interno do produto que mede o cosseno do ângulo entre eles. O ângulo do cosseno é a medida de sobreposição entre as sentenças em termos de seu conteúdo.
A distância euclidiana entre dois vetores de palavras fornece um método eficaz para medir a similaridade linguística ou semântica das palavras correspondentes. (Frank D 2015)
Como alternativa, você pode calcular o vetor próprio das frases para determinar a similaridade das frases.
Os autovetores são um conjunto especial de vetores associados a um sistema linear de equações (isto é, equação da matriz). Aqui, uma matriz de similaridade de sentenças é gerada para cada cluster e o vetor próprio da matriz é calculado. Você pode ler mais sobre a abordagem baseada no Eigenvector para a classificação de frases neste artigo https://pdfs.semanticscholar.org/ca73/bbc99be157074d8aad17ca8535e2cd956815.pdf
Para o código fonte, Siraj Rawal possui um bloco de notas Python para criar um conjunto de vetores de palavras. Os vetores de palavras podem ser usados para encontrar a semelhança entre as palavras. O código fonte está disponível aqui https://github.com/llSourcell/word_vectors_game_of_thrones-LIVE
Outra opção é um tutorial da Oreily que utiliza a biblioteca gensin Python para determinar a semelhança entre os documentos. Este tutorial usa o NLTK para tokenizar e, em seguida, cria um modelo tf-idf (termo frequência de documento inverso de frequência) do corpus. O tf-idf é então usado para determinar a semelhança dos documentos. O tutorial está disponível aqui https://www.oreilly.com/learning/how-do-i-compare-document-similarity-using-python