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

NLP 文本匹配任务核心梳理

定义

  • 本质上是做了意图的识别
    判断两个内容的含义(包括相似、矛盾、支持度等)
  • 侠义
    • 给定一组文本,判断语义是否相似
    • Yi 分值形式给出相似度
  • 广义
    • 给定一组文本,计算某种自定义的关联度
    • Text Entailment
      判断文本是否能支持或反驳这个假设
    • 主题判断

神经网络方法

  • 表示型文本匹配
    • 特点
      • 只需要对用户新输入的问题送入模型,运行一次
        实际查找中,对输入文本做一次向量化
      • 运行结果与知识库中的标准问向量分别计算 loss
      • 最后排序,找到最 match 的结果
      • 更适用智能问答
      • 用于需要分别看到两句话的场景
        计算两句话相似性
      • 类似于二分类任务
    • 方式
      • 共享encoder 参数
        • 即孪生网络
        • encoder 层
          两句话分别输入encoder(LSTM、CNN+pool、bert) 得到句向量
        • matching layer 层
          • 对两个句向量进行预期分值计算
            相同文本用相同参数,余弦值夹角为0,值为1,欧式距离为0
          • 可以完全没有可训练参数
            在评估阶段进行 cosine loss 或 欧式距离等向量分值计算
      • triplet loss
        在这里插入图片描述
        • 目标
          • 使具有相同标签的样本在 embedding 空间尽量接近
          • 使具有不同标签的样本在 embedding 空间尽量远离
        • 方式
          三元组<a, p, n>
          - a 原点
          - p 与a 同一类别的样本
          - n 与a 不同类别的样本
        • 在cv也用于人脸识别模型训练
  • 交互型文本匹配
    • 特点
      • 用户输入新问题,与知识库中的n 个标准问分别拼接送入模型,计算 n 次
        对比把握句子重点
      • 更适合问题与答案的匹配场景
        因为答案长度与问题长度差异,答案与问题是两个概念的东西,共用 encoder 参数就不合适,可能需要补太多 padding
      • 用于需要同时看到两句话的场景
        用于计算两句话相关性
    • 方式
      • 每次计算需要两个输入
      • 将两个句子拼接成长文本
        在模型中判断两句话关联性,输出关联性得分

非神经网络算法

  • Jaccard 相似度
    核心逻辑:文本中元素的交集/文本中元素的并集
    在这里插入图片描述

  • word2vec
    核心逻辑:从词向量相似度得到句子相似度,将文本中所有的词的词向量相加取平均

    • 获取句子向量之间 余弦值
    • 两个句子的相似度,等同于两个向量的余弦距离
      在这里插入图片描述
  • BM25算法
    对 TF-IDF 的改进
    在这里插入图片描述

  • 编辑距离
    动态规划算法

def edit_distance(s1, s2):m, n = len(s1), len(s2)dp = [[0] * (n + 1) for _ in range(m + 1)]for i in range(m + 1):dp[i][0] = ifor j in range(n + 1):dp[0][j] = jfor i in range(1, m + 1):for j in range(1, n + 1):if s1[i - 1] == s2[j - 1]:dp[i][j] = dp[i - 1][j - 1]else:dp[i][j] = min(dp[i - 1][j - 1], dp[i - 1][j], dp[i][j - 1]) + 1return dp[m][n]
  • 优点
    • 可解释性强
    • 跨语种
    • 不需要训练模型
  • 缺点
    • 字符之间没有语义相似度
    • 受无关词、停用词影响大
    • 受语义影响大
    • 文本长度对速度影响很搭
  • 由一个字符串转成量一个所需的最少编辑操作次数
    核心是比较两个序列相似性

应用

  • 应用方向
    • 短文本 vs 短文本
      • 知识库问答
        • 不使用文本分类的原因
          • 拓展性不强
            新增问题时需要重新训模型
          • 相同问题的有效性
            会出现无法命中相同问题的情况
        • 可以使用GPT模型
          RAG 思路:检索增强
      • 聊天机器人
    • 短文本 vs 长文本
      • 文章检索
      • 广告推荐
    • 长文本 vs 长文本
      新闻、文章的关联推荐
  • 实际应用
    • 信息检索
      搜索引擎
    • nlp 最成熟的落地任务:智能问答
      • 落地形式
        • 人机对话
        • 智能客服
        • 智能音箱
        • 聊天机器人
        • 车载导航
        • 手机助手
      • 基础资源
        • faq 库
          • 多个问答对组成的集合
            一个标准问对应一个标准审核好的标准答案
          • 运行逻辑
            • 用户提问
            • 提问内容预处理
              根据算法决定处理方式
            • 找到最相似的问题
            • 输出答案
          • 核心
            • 进行语义相似度计算
              即 文本匹配
        • 书籍文档
        • 网页
        • 知识图谱
        • 表格
        • 特定领域知识
        • 人工规则
      • 答案产出方式
        • 检索式
        • 生成式
        • 检索+生成
      • 相关技术划分
        • 单轮问答
        • 多轮问答
        • 多语种问答
        • 事实性问答
        • 开方性问答
        • 多模态问答
          问题是文字答案是语音或视频
        • 选择性问答
        • 抽取式问答
        • 生成式问答
  • 落地应用
    • 信息检索
    • 知识库问答
      Faq 知识库

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于51单片机的汽车倒车防撞报警器系统
  • 【SpinalHDL】Scala编程之伴生对象
  • 《C++移动语义:解锁复杂数据结构的高效之道》
  • 『功能项目』QFrameWork更新道具图片UGUI【71】
  • 哈希简单介绍
  • 连续数组问题
  • CSS3 多媒体查询
  • 网关过滤器(Gateway Filter)
  • 【webpack4系列】设计可维护的webpack4.x+vue构建配置(终极篇)
  • 41. 如何在MyBatis-Plus中实现批量操作?批量插入和更新的最佳实践是什么?
  • 解决DockerDesktop启动redis后采用PowerShell终端操作
  • C++初阶-list用法总结
  • 免费在线压缩pdf 压缩pdf在线免费 推荐简单好用
  • 【CTF】Nginx日志注入
  • 【算法题】63. 不同路径 II-力扣(LeetCode)-”如果起点有障碍物,那么便到不了终点“
  • 【译】JS基础算法脚本:字符串结尾
  • ES6指北【2】—— 箭头函数
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 2019年如何成为全栈工程师?
  • gcc介绍及安装
  • GraphQL学习过程应该是这样的
  • JavaScript 一些 DOM 的知识点
  • JavaScript设计模式之工厂模式
  • Java的Interrupt与线程中断
  • PHP CLI应用的调试原理
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • SegmentFault 2015 Top Rank
  • v-if和v-for连用出现的问题
  • Vue2.x学习三:事件处理生命周期钩子
  • 高程读书笔记 第六章 面向对象程序设计
  • 技术胖1-4季视频复习— (看视频笔记)
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 思考 CSS 架构
  • 想写好前端,先练好内功
  • 再次简单明了总结flex布局,一看就懂...
  • 自动记录MySQL慢查询快照脚本
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • ​油烟净化器电源安全,保障健康餐饮生活
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • ‌内网穿透技术‌总结
  • #HarmonyOS:基础语法
  • (ibm)Java 语言的 XPath API
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (zhuan) 一些RL的文献(及笔记)
  • (搬运以学习)flask 上下文的实现
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (二)windows配置JDK环境
  • (三分钟)速览传统边缘检测算子
  • (循环依赖问题)学习spring的第九天
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • .gitignore
  • .naturalWidth 和naturalHeight属性,
  • .NET CORE 3.1 集成JWT鉴权和授权2