unsupervised machine learning examples clustering algorithms python algorithm machine-learning nlp cluster-analysis

python - machine - unsupervised learning algorithms



¿Qué significa la salida del algoritmo de agrupación marrón? (5)

He ejecutado el algoritmo de agrupación marrón de https://github.com/percyliang/brown-cluster y también una implementación de python https://github.com/mheilman/tan-clustering . Y ambos dan algún tipo de binario y otro entero para cada token único. Por ejemplo:

0 the 6 10 chased 3 110 dog 2 1110 mouse 2 1111 cat 2

¿Qué significa el binario y el entero?

Desde el primer https://github.com/percyliang/brown-cluster , el binario se conoce como una bit-string , consulte http://saffron.deri.ie/acl_acl/document/ACL_ANTHOLOGY_ACL_P11-1053/

Pero, ¿cómo puedo saber de la salida que el dog and mouse and cat son un grupo y the and chased no está en el mismo grupo?


Cambie su funcionamiento: ./wcluster --text input.txt --c 3

número de c

este número significa el número de grupo y el valor predeterminado es 50. No puede distinguir los diferentes grupos de palabras porque la entrada predeterminada solo tiene tres oraciones. Cambie 50 grupos en 3 grupos y podrá notar la diferencia.

Ingreso tres tweets en la entrada y doy 3 como parámetro de cluster


En la implementación de Percy Liang ( https://github.com/percyliang/brown-cluster ), el parámetro -C permite especificar el número de grupos de palabras. La salida contiene todas las palabras en el corpus, junto con una cadena de bits que anota el grupo y la frecuencia de la palabra en el siguiente formato: <bit string> <word> <word frequency> . El número de cadenas de bits distintas en la salida es igual al número de grupos deseados y las palabras con la misma cadena de bits pertenecen al mismo grupo.


Los enteros son recuentos de cuántas veces se ve la palabra en el documento. (He probado esto en la implementación de python).

De los comentarios en la parte superior de la implementación de python:

En lugar de usar una ventana (p. Ej., Como en Brown et al., Sección 4), este código computó el PMI usando la probabilidad de que dos grupos seleccionados al azar del mismo documento sean c1 y c2. Además, dado que los números totales de tokens y pares de clústeres son constantes a través de pares, este código utiliza las cuentas en lugar de las probabilidades.

Desde el código en la implementación de python, vemos que genera la palabra, la cadena de bits y el número de palabras.

def save_clusters(self, output_path): with open(output_path, ''w'') as f: for w in self.words: f.write("{}/t{}/t{}/n".format(w, self.get_bitstring(w), self.word_counts[w]))


Mi suposicion es:

De acuerdo con la Figura 2 en Brown et al 1992 , el agrupamiento es jerárquico y para obtener de la raíz a cada palabra "hoja" debe tomar una decisión de arriba / abajo. Si arriba es 0 y abajo es 1, puede representar cada palabra como una cadena de bits.

Desde https://github.com/mheilman/tan-clustering/blob/master/class_lm_cluster.py :

# the 0/1 bit to add when walking up the hierarchy # from a word to the top-level cluster


Si entiendo correctamente, el algoritmo le da un árbol y usted necesita truncarlo en algún nivel para obtener clústeres. En el caso de esas cadenas de bits, solo debes tomar los primeros L caracteres.

Por ejemplo, cortar en el segundo personaje te da dos grupos

10 chased 11 dog 11 mouse 11 cat

En el tercer personaje obtienes

110 dog 111 mouse 111 cat

Sin embargo, la estrategia de corte es un tema diferente.