聚类和绘制词向量 - python 或 R

Posted

技术标签:

【中文标题】聚类和绘制词向量 - python 或 R【英文标题】:Clustering and plotting word vectors - python or R 【发布时间】:2017-11-19 23:12:55 【问题描述】:

所以我是 python(以及 R)和词向量的新手,并且一直坚持如何完成我的下一步,学习如何将其可视化。当我尝试在 python 中工作时,我也愿意将其应用于 R。我将简要说明我已经走了多远以及我想去哪里。

所以我有一个用户列表,他们收到了与该用户相关的 10 部电影的列表。我已经设法获取列表,创建输出 csv 文件并匹配用户属性,如性别、年龄、位置等。我已经提取并创建了电影的属性以及类型和年份。

但接下来,我尝试对用户进行聚类,以查看电影列表与每个用户的相似程度。我这样做的方式是,我提取了每部电影的类型并将它们放在一个列表中。因此,拥有说用户 1“喜剧”、“戏剧”、“浪漫喜剧”列表的用户将类似于另一个喜欢喜剧、浪漫的用户 2,但与喜欢“恐怖”、“犯罪”的用户 3 不同, '惊悚'。我正在想象基于这些类型的大约 5-6 个集群(比如“动作”、“喜剧”、“戏剧”、“家庭”、“恐怖”。)如果我绘制它,我希望看到用户 1 和 2 在一个集群中的集群(在喜剧集群周围),用户 3 在另一个集群中(靠近恐怖集群),依此类推。然后我可以根据年龄、性别等对情节进行着色,以查看相同年龄段的人是否喜欢类似的电影,或者我会看到更多的男性更接近“动作”电影集群,而更多的女性更接近“浪漫”?

这就是我卡住的地方。我查看了 sckit 以尝试绘制此图,但只是不知道该去哪里。这些列表的长度也不同,与其他用户相比,我已经能够获得用户的余弦相似度。我设法在第二列中创建了用户编号和流派列表的数据框。我已经成功地创建了一个 csv 文件,其中包含用户和流派,并将它们分开放在自己的列中。我现在如何获取这些信息并将其聚类或绘制在向量空间中?下面是我能够构建并用于计算不同用户之间余弦相似度的数据框。

    ID  Genre
0   1   ['Adventure', ""Children's"", 'Drama', 'Comedy', 'Musical', 'Horror', 'Drama', 'Drama', 'Mystery', 'Documentary', 'Comedy', 'Drama', 'Romance', 'Drama', 'Comedy', 'Romance']"
1   2   ['Horror', 'Mystery', 'Thriller', 'Documentary', 'Action', 'Comedy', 'Musical', 'Sci-Fi', 'Horror', 'Sci-Fi', 'Thriller', 'Adventure', 'Animation', ""Children's"", 'Musical', 'Romance', 'Documentary', 'Action', 'Adventure', 'Western', 'Comedy', 'Drama', 'Comedy']"
2   3   ['Documentary', 'Drama', 'Thriller', 'Documentary', 'Comedy', 'Horror', 'Drama', 'Romance', 'Documentary', 'Comedy', 'Drama', 'Romance', 'Action', 'Adventure', 'Sci-Fi', 'War', 'Drama']
3   4   ['Drama', 'War', 'Drama', 'Drama', 'Romance', 'Action', 'Thriller', 'Comedy', 'Horror', 'Horror', 'Comedy', 'Musical', 'Crime', 'Drama', 'Horror', 'Comedy', 'Horror']
4   5   ['Documentary', 'Drama', 'Documentary', 'Comedy', 'Romance', 'Drama', 'Horror', 'Comedy', 'Drama', 'Animation', ""Children's"", 'Action', 'Drama', 'Drama', 'Comedy', 'Romance']"
5   6   ['Horror', 'Documentary', 'Comedy', 'Horror', 'Drama', 'Drama', 'Drama', 'Action', 'Comedy', 'Comedy', 'Horror']
...

【问题讨论】:

【参考方案1】:

我不确定您真正想做什么,但如果您的目标是情绪分析,我会建议您这样做。

a = ['Horror', 'Mystery', 'Thriller', 'Documentary', 'Action', 'Comedy', 'Musical', 'Sci-Fi', 'Horror', 'Sci-Fi', 'Thriller', 'Adventure', 'Animation', 'Musical', 'Romance', 'Documentary', 'Action', 'Adventure', 'Western', 'Comedy', 'Drama', 'Comedy']

>>> b= set(a)

>>> b
'Action', 'Romance', 'Documentary', 'Sci-Fi', 'Adventure', 'Musical', 'Animation', 'Thriller', 'Western', 'Drama', 'Comedy', 'Horror', 'Mystery'

您现在可以将电影类型转换为数值,例如

'Action' = 1

之后你可以对数据进行聚类,但是算法的选择就不是那么简单了。你可以使用k-means,fuzzy c mean或者其他一些算法。你可以阅读更多关于这个here

【讨论】:

以上是关于聚类和绘制词向量 - python 或 R的主要内容,如果未能解决你的问题,请参考以下文章

词向量聚类实验

基于w2v词向量聚类出现的问题(有待解决)

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

NLP︱R语言实现word2vec(词向量)经验总结(消除歧义词向量的可加性)

word2vec 构建中文词向量

Python之酒店评论词向量训练 gensim