2017-09-10 16 views
0
from gensim import corpora, models, similarities 

documents = ["This is a book about cars, dinosaurs, and fences"] 

# remove common words and tokenize 
stoplist = set('for a of the and to in - , is'.split()) 
texts = [[word for word in document.lower().split() if word not in stoplist] 
     for document in documents] 

# Remove commas 
texts[0] = [text.replace(',','') for text in texts[0]] 

dictionary = corpora.Dictionary(texts) 
corpus = [dictionary.doc2bow(text) for text in texts] 

lsi = models.LsiModel(corpus, id2word=dictionary, num_topics=2) 

doc = "I like cars and birds" 
vec_bow = dictionary.doc2bow(doc.lower().split()) 

vec_lsi = lsi[vec_bow] 
index = similarities.MatrixSimilarity(lsi[corpus]) 

sims = index[vec_lsi] # perform a similarity query against the corpus 
print(sims) 

In dem obigen Code, den ich zu vergleichen bin wie viel „Dies ist ein Buch über Autos, Dinosaurier, und Zaun“ ist ähnlich wie „Ich mag Autos und Vögel“, um die Kosinusähnlichkeit Technik .Text Ähnlichkeit mit GENSIM und Kosinusähnlichkeit

Die beiden Sätze haben effektiv 1 Wörter gemeinsam, das ist "Autos", aber wenn ich den Code ausführen, bekomme ich, dass sie 100% ähnlich sind. Das ergibt für mich keinen Sinn.

Kann jemand vorschlagen, wie ich meinen Code verbessern kann, damit ich eine vernünftige Nummer bekomme?

Antwort

0

Diese Methoden zur Modellierung von Themen erfordern unterschiedliche, realistische Daten, um sinnvolle Ergebnisse zu erzielen. Spielzeuggroße Beispiele von nur einem oder wenigen Textbeispielen funktionieren nicht gut - und selbst wenn, dann ist es oft nur Glück oder erfundene Eignung.

Insbesondere:

  • ein Modell mit nur einem Beispiel nicht sinnvoll mehrere Themen erstellen, da es keine Kontrast zwischen-Dokumenten ist

  • ein Modell mit Worten vorgestellt zu modellieren es hasn ‚t ignoriert gesehen, bevor diese Worte, so dass Ihr Test doc scheint es das gleiche wie das Wort‚Autos‘- das einzige Wort, um es vor

In diesem ca gesehen hat se, sowohl Ihr einzelnes Schulungsdokument als auch das Testdokument, werden von LSI als 0 Beitrag vom 0. Thema und positiver Beitrag (in verschiedenen Größen) vom ersten Thema modelliert. Da die Kosinus-Ähnlichkeit lediglich den Winkel und nicht die Größe vergleicht, sind beide Dokumente entlang der gleichen Linie vom Ursprung und haben somit keinen Winkel-Unterschied und somit Ähnlichkeit 1.0.

Wenn Sie jedoch bessere Trainingsdaten und mehr als ein Testdokument mit nur einem bekannten Wort haben, werden Sie möglicherweise bessere Ergebnisse erzielen. Sogar ein paar Dutzend Schulungsunterlagen und ein Testdokument mit mehreren bekannten Wörtern könnten helfen ... aber Hunderte oder Tausende oder Zehntausende von Schulungsunterlagen wären noch besser.

Verwandte Themen