はじめに
今回は本当にメモ程度に残します。
対策も英語のサイトばかりでしたので。
下記のようなコードで準備したデータをscikit-learnのsvm.SVCでfitすると、データのサイズが違うよ、とエラーが出ました。
# 分かち書きされたテキストのリスト list_wakati = get_words(df_train) # BoW用の辞書 dictionary = make_dict(list_wakati) bow_corpus = get_BoW(dictionary, list_wakati) n_topics = 300 lsi_model = models.LsiModel(bow_corpus, id2word = dictionary, num_topics = n_topics) lsi_corpus = lsi_model[bow_corpus]
理由は、LsiModelで圧縮されたデータは、0を省略するらしく、num_topicsで指定した次元に満たないものができるかららしいです。
対策としては、gensim.matutilsのparse2fullで整形してやるといけるみたいです。
shaped_values = [] # LSIで圧縮すると、サイズが n_topics に満たないものがいくつか作られる # そのため、 sparse2full で整形する for values in lsi_corpus: vec = matutils.sparse2full(values, n_topics) shaped_values.append(vec)
「gensim lsi different size」みたいな感じで検索をかけましたが、なかなかでてこず困りました^^;