当前位置: 首页 > news >正文

文本匹配任务(上)

文本匹配任务

  • 1.文本匹配介绍
    • 1.1文本匹配定义
      • 1.1.1狭义定义
      • 1.1.2广义定义
    • 1.2文本匹配应用
      • 1.2.1问答对话
      • 1.2.1信息检索
  • 2.文本匹配--智能问答
    • 2.1基本思路
    • 2.2技术路线分类
      • 2.2.1按基础资源划分
      • 2.2.2 答案生成方式
      • 2.2.3 NLP技术
    • 2.3智能问答-Faq知识库问答
      • 2.3.1运行逻辑
      • 2.3.2核心关键点-相似度
  • 1.文本匹配算法
    • 1.1编辑距离
      • 1.1.1算法实现截图
      • 1.1.2优缺点
    • Jaccard
      • 优缺点
    • BM25算法
      • 优缺点
    • word2vec
      • 词向量相似度计算
      • 优缺点

1.文本匹配介绍

1.1文本匹配定义

1.1.1狭义定义

释义: 给定一组文本,判断其是否语义相似
示例:
1.判断语义是否相似

今天天气不错 match 今儿个天不错呀 √
今天天气不错 match 你今天吃饭了吗 ×

1.判断语义的相似度

今天天气不错 match 今儿个天不错呀 0.9
今天天气不错 match 这几天天气不错 0.75
今天天气不错 match 你今天吃饭了吗 0.1

1.1.2广义定义

释义: 给定一组文本,计算某种自定义的关联度;也就是说多段文本,想计算他们之间的关系,我们都可用文本匹配任务解决。

  1. Natural Language Inference
    两句话判断是否有关联、矛盾、中立。
    明天要下雨 vs 明天大晴天。

  2. Text Entailment
    给出一段文本,和一个假设,判断文本是否能支持或反驳这个假设。
    他是男的。假设:她身份证性别为女。

  3. 主题判断
    文章标题匹配内容等

1.2文本匹配应用

释义: 从文本的长度来讲,可以简单的概括为下面几类:

  1. 短文本 vs 短文本
    知识库问答 ,聊天机器人等

  2. 短文本 vs 长文本
    文章检索,广告推荐等

  3. 长文本 vs 长文本
    新闻、文章的关联推荐等

1.2.1问答对话

  1. 车载导航
  2. 手机助手
  3. 聊天机器人
  4. 智能音箱
  5. 智能客服

1.2.1信息检索

  1. 搜索引擎
  2. 微信、头条的相关文章推荐

2.文本匹配–智能问答

2.1基本思路

  1. 准备基础资源
    包括faq库,书籍文档,网页,知识图谱等等
  2. 构建问答系统
    对基础资源进行了加工处理,形成问答所需要索引和模型等
  3. 用户输入问题
  4. 问答系统给出答案

在这里插入图片描述

2.2技术路线分类

2.2.1按基础资源划分

1)基于faq知识库的问答(Frequently asked Questions )
2)基于文档/网页/书籍的问答
引申:当前基于生成式模型的RAG技术,当然并不完全是文本匹配了
3)基于图像/视频的问答
引申:当前生成式多模态大模型,是基于多模态技术
4)基于知识图谱的问答
5)基于表格的问答
4、5有点类似,都是基于结构化内容进行匹配问答
6)基于特定领域知识的问答
7)基于人工规则的问答

2.2.2 答案生成方式

  1. 检索式的问答
    答案原文或答案的多个片段存在于基础资源
    faq就是典型的这类

  2. 生成式的问答
    答案文本不存在于基础资源,由问答系统来生成答案
    RAG等

  3. 二者结合

2.2.3 NLP技术

依照NLP相关技术划分

1)单轮问答
2)多轮问答
3)多语种问答
4)事实性问答
5)开放性问答
6)多模态问答
7)选择型问答
8)抽取式问答
9)生成式问答

2.3智能问答-Faq知识库问答

目标: 让用户以自然语言描述自己的问题,算法进行faq库的检索,给出对应的答案。

常见概念定义:

  1. 问答对
    一个(或多个相似的)问题与它对应的答案
  2. faq库/知识库
    很多问答对组成的集合
  3. 标准问
    每组问答对中的问题,有多个时,为其中代表
  4. 相似问/扩展问
    问答对中,标准问之外的其他问题。即相同的答案对应着不同的提问方式
  5. 用户问
    用户输入的问题
  6. 知识加工
    人工编辑faq库的过程;比如:添加相似问、新的问答对

2.3.1运行逻辑

步骤如下:

1.对用户问进行预处理
2.使用处理后的问题,与faq库中问题计算相似度
3.按照相似度分值排序
4.返回最相似问题对应的答案

示例如下图
在这里插入图片描述
注意: 预处理包括:分词,去停用词,去标点、大小写转换,全半角转换、词性标注,句法分析等等

2.3.2核心关键点-相似度

理解: 语义相似度计算是faq问答的核心,一般简称文本匹配f(x, y)→Score;相似度分值合理,才可以找到正确的对应问题,计算分值的同时,也要考虑速度

引申:

  1. 排序之前可能有召回模块,为了减少排序的耗时。
  2. 如果最高相似度的问题,分值依然很低,一般会有兜底答案,不会强行回答。

注意:

  1. 如果相似度算法足够强,对知识加工的依赖就越低,算法越弱,对知识的加工要求就越高,这样才能准确匹配到知识。
  2. 上面说的是用户的问题,和知识库中的问题进行相似度匹配。有可以通过用户问题和知识库答案相匹配,跳过问题匹配这一步,根据具体的材料和实现技术来确定。因为实际情况中,答案不一定是统一的形态,可能是图片、链接、视频等。匹配问题是为了更好的拓展,即不管什么模态的答案,我都能快速调整标准问、拓展问即可

1.文本匹配算法

1.1编辑距离

释义: 两个字符串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。

举例:
在这里插入图片描述
计算编辑距离公式:
在这里插入图片描述
结论:

  1. 两个字符串完全一致,编辑距离 = 0,相似度 = 1
  2. 两个字符串完全不一致,编辑距离 = 较长者长度,相似度 = 0

1.1.1算法实现截图

实现采用动态规划思想
在这里插入图片描述

1.1.2优缺点

优点:

  1. 可解释性强
  2. 跨语种(甚至对于非语言序列)有效
  3. 不需要训练模型

缺点:

  1. 字符之间没有语义相似度:我也一样。俺也一样。
  2. 受无关词/停用词影响大:我要办卡。我想办一张卡。
  3. 受语序影响大:今天天气不错;天气不错今天。
  4. 文本长度对速度影响很大。

Jaccard

原理: 根据两个集合中,不同元素所占的比例,来衡量两个样本之间的相似度。即:根据两个文本中,不同的字或词所占的比例,来衡量两个文本之间的相似度。

计算方式如下:
在这里插入图片描述
举例:

  1. 今天天气真不错
  2. 估计明天天气更好
    公共字数: 天、气
    总字数:今,天,气,真,不,错,估,计,明,更,好
    jaccard相似度: 2 / 11 = 0.18
    当然,除了通过字来计算,还可以通过词来计算。
    用词和用字,要具体场景,具体分析,测试后决定;名词、缩略词、文本长度都会影响

优缺点

优点:

  1. 语序不影响分数(词袋模型)
    示例:
    今天天气不错
    天气不错今天
  2. 实现简单,速度很快
  3. 可跨语种,无需训练等

缺点:

  1. 语序不影响分数
    示例:
    他打了我
    我打了他
  2. 字词之间没有相似度衡量
  3. 受无关词影响
  4. 非一致文本可能出现满分
    示例:
    他是不知道
    他不是不知道

适用场景: jaccard更适合-长文本;长文本中能够降低语序对分数的影响、以及非一致性文本的满分问题。

BM25算法

应用: 在搜索引擎框架中,用来做文档和搜索问题的匹配。在问答中,做文本匹配。

核心思想: 假如一个词在某类文本(假设为A类)中出现次数很多,而在其他类别文本(非A类)出现很少,那么这个词是A类文本的重要词(高权重词)。反之,如果一个词在出现在很多领域,则其对于任意类别的重要性都很差。

举例: 恒星 --> 天文; 你好 --> 在大多数文本中都有,但都不是关键词

本质: BM25是对TF·IDF的一种改进,优化其表示效果。TF·IDF存在的问题:统计的TF·IDF值与文本的长度有关。而BM25通过求平均的方式,改进了这个问题,降低了文本长度对统计值的影响

公式如下:
在这里插入图片描述
释义:

这个算法的具体计算方式,不做详细介绍。
qi 为问题中某词,fi为词频; k1, k2, b为可调节常数;dl为文档长度;avgdl为所有文档平均长度
这些参数和改动的意义在于控制文本长度对分值的影响

优缺点

优点:
1.通过使用TF·IDF弱化了无关词的影响,强化了重要词的影响,使得效果大幅提升
2.统计模型计算快,不需要迭代
3.词袋模型*、跨语种等
缺点:
1.依然没有考虑词与词之间的相似性
2.需要一定量的训练(统计)样本(faq库本身)
3.对于新增类别,需要重新计算统计模型
4.分值未归一化

word2vec

原理: 将每个词或字转换成同一向量空间内的一个向量;两个词如果语义相近,则在空间中的向量接近。

训练词向量:

1.基于窗口
2.基于语言模型
3.基于共现矩阵

优化要点:

1.层次softmax/Huffman树
2.负采样

词向量相似度计算

计算相似度:

1.将文本中的所有词的词向量相加取平均
2.文本 -> 句向量
3.SentenceVector = ∑(1-𝑛)𝑊𝑖 / n
4.句向量维度 = 词向量维度,不论文本长度
5.文本相似度 = 向量相似度 = 向量夹角余弦值
6.向量夹角为0,余弦值为1

计算公式:
在这里插入图片描述
工程优化:

如何加快相似度计算?
1.由公式出发,可以先将词向量的模求解出来
2.计算内积,可以通过将词向量矩阵转置;所有的词向量,原来是一排一个,现在变成一列一个;通过矩阵运算,就可以一次算出每一个列的相似度。因为矩阵相乘,是前一个矩阵的行乘后一个矩阵的列;输入只有一行。
上面就是工程上可以加快优化点。

优缺点

优点:
1.两个文本包含语义相似的词,会提高相似度
2.训练需要的数据简单(纯文本语料即可)
3.计算速度快,可以对知识库内问题预先计算向量
4.将文本转化为数字,使后续复杂模型成为可能
缺点:
1.词向量的效果决定句向量效果(语料数量、领域适配、分词结果、未登录词都会影响)
2.一词多意的情况难以处理。梨–苹果–华为。
3.受停用词和文本长度影响很大(是词袋模型)。
4.更换语种,甚至更换领域,都需要重新训练。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • GDB的基本使用
  • 20240821 每日AI必读资讯
  • kws_pdm_record example
  • 【游戏开发】【Unity】如何快速建造人物模型并赋予动画动作
  • 查看一个exe\dll文件的依赖项
  • 效果炫酷的3D翻转书特效WordPress主题模板MagicBook主题v1.19
  • 8月20日
  • Android View的事件分发机制
  • Conditional Flow Matching: Simulation-Free Dynamic Optimal Transport论文阅读笔记
  • Paxos算法概述:从Basic Paxos到Fast Paxos及在Zookeeper中的应用
  • 计算机毕业设计Python+Flask弹幕情感分析 B站视频数据可视化 B站爬虫 机器学习 深度学习 人工智能 NLP文本分类 数据可视化 大数据毕业设计
  • 76. 最小覆盖子串【 力扣(LeetCode) 】
  • Redis清空缓存
  • 分布式ID-一窥雪花算法的原生实现问题与解决方案(CosId)
  • C语言——预处理
  • Create React App 使用
  • docker容器内的网络抓包
  • Java 多线程编程之:notify 和 wait 用法
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • rabbitmq延迟消息示例
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 工作手记之html2canvas使用概述
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 微信公众号开发小记——5.python微信红包
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 用Visual Studio开发以太坊智能合约
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • #{}和${}的区别?
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (02)vite环境变量配置
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .ai域名是什么后缀?
  • .DFS.
  • .NET 8 跨平台高性能边缘采集网关
  • .NET Core 2.1路线图
  • .NET Core 成都线下面基会拉开序幕
  • .NET delegate 委托 、 Event 事件,接口回调
  • .Net MVC4 上传大文件,并保存表单
  • .NET Project Open Day(2011.11.13)
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • @Responsebody与@RequestBody
  • [20160902]rm -rf的惨案.txt
  • [AIR] NativeExtension在IOS下的开发实例 --- IOS项目的创建 (一)
  • [Angular] 笔记 9:list/detail 页面以及@Output
  • [C#学习笔记]LINQ