Python-LSA mit Sklearn
Ich bin derzeit versuchen zu implementieren LSA mit Sklearn, um Synonyme zu finden in mehrere Dokumente.
Hier ist mein Code:
#import the essential tools for lsa
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.decomposition import TruncatedSVD
from sklearn.metrics.pairwise import cosine_similarity
#other imports
from os import listdir
#load data
datafolder = 'data/'
filenames = []
for file in listdir(datafolder):
if file.endswith(".txt"):
filenames.append(datafolder+file)
#Document-Term Matrix
cv = CountVectorizer(input='filename',strip_accents='ascii')
dtMatrix = cv.fit_transform(filenames).toarray()
print dtMatrix.shape
featurenames = cv.get_feature_names()
print featurenames
#Tf-idf Transformation
tfidf = TfidfTransformer()
tfidfMatrix = tfidf.fit_transform(dtMatrix).toarray()
print tfidfMatrix.shape
#SVD
#n_components is recommended to be 100 by Sklearn Documentation for LSA
#http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.TruncatedSVD.html
svd = TruncatedSVD(n_components = 100)
svdMatrix = svd.fit_transform(tfidfMatrix)
print svdMatrix
#Cosine-Similarity
#cosine = cosine_similarity(svdMatrix[1], svdMatrix)
Nun, hier ist mein Problem:
die Form der Term-Dokument-Matrix und die tf-idf-Matrix sind die gleichen, die (27,3099). 27 Dokumente und 3099 Wörter.
Nach dem Einzelwert-ZERLEGUNG der Form der Matrix (27,27).
Ich weiß, Sie können die Berechnung der Kosinus-ähnlichkeit von 2 Zeilen zu bekommen, gibt es ähnlichkeit, aber ich glaube nicht, dass ich die similiarity 2 Wörter in meinen Dokumenten dadurch, dass mit dem SVD-Matrix.
Kann mir jemand erklären, was der SVD-Matrix darstellt und in denen immer wie ich verwenden können, um Synonyme zu finden in meinen Unterlagen?
Vielen Dank im Voraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
SVD ist eine dimensionsreduktion-tool, was bedeutet, dass es reduziert die Reihenfolge (Nummer) Ihrer Funktionen zu einer mehr
representative
gesetzt.Vom source-code auf github:
Können wir sehen, dass die zurückgegebene matrix enthält Proben mit reduzierter Anzahl von Bauteilen. Sie können dann mit Abstand-Berechnung, Methoden zur Bestimmung der ähnlichkeit von zwei beliebigen Zeilen.
Hier gibt auch ein einfaches Beispiel von LSA über SVD.