第7章 贾里尼克和现代语言处理
- 小学生和中学生其实没有必要花那么多时间读书,而他们的社会经验、生活能力以及在那时树立的志向都将帮助他们的一生。
- 中学阶段花很多时间比同伴多读的课程,上大学以后用很短的时间就能读完,因为大学阶段,人的理解能力要强的多。
- 学习是持续一辈子的过程。
- 书本的内容可以早学,也可以晚学,但是错过了成长阶段却是无法补回来的。
- 一个人想要在自己的领域做到世界一流,他的周围必须有非常多的一流人物。
- 巴菲特告诉别人,你们都非常聪明,不需要我告诉你们做什么,只需要告诉你们不要去做什么。这些不要做的事情,是巴菲特从一生的经验教训中得到的。
第8章 简单之美——布尔代数和搜索引擎
建立一个搜索引擎步骤:
- 下载:自动下载尽可能多的网页
- 索引:建立快速有效的索引
- 排序:根据相关性对网页进行公平准确的排序
布尔代数
布尔代数非常简单,但是对数学和计算机发展的意义重大。
世界上不可能有比二进制更简单的技术方法了。
布尔运算可以用在搜索领域:如果一个网页包含这个关键字,那么给这个网页一个逻辑值——真(true或1),否则就是假(false或0)。
索引
建立索引可以让我们非常快的找到想要的东西。例如图书馆找书。
最简单的索引结构就是用一个很长的二进制数表示一个关键字是否出现在每个网页中。有多少个网页,就对应有多少位数,每一位对应一个网页。1表示这个网页有这个关键字,0表示没有。
比如关键字“原子能”对应的二进制数是0100100…,表示第二、五个网页包含这个关键字。同样,“应用”对应的二进制是0010100…,那么要找到同时包含“原子能”和“应用”的文献时,只要将这两个二进制数进行布尔运算AND。
第9章 图论和网络爬虫
- 广度优先搜索:先要尽可能“广”地访问与每个节点直接连接的其他节点。
- 深度优先搜索:一条路走到黑。
爬虫的细节:
- BFS还是DFS?
- 页面的分析和URL的提取
- 记录哪些网页已经被下载过
第10章 PageRank——Google的民主表决式网页排名技术
对于一个特点的查询,搜索结果的排名取决于两组信息:
- 关于网页的质量信息;
- 这个查询与每个网页的相关性信息
PageRank算法的原理
Google的“PageRank”(网页排名)是怎么回事呢?
其实简单地说就是民主表决。
打个比方,假如我们要找李开复博士,有100个人举手说自己是李开复。那么谁是真的呢?如果大家都说在创新工场的那个是真的,那么他就是真的。
PageRank的核心思想就是,如果一个网页被很多其他网页所链接,那么它受到普遍的承认和信赖,那么它的排名就高。
一个网页的排名来自所有指向这个网页的其他网页权重之和。
问题1:计算搜索结果的网页排名过程中需要用到网页本身的排名,成了“先有鸡还是先有蛋”的问题了。
解决:初始假定所有网页的排名都是相同的,经过若干次迭代,收敛后的就是网页真实的权重值。
问题2:网页太多,矩阵太大,如何计算?
解决:稀疏矩阵计算的技巧,简化计算量。
问题3:网页之间链接的数量相比互联网的规模非常稀疏
解决:计算网页的排名需要对零概率或者小概率事件进行平滑处理。网页的排名是个一维向量,对它的平滑处理只能利用一个小的常数
α
。
问题4:计算量的问题
解决: MapReduce并行计算。
第11章 如何确定网页和查询的相关性
影响搜索质量的因素:
- 完备的索引
- 网页质量
- 用户偏好
- 相关性
如何度量查询的相关性?
TF-IDF
TF-IDF的信息论依据:
一个词的信息量越多,TF-IDF值越大。
第12章 有限状态机和动态规划——地图与本地搜索的核心技术
地址分析和有限状态机
地址的文法相对简单,因此有许多识别和分析的方法,但最有效的是有限状态机。
但是当用户输入的地址不太标准或者有错别字时,有限状态机就会束手无策。基于概率的有限状态机可以解决这一问题。
全球导航和动态规划
找一个图中给定两个点之间的最短路径。最直接的笨办法就是把所有可能的路线看一遍,然后找到最优的。但是如果图的节点数太多,计算复杂度就呈指数增长。
动态规划的原理:将一个“寻找全程最短路线”的问题,分解成一个个寻找局部最短路线的小问题。
正确的数学模型可以将一个计算量看似看大的问题的计算复杂度大大降低。这便是数学的妙用。
第13章 Google AK-47的设计者——阿米特 ⋅ 辛格博士
在工程上,简单实用的办法最好。
先帮用户解决80%的问题,再慢慢解决剩下的20%的问题。是在工业界成功的秘诀之一。
简单哲学,坚持寻找简单有效的解决方案。不是靠直觉,更不是撞大运,靠的是丰富的研究经验。
第14章 余弦定理和新闻的分类
新闻的特征向量
对一篇新闻中所有的实词,计算TF-IDF值,把这些值按照对应的实词在词汇表的位置依次排列,就得到一个向量。
向量距离的度量
一篇10000字的新闻,各个维度都比一篇500字的新闻大,所以单纯比较各个维度大小没有太大意义。但是向量的方向有很大的意义。
所以可以使用余弦定理比较新闻之间的相似性。
如果事先没有新闻类别的特征向量怎么办?
计算所有新闻的余弦相似性,相似性大的合并一个小类;
把每个小类中所有的新闻作为一个整体,计算小类的特征向量,再计算小类之间两两的余弦相似性,合并成大一点的小类;
这样不断合并下去,类别越来越少,每个类越来越大。当某一类太大时,这一类新闻之间的相似性就很小了,这时要停止迭代了。
计算向量余弦的技巧
大数据量时的余弦计算的优化技巧:
- 将分母部分,即向量的长度存储起来,计算的时候直接使用;
- 计算两个向量内积,只考虑非零元素;
- 删除虚词,减少噪声。
对于新闻来说,适当提高标题和重要位置词的权重,可以提高文本分类的准确性。
第15章 矩阵运算和文本处理中的两个分类问题
新闻分类变成矩阵运算后,一步到位的计算办法是利用矩阵中的奇异值分解。
第一个矩阵是对词分类的结果,每一行表示一个词,每一列表示一个语义相近的词类。这一行的每个非零元素表示这个词在每个语义类的重要性(或者说相关性)。
最后一个矩阵是对文本分类的结果。每一行对于一个主题,每一列对应一篇文本。一列中的每个元素表示这篇文本在不同主题的相关性。
中间矩阵则是表示词的类和文章的类之间的相关性。(1,1)的值表示第一个词的语义类和第一个主题相关度,(1,2)的值表示第一个词的语义类和第二个主题的相关度。
奇异值分解分两步:
- 将矩阵A变成一个双对角矩阵,可以利用矩阵A的稀疏性大大缩短计算时间;
- 将双对角矩阵变成奇异值分解的三个矩阵。
奇异值分解的好处是不需要迭代,能较快地得到结果。
对于超大规模文本分类,可以先进行奇异值分解,得到粗分类结果,再利用计算向量余弦的方法,在粗分类的基础上进行几次迭代,得到比较精确的结果。