🐱 基于BERT的文本标题生成

一个好标题则是基于文章内容的巧妙提炼,能迅速引起读者的兴趣。

为了快速精准的生成新闻标题,本项目使用经典的BERT模型自动完成新闻标题的生成。

  • 本项目参考了飞桨2.0应用案例教程 — 用BERT实现自动写诗

📖 0 项目背景

新闻头条新闻的目的是制作一个简短的句子,以吸引读者阅读新闻。一篇新闻文章通常包含多个不同用户感兴趣的关键词,这些关键词自然可以有多个合理的头条新闻。快速的生成合适的新闻标题能帮助自媒体从业者从热点信息中迅速获得大量流量。此外,该任务也可以应用于公务员考试中的关键信息总结题。因此,将该过程自动化具有广泛的应用前景。

🍌 1 数据集

lcsts摘要数据是哈尔滨工业大学整理,基于新闻媒体在微博上发布的新闻摘要创建了该数据集,每篇短文约100个字符,每篇摘要约20个字符。共计2108915条数据

由于数据量较大,本项目仅使用部分数据训练

🍉 2 论文解读


摘要

BERT(Bidirectional Encoder Representations from Transformers)意为来自Transformer的双向编码器表征。不同于最近的语言表征模型,BERT旨在基于所有层的左、右语境来预训练深度双向表征。因此,预训练的BERT表征可以仅用一个额外的输出层进行微调,进而为很多任务(如问答和语言推理)创建当前最优模型,无需对任务特定架构做出大量修改。

  • Bert提出了一种新的预训练方法,能有效提高预训练模型在下游任务中的表现。

介绍

语言模型预训练已被证明可有效改进许多自然语言处理任务。

将预训练语言表征应用于下游任务有两种现有策略:基于特征feature-based和微调fine-tuning。

基于fine-tuning的方法主要局限是标准语言模型是单向的,极大限制了可以在预训练期间使用的架构类型。

BERT通过提出一个新的预训练目标:遮蔽语言模型”(maskedlanguage model,MLM),来解决目前的单向限制。

该MLM目标允许表征融合左右两侧语境语境。除了该遮蔽语言模型,BERT还引入了一个“下一句预测”(nextsentence prediction)任务用于联合预训练文本对表征。


论文贡献如下:

    1. 证明了双向预训练对语言表征量的重要性。
    1. 展示了预训练表征量能消除许多重型工程任务特定架构的需求。

(BERT是第一个基于微调的表征模型,它在大量的句子级和词块级任务上实现了最先进的性能)

    1. BERT推进了11项NLP任务的最高水平。

模型框架

BERT模型架构是一种多层双向Transformer编码器。

本文设置前馈/过滤器的尺寸为4H,如H=768时为3072,H=1024时为4096。

主要展示在两种模型尺寸上的结果:

  • BERTBASE:L=12,H=768,A=12,总参数=110M

  • BERTLARGE:L=24,H=1024,A=16,总参数=340M


  • 注意:BERT变换器使用双向自注意力机制

输入表征

对于每一个token, 它的表征由对应的token embedding, 段表征(segment embedding)和位置表征(position embedding),其中位置表征支持的序列长度最多为512个词块。
(如果使用bert预训练模型的话不能改,要是自己训练的话可以自己定义,不一定要按照512,这里原文是为了平衡效率和性能)

其中,位置表征(position embedding)是由Transformer提出,目的是为了对不同位置的信息进行编码。

这里有两种实现方法:拼接和求和,详情见Transformer 中的 positional embedding

预训练任务

作者使用两个新型无监督预测任务对BERT进行预训练

  • 遮蔽语言模型

随机遮蔽输入词块的某些部分,然后仅预测那些被遮蔽词块。Bert将这个过程称为“遮蔽LM”(MLM)。

具体实现方式为:
训练数据生成器随机选择15%的词块。然后完成以下过程:

并非始终用[MASK]替换所选单词,数据生成器将执行以下操作:

  1. 80%的训练数据:用[MASK]词块替换单词,例如,【我的狗是毛茸茸的!】【我的狗是[MASK]】
  2. 10%的训练数据:用随机词替换遮蔽词,例如,【我的狗是毛茸茸的!】【我的狗是苹果】
  3. 10%的训练数据:保持单词不变,例如,【我的狗毛茸茸的!】【我的狗毛茸茸的!】这样做的目的是将该表征偏向于实际观察到的单词。

  • 下一句预测模型

为了训练一个理解句子关系的模型,我们预训练了一个二值化下一句预测任务,该任务可以从任何单语语料库中轻松生成。

具体实现方式为:选择句子A和B作为预训练样本:B有50%的可能是A的下一句,也有50%的可能是来自语料库的随机句子

输入=[CLS]男子去[MASK]商店[SEP]他买了一加仑[MASK]牛奶[SEP]Label= IsNext输入=[CLS]男人[面具]到商店[SEP]企鹅[面具]是飞行##少鸟[SEP]Label= NotNext

总结

BERT使用了更加高效的Transformer结构,高效获取了训练数据的双向表征信息。

文章做了非常详细的消融实验,建议感兴趣的同学可以详细的品读一下原文。


参考资料

[1] https://www.cnblogs.com/guoyaohua/p/bert.html

[2] https://zhuanlan.zhihu.com/p/171363363

[3] https://zhuanlan.zhihu.com/p/360539748

[4] https://arxiv.org/pdf/1810.04805.pdf

🥝 3 模型训练

# 安装需要的库函数
!pip install sumeval
# 解压数据集
!unzip  -o  data/data127041/lcsts_data.zip -d /home/aistudio/work/
Archive:  data/data127041/lcsts_data.zipinflating: /home/aistudio/work/lcsts_data.json  
import json
f = open('work/lcsts_data.json')
data = json.load(f)
f.close()
# 查看数据
item = data[520]
print('标题:',item['title'],'\n内容:',item['content'])
标题: 海口市民可凭银行卡刷卡坐公交 
内容: 海南宝岛通公司推出“工银宝岛通联名,市民可凭银行卡刷卡坐车。该卡不仅具有工行借记卡全方位的金融服务功能,同时还具有宝岛通卡的电子付费等功能。持卡人凭此联名卡既可刷卡乘坐海口市公交车,又能进行刷卡消费及存取款等业务操作
from paddlenlp.transformers import BertModel, BertForTokenClassification
import paddle.nn as nn
from paddle.nn import Layer, Linear, Softmax
import paddleclass TitleBertModel(paddle.nn.Layer):"""基于BERT预训练模型的生成模型"""def __init__(self, pretrained_bert_model: str, input_length: int):super(TitleBertModel, self).__init__()bert_model = BertModel.from_pretrained(pretrained_bert_model)self.vocab_size, self.hidden_size = bert_model.embeddings.word_embeddings.parameters()[0].shapeself.bert_for_class = BertForTokenClassification(bert_model, self.vocab_size)# 生成下三角矩阵,用来mask句子后边的信息self.sequence_length = input_length# lower_triangle_mask为input_length * input_length的下三角矩阵(包含主对角线),该掩码作为注意力掩码的一部分(在forward的# 处理中为0的部分会被处理成无穷小量,以方便在计算注意力权重的时候保证被掩盖的部分权重约等于0)。而之所以写为下三角矩阵的形式,与# transformer的多头注意力计算的机制有关,细节可以了解相关论文获悉。self.lower_triangle_mask = paddle.tril(paddle.tensor.full((input_length, input_length), 1, 'float32'))def forward(self, token, token_type, input_mask, input_length=None):# 计算attention maskmask_left = paddle.reshape(input_mask, input_mask.shape + [1])mask_right = paddle.reshape(input_mask, [input_mask.shape[0], 1, input_mask.shape[1]])# 输入句子中有效的位置mask_left = paddle.cast(mask_left, 'float32')mask_right = paddle.cast(mask_right, 'float32')attention_mask = paddle.matmul(mask_left, mask_right)# 注意力机制计算中有效的位置if input_length is not None:# 之所以要再计算一次,是因为用于推理预测时,可能输入的长度不为实例化时设置的长度。这里的模型在训练时假设输入的# 长度是被填充成一致的——这一步不是必须的,但是处理成一致长度比较方便处理(对应地,增加了显存的用度)。lower_triangle_mask = paddle.tril(paddle.tensor.full((input_length, input_length), 1, 'float32'))else:lower_triangle_mask = self.lower_triangle_maskattention_mask = attention_mask * lower_triangle_mask# 无效的位置设为极小值attention_mask = (1 - paddle.unsqueeze(attention_mask, axis=[1])) * -1e10attention_mask = paddle.cast(attention_mask, self.bert_for_class.parameters()[0].dtype)output_logits = self.bert_for_class(token, token_type_ids=token_type, attention_mask=attention_mask)return output_logits
# 读取预训练模型
from paddlenlp.transformers import BertTokenizer
bert_tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
[2022-02-08 15:54:15,141] [    INFO] - Already cached /home/aistudio/.paddlenlp/models/bert-base-chinese/bert-base-chinese-vocab.txt
import paddle
import numpy as np
# 自定义数据读取类
class TitleGenerateData(paddle.io.Dataset):"""构造数据集,继承paddle.io.DatasetParameters:data(dict):标题和对应的正文,均未经编码title(str):标题content(str):正文max_len: 接收的最大长度"""def __init__(self, data, tokenizer,max_len = 128,mode='train'):super(TitleGenerateData, self).__init__()self.data_ = dataself.tokenizer = tokenizerself.max_len = max_lenscale = 0.8 # 80%训练if mode=='train':self.data = self.data_[:int(scale*len(self.data_))]else:self.data = self.data_[int(scale*len(self.data_)):]def __getitem__(self, idx):item = self.data[idx]content = item['content']title = item['title']token_content = self.tokenizer.encode(content)token_title = self.tokenizer.encode(title)token_c, token_typec_c = token_content['input_ids'], token_content['token_type_ids']token_t, token_typec_t = token_title['input_ids'], token_title['token_type_ids']if len(token_c) > self.max_len + 1:token_c = token_c[:self.max_len] + token_c[-1:]token_typec_c = token_typec_c[:self.max_len] + token_typec_c[-1:]if len(token_t) > self.max_len + 1:token_t = token_t[:self.max_len] + token_t[-1:]token_typec_t = token_typec_t[:self.max_len] + token_typec_t[-1:]input_token, input_token_type = token_c, token_typec_clabel_token = np.array((token_t + [0] * self.max_len)[:self.max_len], dtype='int64')# 输入填充input_token = np.array((input_token + [0] * self.max_len)[:self.max_len], dtype='int64')input_token_type = np.array((input_token_type + [0] * self.max_len)[:self.max_len], dtype='int64')input_pad_mask = (input_token != 0).astype('float32')label_pad_mask = (label_token != 0).astype('float32')return input_token, input_token_type, input_pad_mask, label_token, label_pad_maskdef __len__(self):return len(self.data)
# 定义损失函数
class Cross_entropy_loss(Layer):def forward(self, pred_logits, label, label_pad_mask):loss = paddle.nn.functional.cross_entropy(pred_logits, label, ignore_index=0, reduction='none')masked_loss = paddle.mean(loss * label_pad_mask, axis=0)return paddle.sum(masked_loss)
# 测试数据读取类
dataset = TitleGenerateData(data,bert_tokenizer,mode='train')
print('=============train dataset=============')input_token, input_token_type, input_pad_mask, label_token, label_pad_mask = dataset[1]
print(input_token, input_token_type, input_pad_mask, label_token, label_pad_mask)
# 查看模型结构,定义Perplexity评价指标,及参数
from paddle.static import InputSpec
from paddlenlp.metrics import Perplexity
from paddle.optimizer import AdamWnet = TitleBertModel('bert-base-chinese', 128)token_ids = InputSpec((-1, 128), 'int64', 'token')
token_type_ids = InputSpec((-1, 128), 'int64', 'token_type')
input_mask = InputSpec((-1, 128), 'float32', 'input_mask')label = InputSpec((-1, 128), 'int64', 'label')
label_mask = InputSpec((-1, 128), 'int64', 'label')inputs = [token_ids, token_type_ids, input_mask]
labels = [label,label_mask]model = paddle.Model(net, inputs, labels)
model.summary(inputs, [input.dtype for input in inputs])
# 训练参数
epochs = 20
context_length = 128
lr = 1e-3
# 模型训练
from paddle.io import DataLoader
from tqdm import tqdm
from paddlenlp.metrics import Perplexitytrain_dataset = TitleGenerateData(data,bert_tokenizer,mode='train')
dev_dataset = TitleGenerateData(data,bert_tokenizer,mode='dev') train_loader = paddle.io.DataLoader(train_dataset, batch_size=128, shuffle=True)
dev_loader = paddle.io.DataLoader(dev_dataset, batch_size=64, shuffle=True)model = TitleBertModel('bert-base-chinese', context_length)# 设置优化器
optimizer=paddle.optimizer.AdamW(learning_rate=lr,parameters=model.parameters())
# 设置损失函数
loss_fn = Cross_entropy_loss()perplexity = Perplexity()model.train()
for epoch in range(epochs):for data in tqdm(train_loader(),desc='epoch:'+str(epoch+1)):input_token, input_token_type, input_pad_mask, label_token, label_pad_mask = data[0],data[1],data[2],data[3], data[4]  # 数据predicts = model(input_token, input_token_type, input_pad_mask)    # 预测结果# 计算损失 等价于 prepare 中loss的设置loss = loss_fn(predicts, label_token , label_pad_mask)predicts = paddle.to_tensor(predicts)label =  paddle.to_tensor(label_token)# 计算困惑度 等价于 prepare 中metrics的设置correct = perplexity.compute(predicts, label)perplexity.update(correct.numpy())ppl = perplexity.accumulate()# 反向传播loss.backward()# 更新参数optimizer.step()# 梯度清零optimizer.clear_grad()print("epoch: {}, loss is: {}, Perplexity is:{}".format(epoch+1, loss.item(),ppl))# 保存模型参数,文件名为Unet_model.pdparamspaddle.save(model.state_dict(), 'work/model.pdparams')

🎖️ 4 模型测试

import numpy as npclass TitleGen(object):"""定义一个自动生成文本的类,按照要求生成文本model: 训练得到的预测模型tokenizer: 分词编码工具max_length: 生成文本的最大长度,需小于等于model所允许的最大长度"""def __init__(self, model, tokenizer, max_length=128):self.model = modelself.tokenizer = tokenizerself.puncs = [',', '。', '?', ';']self.max_length = max_lengthdef generate(self, head='', topk=2):"""根据要求生成标题head (str, list): 输入的文本topk (int): 从预测的topk中选取结果"""poetry_ids = self.tokenizer.encode(head)['input_ids']# 去掉开始和结束标记poetry_ids = poetry_ids[1:-1]break_flag = Falsewhile len(poetry_ids) <= self.max_length:next_word = self._gen_next_word(poetry_ids, topk)# 对于一些符号,如[UNK], [PAD], [CLS]等,其产生后对诗句无意义,直接跳过if next_word in self.tokenizer.convert_tokens_to_ids(['[UNK]', '[PAD]', '[CLS]']):continuenew_ids = [next_word]if next_word == self.tokenizer.convert_tokens_to_ids(['[SEP]'])[0]:breakpoetry_ids += new_idsif break_flag:breakreturn ''.join(self.tokenizer.convert_ids_to_tokens(poetry_ids))def _gen_next_word(self, known_ids, topk):type_token = [0] * len(known_ids)mask = [1] * len(known_ids)sequence_length = len(known_ids)known_ids = paddle.to_tensor([known_ids], dtype='int64')type_token = paddle.to_tensor([type_token], dtype='int64')mask = paddle.to_tensor([mask], dtype='float32')logits = self.model.network.forward(known_ids, type_token, mask, sequence_length)# logits中对应最后一个词的输出即为下一个词的概率words_prob = logits[0, -1, :].numpy()# 依概率倒序排列后,选取前topk个词words_to_be_choosen = words_prob.argsort()[::-1][:topk]probs_to_be_choosen = words_prob[words_to_be_choosen]# 归一化probs_to_be_choosen = probs_to_be_choosen / sum(probs_to_be_choosen)word_choosen = np.random.choice(words_to_be_choosen, p=probs_to_be_choosen)return word_choosen
# 载入已经训练好的模型
net = TitleBertModel('bert-base-chinese', 128)
model = paddle.Model(net)
model.load('./work/model')
title_gen = TitleGen(model, bert_tokenizer)
# 使用rouge评价指标
import json
from sumeval.metrics.rouge import RougeCalculatortext_ = '昨晚6点,一架直升机坠入合肥董铺水库'
ref_content = title_gen.generate(head=text_)print(ref_content)summary_content = '直升机坠入安徽合肥一水库 'rouge = RougeCalculator(lang="zh")# 输出rouge-1, rouge-2, rouge-l指标
sum_rouge_1 = 0
sum_rouge_2 = 0
sum_rouge_l = 0
for i, (summary, ref) in enumerate(zip(summary_content, ref_content)):summary = summary.lower().replace(" ", "")rouge_1 = rouge.rouge_n(summary=summary,references=ref,n=1)rouge_2 = rouge.rouge_n(summary=summary,references=ref,n=2)rouge_l = rouge.rouge_l(summary=summary,references=ref)sum_rouge_1 += rouge_1sum_rouge_2 += rouge_2sum_rouge_l += rouge_lprint(i, rouge_1, rouge_2, rouge_l, summary, ref)print(f"avg rouge-1: {sum_rouge_1/len(summary_content)}\n"f"avg rouge-2: {sum_rouge_2/len(summary_content)}\n"f"avg rouge-l: {sum_rouge_l/len(summary_content)}")

🥑 5 总结

由于数据量太大,本项目仅使用少量数据进行效果演示以保证项目成功运行。

本项目的工作主要体现在:

  • 项目对BERT原文进行了详细解读。

  • 项目对lcsts摘要数据集进行了演示和使用

  • 项目使用了rouge评价方法

  • 修正参考项目Bug:当源数据和目标数据使用不同MASK的处理


有任何问题,欢迎评论区留言交流。
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. java基础教程29讲:使用continue忽略本次循环语句,继续下一次循环

    循环中的逻辑代码&#xff0c;需要满足一定条件才执行&#xff0c;比如&#xff0c;有钱我们才能进行购物&#xff0c;如果没有钱就不能进行购买了&#xff0c;这时我们就不用在执行购买的逻辑&#xff0c;要进行取钱然后再购物。 代码举例&#xff1a; //continue忽略本次循…...

    2024/4/20 8:21:20
  2. 6.求前100个自然数的和。

    解法一&#xff08;while语句&#xff09;&#xff1a; package sss;public class S6one {public static void main(String[] args) {int i1,sum0;while(i<100) {sumi;i;}System.out.println("sum"sum);}} 解法二&#xff08;for语句&#xff09;&#xff1a; pa…...

    2024/4/20 16:17:04
  3. java基础教程28讲:循环的跳转和退出

    循环退出的几种场景&#xff1a; 1、退出本次循环执行&#xff0c;下一次循环 2、退出本层循环 3、退出到指定位置 1、使用break结束循环 循环体遇到break&#xff0c;会结束本次循环&#xff0c;并执行循环后面的代码。 //使用break跳出本次循环for (int i 0; i < 5…...

    2024/5/8 0:05:57
  4. LAMP编程之Linux-3

    一、用户与用户组&#xff08;重点&#xff09; Linux系统是一个多用户多任务的操作系统&#xff0c;任何一个要使用系统资源的用户&#xff0c;都必须首先向系统管理员申请一个账号&#xff0c;然后以这个账号的身份进入系统。 用户的账号一方面可以帮助系统管理员对使用系统…...

    2024/5/5 15:57:37
  5. 创建线程的三种方式

    1.继承Thread类 public class MyThread extends Thread{Overridepublic void run() {for(int i0;i<10;i){System.out.println("锄禾日当午"i);}} } public static void main(String[] args){ MyThread mnew MyThread();m.start(); } 2.实现Runnable接口 publi…...

    2024/5/5 13:47:25
  6. python数据结构-队列(queue)

    队列 插入操作只能在尾部进行&#xff0c;删除操作只能在表头进行 队列先进先出 顺序队列 顺序队列的多次入队和出队操作会造成有存储空间却不能进行入队操作的‘假溢出’ 顺序队列的存储单元没有重复使用机制 解决方案&#xff1a;将顺序队列的首尾相连&#xff0c;形成循环…...

    2024/5/5 14:12:57
  7. JS-正则表达式

    文章目录前言一、JS正则RegExp对象二、实战前言 无 一、JS正则 // 边界符号&#xff08;一般用于精准匹配&#xff09; ^ 以它开始 $ 以它结束// 量词符号 * 重复0次或者更多次&#xff08;可理解为乘法&#xff09;重复1次或者更多次&#xff08;可理解为加法&#xff09; ?…...

    2024/4/20 13:46:33
  8. 用户数据报协议(User Datagram Protocol)UDP

    Author:老九 计算机专业 可控之事 沉重冷静 不可控之事 乐观面对 85180586qq.com &#x1f604; &#x1f606; &#x1f635; &#x1f62d; &#x1f630; &#x1f605; &#x1f622; &#x1f624; &#x1f60d; ☺️ &#x1f60e; &#x1f629; &#x1f44d; &#x…...

    2024/4/13 4:37:35
  9. Contest3145 - 2021级新生个人训练赛第37场_C: 导游

    // #include<bits/stdc.h> using namespace std;const int MAXN11; int a[MAXN][MAXN]; bool used[MAXN]; int n,ans;void init() {memset( a,0,sizeof( a ) );memset( used,0,sizeof( used ) );ans0; }// 判断第 x 个学生 目前总和为 sum void dfs( int x,int sum ) {if…...

    2024/4/8 19:30:10
  10. 基于飞桨复现RAM

    一、论文简介 1.1 简介 Recurrent Attention Model (RAM)&#xff0c;它能顺序处理输入信息&#xff0c;在每个时间步关注图像内不同的子区域&#xff0c;然后增量式的结合来自这些固定位置的信息&#xff0c;并建立图像的动态内部表示。 RAM的优点在于能自主选择图像的子区…...

    2024/4/13 4:37:50
  11. PAT 甲 1030 Travel Plan Dijkstra+DFS 算法

    2022.2.13 练习 PAT 甲 1030 Travel Plan &#xff08;原题链接&#xff09; 题解一&#xff1a; #include <bits/stdc.h> using namespace std; const int MAX_NUM510; const int INF0x3fffffff; int n,m,s,D;int d[MAX_NUM];//起点到各点的最短路径长度 int visit[MA…...

    2024/5/5 4:28:42
  12. web—信息搜集

    文章目录信息搜集一、 域名信息1. Whois查询1.1 查询网站1.2 kali工具2. 备案信息查询二、子域名信息1. ip查询2. 网站查询3. 工具扫描三、端口信息1. 插件检测2. 工具扫描2.1 nmap2.2 masscan2.3 御剑端口扫描四、C段和旁站1. 旁站2. C段3. 在线查询网站五、目录信息六、指纹识…...

    2024/4/16 20:58:20
  13. java基础教程27讲:嵌套循环

    通俗的讲&#xff0c;就是循环中套用循环 举例&#xff1a;我们军训排队的例子&#xff0c;我们想打印一个5行5列的梯队&#xff0c;怎么打印呢&#xff1f;就可以使用双层的循环取打印。 废话不多说&#xff0c;我们上代码 //打印一个5行5列的队伍for (int i 1; i <5; i)…...

    2024/5/5 7:31:51
  14. keil5,C文件下的h文件有感叹号

    1、有感叹号可能的原因是因为文件路径中包含汉字&#xff0c; 重新设置不包含汉字的路径&#xff0c;在进行编译就没有感叹号了。...

    2024/4/5 1:58:56
  15. Monodepth-基于自监督学习的单目深度估计模型

    请点击此处查看本环境基本用法. Please click here for more detailed instructions. Monodepth-基于自监督学习的单目深度估计模型 1. 简介 Monodepth是通过自监督学习进行单目深度估计的一种方法。其主要通过预测中间变量disparity(视差)来对一侧图像进行变换重建另一侧…...

    2024/4/15 17:48:30
  16. 霍夫曼编码树(C/C++)

    用一个优先队列&#xff0c;依次把队列前两个合并&#xff0c;再把合并的结果放入优先队列即可。 #include<iostream> #include<cstdio> #include<iomanip> #include<cstdlib> #include <algorithm> #include<string.h> #include<queu…...

    2024/5/5 10:38:13
  17. 《C和指针》——第13章函数指针的作用1:回调函数2(与模板结合,简化代码)

    注意&#xff1a;此为原创文章&#xff0c;未经同意&#xff0c;请勿随意转载。 目录1. 问题与思路2. 具体实现3. 结果截图1. 问题与思路 Q&#xff1a;实现一个与类型无关的比较函数&#xff0c;且考虑模板&#xff0c;精简代码 A&#xff1a;声明一个函数指针&#xff0c;函…...

    2024/5/5 5:59:16
  18. gaps install

    gaps安装 下载链接 git clone https://github.com/nemanja-m/gaps.git解压的文件如下: 安装环境:Ubuntu&#xff0c;步骤如下: requirements.txt里的模块需要更改一下&#xff0c;把版本号删除 使用清华源下载,速度快pip3 install -i https://pypi.tuna.tsinghua.edu.cn…...

    2024/4/13 4:37:55
  19. Transformer结构解读

    文章目录创新点算法EncoderMSADecoderFFNPosition Embedding论文&#xff1a; 《Attention is all you need》代码&#xff1a; https://github.com/tensorflow/tensor2tensor创新点 作者提出一种新的简单网络结构&#xff0c;Transformer&#xff0c;其完全基于注意力机制&am…...

    2024/5/5 8:43:24
  20. JavaScript学习笔记:JavaScript获取元素:id,标签名,类名,querySelector,querySelectorall,获取body,html

    1、根据ID获取元素 ● 语法&#xff1a;document.getElementById(id) ● 作用&#xff1a;根据ID获取元素对象 ● 参数&#xff1a;id值&#xff0c;区分大小写的字符串 ● 返回值&#xff1a;元素对象 或 null 案例代码&#xff1a; <body><div id"time"…...

    2024/5/6 16:47:43

最新文章

  1. 鸿蒙开发核心技术都有哪些【都是从零开始】

    鸿蒙开发核心技术都有哪些&#xff1f;&#xff1a;【持续1年的时间公关鸿蒙技术】 我们能做哪些呢&#xff1f; 还是从UI业务开始吧 面试题1&#xff1a; 基于STAGE模型项目重构等问题 代理设计模式&#xff0c;业务与架构隔离 中介者模式&#xff0c;和代理设计模式的区别…...

    2024/5/8 7:40:02
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/7 10:36:02
  3. 蓝桥杯第十五届抱佛脚(十)贪心算法

    蓝桥杯第十五届抱佛脚&#xff08;十&#xff09;贪心算法 贪心算法基本概念 贪心算法是一种在算法设计中常用的方法&#xff0c;它在每一步选择中都采取在当前状态下最好或最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而希望导致结果是最好或最优的算法。 贪…...

    2024/5/5 8:38:28
  4. 《c++》多态案例一.电脑组装

    一.代码展示 #include <iostream> using namespace std; class CPU { public://抽象计算函数virtual void calculate() 0;};class CVideoCard { public://抽象显示函数virtual void display() 0;}; class Memory { public://抽象存储函数virtual void storage() 0;};…...

    2024/5/5 8:48:19
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/8 6:01:22
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/7 9:45:25
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/7 14:25:14
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/7 11:36:39
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/7 9:26:26
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/6 21:42:42
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57