IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> [论文笔记]Poly-encoders: architectures and pre-training strategies for fast and accurate multi-sentence -> 正文阅读

[人工智能][论文笔记]Poly-encoders: architectures and pre-training strategies for fast and accurate multi-sentence

引言

本文是Poly-encoder1的阅读笔记。对Bi-encoder/Cross-encoder进行了一个较好的阐述,同时提出了综合两者优点的Poly-encoder。

输入表示

作者使用的预训练输入是 输入句子(INPUT)和标签句子(LABEL )的拼接,它们都以特殊字符[S]包围。

在Reddit数据集上训练时,输入句子是历史对话语句的拼接,对话语句之间以[NEWLINE]特殊字符分隔,标签句子是该段对话中的下一个句子。

核心思想

对于句子对比较任务来说,有两种常用的途径:Cross-encoder和Bi-encoder。

Cross-encoder基于给定的输入句子和标签句子(组成一个句子对,将它们拼接在一起作为输入)进行交叉自注意,通常能获得较高的准确率,但速度较慢。

而Bi-encoder单独地对句子对中的句子进行自注意,分别得到句子编码。由于这种独立性,Bi-encoder可以对候选句子进行缓存,从而在推理时只需要计算输入句子的编码表示即可,大大加快推理速度。但是表现没有Cross-encoder好。

本文作者提出了一种新的Transformer结构,Poly-encoder,学习全局级而不是单词级的自注意特征。

Poly-encoder比Cross-encoder快,同时比Bi-encoder更准确。

同时作者证明选择与下游任务更相关的数据集进行预训练能获得较大的效果提升。

Bi-encoder

image-20211025213826774

Bi-encoder独立地编码上下文和候选句

Bi-encoder允许快速、实时地推理。此时,输入上下文(输入句子)和候选标签句子都被编码成向量:
y c t x t = r e d ( T 1 ( c t x t ) ) y c a n d = r e d ( T 2 ( c a n d ) ) y_{ctxt}= red(T_1(ctxt))\\ y_{cand} = red(T_2(cand)) yctxt?=red(T1?(ctxt))ycand?=red(T2?(cand))

bi-是英文里面的两个的意思,比如binary(二进制)。

其中 T 1 T_1 T1? T 2 T_2 T2?是两个预训练好的Transformer。它们以同样的权重初始化,但是允许独立更新。 r e d ( ? ) red(\cdot) red(?)是将Transformer产生的向量序列压缩成一个向量的函数。

假设 T ( x ) = h 1 , ? ? , h n T(x)=h_1,\cdots,h_n T(x)=h1?,?,hn?是Transformer T T T的输出。由于输入和标签句子都由特殊字符 [ S ] [S] [S]包围,因此这里 h 1 h_1 h1?对应的就是[S]

作者考虑了三种压缩输出序列到一个向量的方法:

  • 选择Transformer输出的第一个向量(即[S])
  • 计算所有输出向量的均值
  • 计算前 M M M个输出的均值

image-20211025205215401

作者通过实验证明,选择输出的第一个向量结果更好。

打分 候选句子通过与上下文句子进行点积计算得分: s ( c t x t , c a n d i ) = y c t x t ? y c a n d i s(ctxt,cand_i)=y_{ctxt} \cdot y_{cand_i} s(ctxt,candi?)=yctxt??ycandi??。该网络基于最小化一个交叉熵损失,其中logtis是 y c t x t ? y c a n d 1 , ? ? , y c t x t ? y c a n d n y_{ctxt} \cdot y_{cand_1},\cdots,y_{ctxt} \cdot y_{cand_n} yctxt??ycand1??,?,yctxt??ycandn??,其中 c a n d 1 cand_1 cand1?是正确标签,剩下的是从训练集中随机选择的负样本。

推理速度 Bi-encoder允许预先计算所有可能候选句子的嵌入表示。只要计算出了上下文嵌入 y c t x t y_{ctxt} yctxt?,就可以利用GPU进行加速计算,同时可以使用FAISS快速找到最相近的句子。

Cross-encoder

image-20211025213948948

Cross-encoder同时在一个Transformer中编码上下文和候选句,产生它们之间更丰富的表示信息但增加了计算量

Cross-encoder允许同时编码输入上下文和候选标签语句,得到一个最终的表示。只需要一个Transformers。我们使用输出的第一个向量作为上下文-候选嵌入:
y c t x t , c a n d = h 1 = f i r s t ( c t x t , c a n d ) y_{ctxt,cand} = h_1 = first(ctxt,cand) yctxt,cand?=h1?=first(ctxt,cand)
f i r s t first first是从输出的向量序列中抽取第一个向量的函数。基于这种设定,Transformer可以在上下文和候选句之间进行交叉的自注意,从而相比Bi-encoder可以得到更丰富的表示。因为候选句子可以和上下文句子在所有编码器层中进行自注意,从而产生一个候选句相关的输入表示。

打分 为了对候选句打分,一个线性层 W W W应用到 y c t x t , c a n d y_{ctxt,cand} yctxt,cand?从而得到一个标量:
s ( c t x t , c a n d i ) = y c t x t , c a n d i W s(ctxt, cand_i) = y_{ctxt, cand_i}W s(ctxt,candi?)=yctxt,candi??W
该网络也是基于最小化一个交叉熵损失来进行训练,其中logits为 s ( c t x t , c a n d 1 ) , ? ? , s ( c t x t , c a n d n ) s(ctxt,cand_1),\cdots,s(ctxt,cand_n) s(ctxt,cand1?),?,s(ctxt,candn?) c a n d 1 cand_1 cand1?是正确标签,剩下的是从训练集中随机选取的负样本。

推理速度 在推理时,每个候选句必须与输入上下文进行拼接,然后经过整个模型。这样导致计算速度较慢。

Poly-encoder

image-20211025214135987

Poly-encoder综合了Bi-encoder和Cross-encoder,可以缓存候选句子的表示,同时增加了一个额外的注意力机制从候选句中抽取更多信息

Poly-encoder旨在充分利用Bi-encoder和Cross-encoder两者的优点:

  • 给定的候选标签由Bi-encoder中的一个向量表示,允许预先计算缓存计算结果。
  • 输入上下文与候选语句在Cross-encoder中同时编码,可以抽取更多信息。

Poly-encoder和Bi-encoder一样,使用两个独立的Transformer来计算上下文和候选标签的编码,候选标签可以提前被编码到向量 y c a n d i y_{cand_i} ycandi??。这样,Poly-encoder可以利用缓存进行加速。

然而,输入上下文通常比候选句子长的多,由多个向量 ( y c t x t 1 , ? ? , y c t x t m ) (y_{ctxt}^1,\cdots,y_{ctxt}^m) (yctxt1?,?,yctxtm?)表示,而不是Bi-encoder中的一个向量。为了提取每个候选句输入上下文的相关部分,作者使用一个以 y c a n d i y_{cand_i} ycandi??作为query的注意力层:
y c t x t = ∑ i w i y c t x t i y_{ctxt} = \sum_i w_i y^i_{ctxt} yctxt?=i?wi?yctxti?
其中
( w 1 , ? ? , w m ) = softmax ( y c a n d ? y c t x t 1 , ? ? , y c a n d ? y c t x t m ) . (w_1,\cdots,w_m) = \text{softmax}(y_{cand}\cdot y_{ctxt}^1, \cdots, y_{cand} \cdot y_{ctxt}^m). (w1?,?,wm?)=softmax(ycand??yctxt1?,?,ycand??yctxtm?).
由于 m < N m \lt N m<N,其中 N N N是单词的总数,而这里的上下文-候选注意里只在最顶层计算,远快于Cross-encoder所有编码器层的交叉注意力。

问题是如何得到这 m m m个上下文向量 ( y c t x t 1 , ? ? , y c t x t m ) (y_{ctxt}^1,\cdots,y_{ctxt}^m) (yctxt1?,?,yctxtm?);作者最终简单地选择输出向量序列中的前 m m m个。

Reference


  1. Poly-encoders: architectures and pre-training strategies for fast and accurate multi-sentence scoring ??

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-26 12:13:20  更:2021-10-26 12:13:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 8:47:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码