编辑 | NewBeeNLP
2018 年对 NLP 领域来说是个不折不扣的转折年。像 OpenAI GPT 和 BERT 这样的大规模预训练语言模型,用通用模型架构在各种语言任务上都取得了亮眼表现,这和 ImageNet 分类预训练对视觉任务的影响可以等量齐观。前者甚至更胜一筹,NLP 采用的方法简单而强大,预训练时不需要有标签数据,可以随着我们的性子增大训练规模直到极限。
此外,早期解决问题的时候,词嵌入都被用作既有任务模型的附加特征,某种程度上所带来的改进有限。
本文中我们会介绍许多基于情境做 embedding 的方法,以通用格式更简单、经济地将词向量应用到下游任务上。
「语境词向量(Contextual Word Vectors,Cove[1])」 是一类用编码器做词嵌入的方法,编码器就是基于注意力的 seq-to-seq 机器翻译模型里用的那种。不同于传统的词嵌入方法,CoVe 的词表示是关于整个输入序列的函数。
这里的神经机翻译(NMT[2])模型由一个标准的双层双向 LSTM 编码器,和一个额外的基于注意力的双层单向 LSTM 解码器构成。模型预先在英语-德语翻译任务上进行训练。编码器学习并优化英文单词的 embedding 向量,好将其译为德文。直觉上编码器能在将词转为其他语言形式学到高维语义和句法特征,编码器输出的情景化词嵌入可供各种下游语言任务使用。
CoVe 中的 NMT 基础模型
NMT 编码器的隐态在其他语言任务中称为「环境向量(context vector)」:
论文将 GloVe 和 CoVe 串联用于问答和分类任务。GloVe 从全局字词共现比率中学习,所以没有句子语境,而 CoVe 是通过处理文本序列得到的,能够捕捉情境信息。
对特定下游任务,我们先生成输入字词的 GloVe+CoVe 的串联向量,然后将其作为附加特征喂给特定任务模型。
CoVe embedding 是由编码器生成的,旨在解决机器翻译任务。编码器可以插入任意下游任务模型中
CoVe 的局限性很明显:
下面我们会看到 ELMo 通过无监督预训练克服了问题(1),OpenAI GPT 和 BERT 进一步通过预训练 + 对不同下游任务采用生成模型架构将两个问题都解决了。
「语言模型嵌入(Embeddings from Language Model,ELMo[3])」 通过 无监督 的方式预训练一个语言模型来获取情境化字词表示。
「双向语言模型(bidirectional Language Model,biLM)」 是 ELMo 的基础,当输入为个标识组成的序列时,,语言模型会学着根据历史预测下个标识的概率。
前向传递期间,历史由目标标识之前的字词构成,
反向传递时,历史则由目标标识之后的字词构成
两个方向的预测由多层 LSTM 负责建模,输入标识在层的隐态为和。经 softmax 归一化,用最后一层的隐态获取标识概率。嵌入层和 softmax 层共享,参数分别为,。
ELMo 的 biLSTM 基础模型
模型要使两个方向的负对数似然概率最小化(= 正确词的对数似然概率最大化):
在层 biLM 基础上,ELMo 针对任务学习了一种线性组合方式,跨层将所有隐态堆叠起来。标识的隐态表示有
其中是嵌入层输出,。每个终端任务都要学习一组线性组合权重,并用 softmax 做归一化。比例因子
为了评估从跨层隐态上得到了哪类信息,分别用不同 biLM 层的表示在语义和语法任务上对 ELMo 进行测试:
对比研究表明语法信息较低的层表示更好,而语义信息更高处的层领悟更深。因为不同层携带着不同类型的信息,将其堆叠起来会有所帮助。
和 CoVe 助力不同下游任务的方式类似,ELMo 嵌入向量常见于输入或任务模型的底层。此外,对某些 任务(即 SNLI,SQuAD,不包括 SRL)在输出层加上他们同样有所助益。
对那些只有少量有监督数据的任务来说,ELMo 带来的提升是最大的。有了 ELMo,即使标签数据再少我们也能取得类似的效果。
语言模型的预训练是无监督式的,而且鉴于无标注文本语料之丰富,理论上预训练规模可以尽可能的大些。但它还是得依赖特定任务模型,所以改善只是渐进式的,给每个任务找个好模型架构仍然很重要。
ELMo 中无监督的预训练和指定任务的学习,是在两个独立训练阶段由两个独立模型完成的。「跨视角训练(Cross-View Training,CVT[4])」 将二者结合,组成了一个统一的半监督学习过程,辅助任务中有标注数据的监督学习和无标注数据的无监督学习都能改善 biLSTM 编码器的表示。
模型由一个双层双向的 LSTM 编码器和一个主预测模块构成。训练时交替将标注数据和无标注数据分批喂给模型。
这样,编码器被强制将完整的上下文知识提炼为不完整的表示。在这一阶段,biLSTM 编码器处于反向传播状态,但主预测模块是 固定 的。辅助预测和主预测间的差距就是我们要最小化的损失。
半监督语言模型的跨视角训练
在同步训练多个任务的时候,CVT 给附加的任务加了几个主预测模型,它们共享同样的句子表示编码器。监督训练时,随机选择一个任务后,相应预测器参数和表示编码器得到更新。如果是无标注数据样本,联结所有任务优化编码器,力求每个任务上辅助输出和主预测间的差异最小。
多任务学习有利于增强表示的泛化能力,与此同时还收获一个很好的副产物:从无标注数据得到的全任务标注样本,他们是十分宝贵的数据标签,考虑到跨任务标签有用太稀少。
理论上讲主预测模块可以采用任意形式,通用的或者视任务而定的都行。CVT 论文里的例子两种情况都有。
在像 NER 或 POS tagging 这样的序列标注任务(给每个标识分类)中,预测器模块包括两个完整的全连接层,和给输出加上的 softmax 层,以此生成类别标签的概率分布。对每个标识,两层对应的隐态为和:
第一层里只给辅助任务喂前向或后向 LSTM 状态,因为它们只看到了部分上下文,要么左边要么右边,它们必须学着像语言模型那样,预测给定情境中的下一个标识。fwd 和 bwd 辅助任务只取一个方向。future 和 past 任务则分别在前向和后向上多走一步。
序列标注任务依赖于四个辅助预测模型,它们的输入只有单方向的隐态信息:前,后,将来以及过去
注意,如果主预测模块有 dropout,那处理有标注数据的时候 dropout 层照常工作,但用无标注数据训练,为辅助任务生成“柔性”目标时不参与计算。
机器翻译任务中,主预测模块换成了标准的带 attention 的标准单向 LSTM 解码器。涉及两个辅助任务:
受 ImageNet 预训练在计算机视觉任务上攻城略地的启发,生成式预训练 LM + 任务微调的思路最先在 ULMFiT[6])中进行了尝试。基准模型是 AWD-LSTM[7]。
ULMFiT 通过下面三步在下游语言分类任务上取得了良好的迁移学习效果:
1)「通用 LM 预训练」:Wikipedia 语料
2)「目标任务 LM 微调」:ULMFiT 提出了两个训练技术来稳定微调过程。
3)「目标任务分类器微调」:用两个标准前馈层强化预训练 LM,并在末端加上 softmax 归一化来预测目标标签分布。
ULMFiT 的三个训练阶段
和 ELMo 想法类似,OpenAI 的「生成式预训练 Transformer(Generative Pre-training Transformer,GPT[8])」 通过在巨量文本语料上训练,极大的增加了无监督语言模型的规模。抛开相似之处,GPT 和 ELMo 主要有两点不同。
相较于原始 Transformer[9] 架构,Transformer 解码器[10]模型丢掉了编码器部分,所以只有一个输入序列,而非两个单独的源序列和目标序列。
模型在输入序列的 embedding 上加了多层 transformer 块进行处理。每一块内都有一个遮罩多头自注意力(multi-headed self-attention)层和一个元素级前馈(pointwise feed-forward)层。经 softmax 归一化后最终可以得到一个目标标识的分布。
OpenAI GPT 的 transformer 解码器模型架构
损失为负对数似然概率,和 ELMo 一样,但没了反向计算。选定目标词前大小为
「字节对编码(Byte Pair Encoding,BPE[11])」 用于给输入序列编码。BPE 原是 20 世纪 90 年代提出的一种数据压缩算法,随后被拿去解决机器翻译里的开放词汇表问题,因为在译为某种新语言的时候很容易遇到少见或未知的词。直觉上稀有或未知词经常可以拆成多个子词,BPE 就不断迭代,贪婪地合并常见字符对以寻找最佳分词方式。
OpenAI GPT 所做的最大改进是与任务模型解耦,直接用预训练语言模型!
以分类任务为例。标注数据集中每个输入有个标识,,和一个标签。GPT 先用预训练过的 transformer 解码器处理输入序列,最后一个标识在最后一层的输出为。靠着仅有的训练得到的权重矩阵,模型可以预测类别标签的分布。
损失是求实际标签的负对数似然概率的最小化,此外作者发现加上 LM 损失作为辅助损失会有好处,因为:
有了类似设计后,就没必要给其他终端任务定制模型架构了(见下图)。如果输入是多个序列,每对序列间会加上一个特殊的定界标识 $,定界标识的 embedding 是我们要学习的一个新参数,不过会很简短就是了。
对序列相似度任务来讲,因为排序没必要,先后序都有。多选任务里,情境会和每个候选项进行匹配结对。
微调过的 GPT transformer 模型对各下游任务的训练目标
当时(2018.6)看到这样一个通用框架在大多数语言任务上取得 SOTA,让人感觉很巧妙且倍受鼓舞。一阶段,语言模型的生成式预训练过程可以从尽可能多的免费文本语料中进行学习。二阶段,用一个较小的标注数据集针对特定任务对模型进行微调,并学习一小批新参数。
GPT 的一个局限之处在于单向性——模型只会自左向右的预测上下文。
「Transformer 双向编码器表示(Bidirectional Encoder Representations from Transformers,BERT[12])」 算是 GPT 的直系后代:在免费语料上训练一个大规模语言模型,然后针对特定任务微调而不需要单独定制网络架构。
相较于 GPT,BERT 最大的区别和改善之处在于双向训练,模型会学着预测左右两边的上下文,按论文中消融研究结果所述:
“模型双向性是最重要的新贡献没有之一”
BERT 的模型架构为多层双向 Transformer 编码器。
Transformer 编码器架构
为了促进双向预测和句子级理解,相较于在基础语言任务上训练(给定场景下预测下一个标识),BERT 要同时完成两项任务。
「任务 1:遮罩语言模型(Mask language model,MLM)」
维基百科:“完形填空(填充缺失测验)是一项练习,测试或评估,由一部分语句构成,其中特定项、字词或符号会被删除(填空文本),与试者的任务是替换缺失语言项……该练习首先由 W.L. Taylor 在 1953 年提出”
毫无疑问,从前后语境中而不单只是从后文中学到的表示能更好的领会个中深意,无论是在语义还是语法上。BERT 通过「遮罩语言模型」任务来实现这一点:
输入嵌入是三部分的和:
注意第一个标识必须是 [CLS]——之后下游任务预测中会用到的占位符。
BERT 的微调只需要添加很少的参数,就像 OpenAI GPT。
对于分类任务,取首个标识 [CLS] 的最终隐态,将它和一个小权重矩阵相乘,
对像 SQuAD 这样的 QA 任务,我们要针对问题预测给定段落的文本跨度。BERT 对每个标识要预测两个概率分布,分别对应描述作为文本范围的开端和末尾的几率。微调时新训练的只有两个小矩阵和,而和
总体来讲微调下游任务时加上的内容很少——一两个权重矩阵,负责将 Transform 隐态转换成可解释形式。其他情况的实施细节可以看论文了解。
可以列张表比较下 OpenAI GPT 和 BERT 间的差别。
「OpenAI GPT」
「BERT」
特殊字符
只在微调时引入[SEP] 和 [CLS]
预训练阶段就学习 [SEP] 、 [CLS] 和句子 A/B 的 embedding
训练过程
1M 步, batch size 32k 个词
1M 步, batch size 128k 个词
微调
所有任务 lr = 5e-5
看任务定 lr
「精简 BERT(A Lite BERT,ALBERT[15])」 是 BERT 的简化版,相似的配置下参数减少 18 倍,训练速度提升 1.7 倍。ALBERT 所作的改进有三点:排前两位的当然是减少了参数,降低了内存开销从而提升了训练速度,而第三点则是用一个更有挑战性的训练任务替换掉了下一句预测(NSP)任务。
BERT 中,字段标识 embedding 的大小被设置成与隐态尺寸相同,即是说如果想增加模型尺寸(更大的),也就得学习更大的标识 embedding,而这又依赖于词表大小
理论上,标识嵌入应当学习的是情境独立的表示,而隐态是依赖环境的,所以将隐层大小和词表嵌入的大小分开考虑比较合理。通过分解式嵌入参数化,的大词表嵌入矩阵就被分成和的两个小矩阵。一般或,因子分解可以显著降低参数数量。
参数跨层共享有多种方式:(a)只共享前馈部分(b)只共享注意力参数(c)共享所有参数。该方法可以大量削减参数,同时又不会太伤害性能。
有趣的是,BERT 的下一句预测(NSP)任务被证明太简单了。ALBERT 换成了句子顺序预测(sentence-order prediction,SOP)的自监督损失,
对于 NSP 任务,当 A 和 B 的情境不同时,如果模型能检测到所谈话题它就能做出合理预测。相较而言,SOP 更难一些,因为这要求模型充分理解片段间的一致性和顺序关系。
OpenAI[16] GPT-2[17] 直接继承自 GPT。GPT-2 有 15 亿参数,比原 GPT 大了 10 多倍,在受测的 8 个语言模型数据集上拿了 7 个 SOTA,采用 零尝试迁移配置(zero-shot transfer setting) 不需要任何任务微调。
预训练数据集包括 80 亿 Web 页面,页面是从 Reddit[18] 上爬下来的合格外链。在小数据集和评估长程依赖(long-term dependency)的数据集上 GPT-2 进步明显。
GPT-2 的预训练就纯是语言建模。所有下游语言任务都被规制成对条件概率的预测,不存在对任务的微调。
和原 GPT 一样,GPT-2 也对 UTF-8 字节序列采用了 BPE。每个字节可以用 8 比特表示 256 种不同的含义,UTF-8 最多可以使用 4 字节来表示一个字符,最高支持
BPE 不断贪婪地合并共现字节对,为防止常用词出现多个版本表示(由 dog 到dog.,dog!,dog?)GPT-2 不许 BPE 跨类别合并字符(dog 不会与 .,!,?这些标点合并)。这一技巧有效增加了最终字节段的质量。
通过字节序列表示,GPT-2 可以对任意 Unicode 字符串给出一个概率,而不需要任何预训练步骤。
相较于 GPT,除了更多的 transformer 层和参数,GPT-2 只做了很少的架构调整:
「稳健优化版 BERT」( Robustly optimized BERT approach[22])算是训练 BERT 实现更好效果的新凭据,因为作者发现原 BERT 模型明显训练不足。台面上摆的是:
RoBERTa 还加了新数据集 CommonCrawl News[23] 并进一步证明用更多的数据进行预训练有助于改善下游任务性能。训练方式和 GPT-2 一样,都是在字节序列上做 BPE。研究者还发现超参数的选择对模型性能有重大影响。
「文本到文本迁移 Transformer(Text-to-Text Transfer Transformer,T5[24])」 是按原 Transformer[25] 架构实现的编码器-解码器语言模型:标识→ embedding →编码器 →解码器 →输出。
T5 采用“全能自然语言”框架[26],许多常见 NLP 任务被转换成针对上下文的问答形式。相较于显式的 QA 格式,T5 用较短的任务前缀区分任务意图,并分别对每个任务做了模型微调。文本到文本架构用同样的模型解决不同的任务,极大简化了迁移学习的评估过程。
模型在 2019 年 4 月搜集的网络语料上做训练,用上了各种过滤器。模型借助“适配器层”(多加一层做训练)或“逐步解封”(见 [ULMFiT])分别对各下游任务做微调。两个微调方法都是只更新部分参数,同时大部分模型参数不变。T5-11B 在许多 NLP 任务上取得了 SOTA 结果。
正如作者在文中所讲“......我们的目标不是提出新方法,而是提供一个全面的视角看看这个领域发展到了哪一步”,T5 的长论文详细介绍了许多训练设置和评估过程的细节,对有兴趣从头训练 LM 的读者来说是很好的阅读材料。
GPT-3[27]和 GPT-2 架构相同但有 175B 个参数,比 GPT-2(1.5B) 大 10 多倍。此外,GPT-3 使用了稠密模式和局部带状模式交替的稀疏注意力,和稀疏 transformer 里的一样。
为了把这么大的模型塞到 GPU 集群里,GPT-3 采用了沿深度和宽度方向的分区训练方式。训练数据是 Common Crawl 的过滤板,还额外混合了少数高品质数据集。为了防止下游任务出现在训练数据里造成污染,作者试着从训练集里删掉了所有基准数据集间的重叠部分。不幸的是因为有 bug 过滤过程并不完美。
对于所有下游任务的评估,GPT-3 只是在少样本环境下做了测试,没用任何基于梯度的微调,这里的少数样本算是给了部分提示。相比于微调过的 BERT 模型,GPT-3 在很多 NLP 数据集上取得了亮眼表现。
基础模型
预训练
下游任务
下游模型
微调
CoVe
seq2seq NMT 模型
有监督
基于特征
看任务定
ELMo
双层 biLSTM
无监督
基于特征
看任务定
CVT
双层 biLSTM
半监督
基于模型
看任务定 / 与任务无关
ULMFiT
AWD-LSTM
无监督
基于模型
与任务无关
所有层;各种训练技巧
GPT
Transformer 解码器
无监督
基于模型
与任务无关
预训练层+顶部任务层
BERT
Transformer 编码器
无监督
基于模型
与任务无关
预训练层+顶部任务层
GPT-2
Transformer 解码器
无监督
基于模型
与任务无关
预训练层+顶部任务层
RoBERTa
Transformer 编码器
无监督
基于模型
与任务无关
预训练层+顶部任务层
T5
Transformer
无监督
基于模型
与任务无关
分别对每个下游任务微调
GPT-3
Transformer 解码器
无监督
基于模型
与任务无关
没有微调
复杂度通常作为一个固有评估指标,衡量给定情境下语言模型对实际分布的学习效果。
离散概率分布
给定个词构成的序列,,简单假设每个词的频率相同,都是,则熵形式如下:
于是句子复杂度就变为:
语言模型够好,做预测给的概率就高,因此复杂度越低越好。
也叫「文本推演(Text Entailment)」,辨析一个句子可否由另一个句子推理出来
给文本中字词序列打标,标签是事物名,比如人名,公司名,基因或蛋白质名等等
对句子的谓词参数结构建模,通常是回答“谁对谁做了什么”
也叫复述测验
一项指明句子语法合格率的任务
给每个标识打上词性成分,比如名词,动词,形容词等。
见斯坦福 NLP[47] 页面
对指代相同潜在实体的部分聚类
[1]
- END -
一、Hdoop概述Hadoop是由Apache基金会所开发的分布式系统基础架构, 旨在解决海量数据存储和计算分析问题。狭义上来说,Hadoop是指Apache Hadoop开源框架,包含以下三种核心组件:Hadoop HDFS(Hadoop Distributed File System):分布式文件存储系统,解决海量数据存储问题。Hadoop Yarn:集群资源管理和任务调度框架,解决资源任务调
下面通过一个案例,用通俗易懂的方式来解释这两种复制模式。COMMIT_ORDER(时间戳顺序模式):想象你在一家餐厅排队点餐:不管你点什么菜,都必须按照取号的顺序来处理比如:张三8点取号、李四8:05取号、王五8:10取号即使张三点了牛肉面、李四点了炒青菜、王五点了饺子(完全不冲突的菜品)厨房也必须按照8点、8:05、8:10的顺序来严格处理这就像一个严格的队列,先来先服务,不管具体点的是什么W
作者| 周俊贤整理|NewBeeNLP本文讲解下BERT推出后,预训练模型的演变,包括BERT、RoBERTa、ALBERT、ERNIE系列、EL
2023年可谓是生成式AI元年,大语言模型从崭露头角到锋芒毕露,已然成为人工智能领域的关键推动力。这一创新性的技术不仅在自然语言处理领域崭露头角,更深刻地改变了我们对人机交互、智能助手和信息处理的认知。那么大语言模型的发展历程如何呢?
1.前提理论 这里研究的io模型都是针对网络io的 , 因为现在开发的应用程序基本上都是基于网络的 """ Stevens在文章中一共比较了五种IO Model: * blocking IO 阻塞IO * nonblocking IO 非阻塞IO * IO multiplexing IO多路复用 *
1990年 sun公司预料嵌入式系统将在未来家电领域中大显身手,于是sun成立了由James Golising 领导的“Green”计划,准备为下一代的家电系统编写一个通用的控制系统。最初考虑使用C++语言,但是发现这个语言在这个开发环境下存在很多问题,于是Golising 创造了一种新的语言--OAK。1994年的夏天互联网和浏览器的出现不仅给广大互联网用户带来了福音,也给Oak语言带来了新的生
如何在有限数据下训练出高效的深度学习模型?90分钟解读视频!
程序语言发展史程序语言发展大致经历三个阶段:1.机器语言机器语言是低级语言,称为二进制代码语言。计算机使用的是由0和1组成的二进制数,组成的一串指令来表达计算机的语言。机器语言的特点是计算机可以直接识别,不需要任何翻译。2.汇编语言汇编语言是面向机器的程序设计语言。用英文宇母或者符号串来代替机器语言的二进制代码,把不易理解的机器语言编程汇编语言。使用汇编语言比机器语言容易理解程序,并且更容易阅读。
Linux是一套免费试用和自由传播的类Unix操作系统,是一个基于POSIX(可移植操作系统接口)和UNIX的多用户、多任务、支持多线程和多CPU的操作系统,它能运行制药的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。 Linux的稳定来源于它
图解NLP模型发展:从RNN到Transformer 自然语言处理 (NLP) 是深度学习中一个颇具挑战的问题,与图像识别和计算机视觉问题不同,自然语言本身没有良好的向量或矩阵结构,且原始单词的含义也不像像素值那么确定和容易表示。一般我们需要用词嵌入技术将单词转换为向量,然后再输入计算机进行计算。词嵌入可用于多种任务,例如情感分类、文本生成、名称实体识别或机器翻译等。它以一种巧妙的处理方式,让模
前言:从20世纪70年代的统计语言模型,到2003年的神经网络语言模型,再到2018年刷新各种NLP任务记录的BERT,再到今年6月份的XLNet再次刷新各种记录,带你一起领略其中奥妙。目录1、N-gram语言模型2、神经网络语言模型(NNLM)3、One-hot4、Word2vec5、ELMo6、Open AI GPT7、BERT8、XLNet9、Attention机制10、transferme
NLP发展历史 20 世纪五十年代开始,与计算机的诞生几乎同时 始于机器翻译任务 两种路线: 1.基于规则的理性主义 主张建立符号处理系统,由人工整理和编写初始的 语言知识表示体系,构造相应的推理程序 2.基于统计的经验主义主张通过建立特定的数学模型来学习复杂的、广泛的语言结构,利用统计、模式识别、机器学习等方法来训练模
文章目录1 Attention的发展历史2015-2017年2 Attention的原理3 Multi-Head Attention4 Self-Attention为什么需要self-attention什么是self-attention5 Position Embedding 最早,attention诞生于CV领域,真正将其发杨光大的还是在NLP领域,自2018年Google的bert和OPEN
【NLP相关】ChatGPT的前世今生:GPT模型的原理、研究进展和案例自然语言处理(NLP)是人工智能领域中最为热门的研究方向之一,近年来在自然语言生成、文本分类、机器翻译等任务上取得了许多重要进展。而GPT模型(Generative Pre-trained Transformer)作为NLP领域中的新宠,具有许多优势,已经被广泛应用于各种任务中。本文将会介绍GPT模型的原理、优劣势以及其在实
统计语言模型语言模型(Language Model),是当前非规则自然语言处理的根基,也是自然语言处理学科的精髓所在简单来说,语言模型简就是一串词序列的概率分布,语言模型的作用是为一个长度为m的文本确定一个概率分布P,表示这段文本存在的可能性。即,P(wi|w1,w2,...,wi−1)。不过,显而易见的是,我们在实际工作中会经常碰到文本长度较长情况,P(wi|w1,w2,...,wi−1)的估算
本次搬运Sebastian Ruder的博客A Review of the Neural History of Natural Language Processing,可以快速了解深度学习时代NLP的发展历史及其中的里程碑式工作。2001 Neural language models语言建模是指在给定前面若干个单词的情况下,预测文本下一个出现的单词。这是一个最简单的自然语言处理任务,但同时有着最具
摘要我们提供视频识别的SlowFast。我们的模型包括以低帧速率运行的慢速路径以捕获空间语义信息,以及以高帧速率运行的快速路径以精细的时间分辨率捕获运动信息。通过降低其channel容量可以使快速路径变得非常轻,但是可以学习用于视频识别的有用时间信息。我们的模型在视频中的动作分类和检测方面都取得了很强的性能,我们的慢速快速概念指出了很大的改进。一.IntroductionSlowFast作者在引言
基于FM3318智能电表MCU的程序框架及核心代码 一、系统架构设计 + + + + | 电源管理模块 |< >| FM3318主控单元 | | (LDO+RTC) | | (16位增强型80251核)| + + + + + + | | v v + + + + + | 电能计量电路 | | 外设接口 ...
森林火灾突发性强、破坏性大,传统人工巡检方式效率低、风险高。随着“智慧林业”建设的推进,技术防控成为关键。本文将深入解析EasyCVR视频融合平台如何通过强大的设备接入、视频整合与AI智能分析能力,构建全天候、立体化的森林防火智能监控预警体系,为守护森林资源提供坚实的技术盾牌。 一、森林防火的传统困 ...
本文介绍了使用VSCode进行SSH远程开发的配置方法。首先确保SSH服务已安装且本地与远程主机在局域网内,然后在VSCode中安装Remote-SSH扩展并通过命令连接远程主机。对于无法联网的远程主机,提供了两种离线安装vscode-server的方案(新旧版本),详细说明了下载地址、文件解压路径和重命名规则。最后列举了连接失败的常见问题及解决方法,包括权限设置、SSH配置修改和known_hosts文件处理。文章还提供了免登录连接的参考链接。
目录一:本节目标二: 简介2.1 为什么要使⽤联合查询2.2 多表联合查询时MYSQL内部是如何进⾏计算的2.3 构造练习案例数据2.4 案例:⼀个完整的联合查询的过程三:内连接3.1 语法3.2实例四: 外连接4.1 语法4.2 ⽰例五:⾃连接5.1 应⽤场景5.2 ⽰例5.3 表连接联系六:⼦查 ...
在现代Web应用架构中,用户常常需要在多个关联应用间无缝切换,同时保持登录状态。这不仅提升用户体验,也是企业级应用的基础需求。然而,浏览器的同源策略(Same-Origin Policy)为跨域认证带来了挑战。本文将深入解析Logto如何通过多租户架构和分布式缓存技术,实现跨域与跨应用的身份验证状态共享。## 多租户架构:认证状态共享的基础Logto采用多租户(Multi-Tenancy)...