数据挖掘大家有思路吗:几十万个微博用户,几百万条微博,然后推荐相似用户?

2016-07-04 15:13:44 +08:00
 lijinma

数据挖掘新手,有以下需求:

几十万个微博用户,几百万条微博
需要给定一个用户,然后推荐相似的用户。

什么是相似?

有共同爱好

不知道如果给你这样一个需求,会怎么做?

我现在的做法特别 Low:

使用 http://bosonnlp.com/ 分词和词云来提取一个人所有微博的关键字,然后选取低频的词汇,然后通过这些词汇去找人。

但出现一些情况:

  1. 低频词很难找到匹配的人(但是如果可以找到的话,效果很好)
  2. 高频词匹配并不准确。

哎,大家有什么好的思路吗?数据挖掘新手,希望大家赐教。

5034 次点击
所在节点    程序员
29 条回复
murmur
2016-07-04 15:18:33 +08:00
思路就错了 兴趣相似的用户基本就粉了或者互粉了么 肯定先从互粉的人抓起
而且以微博那个超口语化的行文分词也分不出什么来
lijinma
2016-07-04 15:24:17 +08:00
@murmur 哈哈,谢谢你给了我另外一个思路。

但是我的做法有没有价值?
mayokaze
2016-07-04 15:35:27 +08:00
从纯文本分析的话可以考虑 LDA 做主题模型,分词不准的话用 ngram 来做
XianZaiZhuCe
2016-07-04 15:38:14 +08:00
关键字越多相似,用户相似度越高?
mayokaze
2016-07-04 15:39:39 +08:00
更简单点的方法是基于词做 embedding 然后对每个短文本做 bow 的 sparse encoding, 然后对每一条短文本再做一次 sparse encoding 最后用 distance 求相似度,如果维度太高用 pca 或者 sparse coder / auto encoder 降个维
lijinma
2016-07-04 15:45:03 +08:00
@XianZaiZhuCe 对,你的思路是对的,问题是,如果我现在给定你用户 A ,难道你要把几十万用户都跑一遍,按照相似性来排序吗。。

你还有别的思路吗?
lijinma
2016-07-04 15:45:55 +08:00
@mayokaze 一看你就是大神,我没太看懂你的想法,但是我会好好查一下你提到的模型和方法
manhere
2016-07-04 15:47:15 +08:00
1 楼正解,不要分析内容,找共同关注。
mayokaze
2016-07-04 15:48:00 +08:00
@lijinma 不是大神_(:з」∠)_ ,工作是做 nlp 对这方面有点了解,你在 6 楼提到的问题可以用 knn 来算,维度在 100 以下还可以用 kd-tree 来加快检索
lijinma
2016-07-04 15:50:58 +08:00
@mayokaze 哈哈,多谢你提供想法,我先消化下你提到的内容。。
mayokaze
2016-07-04 15:52:02 +08:00
最简单的思路是做一个超级大的向量,对于词表里面的词如果这个用户提过就记 1 否则记 0 ,分布到向量空间里面通过求欧氏距离来做聚类,数据用 kd-tree 来存这样每次查找都是 log 时间了。但是你这样做维度肯定非常大,可以用 kmeans 直接聚中心点,我做过的 case 聚到 300 维效果还是非常好的
lijinma
2016-07-04 15:55:58 +08:00
@mayokaze 恩恩,我想请教下,你是怎么分词的?
mayokaze
2016-07-04 16:00:09 +08:00
@lijinma 我们公司语料比较特殊,为了处理多语言分词是自己定制的。一般对于分词不准的情况可以使用 2gram ,就是比如“我爱北京天安门”分成 我爱 爱北 北京 京天 天安 安门
lijinma
2016-07-04 16:16:07 +08:00
@manhere 恩恩,我会尝试从这个维度来推荐的。
lijinma
2016-07-04 16:17:46 +08:00
@mayokaze 恩,但是用 ngram 分词后,词确实有点多,我暂时使用 Boson 的分词来弄,继续谢谢你。
YORYOR
2016-07-04 16:21:38 +08:00
通过微博分词 挖掘用户兴趣,给用户打标签,分类,新浪微博就是这么做的
lijinma
2016-07-04 16:27:48 +08:00
@YORYOR 恩,请教你个问题:

你们的标签和分类是提前定义好的吗?

还是根据用户的微博动态生成的?

————————————————

恩,我的问题其实是:

1. 给微博分词了,但是如何分词更合理?
2. 分词后,哪些词应该打在用户的身上,不应该把用户所有词都打上去吧?另外如何确定分类?

谢谢你
murmur
2016-07-04 16:58:21 +08:00
是这样的,如果你的数据是最近抓取的,而且没有经过筛选,那么可能很多都是营销号、抽奖号、僵尸号
这样的数据是没有处理意义的
几十万个微博用户真不多 随便一个抽奖就几万个小号转发
lijinma
2016-07-04 17:45:40 +08:00
@murmur 恩恩,用户数据是可靠的数据,没有营销号、抽奖号、僵尸号
menc
2016-07-04 17:47:59 +08:00
@mayokaze 短文本用 LDA 并不好用,尤其对于微博这种口语化的新词众多的文本来说。

劝楼主,
recommending system 就按照 recommending system 的套路来搞,好好学习机器学习,@mayokaze 提的至少是一个上道的建议,帖子里面其他人的土方法大多数不值得一试。

几个点:
1. 构建用户向量,所有的用户都抽象成向量
2. 协同过滤是推荐系统的常用方法
3. 想办法使用合适的主题模型, LDA 对于短文本显然还是不太够用,如果有主题了可以拿来做用户聚类
4. 尝试各种算法来衡量向量的相似度,包括 pmi ,包括 pearson 系数,包括各种距离公式, cosine distance 或者 hamming distance 等等
5. 现有分词足够使用了, n gram 对算力的要求成倍增加,显然不是个好方案。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/290177

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX