PEARL: 一个轻量的计算短文本相似度的表示模型

 | 💻 [code] | 💾 [data] | 🤗 PEARL-small | 🤗 PEARL-base | 论文

如何计算短文本相似度是一个重要的任务,它发生在各种场景中:

  1. 字符串匹配(string matching)。我们计算两个字符串是否表达同一个含义,比如“university” 和 “universities” 尽管看起来不同,但它们有着相同的语义。我们希望一个模型能够捕捉这种有形态变化的相似性。
  2. 模糊匹配 (Fuzzy Join)。这是数据科学中经常遇到的困难,当我们在join不同的表时候,列和列之间的名词并不是完全匹配的。比如在一个关于工资的表中有一个列叫avg_salary,而在另一个表中这个列叫做average_wage,这就使得我们很难匹配到相关的列。这里我们需要一个模型能够捕捉这种语义相似性。
  3. 实体检索 (Entity Retrieval)。这个任务目的是从一个实体候选集 (比如知识库)中找出最匹配的查询实体。比如输入的查询是“The New York Times”,候选集中有三个实体名称["NYTimes", "New York Post", "New York"]。这里我们需要一个模型去找出“NYTimes”是最相关的实体。值得注意的是,有时候实体候选集非常大,可能达到百万千万级别,因此模型的速度也是需要考虑的。

传统的方法使用文本编辑距离计算文本相似度,这种方法简单速度快,缺点就是不能捕捉语义的相似度,比如例子2和例子3的情况。FastText是可以基于词向量计算语义相似度,但是它的效果不如现在流行的上下文相关的语言模型,比如BERT。

这篇文章我们要介绍一个轻量的表示模型PEARL,它只有34M参数,可以计算各种短文本的相似度。比如上面实体检索的案例,PEARL可以知道"The New York Times"和“NYTimes”有着相同的语义。

query_texts = ["The New York Times"]
doc_texts = [ "NYTimes", "New York Post", "New York"]
input_texts = query_texts + doc_textstokenizer = AutoTokenizer.from_pretrained('Lihuchen/pearl_base')
model = AutoModel.from_pretrained('Lihuchen/pearl_base')# encode
embeddings = encode_text(model, input_texts)# calculate similarity
embeddings = F.normalize(embeddings, p=2, dim=1)
scores = (embeddings[:1] @ embeddings[1:].T) * 100
print(scores.tolist())# expected outputs
# [[85.61601257324219, 73.65624237060547, 70.36172485351562]]

PEARL的主要思想是使用对比学习框架来学习段文本表示。因为相同意思的文本本身会有多种多样的形式,比如上面“The New York Times”的案例。为了刻画这些特征,PEARL在训练中引入增强样本学习多样性。比如引入字母,单词以及词组级别增强,如下图所示: 

同时,PEARL还在训练中引入了一个辅助任务:短文本类别识别。 PEARL在训练中会让模型的类别,比如“The New York Times”是一个与organization相关的名词短语,noun phrase organization (NP-ORG)。通过这个任务,不同类别的短文本会被区分开,我们也会学到更好的表示。

实验结果表明,PEARL在五个任务(Paraphrase Classification,Phrase Similarity,Entity Retrieval,Entity Clustering,Fuzzy Join)都取得了最好的表现:

同时PEARL在内存和推理速度花销上并没有比FastText高很多。PEARL模型是FastText的很好的替代方案:

 | 💻 [code] | 💾 [data] | 🤗 PEARL-small | 🤗 PEARL-base | 论文 |

作者主页:chenlihu.com

如果觉得以上论文或代码有用,请引用或者给出小星星😊

@article{chen2024learning,title={Learning High-Quality and General-Purpose Phrase Representations},author={Chen, Lihu and Varoquaux, Ga{\"e}l and Suchanek, Fabian M},journal={arXiv preprint arXiv:2401.10407},year={2024}
}

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

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

相关文章

提升网络质量:UDPspeeder 实现网络优化与提速

提升网络质量:UDPspeeder 实现网络优化与提速 背景与意义原理与功能使用方法未来展望相关链接服务 在当今高度互联的网络环境下,网络质量的优化和提速对于用户体验至关重要。针对高延迟和丢包率较高的网络链路,UDPspeeder 提供了一种前向纠错…

分布式版本控制系统 Git

目录 一、Git简介 二、Git历史 三、安装git 1.准备环境 2.Yum安装Git 四、初次运行 Git 前的配置 命令集 实例: 五、Git命令常规操作 六、获取 Git 仓库(初始化仓库) 创建裸库 实例 : 创建本地库 一、Git简介 官网&…

flink sql 实战实例 及延伸问题:聚合/数据倾斜/DAU/Hive流批一体 等

flink sql 实战实例 及延伸问题 Flink SQL 计算用户分布Flink SQL 计算 DAU多topic 数据更新mysql topic接入mysql引入 upsert-kafka-connector 以1.14.4版本为例 数据倾斜问题:让你使用用户心跳日志(20s 上报一次)计算同时在线用户、DAU 指标…

Linux离线安装插件

当公司Linux环境无外网情况下,需要先下载好离线安装包,然后上传到服务器,进行安装。 这里介绍一个下载插件安装包的网站,可以搜索到lrzsz、lsof、telnet、unzip、zip等安装包 搜索到想要的插件安装包后,下载并上传到服…

集合可视化:rainbow box与欧拉图

论文:A new diagram for amino acids: User study comparing rainbow boxes to Venn/Euler diagram 最近偶然看到了这篇论文,觉得很有意思,针对的任务是集合数据的可视化。 我们用示例来说明,比如图二的欧拉图,展示的…

备考2025年AMC8数学竞赛:2000-2024年AMC8真题练一练

我们今天来随机看五道AMC8的真题和解析,对于想了解或者加AMC8美国数学竞赛的孩子来说,吃透AMC8历年真题是备考最科学、最有效的方法之一。 为帮助孩子们更高效地备考,我整理了2000-2004年的全部AMC8真题,并且独家制作了多种在线练…

【蝶变跃升】壹起来|就业辅导系列活动——职业生涯规划和模拟面试

为使困难家庭更深层次了解自己就业现状,明确就业方向,同时提升在面试时的各类技巧。2024年2月17日,由平湖市民政局主办、平湖吾悦广场和上海聘也科技有限公司协办、平湖市壹起来公益发展中心承办的“蝶变跃升”就业辅导系列——职业生涯规划和…

探究网络工具nc(netcat)的使用方法及安装步骤

目录 🐶1. 什么是nc(netcat)? 🐶2. nc(netcat)的基本使用方法 2.1 🥙使用 nc 进行端口监听 2.2 🥙使用 nc 进行端口扫描 2.3 🥙使用 Netcat 进行文件传输…

C#知识点-14(索引器、foreach的循环原理、泛型、委托)

索引器 概念:索引器能够让我们的对象,以索引(下标)的形式,便捷地访问类中的集合(数组、泛型集合、键值对) 应用场景: 1、能够便捷地访问类中的集合 2、索引的数据类型、个数、顺序不…

IDEA 2021.3激活

1、打开idea,在设置中查找Settings/Preferences… -> Plugins 内手动添加第三方插件仓库地址:https://plugins.zhile.io搜索:IDE Eval Reset 插件进行安装。应用和使用,如图

harmony 鸿蒙安全和高效的使用N-API开发Native模块

简介 N-API 是 Node.js Addon Programming Interface 的缩写,是 Node.js 提供的一组 C API,封装了V8 引擎的能力,用于编写 Node.js 的 Native 扩展模块。通过 N-API,开发者可以使用 C 编写高性能的 Node.js 模块,同时…

Linux篇:开发工具yum/vim/gcc/g++/Makefile/gdb

一. yum:软件包管理器 什么是软件包? 在Linux 下安装软件 , 一个通常的办法是下载到程序的源代码 , 并进行编译 , 得到可执行程序 . 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好 , 做成软件包 (可以理解成windows 上的安装程序) 放在…

【Vuforia+Unity】AR05-实物3D模型识别功能实现

对于3D物体的识别,可以是虚拟的也可以是实物的,但是对于虚拟的三维模型意义不大,我们完全可以把三维模型放在屏幕上截一张图,以图片识别的方式召唤数字内容,不过在虚拟现实中或许有用。 因此本文探讨的技术路线主要是…

网络安全“三保一评”深度解析

“没有网络安全就没有国家安全”。近几年,我国法律法规陆续发布实施,为承载我国国计民生的重要网络信息系统的安全提供了法律保障,正在实施的“3保1评”为我国重要网络信息系统的安全构筑了四道防线。 什么是“3保1评”? 等保、分…

Java并发基础:原子类之AtomicBoolean全面解析

本文概要 AtomicBoolean类优点在于能够确保布尔值在多线程环境下的原子性操作,避免了繁琐的同步措施,它提供了高效的非阻塞算法实现,可以大大提成程序的并发性能,AtomicBoolean的API设计非常简单易用。 AtomicBoolean核心概念 …

STM32 TIM2重映射

STM32定时器 文章目录 STM32定时器[TOC](文章目录) 前言一、问题分析二、代码 前言 最近想弄一个多路输出PWM,但是发现TIM2不能用,根据手册也对它进行重映射了,但是还是不能用,用示波器发现驱动能力比较弱,然后禁用jt…

jvm垃圾收集器-三色标记算法

1.对象已死吗? 在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(即不可能再被任何途径使用的对象). 引计数法 引用计数算法是一…

打造个性化电子画册,提升品牌魅力

​个性化电子画册可以根据不同的用户群体,提供不同的内容。企业可以根据目标客户的特点,为他们定制不同的内容,如产品介绍、品牌故事、企业文化等。这样不仅可以吸引更多的用户关注,还可以增强用户对品牌的信任度。 但是怎么制作电…

【Linux基础】vim、常用指令、组管理和组权限

Linux基础 1、目录结构2、vi和vim3、常用指令运行级别找回密码帮助指令时间日期指令搜索查找文件目录操作磁盘管理指令压缩和解压缩 4、组管理和组权限用户操作指令权限 1、目录结构 Linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”&a…

【设计模式】01-装饰器模式Decorator

作用:在不修改对象外观和功能的情况下添加或者删除对象功能,即给一个对象动态附加职能 装饰器模式主要包含以下角色。 抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。具体构件&#xff08…