使用 NoSQL 技术进行博客观点分析

  • Srini Penchikala
  • 侯伯薇

2012 年 1 月 22 日

话题:PythonDevOps语言 & 开发架构AI

公司越来越愿意使用社交化媒体来了解客户对产品和公司的看法。这表现为一种挑战,即需要一种针对非结构化内容的分析技术,它会取词并与一定的数值度量关联,从而解释内容中的观点。

EMC 公司的 Subramanian Kartik 和 Greenplum 团队正在从事一项与分析博客相关的研究项目,其中会使用MapReduce和 Python 的自然语言工具集(Natural Language Toolkit),与 EMC Greenplum 数据库中的 SQL 分析师一起,使用稀疏向量(sparse vectors)以及 k-means 簇集算法。

Subramanian 在今年的NoSQL Now 2011 大会上发表了关于此项研究的演讲。InfoQ 对其进行了采访,以了解这个项目和他们开发的解决方案背后的架构。

InfoQ: 请您介绍一下关于博客观点分析的 Greenplum 研究项目,以及支持它的架构。

Kartik:观点分析指的是自然语言处理应用程序、计算语言学以及文本分析,从而从源内容中提取个人信息,在我们的项目中,是从一系列博客中提取的。这种分析在社交化媒体数据和传统领域(像包括 e-Discovery 在内的客户)的分析领域变得越来越流行。最终目标是要在大量文档中发现主要概念(dominant concepts)的模式,并把这些文档的子集与概念关联起来。我们在此描述的就是其中的一种情况,即发现博主们关于公司产品和服务内容的主题。

架构中一方面涉及到自然语言处理(在非结构化数据领域),用来对其进行量化,另一方面使用了机器学习算法来进行模式识别(一般针对结构化数据)。这个架构中有趣的部分在于,我们如何使用“NOSQL”方法来解决问题,其中我们利用了 Map/Reduce(通常用Hadoop)以及传统关系型数据库中基于 SQL 的分析方法。

InfoQ: 在解决方案中使用了哪些技术、编程技术和算法?

Kartik:我们使用了 EMC Greenplum 数据库技术在博客素材中寻找这样的模式。尽管 Greenplum 根本上还是一种 MPP 的关系型数据库,但是它非常适合这种分析,因为它可以用像 Perl 和 Python 等高级语言编写的用户代码来处理结构化和非结构化数据。代码是在数据库中执行的,这要么使用的是 Map/Reduce 针对 Greenplum 的接口,要么是通过可调用的 SQL 用户自定义函数。数据处理的管道首先会获取并解析博客文件(都是 HTML 文件),定义定量的文本度量,以使用数值型向量来标识每篇博文,然后再使用机器学习算法来把博文按照主要主题归类。输出是一组以关键主题,或者说表现在博文集中的“观点”为中心的簇集。

我们在 Greenplum 中使用了对 Python 的支持来支撑 Python 自然语言工具集(NLTK),用于解析 HTML、标记化(tokenization)、阻止并停止从原始文本中删除词,然后把得到的术语列表载入到关系型表中。这样做的好处在于我们可以利用开源 NLTK 代码库,而不需要做出任何更改,就可以直接使用 Map/Reduce 接口在 Greenplum 中直接调用它。一旦我们在数据库表中拥有了术语列表,那么就可以对其进行精选,形成定义良好的术语字典,并使用业界标准的计算语言度量,术语频率 × 反文档频率(tf-idf),从而创建唯一描述博客文档的向量。这给了我们向量空间,在其上可以定义“距离”,并使用众所周知的簇集算法在无人值守学习,k-means clustering 等,从而获得最终的结果。这些操作还都是在数据库中完成的,也就是说,我们不需要从 RDBMS 中提取数据,并对其进行处理。对于有兴趣的读者,可以在其他地方找到 tf-idf 和 NLTK 以及 k-means clustering 的描述(例如,维基百科)。

InfoQ: 在解析和分析博客数据方面,和针对传统关系型数据的分析相比,有哪些主要的挑战?

Kartik:它是人类语言! 语言本身对于机器容易产生歧义。但是包括英语在内,每个领域都拥有术语和缩写的本体论(ontology)。移动电话博客看起来和卫生保健博客在特定的用词,以及词的特定意义上都有很大不同。更不用说需要解释说明的大量在社交媒体中的缩写词了。在这里使用的特定度量,以及 tf-idf,是一种用来描绘文档特征的方式,并已经为人们接受用来描述整篇博文的特征。在现实中,博文的各个部分可能会针对不同的主题,或者解释不同的观点。更复杂的机器学习算法,像主题模型(Topic Models,Latent Dirichlet Allocation)可能需要完成更细粒度的分析。有些从业者把句子上的观点与句子的基础联系起来,从而说明表现在博文中的变化。这是广大而且正在成长的研究领域。这里所做的工作只是描述了复杂研究领域的表面内容。相反,关系型数据库通常是数值型的,并且我们已经在基于 SQL 的分析方面有 30 多年的经验,在机器学习的工具和技术方面都已经成熟,因此对其会有更好的理解,并且更易于实现。

InfoQ: 从该项目的工作中,Greenplum 获得了哪些 NoSQL 数据模式或者最佳实践呢?

Kartik:最重要的一点是,我们意识到,一个人必须对我们应该用来解决问题的技术保持思想上的开放。我们当然可以在 Hadoop 中完成所有工作,但是使用 Map/Reduce 和 SQL 来解决问题非常优雅,而且能够突出这两种方式的优势。当数据量增大时,我们发现出现的主要数据模式是需要立即处理数据,并使用 Greenplum 底层的 MPP 架构的计算能力,同时在数据库中进行计算。随着数据列的增多,我们需要让计算与数据更紧密,这样,选择能够支持这种操作的技术就非常重要了。能够使用开源工具的能力也非常重要,这让我们可以更好地利用知识资本,而不需要重复发明轮子。另外,底层平台架构和能够在数据库中运行用户代码的能力对于支持这种操作也非常重要。

InfoQ: 这个项目将来的路线图是怎样的?

Kartik:它描述了功能的情况,可以由我们的客户以及自己针对各种不同的用例来扩展。我期望可以使用这些技术在主要的业界事件发生时——像 EMC 世界大会或 VMWorld 会议等——来分析 Twitter 的实时数据,并把一些虚拟化技术与之关联。理论上,主题模型(像 LDA)更有兴趣研究这种情况,将其作为 k-means clustering 的替代方案——Greenplum 可以在数据库中完成这两项工作。扩展也总是大家的兴趣所在,最终多语言的分析可能需要更多地创新。

查看英文原文:Blog Sentiment Analysis Using NoSQL Techniques
PythonDevOps语言 & 开发架构AI