127在线民宿 UGC 数据挖掘实战--基于词向量的主题聚类挖掘

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了127在线民宿 UGC 数据挖掘实战--基于词向量的主题聚类挖掘相关的知识,希望对你有一定的参考价值。

参考技术A

参考 《旅游民宿基本要求与评价》 标准中的评级指标辅助定义用户评价主题,本次实验将使用基于 Word2Vec 和 KMeans 主题词聚类的方式研究顾客评论中的主题分布情况。

使用 Pandas 加载在线数据表格,并查看数据维度和第一行数据。

数据属性如下表所示

jieba 词性标注预热,使用 jieba 中的词性标注模块对输入的句子进行处理,产生每个词和对应的词性。

数据预处理
批量对用户评论分词和词性标注,对每一句用户评论进行词性标注并选取其中长度大于 1 的名词,此步骤比较耗时,可以通过进度条观察处理情况。

词向量训练
Word2Vec 是 Google 的一个开源工具,可以把对文本内容的处理简化为向量空间中的向量运算,通过计算出词与词之间的余弦值,计算出两两向量在空间上的相似度,并以此来表示文本语义上的相似度。我们利用 gensim 中的 Word2Vec 建立词向量模型,对上一步提取的词进行词向量训练,训练词语在空间上的表达。

词向量使用
我们看出与“环境”相近的词语。词向量受到训练语料的限制,语料越大、模型效果越好,大家自行可以使用更大的语料进行训练和使用。

尝试使用字典中的一个名词来提取对应的词向量,并打印词向量维度信息。

批量进行提取词向量,直接传入字典的 list 即可,我们发现字典中总共有 3119 个词语。

聚类是一个将数据集中在某些方面相似的数据成员进行分类组织的过程,聚类就是一种发现这种内在结构的技术。本次实验我们使用 KMeans 算法对训练出来的词向量进行聚合,聚合出来的词语簇为一个主题,它是一种迭代求解的聚类分析算法,首先将数据分为 K 组,随机选取 K 个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心,聚类中心以及分配给它们的对象就代表一个聚类。
聚类个数选取
KMeans 算法需要一个初始的聚类个数作为启动聚类的参数,本实验将研究聚类点个数对内部聚类结构的影响规律来寻找最佳聚类个数。

判断合适的 KMeans 聚类点时,最常用的是手肘法。随着聚类个数 k 的增大会大幅增加每个簇的聚合程度,故 SSE(误差平方和) 的下降幅度会很大,而当 k 到达真实聚类数时,再增加 k 所得到的聚合程度回报会迅速变小,所以 SSE 开始的下降幅度会很大,然后随着 k 值的继续增大而趋于平缓,变化关系是类似手肘的形状,而这个肘部对应的 k 值就是数据的真实聚类数。我们通过设置最大的聚类点 cluster_max,利用模型迭代产生的误差平方和,来判断合适的聚类点。通过控制变量的方式选取最佳聚类中心,通过结果趋势图看出,最佳的聚类数在 4 或者 5 附近,后续的主题个数选取可以选择其中的数值进行试验即可。需要耗费一些时间,请耐心等待。

自动化聚类个数选取
通过肘部图观察最佳的聚类个数需要比较专业的经验和人工参与,不适合自动化的聚类。我们简化此自动化选择聚类个数的过程,首先求得 SSE 的均值,利用小于均值的策略也可以选择聚类个数。

我们可以通过使用简单的聚类个数判断策略来找到最佳聚类点。比如我们使用判断当某个聚类个数下的 SSE 的数值小于均值,即选择此聚类个数的下一个聚类个数作为最佳聚类点。

求出最佳的聚类个数。

训练主题聚类模型
我们使用上述自动化方式求得的聚类个数作为初始化的参数,开始对词向量进行主题聚类。

开始进行训练,并产生对每个词的主题预测的聚类类别。

输出聚类中心的坐标,因为有 5 个聚类中心,所以显示 5 个聚类中心的向量。

通过查询每个词的向量和聚类类别,通过与聚类中心进行欧式距离计算,批量计算每个词向量到最近聚类中心点的欧式距离。

将上述计算的主题词、聚类标签、与中心词的欧式距离设置好列名写入 DataFrame,并打印前 5 行。

主题的具体意义可以按照中心词进行抽象,我们下面打印聚类主题的抽象标签。

对不同编号下的主题进行聚合,我们可以发现不同主题下的评价数量的差异,以此挖掘用户比较关注的主题。

分别统计不同 topic lcluster 下的前 topn 个聚类中心点最近的词语。

产生主题序号,抽象表示用户评价主题。

计算在每一个聚类中心附近的聚类主题词,并按照欧式距离进行倒排,中心点既是排在第一个词语,通过同一主题下的主题词来总结此主题的具体意思。但是由于本实验使用的语料过小,此效果随着词向量的规模而变化,训练语料越大,主题聚类效果越好,后续还可以直接使用第三方训练好的词向量模型进行中心词向量化。

我们得出主题聚类的目就是扩充主题词典,并以此挖掘用户兴趣。扩充后的主题词典如下所示:

第二篇: 词向量之Spark word2vector实战

参考技术A word2vector 是google开源的一个生成词向量的工具,以语言模型为优化目标,迭代更新训练文本中的词向量,最终收敛获得词向量。词向量可以作为文本分析中重要的特征,在分类问题、标注问题等场景都有着重要的应用价值。本文总结下了spark word2vector使用过程中遇到的问题,以及给出word2vector使用所需的参数配置,希望能够减少新手在使用过程中遇到的坑,希望有所帮助。

from pyspark.ml.feature import Word2Vec
from pyspark.sql import SQLContext
from pyspark import SparkConf, SparkContext
from pyspark.sql import Row
conf = (SparkConf().set("spark.driver.maxResultSize","2g"))
sc = SparkContext(conf=conf)
sqlContext = SQLContext(sc)
text = sc.textFile("yourfilepath")
documentDF = text.map(lambda x : Row(text=x.split(" "))).toDF()
word2Vec = Word2Vec(vectorSize=200, minCount=5, numPartitions=100,inputCol="text", outputCol="result")
model = word2Vec.fit(documentDF)
vector_model = model.getVectors()
vector_model.saveAsParquetFile("modelpath")

spark-submit
--master yarn-client
--executor-cores 2
--executor-memory 14g
--queue your-queue
--num-executors 100
--driver-memory 10g
--conf spark.ui.port=$RANDOM
--conf spark.shuffle.manager=SORT
--conf spark.shuffle.memoryFraction=0.2
--conf spark.yarn.executor.memoryOverhead=2048
--conf spark.core.connection.ack.wait.timeout=300
--conf spark.akka.frameSize=600 ./word2vector_training.py

以上是关于127在线民宿 UGC 数据挖掘实战--基于词向量的主题聚类挖掘的主要内容,如果未能解决你的问题,请参考以下文章

人工智能算法小白实战-你真的了解词向量吗?

基于出行住宿评论数据的情感分析研究(民宿篇,含python代码)

文本分类实战—— word2vec预训练词向量

自然语言处理Word2Vec 词向量模型详解 + Python代码实战

自然语言处理及词向量模型介绍

第二篇: 词向量之Spark word2vector实战