| query1 | query2 |
| 我要打给你 | 我要打你 |
| 你叫什么 | 你叫我什么 |
| 我叫小布 | 我不叫小布 |
| 你有男票吗 | 你是单身狗吗 |
| 你真搞笑 | 你是个逗比啊 |
| 我喜欢看动漫 | 你不知道我喜欢看动漫吗 |
虽然Word2vec提供了一定的泛化性,但其最大的弱点是在不同的语境下,同一个word的表征完全相同,无法满足丰富的语言变化。gpt、bert等大规模预训练模型的出现,彻底解决了这个问题,做到了word的表征与上下文相关,同时也不断刷新了各个领域任务的榜单。
但实验证明直接使用bert输出的token embedding来计算句子的sentence embedding,无论使用cbow的方式对所有token embedding求平均或者直接使用[CLS] token的embedding来表示,语义计算的效果都不佳,甚至不如GloVe。究其原因,在bert的预训练过程中,高频词之间共现概率更大,MLM任务训练使得它们之间语义表征更加接近,而低频词之间的分布更为稀疏。语义空间分布的不均匀,导致低频词周围中存在很多语义的“hole”,由于这些“hole”的存在,导致语义计算的相似度存在偏差。
为了解决bert语义空间不均匀的问题,CMU与字节跳动合作的bert-flow提出将bert的语义空间映射到一个标准的高斯隐空间,由于标准高斯分布满足各向同性,区域内不存在“hole”,不会破坏语义空间的连续性。
Bert-flow的训练过程就是学习一个可逆的映射f,把服从高斯分布的变量z映射到BERT编码的u,那就可以把u映射到均匀的高斯分布,这时我们最大化从高斯分布中产生BERT表示的概率,就学习到了这个映射:
实验表明,通过bert-flow的方式来进行语义表征与相似度计算的效果,要远远优于word2vec以及直接使用bert的方式。
1.2 监督学习
Bert-flow的出现使得无监督学习在文本相似度计算方面取得了较大进步,但是在特定任务上相比于监督学习,效果还存在一定的差距。监督学习常用的相似度计算模型大致可以分为两类:语义表征模型,语义交互式模型。语义表征模型常用于海量query召回,交互式模型更多使用于语义排序阶段。
DSSM是搜索领域最常用的语义表征模型之一,而在短文本匹配领域,使用最多的网络结构是孪生网络,常用的孪生网络包括:siamese cbow,siamese cnn,siamese lstm等。孪生网络训练时,所有query使用相同模型来进行语义表征,通过余弦相似度等方式来计算query间的相似度,不断最大化正样本之间的相关性,抑制负样本之间的相关性。预测时,每个query通过语义模型单独获取语义向量,用来计算query之间的相似度得分。由于query 语义表征仅与本身有关,因此在进行query检索时,可以提前对语料库中query构建语义索引,大大提升系统的检索效率。
相比于语义表征模型,交互式语义模型具有更好的匹配效果,模型结构往往也更加复杂,常用的交互式语义模型有ABCNN、ESIM等。交互式模型在计算query之间的语义相似度时,不仅对单个query的语义特征进行建模,还需要query之间的交互特征。交互式模型通常使用二分类的任务来进行训练,当模型输入的两个query语义一致,label为“1”,反之,label为“0”。在预测时,可通过logits来作为置信度判断。
大规模预训练模型的出现,也横扫了文本相似度任务的各项榜单。Bert将lcqmc数据集的SOTA带到了86%的水平。随后,Roberta、albert、ernie等新的预训练模型层出不穷,也不断刷新着匹配准确率的SOTA水平。
在语义表征模型的loss构建上,我们参考了人脸识别领域的损失函数设计。这个两个任务在本质上是相似的,人脸识别是将人脸图片用向量表示,而文本检索式将文本用向量来进行表示,都期望正样本之间有足够高的相关性,负样本之间足够好区分。
在使用Siamese cnn进行语义建模时,我们使用了1个标准query,1个正样本,5个负样本(尝试过其他负样本数量,在我们的数据上效果不如5个负样本),训练过程其实是在这6个样本中,识别出对应正样本的位置,因此可将其转化为分类任务来进行训练,每个正负样本分别对应一个类别。使用每个样本与标准query之间的相似度,来作为对应类别的logits,对logits进行归一化并构建loss函数。传统的softmax归一化构建的分类边界使得类别之间可分,为了更好的语义表征效果,需要使得类内更加汇聚,类间更加分散。ASoftmax、AMSoftmax、ArcFace等归一化方式,提出将所有query映射到一个球面,query之间的相似度通过他们之间的夹角来计算,夹角越小相似度越高,通过在角度域添加margin的方式,使得类内更汇聚,类间更可分,达到更好的语义表征效果。
我们对比了softmax、Asoftmax、AMSoftmax、Arcface等不同归一化方式,其中,Softmax没有添加任何margin,ASoftmax通过倍角的方式在角度域添加margin,AMSoftmax则是在余弦域添加margin,而Arcface则是直接在角度域添加固定margin。
我们使用30W的语料库来构建索引,使用12900条线上query(语料库中不包含完全相同的query)来进行召回测试,使用相同的向量索引工具,对比发现AMSoftmax、Arcface召回效果上有很大提升,在我们的业务中得到了应用。
在排序模型方面,我们尝试了ABCNN、ESIM、transformer等交互式语义模型,但效果相比于bert等预训练模型,还存在一定的差距。我们团队自研的预训练模型Xbert,在与Roberta large同规模的情况下,融入了自研知识图谱数据,添加了WWM(whole word MLM)、DAE、Entity MLM等任务,使用LAMB优化器进行优化。我们使用XBert在业务数据上进行了测试,相比于同规模的Roberta large准确率有接近0.9%的提升。为了满足上线需求,我们参考tiny bert的方式,用Xbert蒸馏了一个4层的transformer model用于线上推断。
我们在内部的问答数据集上对不同排序方案做了的效果对比,使用12900条线上用户真实query,进行全链路的效果对比测试。用语义召回top1的准确率来评估语义表征模型的效果,并且通过消歧模块进一步提升应答准确率;测试排序模型效果时,我们使用了多路召回,共召回30个候选,使用排序模型对候选排序,选择排序后的top1作为最终答案。若经过消歧模块,所有候选均被消歧掉,或排序后的top1候选排序得分不满足应答门限时,则该query系统无应答。因此,我们使用应答率与应答准确率来作为系统最终的评测指标,来评估不同方案的效果。
为了测试自研的Xbert在公开的语义相似度数据集上的效果,在lcqmc数据集上,单模型准确率88.96%,较Roberta large单模型87.9%的准确率,提升了1%;通过使用正样本之间的传递性以及负样本采样的方式,来进行数据增强以及FGM对抗训练的方式,准确率提升至89.23%;通过ensemble的方式,将准确率进一步提升至90.47%。通过相同的方式,在bq_corpus上达到了87.17%,在paws-x任务上达到了88%,在afqmc数据集上也达到了77.234%,在百度举办的千言文本相似度比赛中完成登顶。
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc
我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or
我需要用任何语言编写一个算法,根据3个因素对数组进行排序。我以度假村为例(如Hipmunk)。假设我想去度假。我想要最便宜的地方、最好的评论和最多的景点。但是,显然我找不到在所有3个中都排名第一的方法。Example(assumingthereare20importantattractions):ResortA:$150/night...98/100infavorablereviews...18of20attractionsResortB:$99/night...85/100infavorablereviews...12of20attractionsResortC:$120/night
我遇到了RVM的问题,所以我卸载并重新安装了它。事实是我实际上尝试过rbenv,但这对我来说没有用,所以我试图让rvm重新启动并运行-而不必安装重复版本的Ruby。我至少安装了1个现有版本的Ruby:ruby--versionruby1.8.7(2011-12-28patchlevel357)[universal-darwin11.0]但是当我执行rvmlist时,我得到一个空白列表:bash-3.2$rvmlistrvmrubies#Defaultrubynotset.Try'rvmaliascreatedefault'.#=>-current#=*-current&&default
我正在寻找用于Rails的优质管理插件。似乎大多数现有的插件/gem(例如“restful_authentication”、“acts_as_authenticated”)都围绕着self注册等展开。但是,我正在寻找一种功能齐全的基于管理/管理角色的解决方案——但不是简单地附加到另一个非基于角色的解决方案。如果我找不到,我想我会自己动手......只是不想重新发明轮子。 最佳答案 RyanBates最近做了两个关于授权的railscast(注意身份验证和授权之间的区别;身份验证检查用户是否如她所说的那样,授权检查用户是否有权访问资源