当前位置: 首页 > news >正文

week05_nlp大模型训练·词向量文本向量

1、词向量训练

1.1 CBOW(两边预测中间)

一、CBOW 基本概念

CBOW 是一种用于生成词向量的方法,属于神经网络语言模型的一种。其核心思想是根据上下文来预测中心词。在 CBOW 中,输入是目标词的上下文词汇,输出是该目标词。

二、CBOW 的网络结构

1、输入层

  • 对于给定的一个窗口大小 (通常是一个奇数,例如n=5 ),考虑目标词wt及其前后各(n-1)/2个词作为上下文。假设我们的词汇表大小为V,每个词都可以表示为一个V维的 one-hot 向量。
  • 对于上下文词(其中 ),它们的 one-hot 向量被输入到网络中。

2、投影层

  • 输入层的多个 one-hot 向量会被映射到一个投影层。
  • 对于每个输入的 one-hot 向量,它会激活隐藏层中的一个神经元,而隐藏层的权重矩阵W(维度为V x N ,其中N是词向量的维度)将这些输入进行加权求和,得到一个N维的向量。

从数学上看,如果xi是第i个上下文词的 one-hot 向量,那么投影层的向量h可以表示为:


其中C = n-1是上下文词的数量。

3、隐藏层

  • 投影层的结果作为隐藏层的输入,隐藏层通常不进行非线性变换,直接将结果传递给输出层。

4、输出层

  • 输出层是一个 softmax 层,其神经元的数量等于词汇表的大小V 。
  • 输出层的权重矩阵为 (维度为 N x V),使用 softmax 函数将隐藏层的输出转换为概率分布:

    其中 。

三、训练过程

  1. 损失函数

    • 通常使用交叉熵损失函数:


    • 其中 yj是真实目标词的 one-hot 向量, p(wj)是预测词的概率。
  2. 优化算法

    • 常用的优化算法是随机梯度下降(SGD)或其变种,如 Adagrad、Adadelta 等。
    • 在训练过程中,通过反向传播算法更新权重矩阵  和 ,以最小化损失函数。

四、CBOW 的优点

  1. 考虑上下文信息

    • CBOW 利用了上下文信息来预测中心词,能够捕捉到词与词之间的语义关系。
  2. 计算效率

    • 对于每个训练样本,由于使用了上下文词的平均作为输入,CBOW 比 Skip-gram 在训练时计算量相对较小,尤其是在处理大规模语料库时,CBOW 可以更快地训练出较为不错的词向量。

五、CBOW 的缺点

  1. 对低频词不敏感

CBOW 侧重于根据上下文预测中心词,对于低频词,由于它们在语料库中出现的频率低,在训练过程中得到的学习机会相对较少,因此生成的词向量可能不能很好地表示低频词的语义信息。

六、应用场景

  1. 词向量初始化

    • CBOW 可以为下游的 NLP 任务提供预训练的词向量,如文本分类、情感分析、命名实体识别等。将文本中的词替换为其对应的 CBOW 词向量,可以将文本表示为一个向量序列,为后续任务提供良好的输入表示。
  2. 词相似度计算

    • 训练好的词向量可以计算词与词之间的相似度,例如使用余弦相似度:

七、与 Skip-gram 的对比

  • Skip-gram 与 CBOW 的区别在于,Skip-gram 是根据中心词预测上下文词,而 CBOW 是根据上下文词预测中心词。Skip-gram 更适合处理少量数据和低频词,因为它为每个中心词 - 上下文词对都进行单独的训练而 CBOW 更适合处理大规模数据,因为它在计算上更高效。

八、示例代码(使用 gensim)

from gensim.models import Word2Vec
sentences = [["I", "love", "natural", "language", "processing"],["Word", "embeddings", "are", "useful"],["This", "is", "an", "example", "sentence"]]
# CBOW 模型训练,window 是窗口大小,min_count 是最小词频,sg=0 表示 CBOW 算法
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, sg=0)
# 获取词向量
vector = model.wv['love']
print(vector)
#coding:utf8import torch
import torch.nn as nn
import numpy as np"""
基于pytorch的词向量CBOW
模型部分
"""class CBOW(nn.Module):def __init__(self, vocab_size, embedding_size, window_length):super(CBOW, self).__init__()self.word_vectors = nn.Embedding(vocab_size, embedding_size)self.pooling = nn.AvgPool1d(window_length)self.projection_layer = nn.Linear(embedding_size, vocab_size)def forward(self, context):context_embedding = self.word_vectors(context)  #batch_size * max_length * embedding size  1*4*4#transpose: batch_size * embedding size * max_length -> pool: batch_size * embedding_size * 1 -> squeeze:batch_size * embeddig_sizecontext_embedding = self.pooling(context_embedding.transpose(1, 2)).squeeze()#batch_size * embeddig_size -> batch_size * vocab_sizepred = self.projection_layer(context_embedding)return predvocab_size = 8  #词表大小
embedding_size = 4  #人为指定的向量维度
window_length = 4  #窗口长度
model = CBOW(vocab_size, embedding_size, window_length)
#假如选取一个词窗口【1,2,3,4,5】· 
context = torch.LongTensor([[1,2,4,5]]) #输入1,2,4,5, 预期输出3, 两边预测中间
pred = model(context)
print("预测值:", pred)# print("词向量矩阵")
# print(model.state_dict()["word_vectors.weight"])

1.2 简单词向量模型(自主选择 CBOW or SkipGram 方法)


import json
import jieba
import numpy as np
import gensim
from gensim.models import Word2Vec
from collections import defaultdict'''
词向量模型的简单实现
'''#训练模型
#corpus: [["cat", "say", "meow"], ["dog", "say", "woof"]]
#corpus: [["今天", "天气", "不错"], ["你", "好", "吗"]]
#dim指定词向量的维度,如100
def train_word2vec_model(corpus, dim):model = Word2Vec(corpus, vector_size=dim, sg=1)model.save("model.w2v")return model#输入模型文件路径
#加载训练好的模型
def load_word2vec_model(path):model = Word2Vec.load(path)return modeldef main():sentences = []with open("corpus.txt", encoding="utf8") as f:for line in f:sentences.append(jieba.lcut(line))model = train_word2vec_model(sentences, 128)return modelif __name__ == "__main__":# model = main()  #训练model = load_word2vec_model("model.w2v")  #加载print(model.wv.most_similar(positive=["男人", "母亲"], negative=["女人"])) #类比while True:  #找相似string = input("input:")try:print(model.wv.most_similar(string))except KeyError:print("输入词不存在")

函数部分

train_word2vec_model 函数:

  • 功能:使用 Word2Vec 类训练一个词向量模型。
  • 参数:
    • corpus:输入的语料库,应该是一个由词汇列表组成的列表,例如 [["cat", "say", "meow"], ["dog", "say", "woof"]]
    • dim:词向量的维度,例如 128
  • 实现细节:
    • model = Word2Vec(corpus, vector_size=dim, sg=1):创建一个 Word2Vec 模型,其中 vector_size 表示词向量的维度,sg=1 表示使用 Skip-gram 算法进行训练(sg=0 表示使用 CBOW 算法)。
    • model.save("model.w2v"):将训练好的模型保存到文件 model.w2v 中。

load_word2vec_model 函数:

  • 功能:从文件中加载已经训练好的 Word2Vec 模型。
  • 参数:
    • path:存储 Word2Vec 模型的文件路径,例如 "model.w2v"
  • 实现细节:
    • model = Word2Vec.load(path):从指定的文件路径加载 Word2Vec 模型。

main 函数:

  • 实现细节:
    • sentences = []:初始化一个空列表用于存储分词后的句子。
    • with open("corpus.txt", encoding="utf8") as f:以 UTF-8 编码打开文件 corpus.txt
    • for line in f: sentences.append(jieba.lcut(line)):逐行读取文件,并使用 jieba.lcut 对每行进行分词,将分词结果添加到 sentences 列表中。
    • model = train_word2vec_model(sentences, 128):调用 train_word2vec_model 函数,使用分词后的 sentences 作为语料库,维度为 128 训练词向量模型。

1.3 基于pytorch的语言模型

核心算法:

y = Wx + Utanh(hx+d) + b
#coding:utf8import torch
import torch.nn as nn
import numpy as np"""
基于pytorch的语言模型
与基于窗口的词向量训练本质上非常接近
只是输入输出的预期不同
不使用向量的加和平均,而是直接拼接起来
"""class LanguageModel(nn.Module):def __init__(self, vocab_size, max_len, embedding_size, hidden_size):super(LanguageModel, self).__init__()self.word_vectors = nn.Embedding(vocab_size, embedding_size)self.inner_projection_layer = nn.Linear(embedding_size * max_len, hidden_size)self.outter_projection_layer = nn.Linear(hidden_size, hidden_size)self.x_projection_layer = nn.Linear(embedding_size * max_len, hidden_size)self.projection_layer = nn.Linear(hidden_size, vocab_size)def forward(self, context):#context shape = batch_size, max_lengthcontext_embedding = self.word_vectors(context)  #output shape = batch_size, max_length, embedding_size#总体计算 y = b+Wx+Utanh(d+Hx), 其中x为每个词向量的拼接#词向量的拼接x = context_embedding.view(context_embedding.shape[0], -1) #shape = batch_size, max_length*embedding_size#hx + dinner_projection = self.inner_projection_layer(x)  #shape = batch_size, hidden_size#tanh(hx+d)inner_projection = torch.tanh(inner_projection)    #shape = batch_size, hidden_size#U * tanh(hx+d) + boutter_project = self.outter_projection_layer(inner_projection)  # shape = batch_size, hidden_size#Wxx_projection = self.x_projection_layer(x)    #shape = batch_size, hidden_size#y = Wx + Utanh(hx+d) + by = x_projection + outter_project  #shape = batch_size, hidden_size#softmax后输出预测概率, 训练的目标是让y_pred对应到字表中某个字y_pred = torch.softmax(y, dim=-1)  #shape = batch_size, hidden_sizereturn y_predvocab_size = 8  #词表大小
embedding_size = 5  #人为指定的向量维度
max_len = 4 #输入长度
hidden_size = vocab_size  #由于最终的输出维度应当是字表大小的,所以这里hidden_size = vocab_size
model = LanguageModel(vocab_size, max_len, embedding_size, hidden_size)
#假如选取一个文本窗口“天王盖地虎”
#输入:“天王盖地” —> 输出:"虎"
#假设词表embedding中, 天王盖地虎 对应位置 12345
context = torch.LongTensor([[1,2,3,4]])  #shape = 1, 4  batch_size = 1, max_length = 4
pred = model(context)
print("预测值:", pred)
print("loss可以使用交叉熵计算:", nn.functional.cross_entropy(pred, torch.LongTensor([5])))print("词向量矩阵")
matrix = model.state_dict()["word_vectors.weight"]print(matrix.shape)  #vocab_size, embedding_size
print(matrix)

2、KMeans(词向量的应用——聚类)

1)将一句话或一段文本分成若干个词

2)找到每个词对应的词向量

3)所有词向量加和求平均或通过各种网络模型,得到文本向量

4)使用文本向量计算相似度或进行聚类

KMeans

随机选择k个点作为初始质心

repeat    

将每个点指派到最近的质心,形成k个簇    

重新计算每个簇的质心

until    

质心不发生变化

KMeans优点

1.速度很快,可以支持很大量的数据

2.样本均匀特征明显的情况下,效果不错  

KMeans缺点

1.人为设定聚类数量

2.初始化中心影响效果,导致结果不稳定

3.对于个别特殊样本敏感,会大幅影响聚类中心位置

4.不适合多分类或样本较为离散的数据

KMeans一些使用技巧:

1.先设定较多的聚类类别

2.聚类结束后计算类内平均距离

3.排序后,舍弃类内平均距离较长的类别

4.计算距离时可以尝试欧式距离、余弦距离或其他距离

5.短文本的聚类记得先去重,以及其他预处理

代码实例

import numpy as np
import random
import sys
'''
Kmeans算法实现
原文链接:https://blog.csdn.net/qingchedeyongqi/article/details/116806277
'''class KMeansClusterer:  # k均值聚类def __init__(self, ndarray, cluster_num):self.ndarray = ndarrayself.cluster_num = cluster_numself.points = self.__pick_start_point(ndarray, cluster_num)def cluster(self):result = []for i in range(self.cluster_num):result.append([])for item in self.ndarray:distance_min = sys.maxsizeindex = -1for i in range(len(self.points)):distance = self.__distance(item, self.points[i])if distance < distance_min:distance_min = distanceindex = iresult[index] = result[index] + [item.tolist()]new_center = []for item in result:new_center.append(self.__center(item).tolist())# 中心点未改变,说明达到稳态,结束递归if (self.points == new_center).all():sum = self.__sumdis(result)return result, self.points, sumself.points = np.array(new_center)return self.cluster()def __sumdis(self,result):#计算总距离和sum=0for i in range(len(self.points)):for j in range(len(result[i])):sum+=self.__distance(result[i][j],self.points[i])return sumdef __center(self, list):# 计算每一列的平均值return np.array(list).mean(axis=0)def __distance(self, p1, p2):#计算两点间距tmp = 0for i in range(len(p1)):tmp += pow(p1[i] - p2[i], 2)return pow(tmp, 0.5)def __pick_start_point(self, ndarray, cluster_num):if cluster_num < 0 or cluster_num > ndarray.shape[0]:raise Exception("簇数设置有误")# 取点的下标indexes = random.sample(np.arange(0, ndarray.shape[0], step=1).tolist(), cluster_num)points = []for index in indexes:points.append(ndarray[index].tolist())return np.array(points)x = np.random.rand(100, 8)
kmeans = KMeansClusterer(x, 10)
result, centers, distances = kmeans.cluster()
print('result:', result)
print('centers:', centers)
print('distances:', distances)
#!/usr/bin/env python3  
#coding: utf-8#基于训练好的词向量模型进行聚类
#聚类采用Kmeans算法
import math
import re
import json
import jieba
import numpy as np
from gensim.models import Word2Vec
from sklearn.cluster import KMeans
from collections import defaultdict#输入模型文件路径
#加载训练好的模型
def load_word2vec_model(path):model = Word2Vec.load(path)return modeldef load_sentence(path):sentences = set()with open(path, encoding="utf8") as f:for line in f:sentence = line.strip()sentences.add(" ".join(jieba.cut(sentence)))print("获取句子数量:", len(sentences))return sentences#将文本向量化
def sentences_to_vectors(sentences, model):vectors = []for sentence in sentences:words = sentence.split()  #sentence是分好词的,空格分开vector = np.zeros(model.vector_size)#所有词的向量相加求平均,作为句子向量for word in words:try:vector += model.wv[word]except KeyError:#部分词在训练中未出现,用全0向量代替vector += np.zeros(model.vector_size)vectors.append(vector / len(words))return np.array(vectors)def main():model = load_word2vec_model(r"model.w2v") #加载词向量模型sentences = load_sentence("titles.txt")  #加载所有标题vectors = sentences_to_vectors(sentences, model)   #将所有标题向量化n_clusters = int(math.sqrt(len(sentences)))  #指定聚类数量print("指定聚类数量:", n_clusters)kmeans = KMeans(n_clusters)  #定义一个kmeans计算类kmeans.fit(vectors)          #进行聚类计算sentence_label_dict = defaultdict(list)for sentence, label in zip(sentences, kmeans.labels_):  #取出句子和标签sentence_label_dict[label].append(sentence)         #同标签的放到一起for label, sentences in sentence_label_dict.items():print("cluster %s :" % label)for i in range(min(10, len(sentences))):  #随便打印几个,太多了看不过来print(sentences[i].replace(" ", ""))print("---------")if __name__ == "__main__":main()
#coding: utf-8#基于训练好的词向量模型进行聚类
#聚类采用Kmeans算法
#Kmeans基础上实现按照类内距离排序
import math
import re
import json
import jieba
import numpy as np
from gensim.models import Word2Vec
from sklearn.cluster import KMeans
from collections import defaultdict#输入模型文件路径
#加载训练好的模型
def load_word2vec_model(path):model = Word2Vec.load(path)return modeldef load_sentence(path):sentences = set()with open(path, encoding="utf8") as f:for line in f:sentence = line.strip()sentences.add(" ".join(jieba.cut(sentence)))print("获取句子数量:", len(sentences))return sentences#将文本向量化
def sentences_to_vectors(sentences, model):vectors = []for sentence in sentences:words = sentence.split()  #sentence是分好词的,空格分开vector = np.zeros(model.vector_size)#所有词的向量相加求平均,作为句子向量for word in words:try:vector += model.wv[word]except KeyError:#部分词在训练中未出现,用全0向量代替vector += np.zeros(model.vector_size)vectors.append(vector / len(words))return np.array(vectors)def main():model = load_word2vec_model("model.w2v") #加载词向量模型sentences = load_sentence("titles.txt")  #加载所有标题vectors = sentences_to_vectors(sentences, model)   #将所有标题向量化n_clusters = int(math.sqrt(len(sentences)))  #指定聚类数量print("指定聚类数量:", n_clusters)kmeans = KMeans(n_clusters)  #定义一个kmeans计算类kmeans.fit(vectors)          #进行聚类计算sentence_label_dict = defaultdict(list)for sentence, label in zip(sentences, kmeans.labels_):  #取出句子和标签sentence_label_dict[label].append(sentence)         #同标签的放到一起#计算类内距离density_dict = defaultdict(list)for vector_index, label in enumerate(kmeans.labels_):vector = vectors[vector_index]   #某句话的向量center = kmeans.cluster_centers_[label]  #对应的类别中心向量distance = cosine_distance(vector, center)  #计算距离density_dict[label].append(distance)    #保存下来for label, distance_list in density_dict.items():density_dict[label] = np.mean(distance_list)   #对于每一类,将类内所有文本到中心的向量余弦值取平均density_order = sorted(density_dict.items(), key=lambda x: x[1], reverse=True)  #按照平均距离排序,向量夹角余弦值越接近1,距离越小#按照余弦距离顺序输出for label, avg_distance in density_order:print("cluster %s , avg distance %s: " % (label, avg_distance))sentences = sentence_label_dict[label]for i in range(min(10, len(sentences))):  #随便打印几个,太多了看不过来print(sentences[i].replace(" ", ""))print("---------")#向量余弦距离
def cosine_distance(vec1, vec2):vec1 = vec1 / np.sqrt(np.sum(np.square(vec1)))  #A/|A|vec2 = vec2 / np.sqrt(np.sum(np.square(vec2)))  #B/|B|return np.sum(vec1 * vec2)#欧式距离
def eculid_distance(vec1, vec2):return np.sqrt((np.sum(np.square(vec1 - vec2))))if __name__ == "__main__":main()

3、 词向量训练总结

一、根据词与词之间关系的某种假设,制定训练目标

二、设计模型,以词向量为输入

三、随机初始化词向量,开始训练

四、训练过程中词向量作为参数不断调整,获取一定的语义信息

五、使用训练好的词向量做下游任务

词向量总结:

1.质变:将离散的字符转化为连续的数值

2.通过向量的相似度代表语义的相似度

3.词向量的训练基于很多不完全正确的假设,但是据此训练的词向量是有意义的

4.使用无标注的文本的一种好方法

词向量存在的问题:

1)词向量是“静态”的每个词使用固定向量,没有考虑前后文

2)一词多义的情况。西瓜 - 苹果 - 华为

3)影响效果的因素非常多        

维度选择、随机初始化、skip-gram/cbow/glove、分词质量、词频截断、未登录词、窗口大小、迭代轮数、停止条件、语料质量等

4)没有好的直接评价指标。常需要用下游任务来评价

相关文章:

week05_nlp大模型训练·词向量文本向量

1、词向量训练 1.1 CBOW&#xff08;两边预测中间&#xff09; 一、CBOW 基本概念 CBOW 是一种用于生成词向量的方法&#xff0c;属于神经网络语言模型的一种。其核心思想是根据上下文来预测中心词。在 CBOW 中&#xff0c;输入是目标词的上下文词汇&#xff0c;输出是该目标…...

FreeRTOS Lwip Socket APi TCP Server 1对多

源文件 /********************************************************************************* file lwip_tcp_driver.cpp* brief TCP Server implementation using LwIP******************************************************************************* at…...

SonarQube相关的maven配置及使用

一、maven 全局配置 <settings><pluginGroups><pluginGroup>org.sonarsource.scanner.maven</pluginGroup></pluginGroups><profiles><profile><id>sonar</id><activation><activeByDefault>true</acti…...

【蓝桥杯选拔赛真题87】python输出字符串 第十五届青少年组蓝桥杯python选拔赛真题 算法思维真题解析

目录 python输出字符串 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python输出字符串 第十五届蓝桥杯青少年组python比赛选拔赛真题详细解析…...

嵌入式开发中的机器人表情绘制

机器人的表情有两种&#xff0c;一种是贴图&#xff0c;一钟是调用图形API自绘。 贴图效果相对比较好&#xff0c;在存储空间大的情况下是可以采用的。 自绘比较麻烦&#xff0c;但在资源和空缺少的情况下&#xff0c;也是很有用的。而且自绘很容易通过调整参数加入随机效果&…...

本机实现Llama 7B推理及部署

本机实现Llama 7B推理及部署 使用llamafile在Windows系统部署 部署步骤:首先从https://www.modelscope.cn/api/v1/models/bingal/llamafile-models/repo?Revision=master&FilePath=llamafile-0.6.2.win.zip下载llamafile并解压得到llamafile.exe文件, 再从https://www.…...

HarmonyOS NEXT 实战之元服务:静态案例效果---我的热门应用服务

背景&#xff1a; 前几篇学习了元服务&#xff0c;后面几期就让我们开发简单的元服务吧&#xff0c;里面丰富的内容大家自己加&#xff0c;本期案例 仅供参考 先上本期效果图 &#xff0c;里面图片自行替换 效果图1完整代码案例如下&#xff1a; Index import { authentica…...

二十三种设计模式-工厂方法模式

工厂方法模式是一种创建型设计模式&#xff0c;其核心思想是通过定义一个创建对象的接口&#xff0c;让子类决定实例化哪一个类。工厂方法模式将对象的实例化推迟到子类中进行&#xff0c;从而使得扩展变得容易&#xff0c;而不需要修改现有的代码&#xff0c;符合开闭原则&…...

硬件工程师面试题 21-30

把常见的硬件面试题进行总结&#xff0c;方便及时巩固复习。其中包括网络上的资源、大佬们的大厂面试题&#xff0c;其中可能会题目类似&#xff0c;加强印象即可。 更多硬件面试题&#xff1a;硬件工程师面试题 1-10硬件工程师面试题 11-20 21、单片机最小系统需要什么&#x…...

深度学习中的HTTP:从请求到响应的计算机网络交互

在现代深度学习应用中&#xff0c;HTTP&#xff08;超文本传输协议&#xff09;不仅仅是网页浏览的基础协议&#xff0c;它也在机器学习和人工智能的服务架构中扮演着至关重要的角色。本文将深入探讨HTTP在深度学习中的应用&#xff0c;并阐明它如何支持模型的训练、推理及API服…...

基于submitit实现Python函数的集群计算

一、项目介绍 Submitit是一款轻量级工具&#xff0c;旨在简化Python函数在Slurm集群上的提交过程。它不仅提供了对作业结果、日志文件等的无缝访问&#xff0c;更让开发者能够在本地执行与Slurm集群间切换自如&#xff0c;极大地提高了代码的可移植性和灵活性。 Slurm作为一种…...

开源GTKSystem.Windows.Forms框架:C# Winform跨平台运行深度解析

开源GTKSystem.Windows.Forms框架&#xff1a;C# Winform跨平台运行深度解析 一、跨平台框架的崛起 1.1 跨平台技术的现状与需求 在当今快速发展的科技时代&#xff0c;软件开发的需求日益多样化。随着移动设备和操作系统的不断涌现&#xff0c;开发者面临着前所未有的挑战&…...

uniapp Stripe 支付

引入 Stripe npm install stripe/stripe-js import { loadStripe } from stripe/stripe-js; Stripe 提供两种不同类型组件 Payment Element 和 Card Element&#xff1a;如果你使用的是 Payment Element&#xff0c;它是一个更高级别的组件&#xff0c;能够自动处理多种支…...

虚拟机用网线连其他设备(ROS多机网络配置)

电脑配置 把局域网的网线插入电脑&#xff0c;点击这边 配置以太网的IP 比如说我ROS主机的IP想设为192.168.144.10&#xff0c;那我笔记本的以太网IP可以设为192.168.144.8。 假设还有另外一个电脑&#xff08;ROS从机&#xff09;&#xff0c;他的IP被设置未192.168.144.4…...

20241218-信息安全理论与技术复习题

20241218-信息安全理论与技术复习题 一、习题1 信息安全的基本属性是&#xff08;D )。 A、机密性 B、可用性 C、完整性 D、上面 3 项都是 “会话侦听和劫持技术” 是属于&#xff08;B&#xff09;的技术。 A、 密码分析还原 B、 协议漏洞渗透 C、 应用漏洞分析与渗透 D、 D…...

家谱管理系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库…...

音频进阶学习九——离散时间傅里叶变换DTFT

文章目录 前言一、DTFT的解释1.DTFT公式2.DTFT右边释义1&#xff09; 复指数 e − j ω n e^{-j\omega n} e−jωn2&#xff09;序列与复指数相乘 x [ n ] ∗ e − j ω n x[n]*e^{-j\omega n} x[n]∗e−jωn复指数序列复数的共轭正交正交集 3&#xff09;复指数序列求和 3.DTF…...

pytorch 计算图中的叶子节点介绍

1. 什么是叶子节点&#xff1f; 在 PyTorch 的自动微分机制中&#xff0c;叶子节点&#xff08;leaf node&#xff09; 是计算图中&#xff1a; 由用户直接创建的张量&#xff0c;并且它的 requires_gradTrue。这些张量是计算图的起始点&#xff0c;通常作为模型参数或输入变…...

CSS系列(42)-- Backdrop Filter详解

前端技术探索系列&#xff1a;CSS Backdrop Filter详解 &#x1f3a8; 致读者&#xff1a;探索背景滤镜的艺术 &#x1f44b; 前端开发者们&#xff0c; 今天我们将深入探讨 CSS Backdrop Filter&#xff0c;这个强大的视觉效果特性。 基础效果 &#x1f680; 模糊效果 /…...

【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(一)

****非斜体正文为原文献内容&#xff08;也包含笔者的补充&#xff09;&#xff0c;灰色块中是对文章细节的进一步详细解释&#xff01; 三、传统微调范式&#xff08;Traditional Fine-Tuning Paradigm&#xff09; 在这个范式中&#xff0c;首先在大量未标记的文本数据上预…...

ChatGPT 与 AGI:人工智能的当下与未来走向全解析

在人工智能的浩瀚星空中&#xff0c;AGI&#xff08;通用人工智能&#xff09;无疑是那颗最为璀璨且备受瞩目的星辰。OpenAI 对 AGI 的定义为“在最具经济价值的任务中超越人类的高度自治系统”&#xff0c;并勾勒出其发展的五个阶段&#xff0c;当下我们大多处于以 ChatGPT 为…...

Redis - 1 ( 11000 字 Redis 入门级教程 )

一&#xff1a;服务端高并发分布式结构演进之路 1.1 常见概念 概念定义生活例子类比应用&#xff08;Application&#xff09;/ 系统&#xff08;System&#xff09;为完成一整套服务的程序或一组相互配合的程序群。为完成一项任务而组成的由一个人或一群相互配合的人构成的团…...

python opencv的sift特征检测(Scale-Invariant Feature Transform)

sift 官方文档地址&#xff1a;https://docs.opencv.org/4.10.0/da/df5/tutorial_py_sift_intro.html 创建SIFT实例cv2.SIFT.create()特征检测sift.detect描述子sift.compute/sift.detectAndCompute画特征cv2.drawKeypoints 原图 特征点 代码 import cv2first ./12.pngsif…...

Xilinx FPGA的Bitstream比特流加密设置方法

关于Xilinx FPGA的Bitstream比特流加密设置方法更多信息可参阅应用笔记xapp1084。 使用加密bitstream分两个步骤&#xff1a; 将bitstream的AES密钥存储在FPGA芯片内将使用AES密钥加密的Bitstream通过SPI Flash或JTAG加载至FPGA芯片 AES密钥可以存储在两个存储区之一&#x…...

如何通过深度学习提升大分辨率图像预测准确率?

随着科技的不断进步&#xff0c;图像处理在各个领域的应用日益广泛&#xff0c;特别是在医疗影像、卫星遥感、自动驾驶、安防监控等领域中&#xff0c;大分辨率图像的使用已经成为了一项不可或缺的技术。然而&#xff0c;大分辨率图像带来了巨大的计算和存储压力&#xff0c;同…...

Oracle SqlPlus常用命令简介

参考资料 【SQL*Plus】SETシステム変数の設定前後の具体例 目录 一. 执行系命令1.1 执行系统命令1.2 执行sql脚本文件1.2.1 在数据库中执行sql脚本1.2.2 通过sqlplus执行sql脚本 二. show命令2.1 显示SqlPlus中的全部环境变量2.2 显示指定环境变量的设置 三. 时间显示3.1 set …...

【微服务】【Sentinel】认识Sentinel

文章目录 1. 雪崩问题2. 解决方案3. 服务保护技术对比4. 安装 Sentinel4.1 启动控制台4.2 客户端接入控制台 参考资料: 1. 雪崩问题 微服务调用链路中的某个服务故障&#xff0c;引起整个链路中的所有微服务都不可用&#xff0c;这就是雪崩。动图演示&#xff1a; 在微服务系统…...

C++并行处理支持库 之六

C并行处理支持库 之六 std::promise构造器APIs应用实例 通过使用Futures标准库&#xff0c;我们可以获取异步任务返回值&#xff0c;捕获异步任务引发的异常。异步任务就是在独立线程中启动运行的函数。 这些值以共享状态进行通信&#xff0c;其中异步任务可以写入其返回值&…...

Linux-frp_0.61.1内网穿透的配置和使用

下载frp frp官网 https://gofrp.org/zh-cn/docs/setup/ frp安装包下载地址 https://github.com/fatedier/frp/releases?page1 下载之后在服务器上 解压 tar -zxvf frp_0.61.1_linux_amd64.tar.gztar&#xff1a;一个用于压缩和解压缩的工具。-z&#xff1a;表示使用 gzi…...

SpringBoot集成ECDH密钥交换

简介 对称加解密算法都需要一把秘钥&#xff0c;但是很多情况下&#xff0c;互联网环境不适合传输这把对称密码&#xff0c;有密钥泄露的风险&#xff0c;为了解决这个问题ECDH密钥交换应运而生 EC&#xff1a;Elliptic Curve——椭圆曲线&#xff0c;生成密钥的方法 DH&…...

深度学习的魔法世界

技术文章&#xff1a;深度学习的魔法世界 引言 嘿&#xff0c;今天我们要一起探索一个非常酷的魔法世界——深度学习&#xff01;这是一门让计算机变得超级聪明的科学。我们会用最简单的语言来解释深度学习的基本概念&#xff0c;让你们也能轻松理解。 一、深度学习的六大魔…...

【超级详细】Vue3项目上传文件到七牛云的详细笔记

概述 继上一篇笔记介绍如何绑定七牛云的域名之后&#xff0c;这篇笔记主要介绍了如何在Vue3项目中实现文件上传至七牛云的功能。我们将使用Cropper.js来处理图像裁剪&#xff0c;并通过自定义组件和API调用来完成整个流程。 这里直接给出关键部分js代码&#xff0c;上传之前要先…...

设计模式-建造者模式

在面向对象的设计中&#xff0c;建造者模式&#xff08;Builder Pattern&#xff09; 是一种常用的设计模式&#xff0c;它属于创建型模式&#xff0c;旨在将复杂对象的创建与其表示分离。通过该模式&#xff0c;我们可以一步一步地构造一个复杂的对象&#xff0c;避免构造函数…...

springboot+vue实现SSE服务器发送事件

思路 一个基于订阅发布机制的SSE事件。客户端可以请求订阅api&#xff08;携带客户端id&#xff09;&#xff0c;与服务器建立SSE链接&#xff1b;后续服务器需要推送消息到客户端时&#xff0c;再根据客户端id从已建立链接的会话中找到目标客户端&#xff0c;将消息推送出去。…...

IDEA | SpringBoot 项目中使用 Apifox 上传接口

目录 1 安装 Apifox Helper 插件2 获取 Apifox 的 API 访问令牌3 IDEA 中设置 API 访问令牌4 IDEA 中上传接口5 常见问题5.1 如何自动设置目录名5.2 如何自动设置接口名5.3 如何更改上传位置 Apifox 官方指南&#xff1a; https://apifox.com/help/applications-and-p…...

SpringBoot基础二

扩展SpringBoot 扩展SpringBoot中的SpringMVC的默认配置 SpringBoot默认已经给我们做了很多SpringMVC的配置&#xff0c;哪些配置&#xff1f; 1、视图解析器ViewResolver 2、静态资料的目录 3、默认首页index.html 4、图标名字和图标所在目录&#xff0c;favicon.ico 5、类型转…...

力扣第129题:求根到叶子节点数字之和 - C语言解法

力扣第129题&#xff1a;求根到叶子节点数字之和 - C语言解法 题目描述 给定一个二叉树&#xff0c;求根到叶子节点的数字之和。 每条从根到叶子的路径都代表一个数字。例如&#xff0c;根到叶子路径 1->2->3 代表数字 123。返回所有路径数字之和。 示例 1&#xff1…...

图像处理-Ch7-小波函数

个人博客&#xff01;无广告观看&#xff0c;因为这节内容太多了&#xff0c;有点放不下&#xff0c;分了三节 文章目录 多分辨率展开(Multi-resolution Expansions)序列展开(Series Expansions)尺度函数(Scaling Function)例&#xff1a;哈尔尺度函数(Haar scaling func)多分…...

Unity中实现转盘抽奖效果(一)

实现思路&#xff1a; 旋转转盘的z轴&#xff0c;开始以角加速度加速到角速度最大值&#xff0c;结束的时候&#xff0c;以角加速度减速使角速度减少到0&#xff0c;然后转盘z轴旋转的角度就是加上每秒以角速度数值大小&#xff0c;为了使角度不能一直增大&#xff0c;对360度…...

小程序基础 —— 07 创建小程序项目

创建小程序项目 打开微信开发者工具&#xff0c;左侧选择小程序&#xff0c;点击 号即可新建项目&#xff1a; 在弹出的新页面&#xff0c;填写项目信息&#xff08;后端服务选择不使用云服务&#xff0c;开发模式为小程序&#xff0c;模板选择为不使用模板&#xff09;&…...

Apache Commons Pool :介绍与使用

Apache Commons Pool &#xff1a;介绍与使用 什么是 commons-pool2&#xff1f; commons-pool2 是 Apache Commons 提供的一个开源对象池实现框架。它旨在为应用程序提供通用的对象池支持&#xff0c;方便开发者管理资源&#xff08;如数据库连接、网络连接等&#xff09;复…...

(二)编译原生SDK以及配置交叉编译链

文章目录 编译原生SDKLinuxSDK的安装第一步解压LinuxSDK第二步安装依赖软件第三步解压Buildroot的dl文件 Linux系统镜像编译、生成第一步 配置编译环境第二步 编译 LinuxSDK编译上面配置好的 环境配置编译 LinuxSDK配置内核选项配置 Buildroot编译 Qt 库 编译生成 Linux 系统镜…...

YK人工智能(三)——万字长文学会torch深度学习

2.1 张量 本节主要内容&#xff1a; 张量的简介PyTorch如何创建张量PyTorch中张量的操作PyTorch中张量的广播机制 2.1.1 简介 几何代数中定义的张量是基于向量和矩阵的推广&#xff0c;比如我们可以将标量视为零阶张量&#xff0c;矢量可以视为一阶张量&#xff0c;矩阵就是…...

【游戏设计原理】41 - 游戏的核心

1. 如何理解&#xff1f; 这条原理主要在讲述“游戏核心”这一概念的重要性及其在游戏开发中的作用。游戏的核心是指决定游戏整体玩法和体验的核心元素&#xff0c;它通常是游戏的主要机制、目标或动作方式。理解这一原理时&#xff0c;我们可以从以下几个层面来考虑&#xff…...

GraalVM:云原生时代的Java虚拟机

1. 概述 GraalVM是由Oracle公司开发的一款高性能、多语言的虚拟机平台。它不仅兼容传统的JVM字节码执行&#xff0c;还引入了即时编译&#xff08;JIT&#xff09;技术的革新&#xff0c;以及对多种编程语言的支持。GraalVM旨在通过提供更高效的执行环境来满足云计算环境中日益…...

goView二开低代码平台1.0

官网文档地址&#xff1a;GoView 说明文档 | 低代码数据可视化开发平台 简介&#xff1a;GoView 是一个拖拽式低代码数据可视化开发平台&#xff0c;通过拖拽创建数据大屏&#xff0c;使用Vue3框架&#xff0c;Ts语言和NaiveUI组件库创建的开源项目。安装步骤和地址文档里都有…...

【golang】go errors 处理错误追踪打印堆栈信息

目录 背景使用参考 背景 使用原生go语言编程时&#xff0c;常常需要处理错误&#xff0c;然而golang中没有像java/python等其他语言的try-catch方式一样的方式来处理异常事件&#xff0c;只能通过函数返回值接收并处理错误。 在实践中&#xff0c;由于牛马的不熟练或随意处理错…...

【brew安装失败】DNS 查询 raw.githubusercontent.com 返回的是 0.0.0.0

从你提供的 nslookup 输出看&#xff0c;DNS 查询 raw.githubusercontent.com 返回的是 0.0.0.0&#xff0c;这通常意味着无法解析该域名或该域名被某些 DNS 屏蔽了。这种情况通常有几个可能的原因&#xff1a; 可能的原因和解决方法 本地 DNS 问题&#xff1a; 有可能是你的本…...

【Python系列】Python 连接 PostgreSQL 数据库并查询数据

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

深度学习利用Kaggle和Colab免费GPU资源训练

这两个平台&#xff0c;我先用的Colab&#xff0c;在修改完无数bug&#xff0c;成功训练完一个epoch后&#xff0c;超时了&#xff0c;查阅了官网资料&#xff0c;之后应该还可以用&#xff0c;但这个限制是动态的&#xff0c;你可能第二天就可以用&#xff0c;也没准下个月。遂…...