程序员的数学基础课
黄申
LinkedIn 资深数据科学家
83374 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 58 讲
导读 (1讲)
基础思想篇 (18讲)
程序员的数学基础课
15
15
1.0x
00:00/00:00
登录|注册

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

匹配流程
查询转换成向量
词频和tf-idf
预处理步骤
维度和取值
排序和评估
查询和文档的匹配
文档转为特征向量
向量空间模型
布尔模型
思考题
信息检索
如何让计算机处理自然语言?

该思维导图由 AI 生成,仅供参考

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

什么是信息检索?

首先,我们先来看一下,什么是信息检索,以及最基本的排序模型有哪些。这样,你就能理解为什么我们需要使用向量空间模型了。
现在的信息检索技术已经相当成熟,并影响我们日常生活的方方面面。搜索引擎就是这项技术的最佳体现,人们输入一个查询,然后系统就能返回相关的信息。
笼统地说,信息检索就是让计算机根据用户信息需求,从大规模、非结构化的数据中,找出相关的资料。这里的“非结构化”其实是针对经典的关系型数据库(Relation Database)而言的,比如 DB2、Oracle DB、MySQL 等等。
数据库里的记录都有严格的字段定义(Schema),是“结构化”数据的典型代表。相反,“非结构化”没有这种严格的定义,互联网世界里所存储的海量文本就是“非结构化“数据的典型代表。因为这些文章如果没有经过我们的分析,对于其描述的主题、写作日期、作者等信息,我们是一无所知的。自然,我们也就无法将其中的内容和已经定义好的数据库字段进行匹配,所以这也是数据库在处理非结构化数据时非常乏力的原因。这时候就需要采用信息检索的技术来帮助我们。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何使用向量空间模型进行自然语言处理。向量空间模型是信息检索领域的重要模型,通过将文档和查询转换为向量形式,并计算它们之间的相似度来实现相关性匹配。文章首先介绍了信息检索的基本概念和布尔模型,然后详细讲解了向量空间模型的应用步骤。在文档转为特征向量的过程中,作者提到了预处理步骤,包括词包、分词、词干处理等,以及如何使用词频和逆文档频率来赋予词的权重。通过这些步骤,读者可以了解到向量空间模型在自然语言处理中的重要性和应用方法。 在计算查询和文档的相似度之前,需要将查询转换成向量。由于查询的特殊性,需要注意查询和文档长度不一致、查询中出现了文档集合里没有的词以及查询词条的idf计算等问题。完成了查询向量和文档向量的计算后,可以对所有文档进行相似度排序,找出向量空间模型认为“最相关”的文章。文章还提到了排序和评估的步骤,以及对时间复杂度的简单分析。 最后,文章提出了思考题,引发读者思考和讨论。总的来说,本文通过介绍向量空间模型的基本原理和应用步骤,为读者提供了对自然语言处理中向量空间模型的全面了解和应用指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《程序员的数学基础课》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(15)

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

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

    2019-03-08
    2
    24
  • qinggeouye
    整个文档集合的词典的单词和词组的个数假设为 M ,文档数量假设为 N ,每个文档向量的维度是一致的吧,那么文档向量的维度应该也是 M 吧;所有文档向量就可以构成一个 M*N 的矩阵; 这样看来,假设文档集合新增了文档之后,要看从新增文档中提取出来的单词或词组,是否已经在包含在已有的词典当中,如果不是,那么就需要将这些单词或词组添加进词典,原有的文档向量就可能需要进行调整。 不知是否应该这样理解?

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

    2019-03-20
    7
  • 李二木
    这就是elasticesearch 查询原理吧

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

    2019-03-06
    2
    5
  • 渣渣辉
    文本检索跟trie树有什么关联吗?

    作者回复: 我想你这里说的文本检索应该是指的基于文本的信息检索或者搜索,如果是这样,涉及的内容很广,包括倒排索引、相关性模型、搜索自动完成和推荐,个性化排序等等。而Trie的结构比较具体,主要是用于实现基于前缀的查询,例如搜索自动完成。

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

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

    2019-10-24
    3
  • CC9098
    第二,查询里出现了文档集合里没有的词。简单的做法是直接去除这维分量,也可以使用相对于其他维度来说极小的一个数值,这和分类中的平滑技术类似。 这里的去除这维分量,是说构建查询词的向量时,直接忽略词典没有的维度,保持和文档向量维度一致吗? 如果需要保持维度一致,那么选择极小值如何理解,这个是已经查询词向量已经比文档向量多了一个维度了吧?向量空间模型不需要保持两边维度一致吗?多出来的一些维度采用极小值就可以了吗?不会影响相似度计算效果吗?

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

    2019-05-11
    3
  • Geek_7bc035
    老师,我觉得查询 用户输入和文档相似度的时候,时间复杂度应该以文档的维数为基准,而不是以用户输入的单词长度为准,因为用户输入里面没出现的维度,就用零来代替

    作者回复: 这里说的时间复杂度,是没有进行任何优化的时候(比如,没有倒排索引)这个时候我们需要对每一个查询里的单词(共m个),和每篇文档中的每个词(平均m个),进行两两对比,所以是O(m*n)

    2022-02-08
    1
  • A君
    信息检索领域的应用向量空间模型,只需要把文档和查询转成向量,再计算这些向量间夹角,找出相关性最强的文档。向量的维度数就是所有文档唯一词条的数量,向量的分量自然是与文档、查询的词条有关。如果向量分量是布尔值,就损失掉了词条的权重信息;如果用词频代替布尔值,词条信息就会被众多高频词冲掉,因此还要加上词条在整个集合中出现的逆词频信息,即tf-idf。 向量空间模型有一个很大的缺点,即向量维度过大。在推断时,假设字典大小是n,而查询字符串的长度是m,那要构建一个查询向量的时间复杂度就是O(n*m)

    作者回复: 是的

    2020-12-09
    1
  • 建强
    思考题: 文档集合中新增文档后,如果用tf-idf来构建文档向量,除了构建新增文档的向量,也需要更新其它文档的向量,因为idf的计算公式中,需要用文档总数和词条在所有文档中出现的频率来计算,因此,文档总数发生变化,idf也需要随之变化。

    作者回复: 没错������

    2020-08-30
    1
  • J.Smile
    “假设查询的平均长度(或词条数量)远远小于文档的平均长度,我们把查询的平均长度记做 m,那么对于每次计算查询向量和文档向量的相似度,时间复杂度都是 O(m)“ --------------------------------------------------------------------------------- 老师,这个时间复杂度O(m)中的m指的是平均的查询的分词个数吧?比如我爱北京天安门,如果分词为[我,爱,北京,天安门]这四个词,构建出的查询向量也只有这四个有效的维度,因此时间复杂度就是O(4),是这样理解的吗?

    作者回复: 是的

    2020-02-28
    1
收起评论
显示
设置
留言
15
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部