Python と scikit-learn を使用してドキュメントの単語を LSA ベクトルに変換する方法について何か提案はありますか? ドキュメント全体を lsa ベクトルに変換する方法を説明しているこれらのサイトをこことここで見つけましたが、個々の単語自体を変換することに興味があります。
最終結果は、すべての文からすべてのベクトル (各単語を表す) を合計し、連続した文を比較して意味の類似性を評価することです。
Python と scikit-learn を使用してドキュメントの単語を LSA ベクトルに変換する方法について何か提案はありますか? ドキュメント全体を lsa ベクトルに変換する方法を説明しているこれらのサイトをこことここで見つけましたが、個々の単語自体を変換することに興味があります。
最終結果は、すべての文からすべてのベクトル (各単語を表す) を合計し、連続した文を比較して意味の類似性を評価することです。
文や単語をベクトルに変換することは、ドキュメントの場合と同じです。文は短いドキュメントのようなものであり、単語は非常に短いドキュメントのようなものです。最初のリンクから、ドキュメントをベクターにマッピングするためのコードが得られます。
def makeVector(self, wordString): """ @pre: unique(vectorIndex) """ #Initialise vector with 0's vector = [0] * len(self.vectorKeywordIndex) wordList = self.parser.tokenise(wordString) wordList = self.parser.removeStopWords(wordList) for word in wordList: vector[self.vectorKeywordIndex[word]] += 1; #Use simple Term Count Model return vector
同じ関数を使用して、文または単一の単語をベクトルにマップできます。それらをこの関数に渡すだけです。単語の場合、 の結果は次のwordList
ような単一の値を保持する配列になります。["word"]
マッピング後、結果ベクトルは関連する次元にa を含み、他の場所に s を含む単位ベクトルになります。1
0
例:
vectorKeywordIndex
(語彙のすべての単語を表す):
{"hello" : 0, "world" : 1, "this" : 2, "is" : 3, "me" : 4, "answer" : 5}
ドキュメント"this is me"
:[0, 0, 1, 1, 1, 0]
ドキュメント"hello answer me"
:[1, 0, 0, 0, 1, 1]
単語"hello"
:[1, 0, 0, 0, 0, 0]
単語"me"
:[0, 0, 0, 0, 1, 0]
その後、次のコードを使用して、コサイン類似度などのいくつかの基準を通じて類似度を評価できます。
def cosine(vector1, vector2): """ related documents j and q are in the concept space by comparing the vectors using the code: cosine = ( V1 * V2 ) / ||V1|| x ||V2|| """ return float(dot(vector1,vector2) / (norm(vector1) * norm(vector2)))
または scikit-learn のsklearn.metrics.pairwise.cosine_similarityを使用します。
from sklearn.metrics.pairwise import cosine_similarity
sim = cosine_similarity(x, y)