week08_文本匹配任务
1、文本匹配任务概述
狭义:
给定一组文本,判断其是否语义相似
今天天气不错 match 今儿个天不错呀 √
今天天气不错 match 你的代码有bug ×
以分值形式给出相似度
今天天气不错 match 今儿个天不错呀 0.9
今天天气不错 match 这几天天气不错 0.7
今天天气不错 match 你的代码有bug 0.1
广义:
1、给定一组文本,计算某种自定义的关联度
2、Natural Language Inference
两句话判断是否有关联、矛盾、中立
明天要下雨 vs 明天大晴天
3、Text Entailment
给出一段文本,和一个假设,判断文本是否能支持或反驳这个假设
4、主题判断
文章标题匹配内容等
2、文本匹配的应用
问答对话:车载导航、手机助手、聊天机器人、智能音响、智能客服
信息检索:浏览器、短视频新媒体平台
3、智能问答
1.基础资源:包括faq库,书籍文档,网页,知识图谱等等
2.问答系统:对基础资源进行了加工处理,形成问答所需要的索引和模型等
3.用户输入问题
4.问答系统给出答案
智能问答的技术路线
1、依照基础资源划分:
1)基于faq知识库的问答
2)基于文档/网页/书籍的问答
3)基于图像/视频的问答
4)基于知识图谱的问答
5)基于表格的问答
6)基于特定领域知识的问答
7)基于人工规则的问答
2、依照答案产出方式划分:
1)检索式的问答:答案原文或答案的多个片段,存在于基础资源中
2)生成式的问答:答案文本不存在于基础资源,由问答系统来生成答案
3)二者结合
3、依照NLP相关技术划分:
1)单轮问答 2)多轮问答 3)多语种问答 4)事实性问答(有固定答案)
5)开放性问答(没有固定的明确答案) 6)多模态问答(和图像视频相结合)
7)选择型问答 8)抽取式问答 9)生成式问答
Faq知识库问答
原始问题:列表展示所有常见问题,用户需要自己找到对应的问题,对用户不友好
改进:让用户以自然语言描述自己的问题,算法进行faq库的检索,给出对应的答案
相关名词
1.问答对 一个(或多个相似的)问题与它对应的答案
2.faq库/知识库 很多问答对组成的集合
3.标准问 每组问答对中的问题,有多个时,为其中代表
4.相似问/扩展问 问答对中,标准问之外的其他问题
5.用户问 用户输入的问题
6.知识加工 人工编辑faq库的过程
运行逻辑
1.对用户问进行预处理
2.使用处理后的问题,与faq库中问题计算相似度
3.按照相似度分值排序
4.返回最相似问题对应的答案
4、文本匹配算法
1.语义相似度计算是faq问答的核心
2.一般简称文本匹配 f(x, y)→Score
3.相似度分值合理,才可以找到正确的对应问题
4.计算分值的同时,也要考虑速度
文本匹配算法-编辑距离
编辑距离:两个字符串之间,由一个转成另一个所需的最少编辑操作次数。
许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。
两个字符串完全一致,编辑距离 = 0,相似度 = 1
两个字符串完全不一致,编辑距离 = 较长者长度,相似度 = 0
import numpy as np#编辑距离
def editing_distance(string1, string2):matrix = np.zeros((len(string1) + 1, len(string2) + 1))for i in range(len(string1) + 1):matrix[i][0] = ifor j in range(len(string2) + 1):matrix[0][j] = jfor i in range(1, len(string1) + 1):for j in range(1, len(string2) + 1):if string1[i - 1] == string2[j - 1]:d = 0else:d = 1matrix[i][j] = min(matrix[i - 1][j] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j - 1] + d)edit_distance = matrix[len(string1)][len(string2)]return 1 - edit_distance / max(len(string1), len(string2))
编辑距离-优缺分析
优点:
1.可解释性强
2.跨语种(甚至对于非语言序列)有效
3.不需要训练模型
缺点:
1.字符之间没有语义相似度 (我没钱 vs. 俺没钱 0.66)
2.受无关词/停用词影响大 (我要办卡 vs. 你好我需要办一张卡 0.5)
3.受语序影响大 (今天天气不错 vs. 天气不错今天 0.33)
4.文本长度对速度影响很大
文本匹配算法-Jaccard相似度
通用表述:根据两个集合中,不同元素所占的比例,来衡量两个样本之间的相似度
用于文本匹配:根据两个文本中,不同的字或词所占的比例,来衡量两个文本之间的相似度
今天天气真不错 vs. 估计明天天气更好
公共字:天、气 总字数:(7-1) + (8-1) – 2 = 11
jaccard相似度: 2 / 11 = 0.18
#jaccard距离
def jaccard_distance(string1, string2):words1 = set(string1)words2 = set(string2)distance = len(words1 & words2) / len(words1 | words2)return distance
tips:
如果输入字符串,则得到基于字的jaccrad相似度
如果输入词的列表,则得到基于词的jaccard相似度
该用词还是该用字?看场景!
( 分词是否准确、是否有很多类似名词、缩略词、文本长度等因素,都会影响选择)
Jaccard距离-优缺分析
优点:
1.语序不影响分数(词袋模型——今天天气不错 vs .天气不错今天 = 1)
2.实现简单,速度很快
3.可跨语种,无需训练等
缺点:
1.语序不影响分数(他打了我 vs. 我打了他 = 1 )
2.字词之间没有相似度衡量(同编辑距离)
3.受无关词影响
4.非一致文本可能出现满分(他是不知道 vs. 他不是不知道 = 1)
文本匹配算法-BM25算法
本质是TF·IDF算法,参考: nlp新词发现——浅析 TF·IDF_内部稳固度 左右熵-CSDN博客
常用在搜索引擎框架中,用来做文档和搜索问题的匹配。同样也可以用在问答中,做文本匹配。 核心思想:假如一个词在某类文本(假设为A类)中出现次数很多,而在其他类别文本(非A类)出现很少,那么这个词是A类文本的重要词(高权重词)。
恒星、黑洞 ——> 天文
反之,如果一个词在出现在很多领域,则其对于任意类别的重要性都很差。
如何用数学刻画?
一种nlp的经典统计值:TF·IDF
TF:词频。某个词在某类别中出现的次数/该类别词总数。
IDF:逆文档频率。逆文档频率高 -> 该词很少出现在其他文档。
N:文本总数 dfi:包含词qi的文本中的总数
每个词对于每个类别都会得到一个TF·IDF值。
BM25算法
BM25是对TF·IDF的一种改进,优化其表示效果:
qi:问题中某词,n(qi):包含词qi的文档数
fi:词频 k1, k2, b:可调节常数
BM25算法-优缺分析
优点:
1.通过使用TF·IDF弱化了无关词的影响,强化了重要词的影响,使得效果大幅提升
2.统计模型计算快,不需要迭代(计算量主要在分词)
3.词袋模型*(双刃剑)、跨语种等
缺点:
1.依然没有考虑词与词之间的相似性
2.需要一定量的训练(统计)样本(faq库本身)
3.对于新增类别,需要重新计算统计模型
4.分值未归一化
文本匹配算法-word2vec
什么是词向量? 将每个词或字转换成同一向量空间内的一个向量
词向量的特点? 两个词如果语义相近,则在空间中的向量接近
词向量是如何寻得到的?
随机初始化,之后通过文本语料进行训练调整
如何训练/训练目标?
1、基于窗口 2、基于语言模型 3、基于共现矩阵
训练提速技巧?
1、层次softmax/Huffman树 2、负采样
如何用于文本匹配?
将文本中的所有词的词向量相加取平均 文本 ——> 句向量
SentenceVector =
句向量维度 = 词向量维度,不论文本长度
文本相似度 = 向量相似度 = 向量夹角余弦值
向量夹角为0,余弦值为1
word2vec-优缺分析
优点:
1.两个文本包含语义相似的词,会提高相似度
2.训练需要的数据简单(纯文本语料即可)
3.计算速度快,可以对知识库内问题预先计算向量
4.将文本转化为数字,使后续复杂模型成为可能
缺点:
1.词向量的效果决定句向量效果
2.一词多意的情况难以处理(梨-苹果-华为)
3.受停用词和文本长度影响很大(也是词袋模型)
4.更换语种,甚至更换领域,都需要重新训练(无法跨语种、领域)
影响因素总结:语料数量/质量、领域适配、分词结果、未登录词
文本匹配-深度学习
在文本匹配任务上有两种主要方式:
1.表示型 2.交互型
1、表示型文本匹配
两句话转化为向量后通过同一模型的表示层,再过匹配层得到比较得分,相似则得分靠近1
表示型文本匹配-训练方式1(孪生网络)
对于两个匹配的样本 预期输出分值为1
对于两个不匹配的样本 预期输出分值为0
本质上相当于2分类任务
《Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks》
表示型文本匹配-训练方式2
Triplet Loss
训练目标:
使具有相同标签的样本在embedding空间尽量接近
使具有不同标签的样本在embedding空间尽量远离
输入是一个三元组 <a, p, n>
a:anchor 原点 ,p:positive 与a同一类别的样本 , n:negative 与a不同类别的样本
在embedding空间中,三元组损失函数如下:
L=max(d(a, p) − d(a, n) + margin, 0)
想要最小化L,则d(a,p)->0,d(a,n)->margin
Triplet Loss 也用于人脸识别模型的训练
2、交互型文本匹配
Embedding层共享
表示层输出是否匹配 —— 本质是二分类任务
交互层进行信息融合,常以attention的方式
3、对比-交互型vs表示型
表示型
优点:训练好的模型可以对知识库内的问题计算向量,在实际查找过程中,只对输入文本做一次向量化
缺点:在向量化的过程中不知道文本重点
交互型
优点:通过对比把握句子重点
缺点:每次计算需要都需要两个输入
对比学习
KD树
空间切割
1、依照建索引方式找到 最下方叶节点
2、向上回退,计算到节 点距离和到切割平面距离
3、根据情况判断是否 需要查找平面另一侧节点
4、回退到根节点为止
Annoy
Approximate Nearest Neighbors Oh Yeah
分割过程相当于Kmeans聚类
重复分割过程,直到每个空间内的点个数小于设定值
可以同时在多个接近的分支上查找
或通过不同初始划分,生成多个树
相关文章:

week08_文本匹配任务
1、文本匹配任务概述 狭义: 给定一组文本,判断其是否语义相似 今天天气不错 match 今儿个天不错呀 √ 今天天气不错 match 你的代码有bug 以分值形式给出相似度 今天天气不错 match 今儿个天不错呀 0.9 今天天气不错 match…...

JUC--ConcurrentHashMap底层原理
ConcurrentHashMap底层原理 ConcurrentHashMapJDK1.7底层结构线程安全底层具体实现 JDK1.8底层结构线程安全底层具体实现 总结JDK 1.7 和 JDK 1.8实现有什么不同?ConcurrentHashMap 中的 CAS 应用 ConcurrentHashMap ConcurrentHashMap 是一种线程安全的高效Map集合…...

【2024年华为OD机试】(C卷,200分)- 推荐多样性 (JavaScriptJava PythonC/C++)
一、问题描述 问题描述 我们需要从多个已排序的列表中选取元素,以填充多个窗口。每个窗口需要展示一定数量的元素,且元素的选择需要遵循特定的穿插策略。具体来说,我们需要: 从第一个列表中为每个窗口选择一个元素,然后从第二个列表中为每个窗口选择一个元素,依此类推。…...

【教学类-89-01】20250127新年篇01—— 蛇年红包(WORD模版)
祈愿在2025蛇年里, 伟大的祖国风调雨顺、国泰民安、每个人齐心协力,共同经历这百年未有之大变局时代(国际政治、AI技术……) 祝福亲友同事孩子们平安健康(安全、安全、安全)、巳巳如意! 背景需…...

[权限提升] 操作系统权限介绍
关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客 权限提升简称提权,顾名思义就是提升自己在目标系统中的权限。现在的操作系统都是多用户操作系统,用户之间都有权限控制,我们通过 Web 漏洞拿到的 Web 进程的…...
DeepSeek异军突起,重塑AI格局
DeepSeek异军突起,重塑AI格局这两天AI 圈发生了比过年更令人兴奋的事情,“Meta内部反水事件”、“黄仁勋的底盘问题”,以及AI格局的大动荡,一切都是因为那个叫DeepSeek的“中国自主AI”!它由幻方量化开发,以…...

git的理解与使用
本地的git git除了最经典的add commit push用来做版本管理,其实他的分支管理也非常强大 可以说你学好了分支管理,就可以完成团队的配合协作了 git仓库 我们可以使用git init来初始化一个git仓库,只要能看见.git文件夹,就代表这…...

Baklib打造内容中台新模式助力企业智能化升级
内容概要 在如今数字化日渐渗透各个行业的背景下,内容中台逐渐成为推动企业智能化转型的重要工具。内容中台不仅仅是一个信息管理平台,更是一个整合多种内容资源,提升企业反应能力与市场适应力的创新模式。随着数据量的激增,传统…...

STM32完全学习——RT-thread在STM32F407上移植
一、写在前面 关于源码的下载,以及在KEIL工程里面添加操作系统的源代码,这里就不再赘述了。需要注意的是RT-thread默认里面是会使用串口的,因此需要额外的进行串口的初始化,有些人可能会问,为什么不直接使用CubMAX直接…...

基于51单片机和ESP8266(01S)、LCD1602、DS1302、独立按键的WiFi时钟
目录 系列文章目录前言一、效果展示二、原理分析三、各模块代码1、延时2、定时器03、串口通信4、DS13025、LCD16026、独立按键 四、主函数总结 系列文章目录 前言 之前做了一个WiFi定时器时钟,用八位数码管进行显示,但是定时器时钟的精度较低࿰…...
启元世界(Inspir.ai)技术浅析(二):深度强化学习
深度强化学习(Deep Reinforcement Learning, DRL)是启元世界在人工智能领域的一项核心技术,广泛应用于游戏AI、智能决策等领域。 一、状态(State) 1.1 概念与作用 **状态(State)**是指智能体对环境的感知,是智能体进行决策的基础。在深度强化学习中,状态通常是一个高…...
LeetCode100之子集(78)--Java
1.问题描述 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的 子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例1 输入:nums [1,2,3]输出:[[],[1],[2],[1,2],[3],[1…...
React第二十五章(受控组件/非受控组件)
React 受控组件理解和应用 React 受控组件 受控组件一般是指表单元素,表单的数据由React的 State 管理,更新数据时,需要手动调用setState()方法,更新数据。因为React没有类似于Vue的v-model,所以需要自己实现绑定事件…...

使用 Confluent Cloud 的 Elasticsearch Connector 部署 Elastic Agent
作者:来自 Elastic Nima Rezainia Confluent Cloud 用户现在可以使用更新后的 Elasticsearch Sink Connector 与 Elastic Agent 和 Elastic Integrations 来实现完全托管且高度可扩展的数据提取架构。 Elastic 和 Confluent 是关键的技术合作伙伴,我们很…...

嵌入式知识点总结 Linux驱动 (三)-文件系统
针对于嵌入式软件杂乱的知识点总结起来,提供给读者学习复习对下述内容的强化。 目录 1.什么是文件系统? 2.根文件系统为什么这么重要?编辑 3.可执行映像文件通常由几部分构成,他们有什么特点? 1.什么是文件系统&a…...

【知识】可视化理解git中的cherry-pick、merge、rebase
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 这三个确实非常像,以至于对于初学者来说比较难理解。 总结对比 先给出对比: 特性git mergegit rebasegit cherry-pick功能合并…...

【deepseek】deepseek-r1本地部署-第二步:huggingface.co替换为hf-mirror.com国内镜像
一、背景 由于国际镜像国内无法直接访问,会导致搜索模型时加载失败,如下: 因此需将国际地址替换为国内镜像地址。 二、操作 1、使用vscode打开下载路径 2、全局地址替换 关键字 huggingface.co 替换为 hf-mirror.com 注意:务…...
新站如何快速获得搜索引擎收录?
本文来自:百万收录网 原文链接:https://www.baiwanshoulu.com/8.html 新站想要快速获得搜索引擎收录,需要采取一系列有针对性的策略。以下是一些具体的建议: 一、网站内容优化 高质量原创内容: 确保网站内容原创、…...

如何使用tushare pro获取股票数据——附爬虫代码以及tushare积分获取方式
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据 总结 一、Tushare 介绍 Tushare 是一个提供中国股市数据的API接口服务,它允许用户…...

解决vsocde ssh远程连接同一ip,不同端口情况下,无法区分的问题
一般服务器会通过镜像分身或者容器的方式,一个ip分出多个端口给多人使用,但如果碰到需要连接同一user,同一个ip,不同端口的情况,vscode就无法识别,如下图所示,vscode无法区分该ip下不同端口的连接ÿ…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...