“大数据与机器智能”版本间的差异
2013010324(讨论 | 贡献) (→问答QA) |
2013010324(讨论 | 贡献) (→问答QA) |
||
第412行: | 第412行: | ||
*在“学习“栏加入一条wiki百科的网址。例如“https://en.wikipedia.org/wiki/University_of_Michigan” | *在“学习“栏加入一条wiki百科的网址。例如“https://en.wikipedia.org/wiki/University_of_Michigan” | ||
*转到“推断“栏,询问与添加百科信息有关的问题。例如“密歇根大学位于哪里?” | *转到“推断“栏,询问与添加百科信息有关的问题。例如“密歇根大学位于哪里?” | ||
+ | <gallery> | ||
+ | 文件:Infer2.png | ||
+ | </gallery> | ||
+ | (3)数据库信息类 | ||
+ | 例: | ||
+ | 谁是中国的最后一位皇帝? | ||
+ | 谁发现了南极点? | ||
+ | 谁发明了电话? | ||
+ | 哪位希腊数学发发展了几何学? | ||
+ | 慕尼黑协定在何时签订? | ||
+ | 泰森在何时夺冠 | ||
+ | 尼罗河位于什么地方? | ||
+ | |||
+ | 2.依赖项介绍 | ||
+ | (1)OpenEphyra:OpenEphyra 是一个使用 Java 开发的模块化、可扩展的开源问答系统。它从网络和其他资源检索自然语言问题的答案。开发者能基于这项项目开发新的问答系统,而不用关心端到端系统。 | ||
+ | |||
+ | (2)Indri:提供目前最先进的文本搜索,支持多种结构的询问语言。可在一台机器上实现对五千万个文档的文本收集;分配搜索后,量级能再增加一倍。支持linux,solaris,windows和mac os等多个系统。 | ||
+ | (3)MongoDB:可以应用于各种规模的企业、各个行业以及各类应用程序的开源数据库。它为开发人员 提供了传统数据库的功能:二级索引,完整的查询系统以及严格一致性等等。 | ||
+ | (4)Apache Thrift:提供标量化跨语言开发服务。由一个软件栈和代码生成引擎组成,提供在C++, Java, Python, PHP, Ruby等多种语言间无缝高效转换的服务。 | ||
====手写数字识别DIG==== | ====手写数字识别DIG==== |
2016年10月25日 (二) 19:19的版本
版权申明
CC BY-NC-SA
教学团队
互联网+实验室 iNetLab
陈震 马晓东 章屹松 王蓓蓓 高英
助教:郑文勋 李辰星
协同开发
iCenter-cloud iCenter-cloud
Gitlab GitLab
教学目标
以完成一种以大数据为基础的智能系统的原型开发为目标,在实践中运用大数据智能理论与技术。团队成员学习大数据系统与机器智能的理论知识和专业技能,完成项目团队结构设计和原型开发的实践环节,全面提高学生的技术实践能力。
课程内容
技术浅论
技术本质
- 多维多角度:工具论/人文关怀/社会抱负/技术社会
- 客观上(大众)
- “受害与受益” (两面性)
- 金融理财便捷
- 金融电信诈骗
- 受益方
- 技术改变的领导者(“quick money”)
- 受惠的人群(便捷性)
- 受害方
- 技术改变被动接受的人
- 被技术改变淘汰的人
- 主观上(单个人)
- 取决于个人立场、价值观、经历等等
技术泡沫
- 市场宣传和预期炒作,以及一些传媒的洗脑性的报道等的原因,导致概念混乱。
- 需要找到技术的本质(涉及认识论)
- 科学思维就是防止被洗脑,无脑思考。
- 研究思路:规范模式和实证模式
- 事实陈述的时候,一定要找到论点以及论据,以及判断论点是否统帅论据,论据是否支持论点。
- 实践与操作获得体验,而非感觉与愿望。
大数据索引
索引是加快查找的数据结构(data structure),主要有树Tree,哈希表和倒排索引。
Readings:
- Thomas H. Cormen, introduction to algorithms, third edition, MIT press, 2009.
- Tardos, Eva, and Jon Kleinberg. "Algorithm Design." (2006).
Hash Table
布隆过滤器(BloomFilter)
Readings:
- B. H. Bloom,Space/time trade-offs in hash coding with allowable errors, Commun. ACM, Volume 13 Issue 7, Pages 422-426, July 1970.
- Crainiceanu, Adina, and Daniel Lemire. "Bloofi: Multidimensional Bloom Filters." Information Systems 54 (2015): 311-324.
Tree Index
B-tree B-tree
K-D tree kd-tree
R-tree R-tree
R+ tree R+ tree
Readings:
- Guttman, Antonin. R-trees: a dynamic index structure for spatial searching. Vol. 14, no. 2. ACM, 1984.
- Sellis, Timos, Nick Roussopoulos, and Christos Faloutsos. "The R+-Tree: A Dynamic Index for Multi-Dimensional Objects." VLDB, 1987.
Inverted Index
倒排索引 (Inverted Index)是搜索引擎使用的数据结构。 倒排索引将关键字(keyword)映射到文档(document),在信息检索(Information Retrieval)中发挥重要作用。
在倒排索引中,每个关键词对应一个倒排链表(inverted list),记录了该关键词出现的所有文档的编号。
- 倒排索引上的最重要的运算是集合交(Conjunction),并(Disjunction)和非(Negation)。
- 倒排索引在实际实现中,可以采用位图(bitmap)与整数链表(integer list)两种结构形式。
- 倒排索引上的交,并和非运算,对应的整数链表操作是Intersection/Unions操作,对应位图是比特AND, OR, NOT操作。
倒排索引实现: Lucene
Bitmap Index
Roarin Bitmap Java-Roaring CRoaring
Readings:
- Chambi, Samy, Daniel Lemire, Owen Kaser, and Robert Godin. "Better bitmap performance with Roaring bitmaps." Software: practice and experience, 2015.
- Vallentin, Matthias, Vern Paxson, and Robin Sommer. "VAST: a unified platform for interactive network forensics." 13th USENIX Symposium on Networked Systems Design and Implementation (NSDI 16), 2016.
- Vallentin, Matthias. Scalable Network Forensics. Diss. University of California, Berkeley, 2016.
- Chenxing Li et al., BAH: A Bitmap Index Compression Algorithm for Fast Data Retrieval, LCN 2016.
Integer List
Data Structures for Inverted Indexes (ds2i) ds2i
partitioned_elias_fano FastPFor
Readings:
- Culpepper, J. Shane, and Alistair Moffat. "Efficient set intersection for inverted indexing." ACM Transactions on Information Systems (TOIS), 2010.
- Schlegel, Benjamin, Thomas Willhalm, and Wolfgang Lehner. Fast Sorted-Set Intersection using SIMD Instructions, ADMS 2011.
- Inoue, Hiroshi, Moriyoshi Ohara, and Kenjiro Taura, Faster Set Intersection with SIMD instructions by Reducing Branch Mispredictions, VLDB 2014.
- Kane, Andrew, and Frank Wm Tompa, Skewed Partial Bitvectors for List Intersection, SIGIR 2014.
- Giuseppe Ottaviano, Nicola Tonellotto, Rossano Venturini, Optimal Space-Time Tradeoffs for Inverted Indexes, ACM WSDM 2015.
- Lakshminarasimhan, Sriram, et al. "Scalable in situ scientific data encoding for analytical query processing." Proceedings of the 22nd international symposium on High-performance parallel and distributed computing. ACM, 2013.
混合结构
融合几种独立结构的混合结构
- Athanassoulis, Manos, and Anastasia Ailamaki. "BF-tree: approximate tree indexing." Proceedings of the VLDB Endowment 7, no. 14 (2014): 1881-1892.
其它结构
Succinct Data Structure
Succinct Data Structure Library
- Bitvectors supporting Rank and Select
- Integer Vectors
- Wavelet Trees
- Compressed Suffix Arrays (CSA)
- Balanced Parentheses Representations
- Longest Common Prefix (LCP) Arrays
- Compressed Suffix Trees (CST)
- Range Minimum/Maximum Query (RMQ) Structures
Readings:
- Navarro, Gonzalo, and Eliana Providel. 2012. “Fast, Small, Simple Rank/Select on Bitmaps.” In Proceedings of the 11th International Symposium on Experimental Algorithms (SEA 2013), 295–306.
大数据算法
数据解析
数据解析(Data Analytic),是指对数据集的属性值进行SUM,TopN,Rank操作。一般要求实时响应。
Readings:
- Navarro, Gonzalo, and Eliana Providel. "Fast, small, simple rank/select on bitmaps." In International Symposium on Experimental Algorithms, pp. 295-306. Springer Berlin Heidelberg, 2012.
Broadword Implementation of Rank
- Vigna, Sebastiano. "Broadword implementation of rank/select queries." In International Workshop on Experimental and Efficient Algorithms, pp. 154-168. Springer Berlin Heidelberg, 2008.
大数据解析平台
Apache Kylin Kylin
Druid Druid
基数估计
基数估计(Cardinality Estimation),评估一下一个集合中不同数目的个数。比如,访问一个网站的独立IP个数。
Cardinality Estimation Algorithm
- Flajolet, Philippe, Éric Fusy, Olivier Gandouet, and Frédéric Meunier. "Hyperloglog: the analysis of a near-optimal cardinality estimation algorithm." DMTCS Proceedings 1 (2008).
- Heule, Stefan, Marc Nunkesser, and Alexander Hall. "HyperLogLog in practice: algorithmic engineering of a state of the art cardinality estimation algorithm." In Proceedings of the 16th International Conference on Extending Database Technology, pp. 683-692. ACM, 2013.
大数据系统
Hadoop
- Sanjay Ghemawat, Howard Gobioff, and Shun-Tak Leung. "The Google file system." ACM SIGOPS operating systems review. Vol. 37. No. 5. ACM, 2003.
- Jeffrey Dean and Sanjay Ghemawat. "MapReduce: simplified data processing on large clusters." Communications of the ACM 51.1 (2008): 107-113.
Spark
- Zaharia, Matei, et al. "Spark: cluster computing with working sets.“ Proceedings of the 2nd USENIX conference on Hot topics in cloud computing. Vol. 10. 2010.
机器智能
机器学习
Machine Learning scikit-learn
深度神经网络
Google TensorFlow Tensorflow
TensorFlow: A System for Large-Scale Machine Learning, OSDI 2016.OSDI-2016
计算机围棋
Better Computer Go Player with Neural Network and Long-term Prediction
Pachi: State of the art open source Go program
Training Deep Convolutional Neural Networks to Play Go
论文报告撰写
项目分组
第一组
组长: 姚沛然
组员: 王逸伦 张正彦
第二组
组长:王亦凡
组员:刘梦旸、邱昱田
第三组
组长:李子豪
组员:娄晨耀 张若天 邹逍遥
第四组
组长:石冠亚
组员:宣程 汤鹏 段了了
第五组
组长:杨文聪
组员:梅杰 计昊哲 杨应人
第六组
组长:赵宇璋
组员:孙炜岳 吴一凡
第八组
组长:熊铮
组员:范承泽,秦梓鑫
论文研读
要求:提交研读论文的PPT(正文部分不超过10页)。
时间:10月14日中午12点之前。
10月19日下午安排每组做一个小报告,每组时间不超过10分钟。
第一组
RUBIK: Efficient Threshold Queries on Massive Time Series, SSDBM 2015.
第二组
SciCSM: Novel Contrast Set Mining over Scientific Datasets Using Bitmap Indices, SSDBM 2015.
第三组
ALACRITY: Analytics-Driven Lossless Data Compression for Rapid In-Situ Indexing, Storing, and Querying, TLDKS X, 2013.
第四组
VSEncoding: Efficient Coding and Fast Decoding of Integer Lists via Dynamic Programming, CIKM 2010.
第五组
Super-Scalar RAM-CPU Cache Compression, ICDE 2006.
第六组
Partitioned Elias-Fano Indexes, SIGIR 2014.
第八组
Optimal Space-time Tradeoffs for Inverted Indexes, WSDM 2015.
课程实践
学生准备
携带笔记本,智能手机 (Bring your own laptop computers and camera-ready smart phones)
Azure云平台使用
Flask Web服务器搭建
- 准备virtualenv 安装方法下面两条命令可能会适用mac和linux:
$ sudo easy_install virtualenv
- 或者更好的:
$ sudo pip install virtualenv
如果你使用 Ubuntu ,请尝试:
$ sudo apt-get install python-virtualenv
Centos,请尝试:
$ sudo yum install python-virtualenv
- 安装好virtualenv后,可以创建一个项目文件夹,利用virtualenv命令在其下创建 venv 文件夹:
$ mkdir myproject $ cd myproject $ virtualenv venv New python executable in venv/bin/python Installing distribute............done.
现在,只要你想要在某个项目上工作,只要激活相应的环境。在 OS X 和 Linux 下,按如下做:
$ . venv/bin/activate
- 现在你只需要键入以下的命令来激活你的 virtualenv 中的 Flask:
$ pip install Flask
- 几秒后,一切就为你准备就绪。(weiwandaixu)
课程项目
项目1-大数据
描述
任务:基于位图索引的概念和原理,用C++实现一个位图索引数据库。
检验:完成对一段网流数据的索引建立,查询。在虚拟机上运行成功,得到正确结果。
网流数据:\\166.111.134.110\team-saturn\网流数据
代码托管:http://gitlab.icenter.tsinghua.edu.cn
时间:10月7日中午12点之前(特殊情况,推迟一周)
组织:以组为单位,要求要看到所有同学的贡献。
作业提交
[[Group1]] | [[Group2]] | [[Group3]] | [[Group4]] |
[[Group5]] | [[Group6]] | [[Group7]] | [[Group8]] |
项目2-Lucida使用
Lucida安装
每个组在清华工业云平台上安装Lucida软件
清华工业云 icenter-cloud
下载地址 Lucida-AI
每组工作
每组熟悉了解Lucida的7种AI服务的实现原理:
日历服务CA
图像匹配IMM
图像分类IMC
问答QA
1.Lucida demo QA使用介绍
(1)用户自定义信息类
- 在“学习”栏增加至少一段信息。例如“约翰25岁”
- 转到“推断“栏,询问一个与你所添加信息相关的的问题。例如“约翰多少岁?”
(2)网页信息类
- 在“学习“栏加入一条wiki百科的网址。例如“https://en.wikipedia.org/wiki/University_of_Michigan”
- 转到“推断“栏,询问与添加百科信息有关的问题。例如“密歇根大学位于哪里?”
(3)数据库信息类 例: 谁是中国的最后一位皇帝? 谁发现了南极点? 谁发明了电话? 哪位希腊数学发发展了几何学? 慕尼黑协定在何时签订? 泰森在何时夺冠 尼罗河位于什么地方?
2.依赖项介绍 (1)OpenEphyra:OpenEphyra 是一个使用 Java 开发的模块化、可扩展的开源问答系统。它从网络和其他资源检索自然语言问题的答案。开发者能基于这项项目开发新的问答系统,而不用关心端到端系统。
(2)Indri:提供目前最先进的文本搜索,支持多种结构的询问语言。可在一台机器上实现对五千万个文档的文本收集;分配搜索后,量级能再增加一倍。支持linux,solaris,windows和mac os等多个系统。 (3)MongoDB:可以应用于各种规模的企业、各个行业以及各类应用程序的开源数据库。它为开发人员 提供了传统数据库的功能:二级索引,完整的查询系统以及严格一致性等等。 (4)Apache Thrift:提供标量化跨语言开发服务。由一个软件栈和代码生成引擎组成,提供在C++, Java, Python, PHP, Ruby等多种语言间无缝高效转换的服务。
手写数字识别DIG
手写数字识别DIG这个单元由我们第三组负责。 由于技术上对图形界面的了解不深,我们组并没能成功模拟出这一个项目,因此,我们主要是对程序代码以及tutorial里面的内容的一些分析,并查阅了相关资料。 首先,手写数字识别这一个项目,我们可以通过给定一个只包含一个手写数字的jpeg格式照片,那么这一个项目可以识别出这个数字是0到9当中的哪一个。 然后,这一个项目的代码结构主要分为以下的几个部分: 1.压缩并存储。在这一步当中,程序通过对给定jpeg文件的输入进行分析,并通过将这个文件压缩到一个固定大小然后存储起来。 2.黑白二值化。就是通过对原有图片进行一定的修改,使得数字部分和背景部分能更好的区分开来。在这一步当中,应该可以通过采取较优的黑白二值化的方法 (比如说可以与周围一定数量的像素点进行比对)从而同时消除噪点,提高识别的精度。 3.把修改后的图片作为神经网络的输入。这一步,就是把经过上两步操作后得到的像素矩阵输入到神经网络当中,然后通过引用caffe(卷积神经网络框架)返回权值从而得到与各个数字的一个相关权值; 4.根据得到的相关权值,返回结果。 以上就是该项目程序代码结构的主要部分。 那么,我们可以注意到里面运用到了一个卷积神经网络框架模型。我们通过查阅资料得知,该模型,是通过前期的一些训练准备从而提高对相关图片的识别能力。训练准备的步骤大概分为两步: 首先,是初始化网络及学习参数,如设置网络初始权矩阵、学习因子等。 然后,就是提供各种相关图片的训练模式,训练神经网络,不断修正,直到满足要求为止。 而训练神经网络这一步,分为前向传播过程和后向传播过程。 前向传播过程就是通过给定的训练模式的输入,计算网络的输出模型,并与期望模式进行比较,如果达到要求,则进行下一个训练模式;如果未达要求,则进行后向传播的过程。 (与我们的识别图像一步比较相似,只不过我们识别图像的时候是直接返回网络计算出来的输出模型) 后向传播过程则是可分为三个步骤: 1. 计算同一层单元的误差; 2. 修正权值和阈值; 3. 进行下一个训练模式。 上面的具体操作则是通过将原本的特征maps与一个可学习的卷积核进行卷积,并通过一个激活函数得到输出特征map。然后再利用计算出来的灵敏度map进行梯度下降方法对原本的特征maps进行修正。 那么,通过对足够多的训练模式去训练网络,我们就可以得到一个足够优的神经网络去解决手写数字识别问题。
最后是学习过程中参考的资料:
1.《Notes on Convolutional Neural Networks》,Jake Bouvrie 2.《基于神经网络的图像识别方法》,彭淑敏,王军宁 3.《Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现》,zouxy09
人脸识别FACE
语音识别ASR
时间:10月26日下周三中午12点之前。
项目2-云+端整合
Thrift协议
client端
- 调用摄像头拍照
- 调用Thrift接口
参考
server端
- 接收图片文件
- 调用服务端程序
项目3-机器智能
描述
完成一个可展示的人工智能系统
- 步骤1:设置azure虚拟机;
- 步骤2:架构flask-web服务;
- 步骤3:建立AI服务(Google Tensorflow);
- 步骤4:lucida.ai;
- 步骤5:智能端开发(移动平台、嵌入式硬件)+thrift协议联调;
参考: Lucida-AI
作业提交
[[Group1]] | [[Group2]] | [[Group3]] | [[Group4]] |
[[Group5]] | [[Group6]] | [[Group7]] | [[Group8]] |
致谢
本课程获得微软Azure云计算与机器学习捐赠支持。
感谢微软公司 杨滔经理,章艳经理,刘士君工程师,闫伟工程师。
参考文献
基础
- Hennessy, John L., and David A. Patterson. Computer architecture: a quantitative approach. Elsevier, 2011.
- Matthew, Neil, and Richard Stones. Beginning linux programming. John Wiley & Sons, 2011.
- Stroustrup, Bjarne. The C++ programming language. Pearson Education, 2013.
- Weiss, Mark Allen. Data structures and algorithm analysis in Java. Addison-Wesley Longman Publishing Co., Inc., 1998.
- Flanagan, David. JavaScript: The definitive guide: Activate your web pages. " O'Reilly Media, Inc.", 2011.
- Grinberg, Miguel. Flask Web Development: Developing Web Applications with Python. O'Reilly Media, Inc., 2014.
深度学习
- Yoshua Bengio, Ian Goodfellow, Aaron Courville, Deep Learning, MIT Press, 2016.
- Google brain team, TensorFlow: Large-scale machine learning on heterogeneous systems, whitepaper, 2015.
- Vijay Agneeswaran, Real-Time Applications with Storm, Spark, and More Hadoop Alternatives, 2014.