第7章 构建社区
随着越来越多的人互动、交流、交换信息,或者是在不同的主题上分享共同兴趣,大多数数据科学用例可以使用图表示。虽然很长一段时间以来,非常大的图只被互联网公司、政府和国家安全机构使用,但是现在使用包含数百万个顶点的大型图开始变得越来越普遍。因此,数据科学家面临的主要挑战不一定是找到社区并在图上发现影响者,而是如何以完全分布式和高效的方式来这样做,以克服规模变大而产生的限制。本章使用我们在第6章中描述的NLP提取所识别的人物,构建一个大规模的图示例。
在这一章里,我们将探讨以下主题。
- 使用Spark从Elasticsearch中提取内容,构建一个人物实体图并了解使用Accumulo作为安全图数据库的好处。
- 使用GraphX和三角形最优化编写一个完整的社区发现算法。
- 利用Accumulo特定功能,包括用于观察社区变化的单元级安全性以及用于提供服务器和客户端计算的迭代器。
本章内容完全是技术性的,希望读者已经熟悉图论、消息传递和Pregel API。请读者阅读本章中提到的每篇文章。
7.1 构建一个人物图谱
我们之前使用NLP实体识别从HTML原始格式文本中识别人物。在本章中,我们试图推测这些实体之间的关系,并发现它们周围可能存在的社区,从而进入一个更深的层面。
7.1.1 联系链
对于新闻文章,我们首先需要问自己一个基本问题:什么定义了两个实体之间的关系?最恰当的答案可能是使用第6章中描述的斯坦福NLP库来研究字句。给定下面的输入语句:
“Yoko Ono said she and late husband John Lennon shared a close relationship with David Bowie”
我们可以很容易地提取句法树,这是一种语言学家用来建模句子如何被语法构建的结构,在这种结构中每个元素都标识出类型,如名词(NN)、动词(VR)或限定词(DT)等,以及它在句子中的相对位置: ...
Get 精通Spark数据科学 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.