| |
|
开发:
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 )的拼接,它们都以特殊字符 在Reddit数据集上训练时,输入句子是历史对话语句的拼接,对话语句之间以 核心思想对于句子对比较任务来说,有两种常用的途径:Cross-encoder和Bi-encoder。 Cross-encoder基于给定的输入句子和标签句子(组成一个句子对,将它们拼接在一起作为输入)进行交叉自注意,通常能获得较高的准确率,但速度较慢。 而Bi-encoder单独地对句子对中的句子进行自注意,分别得到句子编码。由于这种独立性,Bi-encoder可以对候选句子进行缓存,从而在推理时只需要计算输入句子的编码表示即可,大大加快推理速度。但是表现没有Cross-encoder好。 本文作者提出了一种新的Transformer结构,Poly-encoder,学习全局级而不是单词级的自注意特征。 Poly-encoder比Cross-encoder快,同时比Bi-encoder更准确。 同时作者证明选择与下游任务更相关的数据集进行预训练能获得较大的效果提升。 Bi-encoderBi-encoder允许快速、实时地推理。此时,输入上下文(输入句子)和候选标签句子都被编码成向量:
其中 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 ( 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-encoderCross-encoder允许同时编码输入上下文和候选标签语句,得到一个最终的表示。只需要一个Transformers。我们使用输出的第一个向量作为上下文-候选嵌入: 打分 为了对候选句打分,一个线性层
W
W
W应用到
y
c
t
x
t
,
c
a
n
d
y_{ctxt,cand}
yctxt,cand?从而得到一个标量: 推理速度 在推理时,每个候选句必须与输入上下文进行拼接,然后经过整个模型。这样导致计算速度较慢。 Poly-encoderPoly-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的注意力层: 问题是如何得到这 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 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |