针对股票评论的情感分类器

🏡作者主页:点击!
🤖编程探索专栏:点击!
⏰️创作时间:2024年11月16日13点39分

神秘男子影,
秘而不宣藏。
泣意深不见,
男子自持重,
子夜独自沉。
论文链接
点击开启你的论文编程之旅
https://www.aspiringcode.com/content?id=17087924951368&uid=a759ff2cd7ac43f1ab9d3ffda5684bd2
文献参考
下面我将使用Pytorch框架来对《Sentiment analysis method based on sentiment lexicon and Transformer》一文中的Transformer情感分类器进行实现,在这里,我使用现有的2022年英文股评数据集作为初始数据,为其创建情感词典,实现句子转向量并完成Transformer模型的训练过程。
概述
由于Transformer模型的强大表征学习能力,可以在大规模文本数据上进行预训练,并且具有适用性广泛的特点,因此Transformer模型已经被广泛应用于自然语言处理领域,它能够各种任务上取得了优异的表现,包括情感分析。本篇使用股票市场上的股民评论数据作为训练数据,股票市场受到投资者情绪和情感的影响很大,通过对股票评论进行情感分析,可以帮助分析师和投资者更好地了解市场参与者的情绪状态,从而预测市场走势;同时针对股评的情感分析还能帮助公司和投资者监控舆论动向,帮助投资者更好地理解市场参与者的情绪和看法,为投资决策提供参考。
演示效果
众所周知,Transformer模型主要由encoder和decoder两部分组成,它们各自承担着不同的功能和作用。
Encoder:
用途:Encoder部分负责将输入序列(比如文本)转换为一系列隐藏表示,捕获输入序列中的信息和特征。
区别:每个输入词语都经过embedding层后进入encoder,然后通过多层的自注意力机制和前馈神经网络进行特征提取和编码,最终得到输入序列的表示。
Decoder:
用途:Decoder部分负责使用encoder生成的表示来预测输出序列(比如机器翻译中的翻译结果)。
区别:与encoder不同,decoder在处理每个位置的时候会利用encoder输出的信息,并且具有额外的掩码机制来确保在预测时不会使用未来的信息。、

进行情感分析的Transformer模型通常是在完整的Transformer模型基础上进行微调或修改的,主要是为了适应情感分析任务的特点和需求。在情感分析任务中,通常会对输入文本进行一定的处理,如添加特殊标记或截断,以适应模型输入的要求。此外,可能会在输入文本前后添加特殊标记来指示情感分析任务。而模型的输出是对结果的三分类(或者二分类)结果。
要将文本数据变成能够放入模型中的训练数据集,我们需要基于目前已有的股评文本,构建本地可用的词典,并把文本序列转换成一系列长度一致的词向量,如下图:

对应到代码中则可以分成下面几个步骤:
1,将句中字母小写,情感标签映射到【0,1,2】列表中
2,去除特殊字符
3,去除停用词,这需要导入包含英文停用词的数据包
4,将单词进行词性还原
5,将单词与数字一一对应,实现句子转向量
df.text_sentiment.unique()
df.drop_duplicates(inplace=True) ### 删除重复值
pd.factorize(df.text_sentiment) ### 0:Neutral 1:Negative 2:Positive### 将情感标签映射为【0,1,2】label = pd.factorize(df.text_sentiment)[0]### 全部变为小写字母,不保留除’之外标点符号,去除特殊字符
pat = re.compile('[A-Za-z\']+')def pre_text(text):text = pat.findall(text) ### 返回列表text = [w.lower() for w in text]return text
x = df.text.apply(pre_text) ### 去除停用词
def stop_words_filter(text): text= [w for w in text if w not in stopwords.words('english') ]return text
x = x.apply(stop_words_filter) ### 词形还原,利用wordnet
wnl = WordNetLemmatizer()
def return_words(text):text = [wnl.lemmatize(w) for w in text]return text
for text in x:text = [return_words(text)] ### 创建词表,将每个词映射到词表上
word_set = set()
for t in x:for word in t:word_set.add(word)
max_word = len(word_set)+2 ### 词表总长+2, 留下unknow和padding,后面万一进入与这些词不同的词就映射到unk上,序列padding的部分就映射到pad上word_list = list(word_set)
word_index = dict((w,word_list.index(w)+1) for w in word_list)
x = x.apply(lambda t:[word_index.get(w) for w in t]) ###统一向量长度,将每句话padding为长度相同的列表
maxlen = max(len(t) for t in x)
pad_x = [t+ (maxlen-len(t))*[0] for t in x]
pad_x = np.array(pad_x)
# 将 ndarray 转换为 DataFrame
df_pad_x = pd.DataFrame(pad_x)
df_label = pd.DataFrame(label, columns=['label'])
df_pad_x_reset = df_pad_x.reset_index(drop=True)
df_label_reset = df_label.reset_index(drop=True)
df_output = pd.concat([df_pad_x_reset, df_label_reset],axis=1) #保存数据
df_output.to_csv('df_output.csv', index=False)
核心逻辑
得到向量化的训练数据后,我们对应上面的Transformer结构图中左半部分的encoder编码器,我们构建了一个主体由encoder与softmax分类器组成的Transformer情感分类器
import torch
import torch.nn as nn#参数配置
embed_dim =37411 # 字 Embedding 的维度
d_model=256
d_ff = 1024 # 前向传播隐藏层维度
d_k = d_v = 64 # K(=Q), V的维度
n_layers = 3 # 有多少个encoder
n_heads = 4 # Multi-Head Attention设置为8
seq_len=54
batch_size=64
src_vocab_size=37411
tgt_vocab_size=3
dropout=0.1#te 和 pe 都是形状为 (batch_size, seq_len, embed_dim) 的张量
class PositionalEncoding(nn.Module): #nn.Module是一个用于构建神经网络模型的基类def __init__(self):super(PositionalEncoding, self).__init__()self.d_model=d_modelself.seq_len=seq_lenself.dropout = nn.Dropout(p=dropout)pos_table = np.array([[pos / np.power(10000, 2 * i / d_model) for i in range(d_model)]if pos != 0 else np.zeros(d_model) for pos in range(seq_len)])pos_table[1:, 0::2] = np.sin(pos_table[1:, 0::2]) # 字嵌入维度为偶数时pos_table[1:, 1::2] = np.cos(pos_table[1:, 1::2]) # 字嵌入维度为奇数时self.pos_table = torch.LongTensor(pos_table).to(device)def forward(self, enc_inputs): # enc_inputs: [batch_size, seq_len, d_model] 32*54*100#enc_inputs = torch.from_numpy(enc_inputs).to(torch.int64) # 转换为LongTensor类型 enc_inputs += self.pos_table[:enc_inputs.size(1), :] #self.pos_table[:54, :]return self.dropout(enc_inputs.to(device)) #[batch_size, seq_len, d_model] 32*54*100def get_attn_pad_mask(seq_q, seq_k): # seq_q: [batch_size, seq_len] ,seq_k: [batch_size, seq_len] 32*54batch_size, len_q = seq_q.size()batch_size, len_k = seq_k.size()pad_attn_mask = seq_k.data.eq(0).unsqueeze(1) # 判断 输入那些含有P(=0),用1标记 ,[batch_size, 1, len_k]return pad_attn_mask.expand(batch_size, len_q, len_k) # 扩展成多维度def get_attn_subsequence_mask(seq): # seq: [batch_size, tgt_len] 32*3attn_shape = [seq.size(0), seq.size(1), seq.size(1)]subsequence_mask = np.triu(np.ones(attn_shape), k=1) # 生成上三角矩阵,[batch_size, tgt_len, tgt_len]subsequence_mask = torch.from_numpy(subsequence_mask).byte() # [batch_size, tgt_len, tgt_len]return subsequence_mask #32*3*3class ScaledDotProductAttention(nn.Module):#给定一个查询向量Q、一个键向量K、一个值向量V和一个注意力掩码attn_mask,#该模块会计算出每个查询向量对应的上下文向量context和注意力矩阵attn。def __init__(self):super(ScaledDotProductAttention, self).__init__()def forward(self, Q, K, V, attn_mask): # Q: [batch_size, n_heads, len_q, d_k] 32*3*64 # attn_mask: [batch_size, n_heads, seq_len, seq_len]scores = torch.matmul(Q, K.transpose(-1, -2)) / np.sqrt(d_k) # scores : [batch_size, n_heads, len_q, len_k]scores.masked_fill_(attn_mask, -1e9) # 如果时停用词P就等于 0attn = nn.Softmax(dim=-1)(scores)context = torch.matmul(attn, V) # [batch_size, n_heads, len_q, d_v]return context, attnclass MultiHeadAttention(nn.Module): #输入QKV和attn_mask四个矩阵def __init__(self):super(MultiHeadAttention, self).__init__()
# assert n_heads == d_model//d_k
# d_k = d_model//n_headsself.W_Q = nn.Linear(d_model, d_k * n_heads, bias=False)self.W_K = nn.Linear(d_model, d_k * n_heads, bias=False)self.W_V = nn.Linear(d_model, d_v * n_heads, bias=False)self.fc = nn.Linear(n_heads * d_v, d_model, bias=False)def forward(self, input_Q, input_K, input_V, attn_mask): # input_Q: [batch_size, len_q, d_model]# input_K: [batch_size, len_k, d_model]# input_V: [batch_size, len_v(=len_k), d_model]# attn_mask: [batch_size, seq_len, seq_len]residual, batch_size = input_Q, input_Q.size(0)Q = self.W_Q(input_Q).view(batch_size, -1, n_heads, d_k).transpose(1, 2) # Q: [batch_size, n_heads, len_q, d_k]K = self.W_K(input_K).view(batch_size, -1, n_heads, d_k).transpose(1, 2) # K: [batch_size, n_heads, len_k, d_k]V = self.W_V(input_V).view(batch_size, -1, n_heads, d_v).transpose(1, 2) # V: [batch_size, n_heads, len_v(=len_k), d_v]attn_mask = attn_mask.unsqueeze(1).repeat(1, n_heads, 1, 1) # attn_mask : [batch_size, n_heads, seq_len, seq_len]context, attn = ScaledDotProductAttention()(Q, K, V, attn_mask) # context: [batch_size, n_heads, len_q, d_v]# attn: [batch_size, n_heads, len_q, len_k]context = context.transpose(1, 2).reshape(batch_size, -1,n_heads * d_v) # context: [batch_size, len_q, n_heads * d_v]output = self.fc(context) # [batch_size, len_q, d_model]#return nn.LayerNorm(d_model).cuda()(output + residual), attnreturn nn.LayerNorm(d_model).to(device)(output + residual), attnclass PoswiseFeedForwardNet(nn.Module):def __init__(self):super(PoswiseFeedForwardNet, self).__init__()self.fc = nn.Sequential(nn.Linear(d_model, d_ff, bias=False),nn.ReLU(),nn.Linear(d_ff, d_model, bias=False))def forward(self, inputs): # inputs: [batch_size, seq_len, d_model] 32*54*100residual = inputsoutput = self.fc(inputs)return nn.LayerNorm(d_model).to(device)(output + residual) # [batch_size, seq_len, d_model] 32*54*100class EncoderLayer(nn.Module):def __init__(self):super(EncoderLayer, self).__init__()self.enc_self_attn = MultiHeadAttention() # 多头注意力机制self.pos_ffn = PoswiseFeedForwardNet() # 前馈神经网络def forward(self, enc_inputs, enc_self_attn_mask): # enc_inputs: [batch_size, src_len, d_model]# 输入3个enc_inputs分别与W_q、W_k、W_v相乘得到Q、K、V # enc_self_attn_mask: [batch_size, src_len, src_len]enc_outputs, attn = self.enc_self_attn(enc_inputs, enc_inputs, enc_inputs,# enc_outputs: [batch_size, src_len, d_model],enc_self_attn_mask) # attn: [batch_size, n_heads, src_len, src_len]enc_outputs = self.pos_ffn(enc_outputs) # enc_outputs: [batch_size, src_len, d_model]return enc_outputs, attnclass Encoder(nn.Module):def __init__(self):super(Encoder, self).__init__()self.src_emb = nn.Embedding(src_vocab_size, d_model) # 把字转换字向量self.pos_emb = PositionalEncoding() # 加入位置信息self.layers = nn.ModuleList([EncoderLayer() for _ in range(n_layers)])def forward(self, enc_inputs): # enc_inputs: [batch_size, src_len] 32*54enc_outputs = self.src_emb(enc_inputs) # enc_outputs: [batch_size, src_len, d_model]enc_outputs = self.pos_emb(enc_outputs) # enc_outputs: [batch_size, src_len, d_model]enc_self_attn_mask = get_attn_pad_mask(enc_inputs, enc_inputs) # enc_self_attn_mask: [batch_size, src_len, src_len]enc_self_attns = []for layer in self.layers:enc_outputs, enc_self_attn = layer(enc_outputs, enc_self_attn_mask) # enc_outputs : [batch_size, src_len, d_model], # enc_self_attn : [batch_size, n_heads, src_len, src_len]enc_self_attns.append(enc_self_attn)return enc_outputs, enc_self_attnsclass Transformer(nn.Module):def __init__(self):super(Transformer, self).__init__()self.src_vocab_size = src_vocab_sizeself.tgt_vocab_size = tgt_vocab_sizeself.Encoder = Encoder().to(device)self.projection = nn.Linear(d_model, tgt_vocab_size).to(device)def forward(self, enc_inputs):enc_outputs, enc_self_attns = self.Encoder(enc_inputs) # enc_outputs: [batch_size, seq_len, d_model]enc_outputs = torch.mean(enc_outputs,dim=1)output = self.projection(enc_outputs)return output
搭建好的Transformer情感分类器即主要由以上数个函数组成,随后我们利用处理好的数据使模型完成预训练,需要注意的是,各部分的输入输出数据维度要能够衔接得上,模型的参数设置也有一定的讲究,这里我设置每次训练取的数据量batch_size为64,也可以取更大的值加快模型训练过程但训练效果不一定更优
import torch
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
#读入数据,共30000+条数据
data=pd.read_csv('df_output.csv')
y=data['label']
y=np.array(y)
del data['label']
X=np.array(data)
x_train,x_test,y_train,y_test=train_test_split(X, y, test_size=0.2, random_state=42)
# 将 x_train 和 y_train 转换为张量类型
x_train,x_test,y_train,y_test=torch.tensor(x_train),torch.tensor(x_test),torch.tensor(y_train),torch.tensor(y_test)
# 将张量类型的数据打包成 TensorDataset
dataset1 = torch.utils.data.TensorDataset(x_train, y_train)
dataset2 = torch.utils.data.TensorDataset(x_test, y_test)
train_loader = Data.DataLoader(dataset1, batch_size, shuffle=True)
test_loader = Data.DataLoader(dataset2, batch_size, shuffle=True)#进行25轮次模型训练与参数寻优import torch
import torch.nn as nn
import torch.optim as optim
import matplotlib.pyplot as plt
import torch.utils.data as Data# 定义优化器
src_idx2word = {0: "Natural",1: "Negative",2: "Positive"
}
device = torch.device("cpu")
model = Transformer().to(device)
train_accuracy_values=[]
test_accuracy_values=[]criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.05,weight_decay=0.01)n=25
#进行n轮的模型运算
for epoch in range(n):correct_predictions1 = 0total_predictions1 = 0correct_predictions2 = 0total_predictions2 = 0combined_loader = Data.DataLoader(dataset1, batch_size, shuffle=True)for a,(inputs,labels) in enumerate(combined_loader):optimizer.zero_grad()outputs = model.forward(torch.tensor(inputs))outputs = torch.squeeze(outputs) # 去除维度为1的维度# 将模型输出经过Sigmoid激活函数处理loss = criterion(outputs, labels.long()) # 计算损失output=nn.functional.softmax(outputs,dim=1)loss.backward()optimizer.step()# Calculate accuracy_, predicted = torch.max(outputs, 1)#print(predicted)total_predictions1 += labels.view(-1).size(0)correct_predictions1 += (predicted == labels.view(-1)).sum().item()#测试过程new_loader = Data.DataLoader(dataset2, batch_size, shuffle=True)with torch.no_grad():for a,(inputs,labels) in enumerate(new_loader):outputs = model.forward(torch.tensor(inputs))outputs = torch.squeeze(outputs) # 去除维度为1的维度# 将模型输出经过Sigmoid激活函数处理loss = criterion(outputs, labels.long()) # 计算损失output=nn.functional.softmax(outputs,dim=1)# Calculate accuracy_, predicted = torch.max(outputs, 1)#print(predicted)total_predictions2 += labels.view(-1).size(0)correct_predictions2 += (predicted == labels.view(-1)).sum().item()# Calculate and append the average loss and accuracy for the epochtrain_accuracy = (correct_predictions1 / total_predictions1) * 100train_accuracy_values.append(train_accuracy)test_accuracy = (correct_predictions2 / total_predictions2) * 100test_accuracy_values.append(test_accuracy)print('Epoch:', '%04d' % (epoch + 1), 'train_accuracy =', '{:.2f}%'.format(train_accuracy))print('Epoch:', '%04d' % (epoch + 1), 'test_accuracy =', '{:.2f}%'.format(test_accuracy))
torch.save(model,'model.pth')
由于数据量与参数量庞大且本人使用的是CPU内核,因此上述训练过程耗费时长达到4个小时,将模型训练结果绘制成曲线则如下图

使用方式
将上述训练好的模型与“文本to向量”转换器之间进行衔接之后,最终得到期望的Transformer情感分类器,模型的输入格式为英文文本内容,输出为Positive,Negative或者Normal这三类情感标签之一。
例如:输入:“It’s incredible. I didn’t think it could flip or even go up.”
输出:“Positive”
部署方式
pythorch Python3.11
成功的路上没有捷径,只有不断的努力与坚持。如果你和我一样,坚信努力会带来回报,请关注我,点个赞,一起迎接更加美好的明天!你的支持是我继续前行的动力!"
"每一次创作都是一次学习的过程,文章中若有不足之处,还请大家多多包容。你的关注和点赞是对我最大的支持,也欢迎大家提出宝贵的意见和建议,让我不断进步。"
神秘泣男子

相关文章:
针对股票评论的情感分类器
🏡作者主页:点击! 🤖编程探索专栏:点击! ⏰️创作时间:2024年11月16日13点39分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文链接 点击开启你的论文编程之旅…...
Day18 Nim游戏
你和你的朋友,两个人一起玩 Nim 游戏: 桌子上有一堆石头。 你们轮流进行自己的回合, 你作为先手 。 每一回合,轮到的人拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。 假设你们每一步都是最优解。请编写一个函数ÿ…...
理解反射,学会反射:撬开私有性质(private)的属性与方法
看到这句话的时候证明:此刻你我都在努力 加油陌生人 个人主页:Gu Gu Study专栏:用Java学习数据结构系列喜欢的一句话: 常常会回顾努力的自己,所以要为自己的努力留下足迹喜欢的话可以点个赞谢谢了。作者:小…...
Redis在高性能缓存中的应用
💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 Redis在高性能缓存中的应用 Redis在高性能缓存中的应用 Redis在高性能缓存中的应用 引言 Redis 概述 定义与原理 发展历程 Redi…...
菲涅耳全息图
菲涅耳全息图:记录介质在物光波场的菲涅耳衍射区(物体到记录介质表面的距离在菲涅耳衍射区内)。 一、点源全息图的记录和再现 1.1 记录 设物光波和参考光波是从点源O(xo, yo, zo)和点源 R(xr, yr, zr)发出的球面波, 波长为λ1, 全息底片位于z0 的平面上, 与两个点源…...
STM32 BootLoader 刷新项目 (十) Flash擦除-命令0x56
STM32 BootLoader 刷新项目 (十) Flash擦除-命令0x56 1. STM32F407 BootLoader 中的 Flash 擦除功能详解 在嵌入式系统中,BootLoader 的设计是非常关键的部分,它负责引导主程序的启动、升级以及安全管理。而在 STM32F407 等 MCU 上实现 BootLoader&…...
POI word转pdf乱码问题处理
1.使用poi 转换word文档成pdf 导入依赖 <dependency><groupId>com.aspose</groupId><artifactId>words</artifactId><version>16.8.0</version></dependency>2.代码实现: SneakyThrowspublic void wordToPdf(String docPath,…...
【GeekBand】C++设计模式笔记11_Builder_构建器
1. “对象创建” 模式 通过 “对象创建” 模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定。它是接口抽象之后的第一步工作。典型模式 Factory MethodAbstract …...
面试经典 150 题:20、2、228、122
20. 有效的括号 参考代码 #include <stack>class Solution { public:bool isValid(string s) {if(s.size() < 2){ //特判:空字符串和一个字符的情况return false;}bool flag true;stack<char> st; //栈for(int i0; i<s.size(); i){if(s[i] ( |…...
SQL面试题——持续增长问题
持续增长我们也可以称之为连续增长,本质上还是连续类的问题,前面我们已经介绍过 SQL面试题——最大连续登陆问题 SQL面试题——球员连续四次得分 SQL面试题——间隔连续问题 SQL面试题——蚂蚁SQL面试题 连续3天减少碳排放量不低于100的用户 你可以看看之前的文章,了解…...
nginx源码安装配置ssl域名
nginx源码安装 下载 wget http://nginx.org/download/nginx-1.24.0.tar.gz 解压 tar -zxvf nginx-1.24.0.tar.gz 下载openssl apt install openssl 安装nginx cd nginx-1.24.0 sudo apt-get install libpcre3 libpcre3-dev ./configure --prefix=/home/nginx24 --with-http_ss…...
每日一博 - Java的Shallow Copy和Deep Copy
文章目录 概述创建对象的5种方式1. 通过new关键字2. 通过Class类的newInstance()方法3. 通过Constructor类的newInstance方法4. 利用Clone方法5. 反序列化 Clone方法基本类型和引用类型浅拷贝深拷贝如何实现深拷贝1. 让每个引用类型属性内部都重写clone()方法2. 利用序列化 概述…...
.netcore + postgis 保存地图围栏数据
一、数据库字段 字段类型选择(Type) 设置对象类型为:geometry 二、前端传递的Json格式转换 前端传递围栏的各个坐标点数据如下: {"AreaRange": [{"lat": 30.123456,"lng": 120.123456},{"lat": 30.123456…...
【AI图像生成网站Golang】项目介绍
AI图像生成网站 目录 一、项目介绍 二、雪花算法 三、JWT认证与令牌桶算法 四、项目架构 五、图床上传与图像生成API搭建 六、项目测试与调试(等待更新) 简介 本教程将手把手教你如何从零开始构建一个简单的AI图像生成网站。网站主要包含用户注册、图像生成、分类管理等…...
对称加密算法DES的实现
一、实验目的 1、了解对称密码体制基本原理 2、掌握编程语言实现对称加密、解密 二、实验原理 DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密…...
Spring Boot 启动时修改上下文
Spring Boot 启动时修改上下文 为了让项目在启东时,加载到封装的JAR中的国际化文件在封装JAR是增加以下配置类可用于更改启动上下文中的信息依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoco…...
传奇996_19——常用函数
打印 打印到公告 lua版 sendmsg(*actor*, ConstCfg.notice.own, {"Msg":"<font color\#ff0000\>即将更新属性2222!!!</font>","Type":9}) sendmsg(*actor*, 1, {"Msg":"<fon…...
计算机毕业设计Python+Neo4j知识图谱医疗问答系统 大模型 机器学习 深度学习 人工智能 大数据毕业设计 Python爬虫 Python毕业设计
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
【Python】如何设置VSCode中的Pylint,消除各种没有必要的警告
前言 最近打开VSCode,编辑之前创建的Python项目,突然发现多了一堆报错和警告,如下图所示。 就非常吓人,因为之前这个项目是没有任何报错的,我赶紧试着运行了一下,还好,可以正常运行,…...
游戏引擎学习第14天
视频参考:https://www.bilibili.com/video/BV1iNUeYEEj4/ 1. 为什么关注内存管理? 内存分配是潜在的失败点: 每次进行内存分配(malloc、new等)时,都可能失败(例如内存不足)。这种失败会引入不稳…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
