zoukankan      html  css  js  c++  java
  • 基于w2v词向量聚类出现的问题(有待解决)

    1.训练词向量代码如下:
    #训练词语为向量表示
    def w2v_train(self):

    ques = self.cu.execute('select question from activity')#将所有问题内容作为预料训练一个w2v模型
    da_all = []
    for d in ques:
    da_all.append(d[0])
    sentences = self.get_text(da_all)
    model = Word2Vec()
    model.build_vocab(sentences)
    model.train(sentences,total_examples = model.corpus_count,epochs = model.iter)
    model.save("./tmp/user_w2corpus")
    训练的结果为一个词一个向量
    2.重新将某用户的每个问题取出来进行分词,然后聚类
    def simmetric_topic_A(self,clust_num,userid):
    from sklearn.cluster import KMeans
    from sklearn.externals import joblib
    texts=self.get_dict(userid)[1] # 词汇
    texts_len=len(texts)
    model = gensim.models.Word2Vec.load('./tmp/user_w2corpus')
    texts_vec=[]#将每个计算完单个句子的向量的结果存储到该列表即返回句子向量
    X=[]
    for text in texts:#将每个句子循环一次
    text_vec=np.zeros((100,))#由于默认的w2v训练得到的向量维度为100,所以初始化为100,开始初始化为0,但是如果该句子中只有一个词汇并且该词汇没有训练到,则维度无法与之前保持一致
    for t in text:#每个句子中的每个词汇的向量求和
    try:
    # text_vec+=model[t]#得到句子向量
    X.append(model[t])#将词加入X,某个词如果出现在多个文档中,则会加入X多次
    except Exception as e:
    print('训练的向量集合中没有留下该词汇',e)
    3.发现聚类效果还可以,但是用来聚类的词由于每个问题中会有重复词,所以会导致最后用于聚类的词有很多一样的,于是我将词去重后重新聚类,但是效果却十分不好,聚类的质心根本没有达到想要的效果(质心对应的词不能代表该用户关注的某个主题),
    而有重复词的却达到了我想要的效果,是因为样本量大的原因吗?但是我是通过计算词汇向量之间的相似度来聚类的,不过我控制了聚类个数,但是去重前后的词不变,按理说不该聚类中心变化不是吗???
     
  • 相关阅读:
    The prefix "mvc" for element "mvc:annotation-driven" is not bound 的解决方法
    Intellij Idea14 jstl标签的引入
    17个短视频渠道分成收益全解析
    chrome浏览器插件推荐——Vimium 篇
    从Java代码到字节码(1)
    Java跳出循环-break和continue语句
    Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
    Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.5:test
    XML文件解析
    jpa基于按annotation的hibernate主键生成策略
  • 原文地址:https://www.cnblogs.com/kjkj/p/9768578.html
Copyright © 2011-2022 走看看