Tengo dos oraciones, S1 y S2, ambas con un recuento de palabras (generalmente) por debajo de 15.
Cuáles son los algoritmos más útiles y exitosos (aprendizaje automático), que posiblemente sean fáciles de implementar (la red neuronal está bien, a menos que la arquitectura sea tan complicada como Google Inception, etc.).
Estoy buscando un algoritmo que funcione bien sin dedicar demasiado tiempo. ¿Hay algún algoritmo que haya encontrado exitoso y fácil de usar?
Esto puede, pero no tiene que caer en la categoría de agrupamiento. Mi experiencia es del aprendizaje automático, por lo que cualquier sugerencia es bienvenida :)
nlp
clustering
word2vec
similarity
DaveTheAl
fuente
fuente
Respuestas:
La similitud de coseno para el espacio vectorial podría ser su respuesta: http://blog.christianperone.com/2013/09/machine-learning-cosine-similarity-for-vector-space-models-part-iii/
O podrías calcular el vector propio de cada oración. Pero el problema es, ¿qué es la similitud?
"Esto es un árbol", "Esto no es un árbol"
Si desea verificar el significado semántico de la oración, necesitará un conjunto de datos de vectores de palabras. Con el conjunto de datos wordvector podrá verificar la relación entre las palabras. Ejemplo: (Rey - Hombre + mujer = Reina)
Siraj Raval tiene un buen cuaderno de Python para crear conjuntos de datos de vectores de palabras: https://github.com/llSourcell/word_vectors_game_of_thrones-LIVE
fuente
Un enfoque que podría probar es promediar vectores de palabras generados por algoritmos de inclusión de palabras (word2vec, glove, etc.). Estos algoritmos crean un vector para cada palabra y la similitud del coseno entre ellos representa la similitud semántica entre las palabras. En el caso de los vectores promedio entre las oraciones. Un buen punto de partida para conocer más acerca de estos métodos es este artículo: Qué tan bien las incrustaciones de oraciones capturan el significado . Discute algunos métodos de incrustación de oraciones. También le sugiero que busque en el Aprendizaje no supervisado de incrustaciones de oraciones utilizando características de n-Gram composicionales. Los autores afirman que su enfoque supera los métodos más avanzados. También proporcionan el código y algunas instrucciones de uso en este repositorio de Github .
fuente
bert-as-service ( https://github.com/hanxiao/bert-as-service#building-a-qa-semantic-search-engine-in-3-minutes ) ofrece esa solución.
Para responder a su pregunta, implementarlo usted mismo desde cero sería bastante difícil, ya que BERT no es un NN trivial, pero con esta solución puede conectarlo a su algoritmo que utiliza la similitud de oración.
fuente
Debería consultar https://github.com/seatgeek/fuzzywuzzy#usage . fuzzywuzzy es una biblioteca impresionante para la coincidencia de cadenas / texto que proporciona un número entre 0 y 100 en función de lo similares que son dos oraciones. Utiliza la distancia de Levenshtein para calcular las diferencias entre secuencias en un paquete simple de usar. Además, consulte esta publicación de blog para obtener una explicación detallada de cómo fuzzywuzzy hace el trabajo. Este blog también está escrito por el autor fuzzywuzzy
fuente
Este blog tiene la solución para la similitud de texto corto. Utilizan principalmente el modelo de red neuronal BERT para encontrar similitudes entre oraciones. https://medium.com/@vimald8959/sentence-categorisation-short-text-similarity-61bb88fae15e
fuente