微博用户兴趣建模系统整体架构如图1所示,其由实时系统和离线挖掘系统两个子系统构成。因为每时每刻都有大量微博用户发布新的微博,实时系统需要及时抽取兴趣词和用户兴趣分类,而离线挖掘系统的目的则是优化用户兴趣系统效果。

图1.微博用户兴趣建模系统整体架构

  每当有用户发布新的微博,则这条微博作为新信息进入实时Feed流队列,为了增加系统快速处理能力,实时系统由多台机器的分布式系统构成,通过Round Robin算法将实时Feed流队列中新发布的微博根据发布者的UID分发到分布式系统的不同机器中,为了保证系统的容错性,由Master主机和Slave机器组成一个机器组,监控系统实时监控机器和服务的运行状态,一旦发现Master机器故障或者服务故障,则实时将服务切换到Slave机器,当故障机器恢复时,监控系统负责将服务切换回Master 机器。

  离线挖掘系统是构建在Hadoop系统上的,通过MapReduce任务来执行挖掘算法,目标是优化用户兴趣词挖掘效果。

实时抽取系统

  对于实时抽取系统来说,每台服务器可以承载大约1亿用户的用户兴趣挖掘。当用户发布微博后,此信息实时进入原始Feed流队列中,语义处理单元针对每条微博快速进行语义计算,语义处理单元采取多任务结构,依次对微博进行分词,焦点词抽取以及微博分类计算。焦点词抽取与传统的关键词抽取有很大差异,因为微博比较短小,如果采取传统的TF.IDF框架抽取关键词效果并不好,所以我们提出了焦点词抽取的概念,不仅融合传统的TF.IDF等计算机制,也考虑了单词在句中出现位置,词性,是否命名实体,是否标题等十几种特征来精确抽取微博所涉及的主体内容,避免噪音词的出现。微博分类则通过统计分类机制将微博分到内部定义的多级分类体系中。

  当微博经过语义处理单元处理后,已经由原始的自然语言方式转换为由焦点词和分类构成的语义表示。每条微博有两个关键的Key:微博ID和用户ID,经过语义处理后,系统实时将微博插入“Feed语义表示Redis数据库”中,每条记录以微博ID为key,value则包含对应的UID以及焦点词向量和分类向量。考虑到每天每个用户可能会发布多条微博,为了能够有效控制“Feed语义表示Redis数据库”数据规模在一定范围,系统会监控“Feed语义表示Redis数据库”大小,当大小超出一定范围时,即将微博数据根据用户ID进行合并进入“User语义表示Redis数据库”。

  在用户不活跃时段,系统会将“User语义表示Redis数据库”的内容和保存在Mysql中的用户历史兴趣信息进行合并,在合并时会考虑时间衰减因素,将当日微博用户新发表的内容和历史内容进行融合。为了增加系统效率,会设立一个历史信息缓存Redis数据库,首先将部分用户的历史数据读入内存,在内存完成合并后写入mysql进行数据更新。

离线挖掘系统

  出于精准定位用户兴趣的目的,在实时抽取系统已经通过“焦点词抽取”以及历史合并时采取一些特殊合并策略来优化算法,但是通过实际数据分析发现,有些用户的兴趣词向量还包含不少噪音,主要原因在于:微博用户在发布微博或者转发微博时有很大的随意性,并非每条用户发布的微博都能够表示用户的兴趣,比如用户转发一条“有奖转发”的微博,目的在于希望能够通过转发中奖,所以其微博内容并不能反映用户兴趣所在。为了能够更加精准地从用户发布内容定位用户兴趣词,我们通过对实时系统累积的用户历史兴趣进行离线挖掘系统来进一步优化系统效果。

  离线挖掘的基本逻辑是:微博用户发布的微博有些能够代表个人兴趣,有些不能代表个人兴趣。离线挖掘的基本目标是对实时系统累积的个人兴趣词进行判别,过滤掉不能代表个人兴趣的内容,只保留能够代表个人兴趣的兴趣词。我们假设如果用户具有某个兴趣点,那么他不会只发布一条与此相关的微博,一般会发布多条语义相近的微博,通过是否经常发布这个兴趣类别的微博可以作为过滤依据。比如假设某个用户是苹果产品忠实用户,那么他可能会经常发布苹果产品相关内容。

  但是问题在于:如何知道两条微博是否语义相近?更具体而言,通过实时抽取系统累积的用户兴趣已经以若干兴趣词的表示方式存在,那么问题就转换成:如何知道两个单词是否语义相近?如何将语义相近的兴趣词进行聚类?如何判别聚类后的兴趣词哪些可以保留哪些需要过滤?

  我们通过图挖掘算法来解决上述问题,将某个用户历史累计的兴趣词构建一个语义相似图,任意两个单词之间的语义相似性通过计算单词之间的上下文相似性来获得,如果两个单词上下文相似性高于一定值则在图中建立一条边。然后在这个图上运行Pagerank算法来不断迭代给单词节点打分,当迭代结束后,将得分较高的单词保留作为能够表达用户兴趣的兴趣词,而将其他单词作为噪音进行过滤。

  图3是兴趣词语义相似图的一个具体示例,通过这个图可以看出,如果用户某个兴趣比较突出,则很容易形成一个连接密集的子图,通过在语义相似图上运行Pagerank算法,语义相近的兴趣词会形成得分互相促进加强的作用,密集子图越大,其相互增强作用越明显,最后得分也会越高,所以通过这种方法可以有效识别噪音和真正的用户兴趣。在具体实现时,因为每次运算都是在单个用户基础上,记录之间无耦合性,所以非常适合在hadoop平台下使用MapReduce来分布计算,加快运算效率。

总结感悟

  用户兴趣建模在微博环境下有着非常重要的作用,一个好的用户兴趣建模系统可以有效支持个性化推荐、搜索以及个性化广告推送系统。这篇主要从体系结构角度,简介了微博用户兴趣建模分布式体系结构,并介绍了其中比较关键的数据挖掘算法。另外离线挖掘系统中的对语义相似的兴趣词汇进行分类聚类操作,我们一般使用HanLP中的文本分类聚类算法来实现,微博是通过用户历史的兴趣词构成一个语义相似图,在任意两个单词之间的语义相似性通过计算单词之间的上下文相似性来获得,利用Pagerank算法来不断迭代给单词节点打分,当迭代结束后,将得分较高的单词保留作为能够表达用户兴趣的兴趣词,而将其他单词作为噪音进行过滤。我觉得这种方法很新颖,对我以后的文本分类聚类的操作有了新的启发。

转载于:https://www.cnblogs.com/iCheny/p/11057488.html

《新浪微博用户兴趣建模系统架构》阅读笔记相关推荐

  1. trainer setup_Detectron2源码阅读笔记-(一)Configamp;Trainer

    一.代码结构概览 1.核心部分 configs:储存各种网络的yaml配置文件 datasets:存放数据集的地方 detectron2:运行代码的核心组件 tools:提供了运行代码的入口以及一切可 ...

  2. VoxelNet阅读笔记

    作者:Tom Hardy Date:2020-02-11 来源:VoxelNet阅读笔记

  3. Transformers包tokenizer.encode()方法源码阅读笔记

    Transformers包tokenizer.encode()方法源码阅读笔记_天才小呵呵的博客-CSDN博客_tokenizer.encode

  4. 源码阅读笔记 BiLSTM+CRF做NER任务 流程图

    源码阅读笔记 BiLSTM+CRF做NER任务(二) 源码地址:https://github.com/ZhixiuYe/NER-pytorch 本篇正式进入源码的阅读,按照流程顺序,一一解剖. 一.流 ...

  5. Mina源码阅读笔记(一)-整体解读

    2019独角兽企业重金招聘Python工程师标准>>> 今天的这一节,将从整体上对mina的源代码进行把握,网上已经有好多关于mina源码的阅读笔记,但好多都是列举了一下每个接口或者 ...

  6. “CoreCLR is now Open Source”阅读笔记

    英文原文:CoreCLR is now Open Source 阅读笔记如下: CoreCLR是.NET Core的执行引擎,功能包括GC(Garbage Collection), JIT(将CIL代 ...

  7. QCon 2015 阅读笔记 - 团队建设

    QCon 2015阅读笔记 QCon 2015 阅读笔记 - 移动开发最佳实践 QCon 2015 阅读笔记 - 团队建设 中西对话:团队管理的五项理论和实战 - 谢欣.董飞(今日头条,LinkedI ...

  8. 05《软件需求模式》阅读笔记

    剩下的两个阅读笔记写第二部分.各类需求模式,共八个领域和它的需求模式,这一次写前四个. 基础需求模式,它是所有种类的系统都可能需要的一些东西.系统间接口需求模式使用系统间接口需求模式定义被定义的系统和 ...

  9. [置顶] Linux协议栈代码阅读笔记(一)

    Linux协议栈代码阅读笔记(一) (基于linux-2.6.21.7) (一)用户态通过诸如下面的C库函数访问协议栈服务 int socket(int domain, int type, int p ...

  10. 大型网站技术架构:核心原理与案例分析阅读笔记二

    大型网站技术架构:核心原理与案例分析阅读笔记二 网站架构设计时可能会存在误区,其实不必一味追随大公司的解决方案,也不必为了技术而技术,要根据本公司的实际情况,制定适合本公司发展的网站架构设计,否则会变 ...

最新文章

  1. td里面字体大小怎么改_王者荣耀战区怎么改到其他地方 2020荣耀战区修改方法...
  2. 控制台程序如何加图标
  3. 块编码、对象编码、小波编码、分布式编码【转贴】
  4. react hooks_React Hooks简介
  5. nvidia TX2 CUDA yolov5环境搭建
  6. MySQL Pool
  7. CAD CAM CAE自学手册 ANSYS 15.0有限元分析自学手册_完整版PDF电子书下载
  8. oninput,onpropertychange和onchange的区别
  9. python模块之subprocess
  10. oracle创建用户、创建表空间、授权、建表
  11. 大数据杀熟 算法_大数据杀熟这事,究竟有多没谱?
  12. 分类评价指标(二分类)——f1score sensitivity specificity roc曲线 auc
  13. 问卷中多选题该怎么分析?
  14. 键盘跟这台计算机连接的前一个usb,键盘跟这台计算机连接的前一个usb设备不正常...
  15. JavaScript 实现表格隔行变色
  16. 投影坐标系的shp数据,如何获取到它地理坐标系下的经纬度坐标
  17. 哪些企业必须要注册35类商标?
  18. 不说权术,不说潜规则, 说说职场上的小细节
  19. Adjust接入记录
  20. 销售管理岗位竞聘PPT模板

热门文章

  1. 系统学习深度学习(二十九)--模型压缩
  2. vue 父组件获取接口值传到子组件_vue 项目中 “父组件” 异步获取数据之后,传递给子组件不显示...
  3. linux 进程间广播,Linux系统编程之进程间通信之浅谈信号
  4. mysql ibatis 批量插入_ibatis 批量插入逻辑
  5. 【Ubuntu】deepin安装QQ WeChat
  6. Hive group by后面不能用列别名
  7. Kafka HWLEO概念入门
  8. kafka查看消费位置
  9. hive时间函数入门
  10. BZOJ4011:[HNOI2015]落忆枫音(DP,拓扑排序)