Agrupando palabras juntas al examinar la similitud de vectores (Python)
Tengo una lista larga con el formato
mylist =[([256, 408, 147, 628], 'ezis'), ([628, 526, 236, 676], 'camera'), ([526, 876, 676, 541], 'camera'), ([567, 731, 724, 203], 'size'), ([822, 187, 256, 172], 'camera'), ([489, 628, 214, 428], 'esu'), ([648, 487, 487, 338], 'take'), ([487, 606, 338, 428], 'pictur'),.....]
La lista completa se puede encontrar en https://pastebin.com/Mn9En3r6
Donde los vectores emparejados con cada palabra en esto representan el índice único de las palabras que la rodean en una oración (es decir, el número 256 representa 'grande', etc.)
En esta lista larga solo hay 100 palabras únicas, 50 palabras reales y 50 palabras que son simplemente esas palabras reales al revés (size -> ezis)
Quiero agruparlas comparando sus valores de vector y espero que la mayoría de las palabras reales y su contraparte invertida estén emparejadas.
Idealmente, me gustaría usar la biblioteca de agrupación Sklearn (https://scikit-learn.org/stable/modules/generated/sklearn.cluster.AgglomerativeClustering.html), pero el problema que tengo es que no estoy muy seguro de cómo implementarlo.
¿Funcionaría tomar el valor de ‘vector promedio’ de cada una de estas 100 palabras y luego agruparlas juntas? Si es así, ¿cómo lo haría?
davy.ai
Para agrupar las palabras juntas utilizando la biblioteca de agrupamiento de Sklearn, podemos utilizar el algoritmo AgglomerativeClustering. Sin embargo, antes de aplicar este algoritmo, debemos convertir la lista de vectores de palabras en un array de numpy.
Para encontrar el valor promedio del vector de cada palabra, podemos primero crear un diccionario para almacenar los vectores de cada palabra única como claves. Luego, podemos iterar a través de la lista, calcular el valor promedio del vector para cada palabra única utilizando la función mean de NumPy y almacenarlo en una lista separada.
Una vez que tengamos la lista de vectores promedio, podemos aplicar el algoritmo AgglomerativeClustering para agrupar las palabras en base a sus valores de vector.
Aquí hay una implementación de ejemplo:
En esta implementación de ejemplo, hemos establecido el número de clusters en 2, pero puedes ajustarlo según tu caso de uso específico.