程序员的数学基础课
黄申
LinkedIn资深数据科学家
立即订阅
23478 人已学习
课程目录
已完结 57 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 作为程序员,为什么你应该学好数学?
免费
导读 (1讲)
导读:程序员应该怎么学数学?
基础思想篇 (18讲)
01 | 二进制:不了解计算机的源头,你学什么编程
02 | 余数:原来取余操作本身就是个哈希函数
03 | 迭代法:不用编程语言的自带函数,你会如何计算平方根?
04 | 数学归纳法:如何用数学归纳提升代码的运行效率?
05 | 递归(上):泛化数学归纳,如何将复杂问题简单化?
06 | 递归(下):分而治之,从归并排序到MapReduce
07 | 排列:如何让计算机学会“田忌赛马”?
08 | 组合:如何让计算机安排世界杯的赛程?
09 | 动态规划(上):如何实现基于编辑距离的查询推荐?
10 | 动态规划(下):如何求得状态转移方程并进行编程实现?
11 | 树的深度优先搜索(上):如何才能高效率地查字典?
12 | 树的深度优先搜索(下):如何才能高效率地查字典?
13 | 树的广度优先搜索(上):人际关系的六度理论是真的吗?
14 | 树的广度优先搜索(下):为什么双向广度优先搜索的效率更高?
15 | 从树到图:如何让计算机学会看地图?
16 | 时间和空间复杂度(上):优化性能是否只是“纸上谈兵”?
17 | 时间和空间复杂度(下):如何使用六个法则进行复杂度分析?
18 | 总结课:数据结构、编程语句和基础算法体现了哪些数学思想?
概率统计篇 (14讲)
19 | 概率和统计:编程为什么需要概率和统计?
20 | 概率基础(上):一篇文章帮你理解随机变量、概率分布和期望值
21 | 概率基础(下):联合概率、条件概率和贝叶斯法则,这些概率公式究竟能做什么?
22 | 朴素贝叶斯:如何让计算机学会自动分类?
23 | 文本分类:如何区分特定类型的新闻?
24 | 语言模型:如何使用链式法则和马尔科夫假设简化概率模型?
25 | 马尔科夫模型:从PageRank到语音识别,背后是什么模型在支撑?
26 | 信息熵:如何通过几个问题,测出你对应的武侠人物?
27 | 决策树:信息增益、增益比率和基尼指数的运用
28 | 熵、信息增益和卡方:如何寻找关键特征?
29 | 归一化和标准化:各种特征如何综合才是最合理的?
30 | 统计意义(上):如何通过显著性检验,判断你的A/B测试结果是不是巧合?
31 | 统计意义(下):如何通过显著性检验,判断你的A/B测试结果是不是巧合?
32 | 概率统计篇答疑和总结:为什么会有欠拟合和过拟合?
线性代数篇 (13讲)
33 | 线性代数:线性代数到底都讲了些什么?
34 | 向量空间模型:如何让计算机理解现实事物之间的关系?
35 | 文本检索:如何让计算机处理自然语言?
36 | 文本聚类:如何过滤冗余的新闻?
37 | 矩阵(上):如何使用矩阵操作进行PageRank计算?
38 | 矩阵(下):如何使用矩阵操作进行协同过滤推荐?
39 | 线性回归(上):如何使用高斯消元求解线性方程组?
40 | 线性回归(中):如何使用最小二乘法进行直线拟合?
41 | 线性回归(下):如何使用最小二乘法进行效果验证?
42 | PCA主成分分析(上):如何利用协方差矩阵来降维?
43 | PCA主成分分析(下):为什么要计算协方差矩阵的特征值和特征向量?
44 | 奇异值分解:如何挖掘潜在的语义关系?
45 | 线性代数篇答疑和总结:矩阵乘法的几何意义是什么?
综合应用篇 (6讲)
46 | 缓存系统:如何通过哈希表和队列实现高效访问?
47 | 搜索引擎(上):如何通过倒排索引和向量空间模型,打造一个简单的搜索引擎?
48 | 搜索引擎(下):如何通过查询的分类,让电商平台的搜索结果更相关?
49 | 推荐系统(上):如何实现基于相似度的协同过滤?
50 | 推荐系统(下):如何通过SVD分析用户和物品的矩阵?
51 | 综合应用篇答疑和总结:如何进行个性化用户画像的设计?
加餐 (3讲)
数学专栏课外加餐(一) | 我们为什么需要反码和补码?
数学专栏课外加餐(二) | 位操作的三个应用实例
数学专栏课外加餐(三):程序员需要读哪些数学书?
结束语 (1讲)
结束语 | 从数学到编程,本身就是一个很长的链条
程序员的数学基础课
登录|注册

35 | 文本检索:如何让计算机处理自然语言?

黄申 2019-03-06
你好,我是黄申。
上一节,我详细解释了向量空间和向量空间模型。你也许觉得理论上的内容还是过于抽象,不太好理解。别急,今天我就来具体演示一下如何使用这个模型。由于学者们最初是在信息检索领域使用这个模型的,所以我会结合文本信息检索领域的知识,阐述如何在这个领域使用向量空间模型。

什么是信息检索?

首先,我们先来看一下,什么是信息检索,以及最基本的排序模型有哪些。这样,你就能理解为什么我们需要使用向量空间模型了。
现在的信息检索技术已经相当成熟,并影响我们日常生活的方方面面。搜索引擎就是这项技术的最佳体现,人们输入一个查询,然后系统就能返回相关的信息。
笼统地说,信息检索就是让计算机根据用户信息需求,从大规模、非结构化的数据中,找出相关的资料。这里的“非结构化”其实是针对经典的关系型数据库(Relation Database)而言的,比如 DB2、Oracle DB、MySQL 等等。
数据库里的记录都有严格的字段定义(Schema),是“结构化”数据的典型代表。相反,“非结构化”没有这种严格的定义,互联网世界里所存储的海量文本就是“非结构化“数据的典型代表。因为这些文章如果没有经过我们的分析,对于其描述的主题、写作日期、作者等信息,我们是一无所知的。自然,我们也就无法将其中的内容和已经定义好的数据库字段进行匹配,所以这也是数据库在处理非结构化数据时非常乏力的原因。这时候就需要采用信息检索的技术来帮助我们。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《程序员的数学基础课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(8)

  • 娄江国
    新增文档后,N肯定会发生变化,有很多的 df也会发生变化。
    但当数据量大到一定程度时,少量的新增文档而导致的idf变化不大。实际处理时,应该不会每新增一个文档,就重新构建原文档的向量,而是在一定条件下触发原文档向量的构建,如:多长时间重新构建一次;或新增了多少文档重新构建一次;或手工触发重新构建。

    作者回复: 结合实际工程,从不同的场景出发,很好的思考👍

    2019-03-08
    7
  • qinggeouye
    整个文档集合的词典的单词和词组的个数假设为 M ,文档数量假设为 N ,每个文档向量的维度是一致的吧,那么文档向量的维度应该也是 M 吧;所有文档向量就可以构成一个 M*N 的矩阵;

    这样看来,假设文档集合新增了文档之后,要看从新增文档中提取出来的单词或词组,是否已经在包含在已有的词典当中,如果不是,那么就需要将这些单词或词组添加进词典,原有的文档向量就可能需要进行调整。

    不知是否应该这样理解?

    作者回复: 是的,完全正确,如果使用了idf可能还需要更新idf的值

    2019-03-20
    3
  • 三木子
    这就是elasticesearch 查询原理吧

    作者回复: Solr,es默认都会用这种,或者是变体

    2019-03-06
    2
  • gaoch
    我想到这个向量的夹角可以描述不同文本的相似度,这里介绍了原理,就是不知道有没有哪个包可以实现向量构建?

    作者回复: 很多nlp的包都支持,例如Python里的nltk,sklearn等等

    2019-10-24
    1
  • Paul Shan
    关键词匹配技术是基于特定关键词是否存在的判断,可以看作一个关于布尔类型向量的的函数。

    向量空间方法的四个步骤
    1.将文章转化成向量空间的一个向量。
    2.将查询转化成向量空间的一个向量,检查文章向量和查询向量的相关性,例如求余弦。
    3.按照相关性给文档排序,返回相关性高的文档
    4.评估相关性

    构建向量空间
    向量空间的一个维度是某一单词
    维度上的值,简单的做法就是单词的次数,也就是单词出现的次数代表了文章类型信息。这里从0到1,影响较大,1到2,影响就少了一些,这也符合实际情况。但是,某些单词对某些文章特别有用,例如阿司匹林就和医学文章相关和其他文章无关,而某些其他词例如中国,反应文档的信息量就很少。为了把这个因素也考虑进来,统计这个词的唯一程度,用逆文档频率调整词频。

    文档的向量用词频+逆文档频率
    查询的向量用稀疏词频+文档逆文档频率
    计算余弦和排序

    向量构造需要O(m)的复杂度,m为向量维度
    n篇文章需要O(m*n)的复杂度

    新增文档会影响逆文档频率,全部都得重算!应该有些中间变量例如词频可以记录下来,重算得时候用的上。


    2019-09-24
  • CC9098
    第二,查询里出现了文档集合里没有的词。简单的做法是直接去除这维分量,也可以使用相对于其他维度来说极小的一个数值,这和分类中的平滑技术类似。

    这里的去除这维分量,是说构建查询词的向量时,直接忽略词典没有的维度,保持和文档向量维度一致吗?

    如果需要保持维度一致,那么选择极小值如何理解,这个是已经查询词向量已经比文档向量多了一个维度了吧?向量空间模型不需要保持两边维度一致吗?多出来的一些维度采用极小值就可以了吗?不会影响相似度计算效果吗?

    作者回复: 好问题,这个时候可以在原有文档中增加一个维度,取值为0

    2019-05-11
  • danvid
    elasticsearch和新版本的lucene使用的评分模型是BM25

    作者回复: 是的,BM25是比较主流的评分模型

    2019-05-08
  • 村长@极客时间
    我来打个卡
    2019-03-06
收起评论
8
返回
顶部