Hexo

  • Home

  • Archives

kg-2

Posted on 2019-07-30 | Edited on 2019-08-03

知识图谱综述是对知识图谱近年来发展过程以及使用的最新技术进行整理概括的论文,可以说是知识图谱比较系统高效的入门学习资料,本文选择了几篇引用较多、影响力较大的综述进行总结。

知识图谱知识点架构图

本架构图是笔者在进行知识图谱相关工作一段时间之后,结合自己对知识图谱的理解以及部分综述文章整理出一套较为通用的知识图谱开发流程,然后基于该开发流程各阶段所需要的技术或者知识点绘制而成,可以在整体宏观层面对整个知识图谱相关知识点有一个全面的认识,本文对于多篇知识图谱综述文献中设计的技术点也会基于该架构图进行对比分析,同时本专栏系列文章也会紧密的结合该架构图进行展开说明。

知识图谱研究综述

本篇综述作者是清华大学的李娟子教授及其学生侯磊,本篇主要是对知识图谱的关键技术——知识表示、知识图谱构建和知识图谱应用进行了综述,并对知识图谱未来发展的挑战和趋势进行了总结展望。

知识表示

本篇综述对于知识表示主要是从发展的角度进行介绍,包括如下三个阶段:

  • 比较早时期采用符号逻辑的方式
  • 2000年以后出现的语义网对知识进行表示的方式,包括RDF、OWL等
  • 目前比较流行的采用表示学习方式,将知识学习成低维稠密的向量,通过向量间的关系可以在某种程度上反映知识之间的关系

知识图谱构建

知识图谱构建技术可以包括知识建模以及知识获取的部分技术,本篇主要介绍如下三个技术点:

  • 概念层次学习:与通常所说的本体比较类似,主要是反映事物之间上层抽象关系,上下位关系等。
  • 实事学习:主要就是抽取三元组知识的技术,整体上可以采用的方式与机器学习大分类类似,包括监督方式、半监督方式、无监督方式——监督方式采用规则、分类标注、序列标注等方式训练模型之后,再采用该模型进行知识抽取,主要会应用在领域知识的抽取;半监督方式主要包括自扩展方法和弱监督方法。自扩展方法需要初始的种子实体对,根据这些种子实体对,发现新的语义模板,再对语料进行迭代抽取以发现新的实体对;无监督的知识获取方法主要是开放信息抽取,使用自然语言处理方法,无须预先给定要抽取的关系类别,自动将自然语言句子转换为命题。
  • 语义集成:在其他文献中也可以有叫知识融合,发现不同知识库之间的等价关系,主要包括如下几种方法——基于文本相似度;基于图结构信息,比如simrank或者相似度传播等;基于已知开放知识库作为背景提高匹配效果;基于机器学习的方法将本体匹配问题视为机器学习中的分类或优化问题,从而采取机器学习方法获 得匹配结果。

知识图谱应用

本篇综述在知识应用方面介绍了如下三个方向:

  • 语义搜索:利用知识图谱所具有的良好定义的结构形式,以有向图的方式提供满足用户需求的结构化语义内容。
  • 知识问答:基于知识库的问答,通过对问句的语义分析,转换成结构化的查询语句,在已有结构化的知识库上获取答案。
  • 知识驱动的大数据分析与决策:

知识图谱研究进展

本篇综述作者是东南大学漆桂林教授及其博士研究生,主要是从知识图谱构建技术和知识图谱相关应用方面进行介绍。在整体上分为三大部分,第一部分为知识图谱技术地图简要说明,主要也是从流程方面抽象介绍;第二部分为其中关键技术点的介绍,第二部分可以说属于第一部分的深入;第三部分介绍了当前比较著名的开放知识图谱以及知识图谱相关应用。

知识图谱技术地图(第一部分)

  • 知识获取:分析介绍需要解决的问题与上一篇综述中概念层次学习和实事学习相似,也是包括从结构化、半结构化、非结构化数据中获取知识数据。
  • 知识融合:将已有的知识库的数据与从各数据源爬取的数据融合成一个统一大的知识库,提供统一的结构和数据,与上一篇综述中语义集成类似。
  • 知识计算及应用:通过图谱中本体、实体并结合规则推理隐含的知识或者进行链接预测等,给领域人员提供辅助决策意见。

关键技术点(第二部分)

实体关系识别技术

  • 监督学习:将命名实体识别任务转换为分类任务,发展过程中也经历了统计方式、SVM、最小公共子树、核函数、神经网络等阶段,抽取的准确率也逐渐提高,同时对于实体抽取和关系抽取也逐渐出现了两者联合抽取的方法。
  • 半监督学习:与上一篇文献中实事学习中介绍的类似,主要是基于Bootstrap方法进行,初始选取少量的实例作为种子集合,通过定义的模式进行抽取,通过多次迭代,实现从非结构化数据中抽取知识的目的。
  • 无监督学习:主要是基于聚类的方法。

知识融合技术

知识融合相较于数据融合需要解决不同知识抽取工具抽取的不同格式数据的融合对齐,多篇相应文献基于概率的角度来尝试解决相关问题,同样,知识融合中一个十分重要的核心问题就是本体匹配,在依据匹配对象上可分为模式匹配和实例匹配,在技术层面可分为启发式方法、基于图的方法、概率方法、基于学习的方法和基于推理的方法。

  • 模式匹配:模式匹配主要寻找本体中类似的属性和概念,主要具体方法包括基于类似WordNet词典或者本体信息结构、基于锚点逐步迭代、基于贝叶斯决策的风险最小化。
  • 实例匹配:实例匹配是评估异构知识源之间实例对的相似度,用来判断这些实体是否指向给定领域的相同实体,主要具体方法包括利用局部敏感性哈希或者向量空间模型来度量实体间的距离,从而计算实体之间的相似度。

实体链接技术

实体链接是指将文本中的实体指称链向知识库实体的过程,它能够丰富文本语义信息,在广义上也可以归纳为知识融合的一部分,也是大规模知识图谱构建十分重要的一个技术,本综述介绍的相关方法如下:

  • 基于概率生成模型的方法:主要是结合上下文,计算候选实体出现在场景中的概率来确定实体指称需要指向的候选实体。
  • 基于主题模型的方法:
  • 基于图的方法:将实体指称与候选实体基于文本相识度(词袋模型、word2vec均可)作为权重边构建成图,再采用各种方法(PageRank、置信度传播)更新节点之间的边的权重,在某种程度上利用了已有知识图谱中候选实体以及待链接文本的全局信息。
  • 基于深度学习的方法:

知识推理技术

知识推理技术可以说是知识图谱的灵魂,也是难度较大的技术点,本综述主要介绍了基于符号的推理以及基于统计的推理。

  • 基于符号的推理方法:基于符号的推理方法研究起源较早,主要理论依据是谓词逻辑相关数学工具,需要将知识图谱中的连接关系转为为符号表示,然后在采用谓词逻辑的方式进行推理,存在计算量较大的弊端,本综述介绍了在多机环境下进行并行计算的相关方法,同时也分析了目前已有相关系统的发展现状。
  • 基于统计的推理方法:本综述的中介绍的基于统计的推理方法一般指关系机器学习方法,主要包括实体关系学习方法、类型推理方法以及模式归纳方法。

知识图谱应用

本综述主要介绍知识图谱在如下几个方面的应用:

  • 股票投研情报分析:通过知识图谱相关技术从招股书、年报、公司公告、券商研究报告等半结构化表格或者非结构化文本数据抽取企业、股东、子公司、投资人、合作伙伴、竞争对手等信息构建公司知识图谱,通过对公司知识图谱进行知识挖掘以及知识推理,提供投资的辅助决策或者组合投资的风险控制。
  • 公安情报分析:通过融合政务、企业、个人的出行、交易、通话等信息构建公安安全知识图谱、并结合案情笔录调查数据,辅助公安进行刑侦、经侦等。
  • 反欺诈情报分析:通过融合来自不同知识源的信息构成知识图谱,同时引入领域专家构建业务规则,结合图谱和规则进行欺诈行为的识别。

相关资源现在地址

打个广告,本专栏中介绍总结的各种学习资源均会在该github中同步更新。

https://github.com/husthuke

kg-1

Posted on 2019-07-22

整体说明

知识图谱(Knowledge Graph/Vault)又称为科学知识图谱,在图书情报界称为知识域可视化或知识领域映射地图,是显示知识发展进程与结构关系的一系列各种不同的图形,用可视化技术描述知识资源及其载体,挖掘、分析、构建、绘制和显示知识及它们之间的相互联系。 同时知识图谱作为人工智能重要的一环,目前在推荐系统、问答系统中也起到越来越重要的作用,如果将人工智能生态中的语音图像识别,语音图像合成等类比为人类的输入和输出,知识图谱可以说会逐渐承担类似人类逻辑推理的功能,推动通用人工智能,甚至强人工智能的发展。 本专栏主要包括知识图谱的学习资料整理、心得、教程相关内容,整体上分为如下几个方面。

  • [理论及论文]:主要整理收集知识图谱理论发展综述以及不同时期关键重要或者具有代表性的论文,从整体宏观上了解知识图谱的发展脉络。
  • [图谱及数据集]:收集整理知识图谱常用的数据集和构建好的图谱数据,并介绍不同数据集的特点及其适应场景。
  • [工具及服务]:收集在知识图谱开发中在不同阶段的常用工具和第三方服务,包括但不限于知识抓取、命名实体识别、知识推理等方面工具,从而可以较快速的推进知识图谱的开发,本专栏也会针对其中普遍通用的工具使用撰写教程。
  • [白皮书及报告]:知识图谱发展演变过程中,很多学术机构或者企业针对不同领域、行业给出了一些路线图或者白皮书,通过这些路线图或者白皮书能够看出知识图谱具体的发展以及应用方向,对开拓视野都有很好的帮助。
  • [机构及人物]:介绍知识图谱领域举足轻重的结构和知名人物,可以跟随大牛的脚步在知识图谱的海洋中探索,并丰富自己的人脉,走向人生巅峰。
  • [视频课程]:收集整理市面上质量较高的视频类教程,可以起到一个快速入门的作用,力求以最小的投入达到实用的产出。
  • [专栏合集]:收集整理各类技术网站上关于知识图谱系统专栏合集,比如知识图谱与深度学习、知识图谱与推荐系统等等,能够使读者在某个具体的方向深入学习知识图谱相关技术。
  • [评测竞赛]:整理业界质量较高的评测竞赛,选择合适自己当前阶段的评测竞赛可以较好的锻炼实战水平,同时也可以了解到知识图谱前沿的技术。
  • [项目案例]:收集整理利用知识图谱成功落地的项目应用,通过理论结合实际更好的理解知识图谱。
  • [推广技术文章]:收集整理各类门户网站、公众号号关于知识图谱技术推广的文章,包括美团大脑、阿里知识图谱等具体商用产品的介绍,从而达到抓住热点,站住风口的目的。

本篇只是作为开篇对该专栏包含的内容进行整体介绍,后续文章会组件介绍相关资源的学习心得或者学习教程,大家尽请期待。

部分资源下载地址

https://github.com/husthuke

edu-2

Posted on 2019-07-05 | In 教育人工智能

专业术语

自适应学习

ITS

项目反映理论

知识追踪

e-learning

教育人工智能相关会议介绍

Posted on 2019-07-05 | Edited on 2019-07-08 | In 教育人工智能

  当AI与某个行业结合时,在学术界或者工业界一般会,本文主要针对教育行业人工智能术语以及学术会议做下总结,方便新进入到这一领域的学术界研究人员以及工业界从业者快速入门。

相关会议及期刊

AIED

  AIED全称Artificial Intelligence in Education,属于International Artificial Intelligence in Education Society组织的国籍会议,IAIED是一个聚焦于计算机科学、教育以及心理学领域前沿的跨学科团体,主要促进提高不同领域、不同年龄学习者学习交互效率、自适应学习环境的改善。同时,IAIED组织发售International Journal of Artificial Intelligence in Education顶级学术期刊(https://link.springer.com/journal/volumesAndIssues/40593),同样致力于推广AI在教育领域的应用。

  AIED(https://iaied.org/conferences)从2011至今2019年共举办6次,2017年之前2年举办一场,2017年开始每年举办一场,最近一次AIED 2019(https://caed-lab.com/aied2019)于今年6月25日至29日在芝加哥举办,AIED目前轮值主席为CMU大学的Bruce M. McLaren(https://www.cs.cmu.edu/~bmclaren/index.html)教授。

ITS

  ITS全称International Conference On Intelligent Tutoring Systems,顾名思义,ITS会议主要专注智能教学系统,属于比较专业的范畴,最近一次ITS 2019(https://its2019.iis-international.org/)于2019年6月3-7日在牙买加举行,主题为人工智能的挑战——扩大ITS的边界,从今年会议的主题就可以看出随着这几年人工智能的大热,ITS也不仅仅局限在智能教学系统,也在逐步扩大其影响,期望借助人工智能的浪潮做出大的发展。

  ITS会议开始与1992年,属于教育人工智能相关会议比较早的,在2018年之前每两年举办一次,2018年开始每年举办一次(https://link.springer.com/conference/its)。

L@S

  L@S全称ACM’s Learning at Scale,是ACM旗下组织举办的会议之一,主要聚焦于学习者较多而专家较少的大规模、以技术为媒介的学习环境和机制,大规模的学习环境极其多种多样,包括:MOOC、ITS、open learning courseware、游戏化学习等等。

  L@S的目标是增强人类的学习能力和效果,出了出现越来越多的上述学习形式之外,研究者也经常采用一些指标来间接的衡量学习,包括participation(参与度)、persistence(坚持度)、completion(完成度)、satisfaction(满意度)以及activity(活跃度)。

EDM

  EDM全称Educational Data Mining ,是一个新兴的以目前快速增长的教育环境中产生的数据为基础,通过数据挖掘的手段和方法更好的理解学生以及其学习的环境,无论教育数据来自学生使用交互式学习环境,计算机支持的协作学习系统,还是来自学校和大学的管理数据,它通常都有多层次的有意义的层次结构,通常需要由数据本身的属性决定,更进一步,数据产生的时间、顺序以及上下文在理解教育数据工程中也发挥着重要作用。

  EMD(http://educationaldatamining.org/)会议开始于2008年,每年举办一次,最近一次会议将于2019年7月2-5日在加拿大举办(http://educationaldatamining.org/edm2019/),同时EMD也组织出版期刊JEDM(https://jedm.educationaldatamining.org/index.php/JEDM/)

LAK

  LAK全称International Conference on Learning Analytics & Knowledge,面向与学习和分析系统领域相关专业人员的首要研究论坛,用于探讨学习和分析的最新以及最前沿技术。

  LAK会议(https://solaresearch.org/events/lak/)由ACM主办,开始于2011年,每年举办一次,最近一次会议LAK19(https://lak19.solaresearch.org/)于2019年3月4-8日在美国举办。

总结

  AIED主要作为教育AI方面最为全面的会议,征集的论文方向也比较广泛,ITS以及LAK主要是从某一个与教育相关的系统或者技术为基础进行延伸,EDM以及L@S主要是专注于教育、学习过程中产生的数据,以及在大规模学习环境中如何提高学习效率,同时与教育理论结合较为密切些。由于上述组织或者会议均是与教育领域密切相关的技术会议,为了更好的结合领域以及服务于领域,不同的会议团体与教育领域方面的会议或组织联合组建了IAALDE,即International Alliance to Advance Learning in the Digital Era(http://www.alliancelss.com/),其中AIED、EDM、L@S均属于该组织。

  在整体影响力或者知名度方面AIED>ITS、EDM>LAK、L@S

Workshop

Pyhton机器学习——预测分析核心算法

Posted on 2018-11-22 | In reading-notes

概述

本书主要针对两大类算法簇进行了预测类算法讲解,并使用水雷-岩石和红酒数据集进行了实例讲解,在讲解算法并未深入十分基础的数学原理以及数学推导,而更多的是将原理转化成容易理解的语言,并介绍了实际使用中的相关模型选择经验,对预测分析任务实战有一定指导意义。

内容

章节递进关系

1 关于预测的两类核心算法

该书主要介绍在实际使用中比较常见以及效果好的两类算法簇,包括惩罚回归方法以及集成方法。

  • 惩罚回归方法:主要是以传统的线性回归中最小二乘法求解为基础,加上惩罚项进行约束,避免过拟合问题。
  • 集成方法:通过多个弱学习器进行集成来整体提升模型的效果,主要包括提升决策树、随机森林、投票决策树、提升二叉树等,又可以抽象的归纳为bootsing方法以及bagging方法。

不同的算法在不同类型的数据集(包括大数据集、小数据集、宽数据集、高数据集等,同时数据集的特征可能是连续特征较多也可能是离散数据特征较多)上表现可能存在较大的差异,因此在进行预测算法选择时要分析探索数据集的类型以及特点选择不同的算法。

构建预测模型的流程主要包括:

  • 构造一个机器学习问题:如果充分理解业务,并进行抽象以及问题定义,该工作十分重要,问题定义的是否准确直接决定了该预测模型最终效果的好坏。
  • 特征提取以及特征工程:该工作需要反复迭代,寻找对预测结果有帮助的特征,可能会占据整个工作的80%-90%的时间。
  • 模型性能评估:一定要在测试集上充分验证模型的性能,否在在进行实际的线上处理时可能会有很多意想不到的问题。

2 通过理解数据来了解问题

因变量与预测结果均可分为数值类型以及类别类型,数值类型是指连续的数值变量或者比较大小存在意义的离散变量,类别类型变量不同值之间没有顺序关系。

根据因变量与预测结果类型不同选取不同的模型。预测结果类型为数值类型的又可称为回归任务,预测结果类型为类别类型的为分类任务,特别的当结果类型类别自由两类时为二分类问题。

因变量也可以称为:属性、预测因子、特征、独立变量、输入
预测结果也可成为:标签、目标、依赖变量、响应

3 预测模型的构建:平衡性能、复杂性以及大数据

预测模型总体上来说可分为线性模型以及非线性模型,一般来说非线性模型的复杂度高于线性模型,数据的预测因子越多,模型也就越复杂,如果对于数据量较少的样本来说,如果模型过于复杂就容易出现过拟合问题。

问题的复杂性也容易影响模型的拟合情况,通过训练数据的分布也可以从某种程度上反映出问题的复杂程度,以分类问题来说,如果训练数据的分布存在明显的分界,则说明该分类问题件比较简单,如果分布错综复杂,说明该分类问题比较复杂。

选择预测模型的基本原则:

  • 简单的问题选取线性模型等复杂度较低的模型
  • 复杂的问题选取非线性等复杂度较高的模型
  • 对于训练时间敏感的问题尽量避开复杂度过高的模型

预测结果类型不同需要选取不同的评价指标,对于回归问题多选用MAE,MSE作为评价模型,对于二分类问题多采用ROC曲线或者AUC指标作为评价模型。

控制模型过拟合的方法:

  • 使用前向逐步回归来控制过拟合
  • 通过惩罚回归系数来控制过拟合

4 惩罚线性回归模型

为了解决线性模型过拟合问题,惩罚线性回归模型都是在损失函数中增加各种惩罚项来增加模型的泛化能力。

因此惩罚线性回归的如下几个特点使得该模型十分有效:

  • 模型训练足够快速
  • 部署是预测速度较快
  • 变量的重要信息易于解释
  • 特别是对那些适用于采用线性模型进行处理的问题

不同种类惩罚线性回归模型的惩罚项:

  • Ridge回归

    1
    \frac{\lambda\beta^T\beta}{2} = \frac{\lambda{(\beta_1^2+\beta_1^2+\cdots+\beta_n^2)}}{2} = \frac{\Vert\beta\Vert^2}{2}
  • Lasso回归

    1
    \lambda\Vert\beta\Vert_1
  • ElasticNet回归

1
\lambda_1\Vert\beta\Vert_1 + \lambda_2\Vert\beta\Vert^2

可以将类型变量进行onehot编码处理之后进行再进行线性回归预测

5 使用惩罚线性方法来构建预测模型

采用惩罚线性回归模型的具体案例,代码见:

6 集成方法

本章主要介绍了bagging,gradient boosting以及random forest。

  • bagging:通过多个基学习器进行带权重的投标决定最终分类。
  • gradient boosting:通过多个基学习期进行多轮学习,每一轮的输入采用前一轮的错误残差,也就是说上一轮出现错误的更多的参与了下一轮的学习。
  • random forest:在bagging基础上随机的选择属性构建决策树。

7 用Python构建集成模型

具体集成方法的具体案例,代码见:

构建实时机器学习系统

Posted on 2018-11-03 | Edited on 2018-11-22 | In reading-notes

概述

  本书主要介绍了在构建实时机器学习中需要考虑的事项、使用的工具(包括消息队列工具RabbitMQ、存储工具mysql和nosql、日志收集套件ELK、集群部署工具Docker)、以及通用的一些设计模式,并在讲解这些设计模式的同时介绍了其适用的场景。
  个人认为最具特点的一章是第十章总结了机器学习系统的设计模式,包括读、更新、处理多个方面。

内容

章节递进关系

实时机器学习方法

1 实时机器学习综述

  从机器学习的基本概念入手,首先介绍了什么是机器学习:

1
吴恩达定义:继续学习是一门学科,它旨在让计算机自主工作,而不需要刻意编程。
1
SAS定义:机器学习是一种方法,它旨在用数据分析分析自动化模型的建立。

作者对商用机器学习应该包括的内容:

  • 用数据说话
  • 高度自动化
  • 鲁棒性

  然后在此基础上介绍了机器学习的发展历史、领域分类,并总结了实时机器学习系统的基本要求:

  • 模型的可扩展性
  • 模型运用的低延迟性
  • 训练数据的私密性

  最后以Netflix的机器学习竞赛为例介绍了用户被逆向工程以及较难在生产环境中使用的问题。

2 实时监督是机器学习

  监督式学习旨在利用利用训练集,建立因变量和自变量自建的函数映射关系:

$${y = f(x;b;e)}$$

  实时机器学习实战思路:

  • 不要重复造轮子
  • 没有模型是完美的
  • 重视上下游生态

  衡量回归预测统计量的基本指标:

  • 均方误差
1
MSE = \frac{1}{n}\sum\limits_{i=1}^n(\hat{Y_i} - Y_i)^2
  • 绝对误差中位数
1
MAE = Median(|\hat{Y_i} - Y_i|)

  衡量分类的统计量:

  • 准确率
1
\text{准确率} = \frac{\text{真阳性}}{\text{真阳性} + \text{假阳性}}
  • 召回率
1
\text{召回率} = \frac{\text{真阳性}}{\text{真阳性} + \text{假阴性}}

3 数据分析工具Pandas

  以苹果公司股价数据为例介绍了使用pandas导入数据、探索数据以及展示数据,包括:read_csv、head、tail、map、drop、mean、min、max、describe等方法的使用。

4 机器学习工具Scikit-learn

  scikit-learn是一款通用的机器学习库,以流水线pipeline的方式将机器学习中数据预处理、模型建立、训练、验证、可视化进行封装,便于高效使用。

机器学习模块包括:

  • sklearn.cluster 聚类分析
  • sklearn.manifold_learning 流行分析
  • sklearn.decomposition 矩阵分解
  • sklearn.emsemble 集成算法
  • sklearn.gaussian_process 高斯过程
  • sklearn.linear_model 线性模型
  • sklearn.mixture 高斯混合模型
  • sklearn.native_bayes 朴素贝叶斯
  • sklearn.neighors 邻近估计
  • sklearn.neural_network 神经网络
  • sklearn.tree 决策树

实时机器学习架构

5 实时机器学习架构设计

  设计实时机器学习系统需要考虑的几个方面:

  • 数据通量和存量估计
  • 响应时间
  • 和已有系统之间的关系
  • 系统带来的意义

  lambda架构的分层设计:

  • 实时响应层
  • 快速响应层
  • 批处理层

  常用的实时机器学习架构:

  • 瀑布流架构:比较通用的架构,不仅仅是实时机器学习中采用,在很多业务系统也会采用该架构,主要思想是以MQ为媒介,将整个业务流程拆分成像瀑布一样从上游到下游的形式执行。
  • 并行响应架构:主要思想是将机器学习任务通过负载均衡的方式在机器学习集群中并行执行,并将处理结果一MQ的机制通知后端业务系统进行处理。
  • 混合架构:结合上述两种架构

6 集群部署工具Docker

  通过Docker相关工具快速集群化部署模型。

7 实时消息队列和RabbitMQ

  RabbitMQ的主要构成部分:

  • 消息:信息传递的基本单元,主要包括具体的消息payload、路由名(routing key)、投递保证相关控制信息。
  • 消息队列:是进行消息存储、读取的基本组件,用于控制消息的持久化。
  • 网络连接:包括connection、channel,用于控制消息的网络传输以及在网络传输中的复用机制。
  • 消息交换中心:路由组件,控制消息如何到达具体的队列。

  常用交换中心模式:

  • 直连结构
  • 扇形结构
  • 话题结构
  • 报头结构

8 实战数据库综述

  介绍传统关系型数据库与NOSQL数据库的特点,以及在不同业务场景中的选型参考。

9 实时数据监控ELK集群

  介绍ELK套件工具进行日志的采集,查询以及展示,在介绍了elasticsearch的基本文档查询功能的基础上,着重对es的对偶搜索(percolate)进行了说明。
对偶搜索是与普通文档搜索相反的一种搜索方式,传统搜索是将文档存入es,以查询条件进行搜索,而对偶搜索是将查询或者规则存入es,将文档传入进行搜索或者匹配。

10 机器学习系统设计模式

  从具体使用的几个点对系统的设计模式进行了总结,个人认为这些系统的设计模式并不仅仅适用于机器学习系统,也适用于业务系统或者中台系统。

读
  • 高速键值模式,适用于实时层现预处理结果、对网页访问等进行技术、关键词扩展、机器学习模型参数存储等场景
  • 缓存高速查询模式,适用于机器学习模型因变量存储、机器学习模型结果存储等场景。
更新
  • 异步数据库更新模式,适用于推荐系统内容更新、机器学习参数更新等场景。
  • 请求从定向模式,适用于广告后端系统更新、同城物流公司后端更新等场景。
处理
  • 硬实时并行模式,适用于在线广告实时点击预估、智能语音服务器端等场景。
  • 分布式任务队列模式,类似于流式计算,将数据的流动抽象成有向无环图,图中节点划分为数据发出节点(Spout)和数据处理节点(Bolt),采用调度框架进行统一的任务调度,适用于在线票务系统等场景。
  • 批实时处理模式,类似于离线计算,适用于社交舆情分析、金融数据分析等场景。

未来展望

11 Serverless架构

  介绍Serverless架构的发展历史,并将Serverless平台架构划分为函数存储层、函数管理层以及函数运行层三层。

12 深度学习的风口

  归纳总结了机器学习的难点包括解释性工具缺失、应用场景限制和模型成本限制,并比较了目前各机器学习平台。
  深度学习平台功能模块

  • CPU+GPU控制、通信层
  • 内存、变量管理层
  • 基本运算层,比如矩阵操作
  • 基本简单函数层,比如激活函数
  • 求导模块
  • 神经网络基本模块,比如卷积层、池化层等
  • 整合以及优化求解。

知识点框架图

互联网架构的数学解释——互联网架构定义及特性

Posted on 2018-09-02 | Edited on 2018-09-03 | In internet-architecture-math

  在这个互联网的时代,可以说人们的衣食住行等方方面面都离不开互联网带来的便利,互利网技术也成为了目前炙手可热的话题。同时互联网技术是一个很大的领域,气象万千、包括万象,也不是本专栏三言两语能够描述清楚的,本专栏只聚焦于互联网架构这一个相对来说比较小一些的范围。

1 互联网架构的定义

  架构一词就字面意思是指比喻事物的组织、结构、格局,并广泛应用在建筑领域,随着计算机和软件技术的发展,也逐渐将架构一词用于软件架构中,是一系列相关的抽象模式,用于指导各类软件系统各个方面的设计。互联网架构也就是指将软件运行在互联网之上形成的架构,但是如果仅仅只是讨论所谓的软件未免显得比较狭义了,目前的互联网架构应该是包括硬件、软件、网络甚至包括一整套构建、运维以及管理流程,笔者翻阅各类资料并未找到对互联网架构这一术语有着明确的定义,为避免歧义或者误会,本专栏将互利网架构定义如下:

互联网架构是指以互联网为依托,能够支撑用户正常“访问”为中心,并达到满足一定业务目的为前提,综合各种技术及管理形成的一整套组织和结构。

2 互联网架构的特性

2.1 特性的基本解释

  互联网架构作为一整套组织和结构,也应该存在相应的衡量指标,用来描述某一种互联网架构的好坏,包括:

  • 可用性(Availability):是指系统在执行任务的任意时刻能正常工作的概率。
  • 可靠性(Reliability):是指从它开始运行到某个时刻,这个时间段内正常运行的概率。
  • 可扩展性(Scalability):是指系统通过添加资源(使硬件更强大(向上扩展)或添加更多节点(向外扩展))来容纳更大负载的能力。
  • 弹性(Elasticity):是指系统在向外扩展时动态处理负载所需的资源的能力。
  • 一致性(Consistency):是指系统更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致。
  • 分区容错性(Partition tolerance):是指系统在遇到某节点或网络分区故障的时候,仍然能够对外提供外界无法感知故障的“访问”的能力。

2.2 特性的指标量化

  可靠性一般采用MTTF(Mean time To Failure)平均失效前时间、MTTR(Mean Time to Restoration)平均恢复时间、MTBF(Mean time Between Failure)平均故障间隔时间这几个指标进行衡量,如图 所示:

1
2
3
4
5
MTTF = \frac{\sum\limits_{i=1}^nTw_i}{N}

MTTR = \frac{\sum\limits_{i=1}^n(Ts_i + Tr_i)}{N}

MTBF = MTTF + MTTR

  可用性是表示系统在任意时刻能够正常工作的概率,定义为:

1
2
3
4

Availability = \frac{MTTF}{MTTF + MTTR}
= \frac{\sum\limits_{i=1}^nTw_i/N}{\sum\limits_{i=1}^n(Tw_i + Ts_i + Tr_i)/N}
= \frac{\sum\limits_{i=1}^nTw_i}{\sum\limits_{i=1}^n(Tw_i + Ts_i + Tr_i)}

  通俗上常有几个九来表示,以一年为周期计算,不同九的级别对应不可用时间如下表:

可用性 年服务不可用时间
99%(2个9) 3.65天
99.9%(3个9) 8.76小时
99.99%(4个9) 52.56分钟
99.999%(5个9) 5.26分钟
99.9999%(6个9) 31.54秒

  通过上述量化指标可以看出,可用性与可靠性有所不同,但是也存在一定关联性,提高系统可靠性MTTF指标在某种程度上可以提高系统的可用性,但是可用性高的系统不一定可靠性高。比如A系统每年因故障中断十次,每次恢复平均要15分钟,B系统每年因故障中断2次,每次需6小时恢复。依据上述量化公式,A系统MTTF≈36.5天,Availability≈99.97%,B系统MTTF≈182.3天,Availability≈99.86%,则A系统可用性比B系统高,但可靠性比B系统差。

  可扩展性是指扩展硬件或者增加节点来提高负载的能力,由于系统中存在不同组件,为简单便于计算,假设不同组件的扩展统一抽象为节点单元,每一个节点单元单独使用可承受的负载为tps,扩展至N个节点单元整个系统可承受的负载为TPS,定义系统的可扩展性为:

1
Scalability = \frac{TPS}{N*tps}

  一般系统随着节点单元的增加系统的负载能力并不是完全线性增加的,存在着一定的损耗,如果损耗越小,则称系统的可扩展性越好。


  弹性是指系统在向外扩展时动态处理负载所需的资源的能力,针对云的资源共享和互联网的使用量起伏特点所提出的“热扩展”要求,以非人工干预的、反应式的、近实时的资源调整来应对负载变化,尤其是不可预见的使用量高峰,从而提高服务容量、资源利用率和降低成本。

  定义系统随着时间变化预测访问量为f(t),定义系统最高负载能力随时间变化能力为g(t),假设在初始T0时刻系统预测访问量与系统最高负载相同,随着业务发展或者活动的推出,系统预测访问量会随之变化,对于弹性系统可以动态调整系统资源使得系统最高负载能力也随之变化,有点类似于对系统加上一定的激励以及对该激励做出的响应,如果系统对激励的响应越快越准备,则称系统的弹性越好,可定义为:

1
Elasticity = \frac{\int_{T_0}^{T_1} g(t) {\rm d}t}{\int_{T_0}^{T_1} f(t) {\rm d}t}

  在谈到一致性的时候,大家一般可能都会想到强一致性,最终一致性等等,但是个人总觉得稍显含糊,不够严谨,如果两个分布式系统都是最终一致性,能够有办法评价一致性的好坏呢?本文尝试通过定义量化的指标来衡量一致性,假设该系统的数据副本数量为N,一次成功写操作记为W(D,v)=0,在此时间T0之后如果任何的读操作R(D)均为v,则表示该系统是强一致性,如果存在某个时间T,对于任何T时间之后的读请求,均有R(D)=v,则表示该系统为最终一致性,T值的最小值约小,则表示一致性越好,该最小T值记为MTTC(Min time to Consistency),数学语言描述为:

1
MTTC = \min\{ T | T \ge 0, R(D)_{t > T} =v \}

  分区容错性是指系统在遇到某节点或网络分区故障的时候,仍然能够对外提供外界无法感知故障的正确“访问”的能力。这里的正确“访问”是指能够对数据正确访问,而不是正常“访问”,如果系统返回之前的旧数据也叫做正常访问,只能说明可用,不能代表分区容错。假设系统的假设该系统的数据副本数量为N,系统的分区为M,当m个分区故障之后,系统仍然能够提供正确“访问”的能力,m值越大,则说明系统分区容错性越好,定义为分区容错率(Partition Tolerance Rate)为:

1
PTR = \frac{\max\{ m \}}{N}

  这里将数据副本与分区数量进行了区分,是考虑到实际确实存在某些架构分区的概念可能比较大,或者说这个分区存在某种程度上的层次,后续文章中会进行相关案例介绍,当然,大部分架构在设计时将分区数量默认与副本数量相同,在满足大多数业务需求的同时降低了系统的复杂度。

3 互联网架构的分析

  互联网架构作为本专栏的主要研究对象,也可以按照架构分析的视角对互联网架构进行分析,主要是通过不同层级的视角对互联网架构的林林总总进行分类梳理,力求抽象并找出共性。

3.1 域架构

  域架构是指目前研究以及应用都比较多,实实在在用于支撑用户正常“访问”的架构,不同的层级从具体到抽象又可分为业务问题域架构、公共问题域架构、基础问题域架构。

  • 业务问题域架构:是指可以实际应用于具体业务领域问题的架构,比如电商秒杀、金融支付、海量商品详情、订单交易、千人千面、视频直播等具体业务场景所对应的架构,在某种程度上可以与业务开发架构师设计的架构相对应,同时更加倾向于业务中台的相关架构。
  • 公共问题域架构:是指用于支撑上述具体业务问题域架构的较为公共问题的架构,比如搜索、推荐、IM、分布式事务、隔离、限流等等,在某种程度上可以与公共组件或者中间件架构相对应。
  • 基础问题域架构:是指用于实现公共问题域架构的基础架构,比如分布式锁、缓存、队列、池化复用、同步异步、负载均衡等,通过这些基础架构的组合、连接等实现公共问题域架构。

3.2 架构元及数学解释

  架构元在理解上可以与数据元对应,是组成架构的最小单元或者原子单元,是对基础问题域架构进行进一步抽象而形成,同时也可以作为互联网架构与数学理论解释的桥梁。在本专栏的后续文章中会随着域架构分析的深入逐步介绍架构元的类型以及种类。

4 总结

  本文对互联网架构给出了定义以及衡量指标的数学描述,并对互联网架构进行了抽象分析,主要是总结个人对互联网的理解,其中难免会有一些偏差,写的不好或者错误的地方还希望大家多多指点。

本专栏下一篇文章会对互联网常用架构中业务问题域架构进行梳理,并整理出一些常用具有代表性的业务问题架构,尽请期待。

白话深度学习与TensorFlow

Posted on 2018-09-02 | Edited on 2018-11-02 | In reading-notes

概述

  本书以较为通俗的语言介绍了深度学习的方方面面,从机器学习的基本任务到CNN、RNN,再到残差网络、强化学习、GAN等;讲述时将部分公式用比较通俗的语言进行了解释,便于建立直观的认识;使用TensorFlow工具介绍了手写板、图片分类、自动文本生成等基础学习案例。
  本人认为最具特点的一章是第七章解释了一些机器学习中通用的问题,比如归一化、正则化、超参数等等。

##

基础篇

1 机器学习是什么

  介绍基本学习基本概念,基本任务的分类包括分类、聚类、回归,以及结合多种任务的综合应用。

2 深度学习是什么

   介绍神经网络的基本结构,包括神经元、激活函数等,深度学习的基本概念,并解释了深度学习为什么具备这么强的特性,最后列举了目前基于深度学习的一些商业案例。

3 TensorFlow框架与安装

   介绍了TensorFlow框架的特点以及与其他框架的特性比较,并介绍了TensorFlow的集群、可视化、线上部署等高级特性。

原理与实践篇

4 前馈神经网络

   首先介绍了导数、梯度下降、凸函数极值求解等基本概念,从线性回归求解入手逐步介绍神经网络的求解过程,在求解过程中解释了数据样本的训练集、验证集以及测试集。

5 手写板识别

   基于MNIST数据集,以TensorFlow为工具介绍了手写数字识别案例,介绍了一个机器学习项目的基本流程。

6 卷积神经网络

   首先介绍卷积、卷积核、池化、采样等基本概念,讲解了集中典型的CNN网络,包括VGG-16,GoogleNet等,最后使用CIFAR-10数据集进行了图片分类的案例分析。

7 综合问题

   总结了在机器学习以及深度学习中的基本概念及其应用特点,包括归一化、正则化、梯度消息问题、参数初始化问题、超参数选取问题等

8 循环神经网络

  从隐马尔科夫链入手介绍序列数据处理的模型,讲解了RNN模型的基本结构以及训练过程,由于RNN梯度爆炸和梯度消失的的问题引入了目前业界更加常用的LSTM模型,LSTM模型主要是在RNN模型的基础上增加了状态,这个状态可以通过各种激活函数控制以不同的比例参与到下一个序列的输入,概括来说包括输入遗忘部分、状态更新部分以及输出部分;最后实践了自动文本生成和聊天机器人两个例子。

扩展篇

9 残差神经网路

10 受限玻尔兹曼机

11 强化学习

12 对抗学习

13 有趣的深度学习应用

章节递进关系

知识点框架图

互联网架构的数学解释——互联网架构定义及特性

Posted on 2018-09-02 | Edited on 2018-10-26 | In internet-architecture-math

  本专栏前面介绍了互联网架构的定义以及各层级的域架构,本篇以哈希开始从架构元这一层开始详细介绍互联网架构于数学的对应关系。

哈希相关基础知识

定义

  哈希是Hash的英译,用于表示一种映射关系,可以将源空间中的样本(键值)较容易映射为目标空间中的唯一确定的样本(哈希值)。

哈希函数

  用于表示上述定义中的这种映射关系的就是哈希函数,针对不同的应用场景会设计不同的哈希函数,通常考虑的因素或者衡量指标包括:

  • 计算哈希值所需时间
  • 哈希值求逆以及求碰撞难易程度
  • 哈希值在目标空间的分布情况(均衡性)
  • 源空间样本到目标空间样本信息损失情况(损失性)
  • 某个参数发生变化时,哈希值发生变化样本的占比情况(单调性)

基本还是可以通过时间+空间的方式进行思考,前面两条表示正向以及逆向的时间问题,第三条表示空间分布,第四条表示空间的变化

  在具体应用场景,设计哈希函数时,有如下几种进行设计的方法:

  • 直接定址法:取关键字或关键字的某个线性函数值为散列地址。即H(key)=key或H(key) = a·key + b,其中a和b为常数(这种散列函数叫做自身函数)。若其中H(key)中已经有值了,就往下一个找,直到H(key)中没有值了,就放进去。
  • 数字分析法:假设关键字是以r为基的数,并且哈希表中可能出现的关键字都是事先知道的,则可取关键字的若干数位组成哈希地址。
  • 除留余数法:取关键字被某个不大于散列表表长m的数p除后所得的余数为散列地址。即 H(key) = key MOD p,p<=m。不仅可以对关键字直接取模,也可在折叠、平方取中等运算之后取模。对p的选择很重要,一般取素数或m,若p选的不好,容易产生同义词。
  • 平方取中法:当无法确定关键字中哪几位分布较均匀时,可以先求出关键字的平方值,然后按需要取平方值的中间几位作为哈希地址。
  • 乘法取整法:f(x):=trunc((x/maxX)*maxlongit) mod maxM,主要用于实数。
  • 折叠法:将关键字分割成位数相同的几部分(最后一部分的位数可以不同),然后取这几部分的叠加和(舍去进位)作为哈希地址。
  • 随机法:选择一随机函数,取关键字的随机值作为散列地址,通常用于关键字长度不同的场合。
  • 斐波那契(Fibonacci)散列法:
  • MD5:MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一,主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。
    MD5是输入不定长度信息,输出固定长度128-bits的算法。经过程序流程,生成四个32位数据,最后联合起来成为一个128-bits散列。基本方式为,求余、取余、调整长度、与链接变量进行循环运算。得出结果。
  • SHA-1:

哈希表

  哈希表是用指上述哈希映射关系的一种数据结构抽象,可以通过源空间中的值(键值)按照目标空间中的值(哈希值)对需要存储的内容进行直接存取。由于涉及到了寻址以及存储等,在具体使用中可能会出现不同的键值在经过哈希函数映射运算之后的哈希值相同,这样就导致了冲突,对于哈希冲突有如下几种处理思路:

  • 开放寻址法:Hi=(H(key) + di) MOD m,i=1,2,…,k(k<=m-1),其中H(key)为散列函数,m为散列表长,di为增量序列,di也可以采用不同的序列形式,包括线性序列、二次序列、伪随机序列等
  • 再散列法:Hi=RHi(key),i=1,2,…,k RHi均是不同的散列函数,即在同义词产生地址冲突时计算另一个散列函数地址,直到冲突不再发生,这种方法不易产生“聚集”,但增加了计算时间。
  • 链地址法:这种方法的基本思想是将所有哈希地址为i的元素构成一个称为同义词链的单链表,并将单链表的头指针存在哈希表的第i个单元中,因而查找、插入和删除主要在同义词链中进行。链地址法适用于经常进行插入和删除的情况。
  • 建立公共溢出区:将哈希表分为基本表和溢出表两部分,凡是和基本表发生冲突的元素,一律填入溢出表。

这些处理思路无外乎都是将计算出来的哈希值通过各种办法在目标空间中选取一个与冲突值不同的值

  哈希表在实际的使用中很大一部分是用于加快查找速度,查找效率也就是衡量哈希表在对应场景设计好坏的一个重要指标,一些关键码可通过散列函数转换的地址直接找到,另一些关键码在散列函数得到的地址上产生了冲突,需要按处理冲突的方法进行查找。在介绍的三种处理冲突的方法中,产生冲突后的查找仍然是给定值与关键码进行比较的过程。所以,对散列表查找效率的量度,依然用平均查找长度来衡量。查找过程中,关键码的比较次数,取决于产生冲突的多少,产生的冲突少,查找效率就高,产生的冲突多,查找效率就低。因此,影响产生冲突多少的因素,也就是影响查找效率的因素。影响产生冲突多少有以下三个因素:

  • 散列函数是否均匀
  • 处理冲突的方法
  • 散列表的载荷因子(load factor):填入表中的元素个数 / 散列表的长度。

与上层各问题域联系

在“索引”中的应用

  哈希可以作为索引的一种方法,将某个字段内容的哈希值与具体保存的行数通过哈希函数映射关系对应起来,这样能够很快的查询到对应的内容。采用哈希作为索引在查询上速度较快,但是也存在一些局限。

  • hash索引中只有hash值和行数的指针,因此无法直接使用索引来避免读取行,但是因为这种索引读取快,性能影响不明显。
  • hash索引不是按照索引值顺序存储,无法使用于排序。
  • 不支持部分列匹配查找,这里面是使用索引列的全部内容来计算哈希值,例如(A,B)两列一起建索引,单纯使用A一列,那么就无法使用索引,B-Tree索引的话,因为支持匹配最左前缀,所以这种情况适用性偏好。
  • 哈希索引只支持等值查询,包括=、in()、<=>,不支持where age > 10 这种范围查询。
  • 哈希冲突很多的话,维护索引操作的代价也很高

在“压缩”中的应用

在“加密”中的应用

在“负载均衡”中的应用

  在通用问题域“负载均衡”这个点中,主要是尽量均匀的将键值映射到各节点对应的哈希值,从而达到均匀分摊负载压力的目的。对于这种分配策略在不同的实际应用场景会有不同的设计,本专栏也会专门有文章介绍,不是本篇文章的重点,与本篇文章存在一定联系,也是非常常用的一种负载均衡分配策略就是采用除留余数法(取模)的哈希算法作为一种分配算法,但是该分配策略在单调性上存在较大的不足。

  假设源空间样本数量为N并均匀分布,目标空间样本数量为m,采用普通取模的hash算法如果目标空间样本数发生变化,比如减少为m-1,在N>>m的情况下,每m*(m-1)范围内除了最前面的m-1个值不发生变化之外,剩余的值均会发生变化,也就是说有1-1/m个值发生变化,当m从10减少到9时,哈希值发生变化的源空间样本占比为90%,在互联网并发高的应用中会出现大量未命中或者状态丢失的情况,影响系统的稳定性。

  为了解决诸如此类问题,引入了一致性哈希算法:

一致性哈希

  一致哈希是一种特殊的哈希算法。在使用一致哈希算法后,哈希值的改变平均只需要对N/n个源空间样本重新进行映射,具备较好的单调性。

  •   环形hash 空间:考虑通常的 hash 算法都是将 value 映射到一个 32 位的数值,也就是 0~2^32-1次方的目标空间,我们可以将这个空间想象成一个首( 0 )尾( 2^32-1 )相接的圆环,如下面图所示的那样。
  • 把对象映射到目标空间:接下来考虑4个对象object1~object4 ,通过某种hash 函数计算出的哈希值值在环上的分布如图所示。
1
2
3
4
hash(o1) = m1 
hash(o2) = m2
hash(o3) = m3
hash(o4) = m4
  • 把节点映射到hash 空间
    使用同样的hash函数,我们将机器也放置到hash环上。假设我们有三台缓存机器,分别为 c1,c2,c3,使用hash函数计算这3台机器的hash值:
1
2
3
hash(c1) = t1 
hash(c2) = t2
hash(c3) = t3

把t1,t2,t3 这3个值放置到hash环上,如图所示。

为对象选择机器
将对象和机器都放置到同一个hash环后,在hash环上顺时针查找距离这个对象的hash值最近的机器,即是这个对象所属的机器。
例如,对于对象o2,顺序针找到最近的机器是c1,故机器c1会缓存对象o2。而机器c2则缓存o3,o4,机器c3则缓存对象o1。

通过上述的一致性哈希算法,我们仍然假设源空间样本数量为N并均匀分布,目标空间样本数量为m,当目标空间样本由m变为m-1,以及m+1哈希值发生变化的情况:

在某些情况下将节点映射到目标空间时,在节点过少时可能会出现映射不均匀的情况,这样会导致节点之间数据不均匀,系统整体利用效率过低,为了解决该问题可以通过引入虚拟节点或者线性映射的办法改善节点的哈希值在目标空间不均匀的情况:

虚拟节点是指将原来具体的节点对应出多个虚拟的节点,使得整体节点数目变多,减少映射到目标空间不均匀的程度,当然,虚拟节点的增加并不能够完全解决不均匀的问题,但是可以较好的降低不均匀性,定量计算分析如下

线性映射是指将原有不均匀的环形目标空间对应的节点哈希值映射到均匀的线性空间中,比如通过将节点哈希值对应的顺序再次按照这个线性空间的分区数量进行取模哈希运算。

在“拆分合并”中的应用

  通用问题域“拆分合并”包括但是不限于对数据库进行的分表分库,以数据库的分表分库为例,很多情况下会采用源空间为用户id或者业务唯一id,目标空间为数据库编号,哈希函数为取模的方案对数据库的crud请求进行路由,将原来但以数据库的处理压力分担到分开之后的多个数据库。

在“搜索”中的应用

  在通用问题域“搜索”这个点中,很多业务场景存在文本搜索的需求,特别是在召回阶段需要对文本的相似度进行计算,为了提高计算效率,会采取对文本计算摘要的方式比较,传统大多数hash算法在源空间键值即时是发生较小的变化,计算出来的哈希值差别也会差别的非常多,不满足在源空间键值相似的情况下目标空间哈希值也尽量相似的要求。相似哈希(simhash)具备上述特性,因此在文本搜索中广泛用于相似度计算。

相似哈希

  对两个网页进行相似哈希判断,假定网页中有若干词:t1,t2,…,tk,他们的权重(比如TF-IDF值)分布为:w1,w2,…,wk。先计算出这些词的信息指纹,为便于说明,假定只用8位二进制的信息指纹f1和f2(实际中肯定比这个长,否则重复度太高)。

  我们先来计算下网页的信息指纹,以第一个网页f1为例,计算步骤如下:

  • 初始化:将8位二进制的指纹f1扩展成8个实数,用r1,r2,…,r8表示,初值均为0;
  • 扩展:看t1的指纹(8位),如果t1的第i位为1,则在ri上加上w1;若为0,则在ri上减去w1。使用同样方法,遍历t1~tk(相当于将所有词在第i位的权重相加减得到ri),得到最终r1~rk的值;
  • 收缩:根据r1~rk的值,若大于零,则f1的对应位为1,否则为0。

  同样的方法,我们还可以得到其他网页的信息指纹。

  根据两个网页的相似哈希值,我们可以求出二者之间的相似哈希距离(使用汉明距离或欧几里得距离等),从而判断网页是否相似。

  相似哈希的特点是:如果两个网页的相似哈希相差越小,这两个网页的相似性越高。如果两个网页相同,他们的相似哈希肯定相同。如果他们只有少数权重小的词不同,其余的都相同,那么他们的相似哈希也几乎相同。

与数学的对应关系

集合论

  哈希从本质上来说就是一种映射关系,把源空间记为集合A,目标空间记为集合B,哈希就是集合A到集合B中一种映射关系,这种映射关系在集合论中可抽象概括为一般映射、单射、满射、双射,因此哈希函数的各种性质也可以结合集合论进行研究。

数论

  对于冲突解决的增量队列的选取根据实际情况选取不同的数列,数列可以包括等差线性数列、二次数列、斐波那契等等,具体数列性质可以结合数论深入研究,从而构造出不同的冲突解决方案。

信息论(应用数学之一)

  在信息论中,两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数,换句话说,它就是将一个字符串变换成另外一个字符串所需要替换的字符个数,可以在通信中累计定长二进制字中发生翻转的错误数据位,所以它也被称为信号距离。

  另外二进制字符串的汉明距离也等于n维超正方体两个顶点之间的曼哈顿距离,其中n是两个字串的长度。

总结

  既然专栏叫做互联网架构的数学解释,就以整体架构中各层依赖图以及公式进行总结,以哈希为中心的互联网架构依赖图如下:

  重要概念或知识点的数学公式:

哈希:\(value = hash(key)\)或缩写为\(v = h(k)\)

直接定址法:\(v = a*k + b\)

除留取余法:\(v = k \ mod \ p(p \le m)\)

开放寻址法:\(v = h(k) + d_i,di \in D \)

再散列法: \(v = h_i(k),i = 1,\dotsc,m\)

一致性哈希:
$$v_k = h_1(k)$$

$$v_{n_i} = h_2(n_i),i=1,\dotsc,m$$

$$v = v_{n_i},i = {\arg\min_{i} v_{n_i} - v_k} $$

相似哈希:

互联网架构的数学解释——发刊词

Posted on 2018-09-01 | Edited on 2018-09-14 | In internet-architecture-math

  从事互联网开发有些年头了,见过了各式各样的所谓的互联网架构,从早期的SOA模型到目前大火的微服务模型,以及正处于上升期的Lambda、Service Mesh等等。无论哪个阶段的架构模型,介绍的文章、落地的案例、架构术语都不胜枚举,理解记忆起来也可能过于繁琐和复杂,让广大从业者以及研究者都容易陷入到茫茫的架构方案中无法认清本质。虽然各个阶段架构有所不同,但是每个阶段的各种系统的架构模式均可以抽象提炼成一个个架构元(与数据元对应理解),通过架构的组合、连接等可以构成系统的整体架构方案。

  数学这个古老又充满了活力的学科,可以说是一切科学技术的基础,因此属于计算机技术的所谓互联网技术同样也少不了数学的身影。数学这门学科非严谨的可分为代数、几何以及分析三大范畴(实际上数学学科错综复杂,很多各部分融合交叉)。代数以线性代数、抽象代数为基础,研究各种代数结构,比如最常见的群环模域线性空间等;几何主要关注几何对象与拓扑对象,以点线边图等为基础研究对象的空间关系以及结构;分析是以广义的微积分、微分方程理论、泛函分析等为研究工具,对函数、方程等“可以求导”的东西进行精细的分析(比如不等式估计、最优化等等)。

  本专栏的目的是为了透过时间的变迁,深入架构元模式,结合数学理论对架构元进行数学解释,甚至是进行模型的统一,以达到认清互联网架构的最核心本质。

![Alt text][http://oqay0v62b.bkt.clouddn.com/image/internet-arch-math/%E4%BA%92%E8%81%94%E7%BD%91%E6%9E%B6%E6%9E%84%E4%B8%8E%E6%95%B0%E5%AD%A6%E4%BD%93%E7%B3%BB.jpg]

  本专栏的组织结构:

  • 第一部分:整体介绍目前主流互联网架构与数学的联系
  • 第二部分:对架构进行架构元拆解
  • 第三部分:对架构元进行数学解释

  希望广大读者和研究者及时建议、指正以及投稿,共同构建互联网架构的数学大厦。

Hooke

10 posts
3 categories
11 tags
© 2020 Hooke
Powered by Hexo v3.7.1
|
Theme – NexT.Muse v6.4.1