トピック分析を実行するために、tf-idf 入力に対して NMF 分解を実行しています。
def decomp(tfidfm, topic_count):
model = decomposition.NMF(init="nndsvd", n_components=topic_count, max_iter=500)
H = model.fit_transform(tfidfm)
W = model.components_
return W, H
これは、トピックから用語への割り当てで構成されるモデル定義であるWと、ドキュメントからトピックへの割り当て行列であるHを返します。
これまでのところ、H を使用して、トピックのリストへの用語頻度による関連性に基づいてドキュメントを分類できます。トピックのリストは、用語頻度との関連性にも基づいています。
後で再適用できるように、トピック用語の関連付けをディスクに保存したいと思います-ここで説明されている方法 [ https://stackoverflow.com/questions/8955448]を採用して、W の疎行列の再表現を保存します.
私が今やりたいことは、同じプロセスを実行し、トピック定義行列 W のみを修正することです.
ドキュメントでは、次の行に沿って呼び出しパラメーターに W を設定できるようです。
def applyModel(tfidfm,W,topic_count):
model = decomposition.NMF(init="nndsvd", n_components=topic_count, max_iter=500)
H = model.fit_transform(X=tfidfm, W=W)
W = model.components_
return W, H
そして、私はこれを試しましたが、うまくいかないようです。
異なるサイズのボキャブラリを使用して W マトリックスをコンパイルし、それをapplyModel
関数に入力することでテストしました。結果のマトリックスの形状は、W モデルによって定義される必要があります (または、それが私が意図していることです)。しかし、そうではありません。
この質問の短いバージョンは、次のとおりです。マトリックス分解から生成されたトピックモデルを保存して、最初に生成したものとは異なるドキュメントセットを分類するために使用できるようにするにはどうすればよいですか?
つまり、V = WHの場合、 VとWが与えられた場合、どのようにHを返すことができますか?