文本嵌入方案大总结:从词向量到句向量

这里写目录标题

  • 文本嵌入方案总结
    • 一、文本嵌入三种层次
      •  词向量应用:
      •  句向量应用:
      •  扩展:文本嵌入和句子相似度、文本匹配的逻辑关系?
    • 二、词向量有哪些方案、优缺点、工具?
      • 方案一:统计编码
      • 方案二:静态词向量
      • 方案三:开源词向量
      • 方案四:动态词向量
    • 三、句向量有哪些方案、优缺点、工具?
      • 方案一:基于词典和词频进行统计
      • 方案二:word2vec类静态词向量取平均
      • 方案三:使用原生的bert生成句向量
        •  取CLS向量:
        •  token向量取平均:
      • 方案四:微调bert模型使其具备句向量生成能力
        •  Sentence-Bert(2019.8)
        •  Bert-Flow(2020.11)
        •  Bert-whitening(2021.3)
        •  SimCSE(2021.9)
        •  PromptBert
      • 方案五: 大模型时代的通用嵌入模型
    • 四、总结:方案如何选取?

文本嵌入方案总结

2024.11.13阶段性总结

一、文本嵌入三种层次

文本嵌入包括词嵌入(词向量)句嵌入(句向量)、**篇章嵌入(篇章向量)**三种层次。

 词向量应用:

近似词、不同类的词、词距离、计算句嵌入、降维可视化

 句向量应用:

检索、排序、句子相似度、推理、分类、聚类、平均等。

 扩展:文本嵌入和句子相似度、文本匹配的逻辑关系?

  • 基于文本嵌入可以完成许多下游任务,句子相似度只是其中一个;
  • 句子相似度,可以使用计算字符串相似度或者语义相似度,其中句子的语义相似度可以使用专门的句子相似度模型(如SimCSE、sentence-bert),也可以使用通用的嵌入模型(如m3e-base)得到句子嵌入再计算余弦相似度;
  • 文本匹配通常指语义匹配,核心就是计算句子相似度。
    总结就是:基于文本嵌入可以用于计算句子的语义相似度,基于句子相似度可以完成文本匹配或检索

二、词向量有哪些方案、优缺点、工具?

方案一:统计编码

典型方式为onehot编码、TF编码

  • 优点:最原始简单的表示方式,首次将文本转换为数值后,计算机才能理解和处理;
  • 缺点:假设词与词之间相互独立、没有考虑共现关系;2)向量长度和词典长度一样大,维度灾难
  • 工具:
     sklearn

方案二:静态词向量

典型模型为word2vec、Glove、FastText,这三个中Glove经常作为Bert类的基准模型进行比较。

  • 优点:训练速度非常快
  • 缺点:无法处理一词多义问题;
  • 工具:
     gensim:包含word2vec、fasttext(词向量)、LDA、LSA、TF-IDF、paragraph2vec等算法;
     FastText:Facebook发布的工具;
     Glove库

方案三:开源词向量

方案一需要用自己的数据训练才能得到词向量,若是不想训练,则可以使用别人以训练完成的词向量,典型的有腾讯AI lab的Tencent_AIlab_ChineseEmbedding(6.3G),其基于Skip-Gram 模式进行训练。

  • 优点:大厂用于训练的数据量更多,得到的词向量更准确,词条也较为丰富;
  • 缺点:可能存在着开源的词条无法完全覆盖你的应用场景中所需词条的情况;同时它也是静态词向量,因此也无法处理一词多义的问题。
    参考:https://zhuanlan.zhihu.com/p/47518633
    在这里插入图片描述

方案四:动态词向量

典型模型为Bert/Roberta系列,直接获取编码后对应token的向量作为字向量/词向量。
在这里插入图片描述

  • 优点:每个词的语义都和其上下文所关联,因此其是动态生成的词向量,如“苹果公司股价再创新高”和“我早饭吃了一个苹果”,这两句话中都出现了“苹果”,如果通过静态词向量方式则得到完全相同的向量;通过bert则得到不同的向量,即bert可以解决一词多义问题;
  • 缺点:计算成本更高,更耗时。
  • 工具:
     模型下载地址:Modelscope或Huggingface(国内不可用)

三、句向量有哪些方案、优缺点、工具?

首先,什么是一个好的句向量?
一个好的句向量应准确表征句子的信息,不同句子之间的相似度就可以用对应句向量的距离来表示。

方案一:基于词典和词频进行统计

典型的模型为词袋模型、TF-IDF编码

  • 缺点:完全忽略了句子语序关系,eg:“我打了你”和“你打了我”完全等价;
  • 工具:
     Gensim

方案二:word2vec类静态词向量取平均

这里包括直接平均和加权平均两种方式,简单不赘述。

方案三:使用原生的bert生成句向量

(方案三和四参考:https://zhuanlan.zhihu.com/p/444346578)
原生的这类是在不改变原始bert模型的基础上,提出各种思路提取出bert的句向量,输入是一句话,如下,CLS和SEP是bert的辅助标记:
在这里插入图片描述

原生的bert如何获得一句话的向量表示?有这样几种表征方式:

 取CLS向量:

取CLS位置的向量,视为包含了整句话的信息,作为句向量。

 token向量取平均:

这里具体又包括2种方式:1)全部token向量取平均;2)去CLS和SEP的向量平均。但因为上面相同的问题原因,效果也并不好。

  • 优点:方法简单,github上一行代码使用bert生成句向量就是这类方法。
    在这里插入图片描述

  • 缺点:
    这两类方法在实际用于句子相似度等任务时效果非常差,甚至比Glove向量平均差远了。造成这种现象的原因主要是:原生的Bert预训练的任务只有MLM跟NSP(next sentence prediction),在下游任务计算句子相似度时,也是把两个句子通过[CLS]拼接到一起输入Bert,将Bert输出的结果传入一个全连接层计算相应概率值做一个二分类任务,所以原生的Bert一开始就没有考虑到怎么去生成一个适合向量搜索或者相似度计算的句向量。
    在这里插入图片描述
    因此,原始Bert生成的的词向量在空间分布不均匀,受频率影响,高频词相对集中,更靠近远点,低频词由于训练不够充分相对分散,远离原点。所以词向量之间的距离不能很好的表示词之间的相关性。所以句向量也收到影响。
    因此,在实际使用中,几乎不会使用原生的bert来生成句向量。

方案四:微调bert模型使其具备句向量生成能力

 Sentence-Bert(2019.8)

在原始的bert训练任务中添加句子相似度计算任务进行微调,使Bert具备生成高质量句向量的能力,质量是基于句子相似度任务而言的。

  • 效果:明显优于原生Bert和其他向量表征方法。其验证池化措施选择的是向量平均值,效果最好。
    在这里插入图片描述
 Bert-Flow(2020.11)

在Bert的基础上增加一个flow可逆变换,实现将一个标准的高斯分布转化成一个Bert的句向量embedding分布,那么它的逆变化就可以将一个Bert的句向量embedding分布转化成一个标准高斯分布了。推理过程就是在将Bert的句向量输出到这个训练好的可逆变换flow做转换,就可以得到分布均匀的句向量。

  • 效果:作为一种无监督训练的方法,效果明显优于原生的bert和glove。
    在这里插入图片描述
 Bert-whitening(2021.3)

Bert-whitening跟Bert-flow一样也是想直接对Bert生成的句向量做转换,但是Bert-whiltening更加简单明了,直接对语料数据求特征值分解,将当前坐标系变换到标准正交基下,进而实现句向量空间的各向同性。

  • 效果:Bert-whitening在效果上可以媲美Bert-flow。
    在这里插入图片描述
 SimCSE(2021.9)

引入对比学习的方式用于相似文本任务训练,它希望表征相同语义的句向量之间的距离足够靠近,表征不同语义的句向量距离尽可能疏远。是一个破圈之作。

  • 效果:无论是无监督还是有监督,在多个数据集上效果优于之前的方法,且有较大的提升。
    在这里插入图片描述
 PromptBert

之前涉及到的方法的句向量要不是[CLS]位置的输出向量,要不就是所有位置的输出向量的平均值,但是PromptBert方法使用的句向量却设置prompt模版得到的。PromptBert通过预先定义好的模版将文本填入[X]的位置然后输入到Bert,得到对应[MASK]位置的输出向量作为句向量。第二点是句子相似度计算过程加入了消除有关prompt模版影响的部分。

  • 效果:效果明显优于其他方法包括simcse。prompt模版的选择对于最终效果的影响很大。
    在这里插入图片描述

  • 优点:上述方法都没有修改Bert原始结构,而是引入句子相似对任务对bert做了相应的训练任务。换言之,Bert其实功能还是很强大,并且具备学到句向量生成的能力的,只是需要针对性的训练,才能具备句向量生成的能力。同时可以看到,对比学习对于句向量生成的提升效果显著。

  • 缺点:无论是无监督还是有监督的方式来微调Bert,都需要准备额外的数据,同时,基于句子显示度微调完成的bert在跨任务场景(如在排序、检索任务)的表现可能并不是很好,这是bert类模型的统一缺点,一任务一模型。

  • 工具:参考各算法源码实现

方案五: 大模型时代的通用嵌入模型

如图大模型统一了各种NLP子任务一样,在大模型时代,文本嵌入模型也迎来了大一统时代:使用更多的数据,更大的模型来训练得到一个专门的嵌入模型,如此,使用一个嵌入模型生成的句向量,能够同时支持多种应用场景,而且表现都很不错。
目前,在中文领域有m3e、gte、bge等嵌入模型可选,其中bge-large-zh-v1.5流行度较广,可以作为一个首选的基准模型进行使用。
bge介绍:https://blog.csdn.net/eagleofstar/article/details/132186774
在这里插入图片描述

要想获取最新的、最强的中文嵌入模型,搜索C-MTEB 评测基准
在2024.10月这个节点,最厉害的是conan-embedding-v1
在这里插入图片描述

  • 优点:和方案四的任务定向微调模型相比,嵌入模型具备更好的泛化能力;任务四的模型通常基于bert/roberta,其max tokens为512,而嵌入模型目前有多种规格可选,比如4K、8K,甚至是128K,如此大的窗口,可以很好的完成长文本嵌入。
  • 缺点:若在细分领域上需要更好的表现时,仍需要进行微调。
  • 工具:
     模型下载地址:Modelscope或Huggingface(国内不可用)
     模型本地部署:Xinference(模型更多)或ollama(部署更方便)

四、总结:方案如何选取?

建议方案选取的一个原则是:方案挑选从简单到复杂,简单方案有简单方案的优点,有时候杀鸡不需要牛刀。
面对一个场景,不知道怎么选方案或模型时,可以优先用Glove或者Fasttext完成词向量训练,使用词向量平均的方式来获得句向量,成本非常低,快速在应用中构建出一个基准模型,后期若发现应用中存在着多义词、或者或句子中词的顺序敏感的场景,则可以考虑换用bert类的方法进行微调或者直接使用专门的嵌入模型。其中bert类微调模型推荐使用Sentence-bert或SimCSE作为基准模型,嵌入模型推荐使用bge-large-zh-v1.5作为基准模型。
如果图省事,不想去了解模型,更不想训练,则建议直接用嵌入模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/14875.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

第23天Linux下常用工具(二)

目录 第四章 GDB调试工具 4.1gdb的作用 4.2调试代码的流程 4.3gdb的安装 4.4 gdb的使用 第五章 makefile工程管理工具 5.1makefile的作用 5.2makefile的运行 5.3make的安装 5.4makefile的编写方法 5.5makefile的语法 5.6makefile使用示例 第四章 GDB调试工具 4.1g…

ubuntu22.04与ubuntu24.10使用Remmina远程桌面共享

1. ubuntu22.04启用远程桌面共享 点击Remote Desktop,按下图设置 成功启用 2.ubuntu24.10远程桌面启用 选择远程桌面选项 启用远程桌面共享与远程控制 启用远程登陆

基于51单片机的高压锅控制系统proteus仿真

地址: https://pan.baidu.com/s/16BuxmKYUprTGbkEj_BWGvQ 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectro…

D3的竞品有哪些,D3的优势,D3和echarts的对比

D3 的竞品 ECharts: 简介: ECharts 是由百度公司开发的一款开源的 JavaScript 图表库,提供了丰富的图表类型和高度定制化的配置选项。特点: 易于使用,文档详尽,社区活跃,支持多种图表类型(如折线图、柱状图、饼图、散点…

2024年11月13日

1.创业法律指南 留置权和其他三个权 定金和订金 一般保证和连带保证 1.案例 物权编之担保法律制度案例一 冯系养鸡专业户,为改建鸡会和引进良种需资金20万元。冯向陈借款10万元,以自己的一套价值10万元的音响设备抵押,双方立有抵押字据&a…

从电动汽车到车载充电器:LM317LBDR2G 线性稳压器在汽车中的多场景应用

附上LM317系列选型: LM317BD2TG-TO-263 LM317BTG-TO-220 LM317BD2TR4G-TO-263 LM317D2TG-TO-263 LM317D2TR4G-TO-263 LM317TG-TO-220 LM317LBDR2G-SOP-8 LM317LDR2G-SOP-8 LM317MABDTG-TO-252 LM317MABDTRKG-TO-252 LM317MA…

健康之路三度冲击港交所,数字健康医疗平台IPO前景引关注

健康之路股份有限公司(HealthyWay Inc.)再次向港交所递交招股书,拟在主板上市。此前两次尝试未果,但公司用户基础坚实,业务覆盖广泛,包括健康医疗服务和企业服务及数字营销服务。股东阵容强大,营…

SpringCloud篇(配置中心 - Nacos)

目录 一、Nacos 配置中心 1. 统一配置管理 1.1. 在nacos中添加配置文件 1.2. 从微服务拉取配置 1.2.1. 引入nacos-config依赖 1.2.2. 添加bootstrap.yaml 1.2.3. 读取nacos配置 1.2.4. 页面访问 2. 配置热更新:两种 2.1. 方式一 2.2. 方式二 3. 配置共享…

vue2和vue3的区别详解

vue2 VS vue3 对比vue2vue3配置脚手架cmd命令行可视化方式创建脚⼿架组件通信props、$emit、provide、$arrts、EventBus等props、$emit、provide、inject、arrts等数据监听watch,computedwatch,watchEffect,computed双向绑定Object.definePropertyProxyAPI⽣命周期四个阶段befo…

高中数学:概率-相关运算性质

文章目录 一、概率定义二、运算性质三、事件相互独立四、频率与概率五、练习 一、概率定义 二、运算性质 基本性质 互斥事件的性质 对立事件性质 包含事件的性质 有交集但不包含的事件性质 三、事件相互独立 注意: 四、频率与概率 五、练习

我要学kali-linux之shell脚本编程1

声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…

概率密度与功率谱密度的理解与仿真

引言 概率密度(Probability Density)是统计学中十分重要的概念之一,其应用广泛;功率谱密度(power spectral density, PSD)则在电子电气行业用得比较多。 在基于雷达的目标检测中:概率密度和功率…

数据中台解决方案

文件是关于数据中台解决方案的详细介绍,内容涵盖了数据中台的定义、建设方案、实施步骤、以及在数字化转型中的作用。以下是对文件内容的分析和总结: 1. 数字化转型背景 国家政策支持:提到了《中华人民共和国国民经济和社会发展第十四个五年…

Spring Task详细讲解

✨Spring Task简介 Spring Task 是 Spring 提供的轻量级定时任务工具,也就意味着不需要再添加第三方依赖了,相比其他第三方类库更加方便易用。可以按照约定的时间自动执行某个代码逻辑。 使用场景: 信用卡每月还款提醒银行贷款每月还款提醒…

RabbitMQ运维

1. 单机多节点 1.1 搭建RabbitMQ ①安装RabbitMQ 略 ②确认RabbitMQ运⾏没问题 #查看RabbitMQ状态 rabbitmqctl status 节点名称: 端口号: 25672:Erlang分布式节点通信的默认端⼝, Erlang是RabbitMQ的底层通信协议.15672: Web管理界⾯的默认端⼝, 通过这个端⼝可以访问R…

AI 1.0公司的节节败退

商汤科技又裁员了,并不算行业新鲜事,新鲜的是,这次裁员发生在积极拥抱大模型之后。 成立于2014年的商汤科技,是2014—2015年的AI 1.0创业潮中拿到第一桶金的领头羊,并率先登陆资本市场,成为AI第一股。某种程…

图片识别为什么要将彩色图像灰度化?

为何在处理图像识别任务时,常需将彩色图像转换为灰度图像?在深入探讨此问题之前,我们首先需要明确“灰度化”的定义。 1、灰度化 灰度化处理,简而言之,是指将彩色图像转换成灰度图像的过程。 在电子显示设备&#xff…

NLP论文速读(微软出品)|使用GPT-4进行指令微调(Instruction Tuning with GPT-4)

论文速读|Instruction Tuning with GPT-4 论文信息: 简介: 这篇论文试图解决的问题是如何通过指令调优(instruction-tuning)提升大型语言模型(LLMs)在执行新任务时的零样本(zero-shot&#xff0…

【金猿案例展】科技日报——大数据科技资讯服务平台

‍ 拓尔思数据要素案例 该数据要素项目案例由拓尔思投递并参与“数据猿年度金猿策划活动——2024数据要素产业年度创新服务企业榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 媒体行业企事业单位在数据要素领域得天独厚,日积月累的新闻报道、媒…

1、使用vscode+eide+stm32cubeMx开发stm32

步骤1:在vscode中安装如下的插件 步骤2:点击Embedded IDE,点击“新建项目”-----空项目-----Cortex-M项目。 步骤3:输入项目名,回车后会要制定保存路径,此时就是一个已项目名命名的文件夹。 步骤4&#xff…