Doc2Vec Sentence Clustering

Tengo múltiples documentos que contienen múltiples oraciones. Quiero usardoc2vec agrupar (por ejemplo, k-medias) los vectores de oración usandosklearn.

Como tal, la idea es que oraciones similares se agrupan en varios grupos. Sin embargo, no me queda claro si tengo que entrenar cada documento por separado y luego usar un algoritmo de agrupamiento en los vectores de oración. O, si pudiera inferir un vector de oración de doc2vec sin entrenar cada oración nueva.

En este momento, este es un fragmento de mi código:

sentenceLabeled = []
for sentenceID, sentence in enumerate(example_sentences):
    sentenceL = TaggedDocument(words=sentence.split(), tags = ['SENT_%s' %sentenceID])
    sentenceLabeled.append(sentenceL)

model = Doc2Vec(size=300, window=10, min_count=0, workers=11, alpha=0.025, 
min_alpha=0.025)
model.build_vocab(sentenceLabeled)
for epoch in range(20):
    model.train(sentenceLabeled)
    model.alpha -= 0.002  # decrease the learning rate
    model.min_alpha = model.alpha  # fix the learning rate, no decay
textVect = model.docvecs.doctag_syn0

## K-means ##
num_clusters = 3
km = KMeans(n_clusters=num_clusters)
km.fit(textVect)
clusters = km.labels_.tolist()

## Print Sentence Clusters ##
cluster_info = {'sentence': example_sentences, 'cluster' : clusters}
sentenceDF = pd.DataFrame(cluster_info, index=[clusters], columns = ['sentence','cluster'])

for num in range(num_clusters):
     print()
     print("Sentence cluster %d: " %int(num+1), end='')
     print()
     for sentence in sentenceDF.ix[num]['sentence'].values.tolist():
        print(' %s ' %sentence, end='')
        print()
    print()

Básicamente, lo que estoy haciendo ahora es entrenarme en cada oración etiquetada en el documento. Sin embargo, si tiene la idea de que esto podría hacerse de una manera más simple.

Eventualmente, las oraciones que contienen palabras similares deben agruparse e imprimirse. En este punto, la capacitación de cada documento por separado no revela claramente ninguna lógica dentro de los grupos.

Espero que alguien pueda guiarme en la dirección correcta. Gracias.

Respuestas a la pregunta(2)

Su respuesta a la pregunta