大数据学习

原文地址

主讲嘉宾:王昊奋

主持人:中关村大数据产业联盟学术委员会主任委员阮彤

承办:中关村大数据产业联盟

嘉宾介绍:

王昊奋:华东理工大学讲师,上海交通大学计算机应用专业博士,对语义搜索、图数据库以及Web挖掘与信息抽取有浓厚的兴趣。在博士就读期间发表了30余篇国际顶级会议和期刊论文,长期在WWW、ISWC等顶级会议担任程序委员会委员。作为Apex数据与知识管理实验室语义组负责人,他主持并参与了多项相关项目的研发,长期与IBM、百度等知名IT企业进行合作,在知识图谱相关的研究领域积累了丰富的经验。

以下为分享实景全文:

王昊奋

众所周知,大数据已经不简简单单是数据大的事实了,而最重要的现实是对大数据进行分析,只有通过分析才能获取很多智能的、深入的、有价值的信息。

来越多的应用涉及到大数据,而这些大数据的属性、包括数量、速度、多样性等等都是呈现了大数据不断增长的复杂性。从而,大数据的分析方法在大数据领域就显得尤为重要,可以说是决定最终信息是否有价值的决定性因素。

从最近的大数据及其技术挑战一文中,提到了从大数据创造价值是一个多步骤过程,包括:数据获取、信息抽取和清理、数据整合,建模和分析,解释和部署等。大数据分析的普遍方法理论,主要与以下几个部分的知识有着密切关联。下面我就抛砖引玉,以此介绍这些领域所涉及的知识,和相关课程以及一些开源工具等。

InformationRetrievalandWebSearch信息检索与Web搜索,信息检索是指从大规模数据集合中搜索满足我们需求的信息(通常是非格式化数据,如文本);

DataMining数据挖掘,大数据分析的理论核心就是数据挖掘算法,指从大量的数据中通过算法搜索隐藏于其中信息的过程。正是因为有这些数据挖掘的算法,我们才能更快速的处理大数据;

MachineLearning机器学习,机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。通过机器学习算法,计算机从数据中自动分析获得规律,并利用规律对未知数据进行预测;

NaturalLanguageProcessing自然语言处理,对于文本类型的数据,自然语言处理是必不可少的一门学科。通俗的讲,自然语言处理是探讨如何让计算机“理解”自然语言;

KnowledgeRepresentationandSemanticTechnologies知识表示和语义技术,相比前面所提到的智能算法不同,这里更强调智能数据(smartdata),研究数据的表示,尤其是语义表示和上层对应的推理、查询、和语义搜索等应用涉及到的技术;

除了上面这些和计算机相关的课程,数学基础知识是其基础。上述的许多课程,都会涉及到数学知识,如概率论、代数、最优化等等,因此,数学的基础知识也是必不可少的内容。

当然这些课程并没有包括大数据挖掘的全部,多媒体挖掘,计算机视觉、数据可视化、并行计算和分布式存储等都未涉及。

下面我将具体介绍每一个领域,其涉及的和大数据挖掘相关的技术点,并将就一些基础内容展开作为大数据人才培训和各种需要大数据相关人才招聘的参考

一.信息检索和Web搜索

1.爬虫(crawling)

这个记得在之前也有相关专家做过分享,这是数据获取的基础,经过这么多年的发展,除了面对surfaceweb(即表层Web,由网页沟通,网页之间通过超链接关联)的常用爬虫,各种面对垂直领域和特定主题的爬虫(focusedcrawler)成为热点。他是实现去哪儿,etao等站点的基础。

另一方面,随着各种动态页面技术的发展,以及javascript客户端类库的丰富和普及,包括各种动态页面的深度网络(deepweb)大量出现,相比surfaceweb中page由超链接关联,这里的交互通过表单填充和大量HTTP请求(包括Ajax等异步调用)来完成页面的跳转和关联,因此deepwebcrawler也成为热点。

此外,随着社交网站的普及,以及各种传感器网络的建立(物联网,车联网,智能家居等),数据更多的呈现动态性(velocity),因此,爬虫的范畴也逐步扩展到面对数据流的监视,过滤和在线订阅等。

相应地和complexeventprocessing(CEP),topicpublishing/subscribing,基于主题的发布和订阅,有紧密的关联,所以能写好crawler不容易,特别是考虑到他的应用范畴不断扩大,且要充分利用吞吐量,同时避免被block等各种模拟人的行为等trick深入研究和探索。

所以,这里我第一个要向大家推荐commoncrawl这个项目。commoncrawl是EUplanetData项目的产物,里面还有很多对webtables或半结构化数据解析的结果,或带RDFa,microformats等语义标注的网页的解析和分析,是做实验和了解web的好途径。

WWW2014webscience中有用这个来做webgraph分析的,和之前的做了比较,对了解web的变化也有好处。这里面说到的其他一些点将在接下来的课程说明中提到。

2.评分(Scoring)&排序(Ranking)

接下来,对于信息检索来说,最重要的是:scoring&ranking,即评分和排序。从最早的对于网页的评分和排序,到后来的多媒体(如图片,视频),对于论坛的帖子,一直到目前针对实体的评分和排序,也就是说万物皆可排序。

这里的评分和排序不仅需要刻画排序对象和查询(query,或用户需求,informationneed)之间的相关性,还需要刻画对象本身的重要程度以及其他的因素(如对广告排序和评分,还需要考虑广告主的bidprice,即出价等),所以评分和排序可以分成2部分,查询相关和查询无关。

我们从最简单的文档排序和评分出发,包括基本的BM25和其变种,基于语言模型的概率检索模型(languagemodelbasedprobabilisticIR),接着近期又出现了各种learningtorank的方法;learningtorank的出现其实是对用户点击数据的应用,同时去实现个性化的一个有效手段。

当然learningtorank需要根据特定指标或目标函数来优化,这里也需要了解一下各种评估指标(有一些是通用的,有些是应用相关的),通用的指标包括Precision、Recall、F-Measure、MeanAveragePrecision(MAP)这几种评价准则,以及对排序(Rank)的评估方法,例如NormalizedDiscountedCumulativeGain(NDCG)、Pairwiserelativeratings。

当然搜索引擎面对海量的数据不仅需要准确,还需要高效,所以效率问题也是一个需要关心的。这里涉及到索引结构、压缩(compression),以及哈希(hashing),具体暂时先不展开。

3.展现

在搜索引擎的展现方面,也有了单一搜索,到元搜索(metasearch,整合多个搜索引擎),联邦搜索(federatedsearch,更多面向企业搜索),以及aggregatedsearch(目前各种搜索引擎的发展趋势,包括mashup,各种媒体或数据搜索的一体化展现,以及web服务的整合,其实百度的框计算也可以算是这方面的一种体现)。

4.信息集成

为了完成各种整合或aggregation,信息集成是必不可少的。早期的搜索引擎关心nearduplicationdetection(近重复检测,用来监控网页的变化等),目前还包括entityresolution(检测相同实体),以及schemamatching(模式匹配,特别在知识图谱环境下)。目前还包括entityresolution(检测相同实体),以及schemamatching(模式匹配,特别在知识图谱环境下)。

5.数据抽取(数据抽取)

为了获得各种对象甚至实体,dataextraction(数据抽取)是必不可少的步骤,如前面所说的webtable和list的抽取(面对这些半结构化数据的抽取)是解决deepweb抽取(无法直接访问到后台数据库来获得信息的一个有效手段)另外,针对各种评论站点,sentimentanalysis(情感分析,正面,负面等),opinionmining(观点挖掘)也逐步被重视。

本节小结:

不考虑效率,从效果来看,数据的采集,结构化或语义数据的生成是离线过程最重要的,在线过程中,语义匹配,甚至是支持自然语言查询的直接回答是关键,每一步都可以扩展,并有很多难点,这两个方面在介绍NLP和语义技术时会稍微有一些展开,另外,推荐系统(recommendersystem)也是一个重要的点,特别是在知识卡片展现中,推荐相关实体和概念。

课程链接

课程内容以及其PPT、参考资料等资源可以参考斯坦福大学的课程:CS276/LING286:InformationRetrievalandWebSearch(链接:http://web.stanford.edu/class/cs276/);

大家有兴趣可以看看,当然如UMASS或Cambridge的课程也都值得一看,这里就不多推荐了,工具的话,我建议大家从Lucene出发;

Lucene(http://lucene.apache.org/)。是一个开源的全文检索引擎工具包,提供了完整的查询引擎和索引引擎,部分文本分析引擎。可以以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。

另外,Solr(http://lucene.apache.org/solr/)是一个高性能,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面。

大家如果希望构建各种企业搜索,配有facetedsearch等功能的话,Solr是一个不错的选择。还有,ElasticSearch(www.elasticsearch.org/),也是一个基于Lucene构建的开源,分布式的RESTful搜索引擎。他在支持realtimesearch(实时搜索)方面做得很好,而且RestfulAPI可以使得你做到语言无关,部署也是最简单的。

信息检索和Web搜索部分先告一个段落,接着介绍数据挖掘部分,其中会有部分内容和前面的有重合。

二.数据挖掘(特别是面对大数据挖掘的话,我更倾向于说web挖掘,总共包括3方面内容)

1.内容挖掘(contentmining)

1)Datapreprocessing–数据预处理。通常,我们得到的实际数据是“脏”的,存在种种问题,而数据预处理的目的就是提高数据的质量。其重点是Datacleaning(数据清理,包括处理缺失值、噪音数据、奇异值等),Datatransformation(数据变换,包括对数据的标准化、归一化、离散化等)等。

做过数据仓库的肯定对ETL等过程有印象,而ETL也包括在数据预处理范畴内,这一块是挖掘成败的关键,往往占据80%的精力。当然对这块进行细化,还包括刚刚介绍的数据抽取和信息集成两方面内容,这里主要说明结构化数据挖掘,即从半结构化数据如webtable,DOMtree或weblist等有一定结构的数据中抽取信息(包括实体,属性,属性值,概念等),核心是wrapperinduction(包装器归纳)。

从数据集自动学习和归纳对目标信息的抽取规则,避免大量的人工操作,解决数据抽取的问题,具体就不展开了。

2)InformationIntegration–信息集成。不同来源(如不同的网站)的数据格式不同,因此我们需要将它们采用统一的规范,集成到一起,以供展示或分析。前面提到的去哪儿或etao的例子是大家最容易理解的信息集成,这个在后面介绍语义技术时还会说。

2.结构挖掘(structuremining)

1)linkanalysis(链接分析),有两个非常重要的算法:PageRank和HITS(HypertextInducedTopicSearch)。前者是Google专有的算法,用于衡量特定网页相对于搜索引擎索引中的其他网页而言的重要程度;后者则是根据指向此网页的超链接和此网页指向其它网页的情况来分析网页的重要性。

之前在介绍信息检索中与查询无关的评分和排序中就将用到链接分析中的算法,对这块的了解需要进一步理解随机漫步(randomwalk)。

此外,随着web的不断演化,各种变种也生成,包括早期的对于站点的评分siterank,主题敏感评分topic-sensitiverank,个性化评分personalizedrank,到后面的对于新页面的评分newrank,在社交站点使用的socialrank,对于人的排序peoplerank等等

2)socialnetworkanalysis(社交网络分析)

包括各种如中心度(centrality),连接度(betweenness),等基础指标,也包括连通分量(connectedcomponent),团集(clique)等。

3)graphmining(图挖掘)

包括异常检测(outlierdetection),社区发现和演化(communitydetection&evolution),链接预测(linkprediction)等众多方面。

4)dynamicgraphanalysis(动态图分析)

之前说的哪些都是针对静态图的(没有重点考虑图中节点和边变化的情况),这里主要考虑图的变化,包括时态分析(temporalanalysis)、信息扩散(informationdiffusion)等,针对这一块,大家可以使用graphlab等工具来熟悉相关的算法。

3.用途挖掘(usagemining)

即使用用户数据进行相应的挖掘任务,几个应用或相关算法包括:

1)learningtorank(学习排序);

2)collaborativefilteringmatrixfactorization(推荐系统中的协同过滤,使用矩阵分解);

3)ctrprediction(广告中的点击率预测);

4)privacyinformationprediction/De-anonymization(隐私信息如性别年龄等预测,以及信息的去匿名化);

5)associationrulemining(利用用户交易数据的关联规则挖掘,最常用的就是大家熟知的购物篮问题);

三.机器学习

机器学习(machinelearning)和数据挖掘(datamining)很像,不过更偏算法,可以将数据挖掘,自然语言处理等看作他的应用。

或者可以认为数据挖掘更偏实用(考虑效率,数据清理等各种实际操作会遇到的问题),而NLP算是机器学习在某个方面的特定应用(在基于统计的计算语言学为主流的现在,这句话成立,但不是NLP的全部)

回到机器学习,他包括:

1.supervisedlearning-有监督的学习

这里的学习主要是针对分类问题,例如,我们要将新闻分到政治、娱乐、体育等类别当中,监督学习就是通过已经标注好类别的新闻来学习一个模型,然后可以用这个模型来处理新的新闻。首先要明确分类问题(监督学习)的输入、输出,以及对训练集的要求。然后要清楚其的评价方法,包括ROC和AUC。了解三个常用的分类器:DecisionTree、NaiveBayes和LogisticRegression,以及它们的特点、区别等;

2.SupportVectorMachine–支持向量机

另一个应用十分广泛的分类器。这里除了最为基本的针对二分类问题的SVM,还由一些变种,例如one-classSVM以及SVMRank;

3.UnsupervisedLearning–无监督学习

指聚类方法,将数据根据它们之间的关系,分到若干个类别或群体当中。主要包括K-means聚类和层次聚类方法。也包括PrincipalComponentAnalysis–主成分分析,PCA。它是非常常用的一种特征提取方法,将原特征空间旋转到新的空间中,找到第一主成分,它表示最多的原始数据的信息,第二主成分则表示次多的信息,并且主成分之间互不相关。它通常用来处理某些模型对特征的共线性敏感的问题,以及对数据进行降维;

4.Semi-supervisedLearning–半监督学习

半监督学习是监督学习与无监督学习相结合的一种学习方法。它主要考虑如何利用少量的标注样本和大量的未标注样本进行训练和分类的问题,可以利用未标注的样本所提供的信息,来提高模型的效果。常用的方法有:EM、Co-training、PU-Learning以及Biased-SVM。

主要还可以扩展到多视角学习(multiviewleanring)和多任务学习(multitasklearning),除此之外,近期还有一些值得学习和关注的知识点

(1)transferlearning(迁移学习),最简单的思想是:我学过中国象棋,可能很容易上手国际象棋;

(2)activelearning(主动学习),通过选择最可能出错或最值得标注(往往处在分类边界上的数据点)让用户标注,往往引申出去到现在很热的众包(crowdsourcing);

(3)DeepLearning(深度学习),这个大家应该都有所耳闻;

(4)EnsembleLearning(集成学习),是在对实例进行分类的时候,把若干个单个分类器集成起来,通过对多个分类器的分类结果进行某种组合来决定最终的分类,以取得比单个分类器更好的性能。主要有以下几种方法:Bagging、Boosting、RandomForest和GradientBoostingDecisionTree(GBDT),集成学习能很好地避免过拟合问题,同时也和模型选择相关

(5)ModelSelection(模型选择),常见的模型选择方法和特征选择方法,来为问题选择最为合适的模型。包括K-foldCross-validation(K-折交叉验证)的使用,和特征选择的方法,例如前向选择方法,卡方检验等,用来选取与目标关系最为密切的特征和属性。另外还包括特征选择,以及无监督学习中的距离学习(学习距离函数等)

课程链接

斯坦福大学的CS229:MachineLearning(http://cs229.stanford.edu/);

另外,补一下刚刚数据挖掘的课程链接:可以参考伊利诺伊大学芝加哥分校的课程CS583:DataMiningandTextMining

(http://www.cs.uic.edu/~liub/teach/cs583-spring-12/cs583.html)

机器学习的工具很多,这里主要推荐:

主要使用Java平台的Weka((http://www.cs.waikato.ac.nz/ml/weka/))和Python下的Sci-kitlearn(https://github.com/scikit-learn/scikit-learn/)。它们均集合了大量能承担数据挖掘任务的机器学习算法,包括对数据进行预处理,分类,回归、聚类、关联规则。Weka还提供了十分方便的可视化界面。

四.自然语言处理

包括:分词、词性标注、句法分析以及相关工具的使用。分词是针对中文等词语之间没有明显分割的语言而言的,因为中文没有想西方的语言那样,通过空格来区分每一个词,所以在对文本进行一些操作之前,常常需要进行分词。词性标注是将句子中的词标注出动词、名词等词性。句法分析则是更进一步的对句子进行分析,包括成分树分析和依存树分析,两者可以互相转换。

LanguageModel–语言模型,语言模型的目的是建立一个能够描述给定词序列在语言中的出现的概率的分布,根据语言客观事实而进行的语言抽象数学建模。重点是n-gram语言模型,它通过条件概率来表示文档中的词:一个词出现的概率,在某一个词A之后,出现词B的概率。对于languagemodel,各种搜索引擎公司都提供n-gramlibrary,提交一个词(或组合),给出其出现的概率等;

TopicModel–主题模型,重点讲LatentDirichletAllocation(LDA)。这是一种无监督机器学习技术,可以用来识别文档集或语料库中潜藏的主题信息,将不同的文档归类到不同的主题当中,每一个主题是用一系列的词语来表示。它采用了词袋(bagofwords)的方法,将每一篇文档视为一个词频向量,从而将文本信息转化为了易于建模的数字信息。当然也包括早期的如LSI(隐语义搜索),pLSA(概率隐层语义分析)等;

GraphicalModeling-图模型,用图形模式表达基于概率相关关系的模型的总称,在信息处理、自然语言处理领域得到了广泛应用。特别包括MaximumEntropyModels–最大熵模型,HiddenMarkovModels–隐马尔科夫模型,ConditionalRandomFields–条件随机场。三个统计模型被广泛的应用于序列标注问题当中。例如从文本中识别组织机构名称,通过已经标注的文档学习模型,然后在新的文本中抽取组织机构名称。

相比前面介绍的机器学习,这里学习的输出不是一个类标签(分类)或一个数值(回归,regression),这里的输出是一个序列,对于句法分析,甚至是一棵语法树。这些输出相对来说具有更丰富的结构,所以也称为structurelearning(结构学习)。

接着简单说一下NLP的几个重要应用:

(1)entitylinking(实体链接),给定一个知识库(如维基百科),识别某个文本中提到的知识库中的实体描述;这和命名实体识别(Namedentityrecognition,NER)相关,但是侧重点不同,EL侧重对已知实体的链接,他可以将文本中的实体描述关联到知识库中的某个实体的ID,起到标准化和归一化作用,是语义标注的基础,也是知识图谱进行各种分析,包括查询分析,文档理解的基础步骤;

(2)openinformationextraction(开放信息抽取),从文本中抽取实体之间的关系,或实体的属性和属性值。与relationextraction(关系抽取)或slotfilling(属性框填充)相比,这里更适应于新关系的识别,可部署在大规模环境中,这一块得益于美国DARPA的machinereading(机器阅读)项目,目前得到了很大的发展,其中当时IBMWatson的发展也得益与此,还包括一些其他的项目,下次可以找机会和大家详细说;

(3)machinetranslation(机器翻译);

(4)QA(questionanswering),不仅包括如Watson这样的QA系统,也包括自动问答系统,如SIRI,小冰,甚至小i机器人,都是这块的应用。

课程参考:

课程链接,斯坦福大学CS224N/Ling284:NaturalLanguageProcessing;

工具:

NLP的常用工具主要有NLPIR(http://ictclas.nlpir.org/)、FNLP(github.com/xpqiu/fnlp/)、StanfordNLP(http://nlp.stanford.edu/)、OpenNLP(http://opennlp.apache.org/)等;

前面两个是中文的,后面两个是多语言支持,当然英语支持的比较好。当然对于每个任务都有做得比较好的,这些工具属于比较全的。当然大家可以试用一下哈工大的LTP,也是功能很全,通用效果也不错的,对于特定的任务这些工具都需要重新适应才能发挥作用,这也是大数据人才需要去做的。

五.知识表示和语义技术

包括:

1.graphmodelvs.ERvsXML(图模型和传统关系型数据库ER模型的比较,和XML基于树模型在语法语义上的比较):graphmodel的代表包括RDF(resourcedescriptionframework,W3c的标准,也包括前面在commoncrawl中提到的RDFa,和microformats等,是RDF的变种,作为各种轻量级知识表示和交换语言可以嵌入到网页中供机器处理和理解,最典型的例子包括在社交站点主页中包含foaf,在各种网站中为了搜素引擎优化嵌入schema.org分类;

2.OWLvsprolog(closedwordassumptionvs.openwordassumption):OWL也是W3C标准,代表webontologylanguage,本体语言;后者是早起人工智能(专家系统)用的prolog,这也是开放世界假设和封闭世界假设的比较。OWL是开放的,对于没有定义的内容是未知,而对于封闭世界的假设,对于未定义的就是否。目前网上各种领域本体如医疗方面的snomed-ct,药物方面drugbank,通用的如dbpediaontology等都很多。

对于本体的处理包括如下几个点:

1)本体工程(从早期的编辑,到后来的学习,ontologyengineeringtoontologylearning),不仅可以定义或学习概念,关系,事实,概念实例,还可以学习概念之间的包含关系,互斥关系等公理(axiom);

2)不同地方定义的本体会有不同,那么会有ontologyalignment,这是数据集成的延续,包括模式层的匹配(schemamatching),也包括实例层的整合(entityresolution);

3)有了本体就可以做各种推理,这里需要了解基于逻辑的推理(logic-basedreasoning)和基于统计的推断(statisticalbasedinference)的区别和关联:前者是演绎(deduction),后者是归纳(induction),两者是互相关联的,统计归纳可以用来学习本体和本体规则(包括ILPinductivelogicprogramming等);本体也可以嵌入到统计归纳中,包括markovlogicnetwork(马尔科夫逻辑网,在马尔科夫网中嵌入逻辑,可以看作是一种领域知识的嵌入),以及最近很热的概率编程(probabilisticprogramming),是两者的大一统;

接着还有2部分需要大家了解

1.从链接开放数据(linkingopendata)到知识图谱到语义搜索的一条线,知识图谱的基础概念在之前的报告中给大家分享过;

2.另外一条线是从图模型到图数据库,图数据库可以看作是一种noSQL或newSQL,包括图匹配查询语言SPARQL(类SQL),还有面向图遍历的Gremlin等,可用于做快速的子图匹配,适合OLTP任务,也有各种分析任务,OLAP;

简单工具包括:

Sesame(www.openrdf.org/,Sesame是早期一个欧盟项目的产物),针对RDF数据管理提出的一个通用的系统框架,提供了非常开放的API接口,使得人们可以很方便地集成不同的存储系统,推理引擎以及查询引擎等;

Jena(https://jena.apache.org/),Jena是惠普实验室做的;

各种本体推理,alignment,学习,以及图数据的工具在这里就不一一列出了,有兴趣的可以联系我,就某个专门点细化。

最后说一下:数学基础

数学基础知识,涵盖如下几个课程:

1.概率论与数理统计,包括常见的分布,假设检验,参数估计,方差分析,抽样理论等;

2.高等代数,主要是矩阵分析中的知识;

3.运筹学,即最优化理论,包括无约束和有约束的极值问题,梯度下降法等;

4.离散数据,包括图论,数理逻辑等。

这些都是掌握上述知识和技术的基础。

备注:

1.文中有关参考资料类、推荐第三方课程或推荐开源系统内容,以“文字下方标注圆点方式”注明(抱歉,整理文档使用Pages,但是不知为何选用多种字体依然无法令其以斜体方式出现,尝试多次失败后,经过多种标注方式的视觉效果筛选,最后妥协,以该“违背人性”的标注方式注明,各位见谅);

2.文中部分节点中的加粗处理(非标题)为个人理解重点,可能有失偏颇,还望各位专家批评指正;但同时也希望大家重视这几个总结重点,在学术研究或企业应用中或有指点迷津之用;

3.该版不包含后续讨论部分,请各位知悉。

推荐阅读更多精彩内容