1、数据准备:
文本按行存储,分词以空格分割;
2、embedding:
使用word2vec计算每个词组的embedding;
./word2vec -train src.txt -output dst.vec -cbow 0 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -threads 2 -binary 0
./word2vec -train src.txt -output dst.vec -cbow 0 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -threads 2 -binary 1
3、IDF计算:
TF-IDF = 词频(TF) x 逆向文档频率(IDF)
4、样本归一:
计算文章标题向量所有元素之和;
文章标题向量每个元素除以向量和;
结果写入新建文章标题向量;
5、构建样本:
计算每个单词(汉字)归一值与相似度TOP(n)的乘积,生成n个元素的向量;
将每个单词(汉字)的向量元素逐一相加求和,生成该文章标题对应的向量;
6、训练模型:
def do_texts_kmeans(data):
'''训练Kmeans模型'''
kmeans = KMeans(n_clusters=zyb_cluster, max_iter=zyb_maxiter)
kmeans.fit(data)
return kmeans
7、保存模型:
def do_kmeans_model(kmeans):
'''保存Kmeans模型'''
pickle.dump(kmeans, open(file, "wb"))
8、模型预测:
def do_texts_predict(data):
'''预测Kmeans模型'''
kmeans = pickle.load(open(file, "rb"))
return [kmeans.predict([line]) for line in data]
9、主体流程:
构建分词矩阵 -> 计算单词词频 -> 构建分词字典 -> 构建文档向量 -> 生成TFIDF结果 -> 生成归一化结果 -> 构建训练数据 -> 生成Kmeans模型 -> 输出Kmeans模型