如何选择负样本? 这是个很讲究的问题

语义匹配最简单介绍

NLP里面如果做相似度计算,或曰语义匹配,基本上分为两类:

  • 浅层匹配:基于表层词,加上些权重。又可以划归为无监督流派。

    • vsm,比如tfidf,bm25之类的。
    • 或者最长公共子串,编辑距离这一类的。
    • 还有一些稍微高级点,加上word embedding,比如wmd。
  • 深度匹配:基于深度神经网络的,一般都是孪生网络(Siamese Networks)架构。需要训练数据,那么就是有监督或者半监督。
    • 早些的比如DSSM(Deep Structured Semantic Model)、SimNet这些。
    • 目前主流是预训练+微调范式,见下图。
      • 用BERT等这些预训练的模型打个底,然后嘛,用任务相关的语料微调训练。
      • 实操时,孪生的两侧如果是共享参数的,则一般做的是对称的Q-Q匹配之类的。
      • 如果是非对称的,那么一般来说,一侧训练好的架构可以拆解为线下的encoder去对待检索的文档做向量化,另一侧来对线上的query做向量化。

语义匹配孪生网络的痛点

在实践中,有什么难搞的地方呢?当时是语料啦。

俗话说的好,只要语料够,智能随便玩。(抱歉,编的不太押韵!)

在微调训练孪生网络时,最大痛点就是搜集语料,而其中痛中之痛就是搜集到特别适当的负样本(negative samples)。

正样本基本是确定的,一般都不需要找,而负样本咋弄?

  • 随便找个不是正样本的,作为负样本? 好吧,确实大量的实践就是这么搞的,比如word2vec的negative sampling以及很多的noising策略。
  • 和正样本最不像的作为负样本?拉倒吧,这种负样本没什么营养。
  • 其实,明眼人都知道,一定要选最具有竞争力的错样本。

那么,找什么样的负样本,以及怎么找呢?

几个新思路

有个新研究,给了一点参考。

这就是陈丹琦她们新公开的 "Dense Passage Retrieval for Open-Domain Question Answering"。 今年4月份的新文章。 (https://arxiv.org/abs/2004.04906)

直接说重点,文章给出几个负样本思路:

  • Random: 随机选,可想而知效果如何。
  • BM25: 用BM25选很相似但不含所要答案的。
  • Gold: 别的问题的答案作为当前问题的负样本。

文章实验表明,Gold最好!

而且文章还提出一个训练的trick:

要在打包batch时,包含一个正例,其他都是对应的Gold式的负样本。最佳实践是,再外加一个BM25负样本。

结果嘛,还是蛮不错的,在Natrual Question 这个检索的测试集上,用了训练集中1k个问题,就基本能达到BM25的检索效果了。

听着是不是很直观、很简单,那试试吧?

孪生神经网络_孪生网络如何选择负样本? 这是个很好的问题相关推荐

  1. 孪生神经网络_驾驶习惯也能识人?基于时空孪生神经网络的轨迹识别

    ⬆⬆⬆ 点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 前言: 给定一组单独的人员(例如行人,出租车司机)的历史轨迹以及由特定人员生成的一组新轨迹,轨迹识别问题旨在验证传入的轨迹是否是 ...

  2. 孪生神经网络_基于局部和全局孪生网络的鲁棒的人脸跟踪

    论文名称 Siamese local and global networks for robust face tracking 引用:Qi, Yuankai, et al. "Siamese ...

  3. 孪生神经网络_轩辕实验室:数字孪生:基于机器学习的汽车数字孪生模型

    本文来源:A. Rassolkin, T. Vaimann, A. Kallaste, and V. Kuts, "Digital twin for propulsion drive of ...

  4. 孪生网络图像相似度_孪生网络:使用双头神经网络进行元学习

    深度神经网络有一个大问题-他们一直渴望数据. 当数据太少时(无法到达算法可以接受的数量)深度神经网络很难推广. 这种现象突出了人类和机器认知之间的差距. 人们可以通过很少的训练示例来学习复杂的模式(尽 ...

  5. 孪生神经网络--一个简单神奇的结构

    本文转载自机器学习小知识. 01 名字的由来 Siamese和Chinese有点像.Siam是古时候泰国的称呼,中文译作暹罗.Siamese也就是"暹罗"人或"泰国&qu ...

  6. 单样本学习:使用孪生神经网络进行人脸识别

    这篇文章简要介绍单样本学习,以孪生神经网络(Siamese neural network)进行人脸识别的例子,分享了作者从论文 FaceNet 以及 deeplearning.ai 中学到的内容. 图 ...

  7. 机器学习笔记 - Siamese Neural Network 孪生神经网络

    一.孪生神经网络概述 孪生神经网络(SNN)是一种神经网络,其中包含相同模型的多个实例,并共享相同的体系结构和权重.当需要使用有限的数据进行学习并且我们没有完整的数据集(例如零/一枪学习任务)时,这种 ...

  8. 负样本的艺术,再读Facebook双塔向量召回算法

    负样本的艺术,再读Facebook双塔向量召回算法 Facebook这篇Embedding召回的论文,之前已经有几篇文章涉及过了,分别是<Embeding-based Retrieval in ...

  9. Siamese网络(孪生神经网络)详解

    SiameseFC Siamese网络(孪生神经网络) 本文参考文章: Siamese背景 Siamese网络解决的问题 要解决什么问题? 用了什么方法解决? 应用的场景: Siamese的创新 Si ...

最新文章

  1. react中纯函数_如何在纯React中创建电子邮件芯片
  2. 江苏省对口单招计算机原理,江苏省对口单招计算机原理教案.doc
  3. spark常用函数比较
  4. php对称算法_php里简单的对称加密算法
  5. 4个Keynote、12篇论文分享、40个Poster,CVPR 2021论文分享会全日程公布
  6. sql server数据库课程设计分析
  7. UVA 558 SPFA 判断负环
  8. linux命令 三大利器,awk、grep、sed是linux操作文本的三大利器,也是必须掌握的linux命令之一...
  9. 关于Cocos2d-x中使用完Blink动作后精灵突然消失的问题的解决
  10. windows应用x64和x86运行效率_现在你可以在 Windows 中运行 Linux 应用了 | Linux 中国...
  11. laravel nginx_在nginx上用FastCGI解析PHP
  12. Java中的Arrays类使用详解
  13. 线代 [3]|从增广矩阵漫谈矩阵转置对向量在四个向量子空间内的“飞舞”(第三篇)
  14. github 从0开始的基本操作到fork和pr项目
  15. 计算机网络链接密码,怎么连接局域网中计算机网络密码方法介绍
  16. 2步学会word怎么看字数(图文)
  17. 我所经历的汶川大地震之二
  18. hover鼠标的悬停效果
  19. CSS3干货14:自定义页面滚动条
  20. Android | navigation入门详解

热门文章

  1. 【数据分析学习】Pandas学习记录
  2. ModelForm views.py
  3. 文本框中只能输入小于等于100的正整数
  4. A+B for Input-Output Practice (I)
  5. linux内核学习笔记【一】临时内核页表 Provisional kernel Page Tables
  6. C++ 线程同步 (学习笔记)
  7. java package 目录_修改jar包package目录结构操作方法
  8. c语言400行小游戏,400行代码编C语言控制台界版2048游戏,编写疯子一样的C语言代码...
  9. syslog工具_07 Docker 可视化管理和监控工具
  10. 万圣节活动BANNER设计有方案了吗?拿走精品PSD分层模板!