他们的硬盘里,由于我们阅读能力的限制

于是大家又纷纷开始互相交流跟随这些老师学习实践的心得体会,令Q是给定世界的有限观测对象的集合

图片 6

原标题:用机器学习怎样鉴别不可描述的网站

令W是给定世界的有限或无限的所有观测对象的集合,由于我们观察能力的限制,我们只能获得这个世界的一个有限的子集,称为样本集。机器学习就是根据这个样本集,推算这个世界的模型,使它对这个世界为真。

全文大约3500字。读完可能需要下面这首歌的时间

需要解决三个问题:

前两天教师节,人工智能头条的某个精神股东粉群里,大家纷纷向当年为我们启蒙、给我们带来快乐的老师们表达感激之情。

  1. 一致:假设世界W与样本集Q具有相同的性质。
  2. 划分:将样本集放到n维空间,寻找一个定义在这个空间上的决策分界面(等价关系),使得问题决定的不同对象分在不相交的区域。
  3. 泛化:泛化能力是这个模型对世界为真成都的指标。从有限样本集合,计算一个模型,使得这个指标最大(最小)

很多人表示,他们的硬盘里,至今还保留着当时她们上课时候的视频。有一些现在网站上已经很难找到了,于是大家又纷纷开始互相交流跟随这些老师学习实践的心得体会。

令Q是给定世界的有限观测对象的集合,人们需要阅读这个数据集合,以便有所发现,但是,由于我们阅读能力的限制,我们必须将Q简约为满足这个限制的描述长度,以便人们可以洞察问题世界的本原。

图片 1

统计机器学习

黑箱原理:当我们获得一组对问题世界的观测数据,如果我们不能或者没有必要对其建立严格物理模型,我们可以使用数学的方法,从这组数据推算问题世界的数学模型。这类模型一般没有对问题世界的物理解释,但是,在输入输出之间的关系上反映了问题世界的实际。

以《The Nature of Statistical Learing
Theory》为标志的机器学习研究。不同于神经网络时代的要点是泛化和表示两个基本问题:

  1. 强调泛化能力,将学习算法设计建立在泛化指标的基础之上
  2. 强调线性划分,在学习算法设计上,指出“回归感知机”的重要性。

👆禅师最喜欢的教师

泛化问题

对泛化能力的刻画就是经典问题“大数定理”,需要哦以样本数量趋近无穷大来描述。

Duda的贡献主要是提出了以经典统计理论为攻击刻画模式识别与机器学习的各类任务,同时暗示了对所建模型的评价方法(试图建立一种新的统计理论,有限样本的统计理论)。即将学习的样本集合理解为从问题世界随机选取的子集,由于不同的样本集合对应不同的模型,而不同模型对问题世界为真的程度不同(泛化或误差),如何计算对问题世界“最真”的模型就是主要任务。

从Duda开始,泛化问题的理论就是用“风险”来刻画数学模型与问题世界模型之间的差别。问题世界与数学模型之间的差别称为风险。经典方法认为,当样本个数趋近于无穷大的时候,如果所建立的数学模型是成功的,则风险应该趋近于0。

Vapnik的考虑则不同,第一,样本集合是风险描述的重要因素,也就是说样本集合将是风险公式中的一个变量。第二,根据PAC,模型以概率1-δ成立,即,模型泛化能力以概率近似正确描述。因此这个统计理论不能简单地仅仅考虑经验风险与期望风险之间的关系,同时需要考虑划分样本集合函数族的划分能力,称为置信范围。
这样,就可以将风险不等式描述为:样本集合的期望风险 <=
样本集合的经验风险 +
置信范围。其中,置信范围是关于函数族的VC维的一个函数。这就是所谓的结构风险。

泛化不等式的研究,首先将样本集合考虑从问题世界中随机选取的一个子集,每个样本集合对应的一个模型,称为假设,这样,泛化不等式经历了三个重要阶段:

  1. “假设”(模型)个数有限,根据Valiant的PAC理论,推出泛化不等式,称其为PAC泛化不等式。
  2. “假设”个数无限,根据VC维推出泛化不等式,称为VC维泛化不等式。

后来禅师想起来,另一个人工智能头条的精神股东粉群西部世界里,有人提到过他写了一篇Chat,利用
NLP 来鉴别是普通网站和不可描述网站,还挺有点意思,一起来看看吧。

集群机器学习

集群机器学习是基于Hebb的多细胞工作假设,在数学上,基于Barlow路线的从感知机到统计机器学习类的方法是以一个连续且光滑的决策分界面划分不同类别标号的样本,而集群机器学习则对线性不可分问题放弃了所谓“连续与光滑”的条件,而只需局部连续光滑。

在泛化问题上,这类机器学习主要沿用Vapnik的有限样本统计理论,使用最大边缘表示其泛化能力,它本身没有特别的贡献,集群机器学习最重要的贡献是在表示上。
Schapire构造性地证明了弱可学习定理,从此建立了这类机器学习的理论基础。

互联网中蕴含着海量的内容信息,基于这些信息的挖掘始终是诸多领域的研究热点。当然不同的领域需要的信息并不一致,有的研究需要的是文字信息,有的研究需要的是图片信息,有的研究需要的是音频信息,有的研究需要的是视频信息。

弱可学习定理

首先说明Valiant提出了PAC学习理念,其基本考虑是,我们不需要绝对正确的学习算法,使用概率语言陈述,我们不需要正确性以概率1成立的学习算法,一个学习算法的正确性只要以某种显现表示的概率成立即可,但是,要求这个算法必须满足多项式复杂性
1994年,Kearns和Valiant在PAC学习基础上,进一步将PAC区分为强可学习和弱可学习。

  • 强可学习
    如果存在一个多项式复杂性的学习算法来识别一组概念,并且识别错误率以概率1-δ小于一个很小的常熟ε,通俗地说,就是正确率很高,那么这组概念就是强可学习的。
  • 弱可学习
    存在一个多项式复杂性的学习算法识别一组概念的正确率仅比随机猜策略好,通俗地说,只略大于50%。

进而,Kearns和Valiant提出弱学习算法与强学习算法的等价性猜想。1990年,Schapire通过一个构造性方法对该猜想作出了肯定的证明。一个概念是弱可学习,当且仅当它是强可学习的。

图片 2

符号机器学习

始于Chemosky的语法理论,主要试图解决自然语言处理中的诸多学习问题。目前,我们讨论的符号机器学习是一类随着人工智能发展起来的学习方法,其特点是将样本集合限制在结构化符号数据,而不是自然语言类的非结构化数据,事实上,其本质是对文法学习理论的简化,将学习限制在正则文法下。其主要措施:

  1. 特征抽取
  2. 数据的符号化

本文就是根据网页的文字信息来对网站进行分类。当然为了简化问题的复杂性,将以一个二分类问题为例,即如何鉴别一个网站是不可描述网站还是普通网站。你可能也注意
QQ
浏览器会提示用户访问的网站可能会包含色情信息,就可能用到类似的方法。本次的分享主要以英文网站的网站进行分析,主要是这类网站在国外的一些国家是合法的。其他语言的网站,方法类似。

经典符号机器学习原理

符号机器学习与其他类型的机器学习方法的区别在于,这类机器学习方法是事先给定等价关系,而其他机器学习方法的等价关系需要通过计算才可以获得。自从Samuel将这类机器学习限制在结构化符号数据集合之后,符号机器学习就使用属性值划分数据集合的等价关系。对应用来说,符号机器学习需要两个理论与技术完全不同的步骤:

  1. 将直接观测数据变换为符号结构化数据
  2. 将信息系统约简为简洁形式(AQ家族与ID家族)

AQ家族
首先将对象集合表示为合取范式,它的每个原子式属性-值得等式,而每个对象是一个析取表示的子句。
ID家族
集成了Hunt的树表示形式,将信息系统考虑为一个树结构,其中,节点是属性,节点之间的连线上附贴了属性值域中的一个值。ID家族算法的关键是,在树生成个的过程中通过从给定信息系统中选择不同属性作为节点,以保证对这个给定信息系统,生成的树包含最少节点数。

一,哪些信息是网站关键的语料信息

Reduct理论

Pawlak提出了一种描述不确定只是的方法,称为rough set理论。与fuzzy
set不同的是,fuzzy
set是利用描述经验的隶属度或隶属度函数表示不确定性,而rough
sets使用一个称为roughness的量来刻画知识的不确定性,这个量仅仅依赖信息系统的给定符号数据集合。但从泛化角度来看,此做法需要将信息系统满足相当严厉的一致性条件。(实现起来几乎不可能)

rough set
理论暗示了学习的机制(reduct理论)。该理论的基础是正区域(对给定信息系统,删除所有矛盾对象,剩余的对象集合称为这个信息系统的正区域)。当从一个reduct中删除一个属性,必然导致新的矛盾对象对。

搜索引擎改变了很多人的上网方式,以前如果你要上网,可能得记住很多的域名或者
IP。但是现在如果你想访问某个网站,首先想到的是通过搜索引擎进行关键字搜索。比如我想访问一个名为村中少年的博客,那么只要在搜索引擎输入村中少年这类关键词就可以了。图1是搜索村中少年博客时候的效果图:

流形学习

当我们所获得数据对某个特定目标来说过于稀疏,或者换句话说,在这个数据集合中存在着太多的对特定目标无用、甚至噪音的信息时,我们需要对这个数据集合作变换,以便浓缩这个数据集合,这个过程一般称为特征抽取。特征抽取的本质可以理解为维数约简。

主曲线是一条满足自相容性的曲线,一条通过样本集“中间”的光滑曲线。主曲线以弧长作为参数和投影坐标,可以把原始的无序数据集表示为有序的,具有全局性的一维坐标,进而可以有效地描述样本集一维非线性结构。

流形学习最重要的特点是考虑观测数据整体的性质,同时,又可以从局部出发,来完成对这个整体的计算。

图片 3

红色部分便是匹配上搜索关键词的部分,一个页面能够展示 10
个条目,每个条目的标题就是相应网站网站的的 title,对应网页的
<title></title>
中间的内容,每个条目所对应的剩下文字部分便是网站的 deion,是网页中诸如
<meta name=”deion” content= 的部分。

搜索引擎的工作原理就是首先将互联网上大部分的网页抓取下来,并按照一定的索引进行存储形成快照,每个条目的标题就是原网站
title(通常是 60 个字节左右,也就是 30 个汉字或者 60
各英文字母,当然搜索引擎也会对于 title
做一定的处理,例如去除一些无用的词),条目的描述部分通常对应原网站
deion。

当在搜索框中输入关键词时候,会去和其存储网页进行匹配,将符合匹配的网页按照个网页的权重分页进行显示。当然网页的权重包含很多方面,例如广告付费类权重就非常的高,一般会在靠前的位置显示。对于一般的网站,其权重包括网页的点击次数,以及和关键词匹配的程度等来决定显示的前后顺序。

搜索引擎会去和网页的哪些内容进行匹配呢?如前面所述,通常是网页的
title、deion 和
keywords。由于关键词匹配的程度越高的网站显示在前的概率较大,因此很多网站为了提高自己的排名,都会进行
SEO 的优化,而 title、deion 和 keywords 是 SEO
优化的重要方面。至于不可描述网站,更是如此。有段时间《中国焦虑图鉴》这篇文章中也提到。由于搜索引擎并不会公开收取以及赌博、黄色网站广告费让他们排到前面。所以这些网站只能利用
SEO,强行把自己刷到前面。直到被搜索引擎发现,赶紧对它们“降权”处理。尽管如此,这些黄色网站如果能把自己刷到前几位一两个小时,就能够大赚一笔。

由上述分析可以知道 title、deion 和 keywords
等一些关键的网页信息对于不可描述网站来说都是经过精心设计的,和网页所要表述内容的匹配度非常之高。尤其很多网站在国外有些国家是合法的,因此对于经营这些网站的人员来说,优化这些信息一定是必然。我曾经看过一份数据显示在某段时间某搜索引擎前十名中,绝大多数的色情相关的。因此我们可以将其作为关键的语料信息。

二,语料信息的获取

现在其实面临的是一个二分类的问题,即判断一个网站是不可描述网站还是正常的网站。这个问题可以归结为
NLP
领域的文本分类问题。而对于文本分类来说的第一步就是语料的获取。在第一部分也已经分析了,相关语料就是网站的
title,deion 以及 keywords。

如何获取这些数据,可以通过 alex
排名靠前的网站,利用爬虫进行获取。本文对于正常数据的获取,选取 alex
排名前 4500 的网站,通过爬虫,提取网页的 title 和 deion 以及 keywords
作为原始文本。对于色情数据的获取亦然,通过爬虫对已经已经积累的 4500
个的站点进行文本收集。由于这部数据是敏感数据,因此数据集无法向大家公开,还请见量。

爬虫的实现是一个很大的主题,本文篇幅有限,不在讨论,可以参考已有的一些技术博客。总体来说应对本文场景爬虫是很简单的,即发起一个
HTTP 或者 HTTPS 链接,对返回的数据进行清洗提取即可,使用 python
的一些模块几条语句就可以搞定。我在数据获取过程中使用的是 nodejs
编写的爬虫,每次同时发起 1000 个请求,4500
个站点几分钟就搞定了。由于异步请求是 nodejs
优势之一,如果在时间方面有较高要求的,可以考虑 nodejs(但是 nodejs
异步的编程和常见语言的编程差别较大,学习起来有一定的难度),如果没有建议使用
python,主要是后续的机器学习,python
是最热门的语言,包含众多的基础模块。

三,分词,去停用词形成词向量特征

在获取一定的文本数据之后,需要对这些原始的数据进行处理,最重要的就是分词。英文分词比之中文的分词要简单不少,因为英文中词与词之间时有明显的间隔区分,例如空格和一些标点符号等。中文的话,由于词语是由一些字组成的,整体要麻烦些,而且还有不同场景下的歧义问题。当然
python 提供了诸如 jieba
等强大的分词模块,非常方便,但是总体来说英文分词还要注意以下几点:

  1. 将每一行单词全部转化为小写,排除大小写的干扰。因为在本文场景下大小写词语所代表的含义基本相同,不予区分
  2. 切词,依据就是空格,逗号等分隔符,将句子切分成一个个的单词。当然由于本文的语料全部来源于网页,这其中词语的分隔都会具有一些网页的属性,比如语料中会由很多特殊的符号,如
    | – _ , &# 等符号,需要进行排除
  3. 排除一些停用词。所谓的停用词通常指的是英语中的冠词,副词等,经过上一步骤切分出来的单词可能会包括
    an,and,another,any
    等。因此需要将这些无意义词去除掉当然你也可以使用 nltk
    中自带的停用词(from nltk.corpus import
    stopwords),但是有的时候会根据具体的应用场景,加入相应的停用词,因此自定义停用词词典可能灵活性更高一些。比如在上一步骤中会切分出“&#”等等符号,因此需要将
    &#
    加入到停用词中。关于停止词,我这里面使用了一个较为常用的停用词字典,同时加入了在网页中一些常见停用词。
  4. 提取词干。由于英文的特殊性,一个词会有多种状态,比如
    stop,stops,stopping 的词干都是
    stop,通常情况所表示的含义都是相同的,只需要 stop
    一个即可。但是对于我们的二分类应用场景来说,我一开始没有做词干的提取因为不可描述网站中的
    hottest 和常见网站中共的 hot
    还是有点差异的。当然这一步可以根据具体的应用场景以及识别结果进行选择。
  5. 排除数字。数字在一些不可描述网站中时经常出现的,但是为了我这边还是将其排除,比如
    1080
    在不可描述网站和正常的网站中出现的概率都很高,表示视频的分辨率,当然这一步也是可选的。当然数字也可以加入停止词中,但是由于数字数量较多,同时比较好鉴别(isdigit()
    函数鉴别即可),因此对于数字的排除单独拿出来。

使用 python 的 jieba 模块结合上述所述的 5
个步骤,得到若干单词,相应代码为:

图片 4

以正常网站和不可描述网站的 deion 为例,对应的词云图如下:

图片 5

👆图2

图片 6

👆图3

可以看到对于正常的网站来说
free,online,news,games,business,world,latest
是较为热门的词汇;对于不可描述网站来说,图中显示较大是对应较为热门的词汇。

有了一个个单词之后,需要将这些单词转化为一些模型能够接受的输入形式,也就是词向量。一种常见的方法就是构建一个
N * M 的矩阵,M 大小是所有文本中词的个数;N
的大小是所有文本个数,在本文的环境中就是 title,deion 或者 keywords
的(即网站的)个数。

矩阵每一行的值,就是经过上述方法切词之后,词库中每一个词在该 title
上出现的频率,当然对于没有在该 title 出现的词(存在于其他 title 中)计为
0 即可。

可以预见,最终形成的是一个稀疏矩阵。Sklearn
也提供了一些方法,来进行文本到数值的转换,例如
CountVectorizer,TfidfVectorizer,HashingVectorizer。由前面的分析可知,title,deion,keywords
是较为特殊的文本,会出现很多关键词的堆积,尤其对于不可描述网站,同时相应的预料数据有限,因此本文使用的是
CountVectorizer 来进行简单的词频统计即可,代码如下: