02_NLP文本预处理之文本张量表示法
文本张量表示法
概念
将文本使用张量进行表示,一般将词汇表示为向量,称为词向量,再由各个词向量按顺序组成矩阵形成文本表示
例如:
["人生", "该", "如何", "起头"]==># 每个词对应矩阵中的一个向量
[[1.32, 4,32, 0,32, 5.2],[3.1, 5.43, 0.34, 3.2],[3.21, 5.32, 2, 4.32],[2.54, 7.32, 5.12, 9.54]]
作用
将文本表示成张量(矩阵)形式,能够使语言文本可以作为计算机处理程序的输入,进行接下来一系列的解析工作。
-
连接文本与计算机
- 将文本张量转换为数值形式输入,使其能够被计算机处理和理解
-
表达语义信息
-
捕捉词语关系
好的文本张量表示方法,例如词嵌入,可以将词语映射到高维空间中,使得语义相似的词语在向量空间中也彼此接近。例如,“king” 和 “queen” 的向量在空间中会比 “king” 和 “apple” 更接近。
-
保留上下文信息
对于句子和文档的表示方法,例如句嵌入和文档嵌入,能够保留文本的上下文信息,例如词语之间的顺序和依赖关系。
-
理解文本含义
通过将文本映射到向量空间,模型可以学习到文本的深层语义含义,而不仅仅是表面上的字面意思。
-
-
提升模型性能
-
特征提取
文本张量表示可以看作是对文本进行特征提取的过程,将文本转换为计算机可以理解的特征。
-
降维
一些文本张量表示方法,例如词嵌入,可以将文本的维度降低,减少模型的计算量,并避免维度灾难。
-
减少噪声
一些文本张量表示方法,例如 TF-IDF,可以对文本中的噪声进行过滤,突出重要信息。
-
方法
one-hot编码
-
概念:每个单词都会被映射到一个高维向量中,该向量中只有一个元素是 1,其他所有元素都是 0。
举例
假设我们有一个包含以下 5 个单词的词汇表(Vocabulary):
- “cat”
- “dog”
- “fish”
- “bird”
- “rabbit”
我们需要为每个单词生成一个向量,向量的维度等于词汇表中单词的数量(在这个例子中是 5)。
1. 构建词汇表:
我们的词汇表如下:
Index Word 0 cat 1 dog 2 fish 3 bird 4 rabbit 2. 生成 One-hot 向量:
每个单词都会被转换为一个与词汇表大小相同的向量,其中该单词所在位置的值为 1,其余位置的值为 0。
- “cat” -> [1, 0, 0, 0, 0]
- “dog” -> [0, 1, 0, 0, 0]
- “fish” -> [0, 0, 1, 0, 0]
- “bird” -> [0, 0, 0, 1, 0]
- “rabbit” -> [0, 0, 0, 0, 1]
-
特点:
-
稀疏性
one-hot编码通常会产生非常稀疏的向量,尤其是词汇表很大时。大部分元素为零,只有一个位置是1。
-
高维度
词汇表的大小决定了one-hot向量的维度。如果词汇表包含10000个单词,那么每个单词的表示将是一个长度为10000的向量。
-
信息缺失
one-hot编码无法表达词与词之间的语义关系。例如,“cat” 和 “dog” 的表示完全不同,尽管它们在语义上很接近。
-
-
优缺点:
- 优点:实现简单,容易理解
- 缺点:高维度稀疏向量的特性导致其计算效率低下,无法捕捉词之间的语义相似性.在大语料集下,每个向量的长度过大,占据大量内存
one-hot的编码实现
核心思路: 使用Tokenizer + 列表构成的向量 实现
-
创建
Tokenizer
示例
tokenizer = Tokenizer()
- Tokenizer() 是
Keras.preprocessing.text
模块中的一个文本处理类。 - 它用于 构建词典,并提供方法将文本转换为整数索引或其他格式(如 One-hot、词频矩阵等)。
- 默认情况下,它会自动对文本进行标记化(Tokenization),并创建一个 word_index(单词到索引的映射)
- Tokenizer() 是
-
训练
Tokenizer
tokenizer.fit_on_texts(texts=vocabs)
- fit_on_texts(texts)用于基于提供的文本数据构建词典。
- texts(这里是 vocabs)应该是一个包含多个句子的列表,每个句子是一个字符串。
- Tokenizer 解析所有文本,统计每个单词的出现次数,并将单词转换为唯一的整数索引。
-
Tokenizer
的主要属性word_index
单词到索引的映射 => 字典类型的成员属性word_counts
(单词出现次数)texts_to_sequences()
(文本转索引序列)
构建one-hot编码器
from tensorflow.keras.preprocessing.text import Tokenizer
import joblib
# 根据语料库生成one-hot编码器
def dm_onehot_gen():"""1.准备语料2.实例化词汇映射器Tokenizer,使用映射器拟合现有文本 -> 生成 index_word word_index3.查询单词的索引下标4.保存映射器"""# 1. 准备语料vocabs = {"周杰伦", "陈奕迅", "王力宏", "李宗盛", "范丞丞", "杨宗纬"}# 2.实例化词汇映射器Tokenizer,使用映射器拟合现有文本 -> 生成 index_word word_indextokenizer = Tokenizer()tokenizer.fit_on_texts(texts=vocabs)print(tokenizer.word_index)# 3.查询单词的 idxfor vocab in vocabs:zero_list = [0] * len(vocabs)# 注意!! tokenizer生成的`word_index`字典是从下标1开始的idx = tokenizer.word_index[vocab] - 1zero_list[idx] = 1print(f'{vocab}的one-hot编码是->\t{zero_list}')# 4. 保存映射器path = './model/tokenizer'joblib.dump(tokenizer, filename=path)print('save tokenizer.....done')
使用one-hot编码器
def dm_one_hot_use(token = '周杰伦'):"""1.加载映射器2.查询单词的索引下标,赋值给zero_list,生成one-hot向量:return:"""# 2. 加载映射器tokenizer = joblib.load('./model/tokenizer')# 3.根据给定的token查询词表进行编码zero_list = [0] * len(tokenizer.word_index)cursor = tokenizer.word_index.get(token)if cursor is not None:idx = cursor - 1zero_list[idx] = 1print(f'{token}的one-hot向量表示为->{zero_list}')else:print('语料库中找不到该词语~')raise Exception
Word2Vec
-
概念
- Word2Vec是一种流行的将词汇表示成向量的无监督训练方法,该过程将构建神经网络模型,将网络参数作为词汇的向量表示,通过上下文信息来学习词语的分布式表示(即词向量)。它包含CBOW和skipgram两种训练模式。
- Word2Vec实际上利用了文本本身的信息来构建 “伪标签”。模型不是被人为地告知某个词语的正确词向量,而是通过上下文词语来预测中心词(CBOW)或者通过中心词来预测上下文词语(Skip-gram)。
- Word2Vec的目标是将每个词转换为一个固定长度的向量,这些向量能够捕捉词与词之间的语义关系。
-
特点
-
低维稠密表示
Word2Vec通过训练得到的词向量通常是稠密的,即大部分值不为零,每个向量的维度较小(通常几十到几百维)。
-
捕捉语义关系
Word2Vec可以通过词向量捕捉到词之间的语义相似性,例如通过向量运算可以发现"king"-“man”+“woman"≈"queen”。
-
-
优缺点
- 优点:能够生成稠密的词向量,捕捉词与词之间的语义关系,计算效率高。
- 缺点:需要大量的语料来训练,且可能不适用于某些特定任务(例如:词语的多义性)。
-
CBOW(Continuous bag of words)模式
- 概念:给定一段用于训练的 上下文词汇(周围词汇),预测目标词汇
例如,在句子"the quick brown fox jumps over the lazy dog"中,如果目标词是"jumps",则CBOW模型使用"the",“quick”,“brown”,“fox”,“over”,“the”,“lazy”,“dog"这些上下文词来预测"jumps”。
图中窗口大小为9, 使用前后4个词汇对目标词汇进行预测。
CBOW的核心思想:语义相近的词在相似的上下文中出现。
CBOW的模型架构
- 输入层:将上下文词的one-hot编码输入模型(窗口内的词,忽略顺序)。
- 隐藏层:对上下文词向量求平均,生成一个D维向量(词向量的中间表示)。
- 输出层:通过softmax或负采样,将隐藏层向量映射到词汇表概率分布,预测目标词。
CBOW的前向传播过程
-
输入层 → 隐藏层
-
每个上下文词通过权重矩阵 WW(维度 V×D,V为词汇表大小)映射为D维向量。
-
隐藏层输出为上下文词向量的平均值:
h = 1 C ∗ Σ c = 1 C W ∗ x c h=\frac{1}C * Σ_{c=1}^{C}W *x_c h=C1∗Σc=1CW∗xc(C为上下文词数量,** x c x_c xc**为第c个词的one-hot向量)。
-
-
隐藏层 → 输出层
-
隐藏层向量通过权重矩阵 W′W′(维度 D×V)映射到词汇表空间: u = ( W ′ ) T ⋅ h u=(W′)^T⋅h u=(W′)T⋅h
-
使用softmax计算目标词概率分布:
p ( w t ∣ c o n t e x t ) = e x p ( u w t ) Σ v = 1 V e x p ( u w t ) p(wt∣context)=\frac{exp(u_{w_t})}{Σ^{V}_{v=1}exp(u_{w_t})} p(wt∣context)=Σv=1Vexp(uwt)exp(uwt)
-
-
损失函数和优化
- 损失函数: 多分类下的交叉熵损失(实际目标词为one-hot编码): L = − l o g ( p ( w t ∣ c o n t e x t ) ) L=−log(p(w_t∣context)) L=−log(p(wt∣context))
- 参数更新:通过反向传播更新权重矩阵 W 和 W′。
- 仅更新与当前上下文词和目标词相关的行或列(稀疏更新)。
CBOW过程说明
-
假设我们给定的训练语料只有一句话: Hope can set you free (愿你自由成长),窗口大小为3,因此模型的第一个训练样本来自Hope can set,因为是CBOW模式,所以将使用Hope和set作为输入,can作为输出,在模型训练时,Hope,can,set等词汇都使用它们的one-hot编码。如图所示: 每个one-hot编码的单词与各自的变换矩阵(即参数矩阵3x5->随机初始化,这里的3是指最后得到的词向量维度)相乘,得到上下文表示矩阵(3x1),也就是词向量。将所有上下文词语的词向量按元素平均,得到平均词向量。
-
接着, 将上下文表示矩阵(平均词向量)与变换矩阵(参数矩阵5x3->随机初始化,所有的变换矩阵共享参数)相乘,得到5x1的结果矩阵,使用softmax函数将得分向量转换为概率分布,它将与我们真正的目标矩阵即can的one-hot编码矩阵(5x1)进行损失的计算,然后更新网络参数完成一次模型迭代。
-
最后窗口按顺序向后移动,重新更新参数,直到所有语料被遍历完成,得到最终的变换矩阵(3x5),这个变换矩阵与每个词汇的one-hot编码(5x1)相乘,得到的3x1的矩阵就是该词汇的word2vec张量表示。
-
Skip-gram模式
-
概念:给定一个目标词,预测其上下文词汇。
例如,在句子"the quick brown fox jumps over the lazy dog"中,如果目标词是"jumps",skip-gram模型尝试预测它周围的词,如"the",“quick”,“brown”,“fox”,“over”,“the”,“lazy”,“dog”。
图中窗口大小为9,使用目标词汇对前后四个词汇进行预测。
- 核心思想:一个词的含义可以通过其周围的上下文词来表征。
Skip-gram的模型结构:
- 输入层: 输入目标词的one-hot编码。
- 隐藏层: 将目标词映射成D维向量(转换为低维稠密向量)
- 输出层:通过softmax或负采样,预测窗口内所有上下文词的概率分布。
Skip-gram的前向传播过程
-
输入层 → 隐藏层
- 目标词的one-hot编码 x 通过权重矩阵 W**(维度 V×D)映射为D维向量: h = W T ⋅ x h=W^T⋅x h=WT⋅x
- 此向量 h 直接表示目标词的词向量。
-
隐藏层 → 输出层
- 对每个上下文词位置,计算其概率分布: u c = ( W ′ ) T ⋅ h , ( c = 1 , 2 , … , C ) u_c=(W′)^T⋅h ,(c=1,2,…,C) uc=(W′)T⋅h,(c=1,2,…,C)
W′是输出权重矩阵,维度 D×V ,C 为窗口内上下文词总数
- 使用softmax为每个上下文位置生成概率:
p ( w c ∣ w t ) = e x p ( u c , w c ) Σ v = 1 V e x p ( u c , w c ) p(wc∣wt)=\frac{exp(uc,wc)}{Σ^{V}_{v=1}exp(uc,wc)} p(wc∣wt)=Σv=1Vexp(uc,wc)exp(uc,wc)
-
损失函数与优化
- 损失函数:对每个上下文词计算交叉熵损失,并求和: L = − ∑ c = 1 C l o g p ( w c ∣ w t ) L=−∑_{c=1}^Clogp(wc∣wt) L=−∑c=1Clogp(wc∣wt)
- 参数更新:通过反向传播更新 WW 和 W′W′,仅涉及目标词和上下文词相关的行或列。
-
-
Skip-gram模式下的word2vec过程说明
-
假设我们给定的训练语料只有一句话: Hope can set you free (愿你自由成长),窗口大小为3,因此模型的第一个训练样本来自Hope can set,因为是skip-gram模式,所以将使用can作为输入,Hope和set作为输出,在模型训练时,Hope、can、set等词汇都使用它们的one-hot编码。如图所示: 将can的one-hot编码与变换矩阵(即参数矩阵3x5, 这里的3是指最后得到的词向量维度)相乘, 得到目标词汇表示矩阵(3x1)。
-
接着, 将目标词汇表示矩阵与多个变换矩阵(参数矩阵5x3)相乘, 得到多个5x1的结果矩阵,使用softmax函数将得分向量转换为概率分布,它将与我们Hope和set对应的one-hot编码矩阵(5x1)进行损失的计算, 然后更新网络参数完成一次模 型迭代。
-
最后窗口按序向后移动,重新更新参数,直到所有语料被遍历完成,得到最终的变换矩阵即参数矩阵(3x5),这个变换矩阵与每个词汇的one-hot编码(5x1)相乘,得到的3x1的矩阵就是该词汇的word2vec张量表示。
-
-
词向量的检索获取
-
神经网络训练完毕后,神经网络的参数矩阵w就我们的想要词向量。如何检索某1个单词的向量呢?以CBOW方式举例说明如何检索a单词的词向量。
-
如下图所示:a的onehot编码[10000],用参数矩阵[3,5] * a的onehot编码[10000],可以把参数矩阵的第1列参数给取出来,这个[3,1]的值就是a的词向量。
-
Word2Vec的编码实现
使用的核心库与函数介绍
fasttext
:是facebook开源的一个词向量与文本分类工具。
下面是该工具包的安装方法:
-
官网(fasttext-wheel)下载对应操作系统对应python解析器版本的
fasttext
模块的whl文件 -
进入到base虚拟环境,然后在whl文件目录下通过以下命令安装
# 当前目录下要有whl文件名称 pip install asttext_wheel-0.9.2-cp311-cp311-win_amd64.whl
使用到的函数:fasttext.train_unsuperised
函数功能:返回一个无监督训练过后的词向量训练模型部分超参数解释
input:输入的文件路径
model:'skipgram'或者'cbow', 默认为'skipgram',在实践中,skipgram模式在利用子词方面比cbow更好.
dim:词嵌入维度
epoch:训练迭代次数
lr:学习率
thread:使用的线程数
实现流程
数据来源:http://mattmahoney.net/dc/enwik9.zip
- 原始数据预处理
# 使用wikifil.pl文件处理脚本来清除XML/HTML格式的内容
perl wikifil.pl data/enwik9 > data/fil9 # 该命令已经执行
- 词向量的训练
import fasttextdef word2vec_train():model = fasttext.train_unsupervised(input='./data/fil9', model='skipgram', dim=300, lr=1e-1, epoch=1, thread=12)print('word2vec->done')model.save_model(path='./model/fil9.bin')print('model->save')
- 模型效果检验
def model_use(k=10):model = fasttext.load_model(path='./model/fil9.bin')vector = model.get_word_vector(word='the')print(f'the的词向量表示为{vector}')nn = model.get_nearest_neighbors(word='the', k=k)print(f'the的{k}个最相近邻居为:{nn}')
词嵌入 Word Embedding
Word Embedding(词嵌入)是一种将自然语言中的词语映射到低维连续向量空间的技术,使得词语的语义和语法关系能通过向量间的距离和方向体现。它是自然语言处理(NLP)的基础技术之一。
经典模型与方法
- Word2Vec(2013)
- Skip-Gram:通过中心词预测上下文词。
- CBOW(Continuous Bag-of-Words):通过上下文词预测中心词。
- 示例:
king - man + woman ≈ queen
(向量运算体现语义关系)。
Word2Vec是一种Word Embedding方法,专门用于生成词的稠密向量表示。Word2Vec通过神经网络训练,利用上下文信息将每个词表示为一个低维稠密向量。
- GloVe(2014)
基于全局词共现矩阵,结合统计信息与局部上下文,优化词语的向量表示。 - 上下文相关嵌入
- ELMo(2018):通过双向LSTM生成动态词向量,同一词在不同语境中有不同表示。
- BERT(2018):基于Transformer的预训练模型,通过掩码语言建模(MLM)捕捉深层上下文信息。
编码实现(了解)
import jieba
import torch
from tensorflow.keras.preprocessing.text import Tokenizer
import torch.nn as nndef dm_embedd():# todo:1-创建文本句子, 生成文本sentence1 = '哎呀~今天天气真好'sentence2 = "只因你实在是太美"sentences = [sentence1, sentence2]print('sentences->', sentences)# todo: 2-获取文本词列表word_list = list()for s in sentences:word_list.append(jieba.lcut(s))print('word_list->', word_list)# todo: 3- 借助Tokenizer类,实现下标与词的映射字典,文本下标表示"""Tokenizer类的参数:num_words: the maximum number of words to keep, basedon word frequency. Only the most common `num_words-1` words willbe kept.filters: a string where each element is a character that will befiltered from the texts. The default is all punctuation, plustabs and line breaks, minus the `'` character.lower: boolean. Whether to convert the texts to lowercase.split: str. Separator for word splitting.char_level: if True, every character will be treated as a token.oov_token: if given, it will be added to word_index and used toreplace out-of-vocabulary words during text_to_sequence callsanalyzer: function. Custom analyzer to split the text.The default analyzer is text_to_word_sequence"""tokenizer = Tokenizer()tokenizer.fit_on_texts(texts=word_list)# 打印 my_token_listmy_token_list = tokenizer.index_word.values() # <class 'dict_values'># print('my_token_list->', my_token_list)# 打印文本数值化后的句子sentence2id = tokenizer.texts_to_sequences(texts=word_list)# print('sentence2id->', sentence2id)# todo: 4- 创建nn.Embedding层embed = nn.Embedding(num_embeddings=len(my_token_list), embedding_dim=8)# print('embed--->',embed)# print('nn.Embedding层词向量矩阵-->', embed.weight.data, embed.weight.data.shape, type(embed.weight.data))# # todo: 5-创建SummaryWriter对象# from torch.utils.tensorboard import SummaryWriter# summary_writer = SummaryWriter(log_dir='./data/runs')# # add_embedding(mat=embed.weight.data, metadata=my_token_list)# # mat:词向量表示 张量或numpy数组# # metadata:词标签# # 作用: 将高维数据(如词嵌入、特征向量等)投影到低维空间(通常是二维或三维),以便在 TensorBoard 的 Embedding Projector 中进行可视化。# summary_writer.add_embedding(mat=embed.weight.data, metadata=my_token_list)# summary_writer.close()# todo: 5-创建SummaryWriter对象from torch.utils.tensorboard import SummaryWritersummary_writer = SummaryWriter(log_dir='./data/runs')# add_embedding(mat=embed.weight.data, metadata=my_token_list)# mat:词向量表示 张量或numpy数组# metadata:词标签# 作用: 将高维数据(如词嵌入、特征向量等)投影到低维空间(通常是二维或三维),以便在 TensorBoard 的 Embedding Projector 中进行可视化。summary_writer.add_embedding(mat=embed.weight.data, metadata=my_token_list)summary_writer.close()# todo: -6 从nn.Embedding层中根据idx拿词向量for idx in range(len(my_token_list)):tmp_vector = embed(torch.tensor(idx))print(f'{tokenizer.index_word[idx + 1]}的词嵌入向量为:{tmp_vector.detach().numpy()}')
相关文章:
02_NLP文本预处理之文本张量表示法
文本张量表示法 概念 将文本使用张量进行表示,一般将词汇表示为向量,称为词向量,再由各个词向量按顺序组成矩阵形成文本表示 例如: ["人生", "该", "如何", "起头"]># 每个词对应矩阵中的一个向量 [[1.32, 4,32, 0,32, 5.2],[3…...
青蛙跳杯子(BFS)
#include <iostream> #include <queue> #include <string> #include <unordered_set> using namespace std;int main() {string a, b;cin >> a >> b; int n a.size(); // 字符串长度int d[] {1, -1, -2, 2, -3, 3}; // 跳跃距离queue&…...
【前端基础】1、HTML概述(HTML基本结构)
一、网页组成 HTML:网页的内容CSS:网页的样式JavaScript:网页的功能 二、HTML概述 HTML:全称为超文本标记语言,是一种标记语言。 超文本:文本、声音、图片、视频、表格、链接标记:由许许多多…...
Arm64架构的Linux服务器安装jdk8
一、下载 JDK8 打开浏览器,访问 oracle官网找到适用于自己服务器的 arm64 架构的 JDK8 安装包。 二、安装 JDK8 将下载好的 JDK 压缩包上传到服务器上 解压 JDK 压缩包: tar -zxvf jdk-8uXXX-linux-arm64.tar.gz选择安装目录,我将 JDK 安装…...
深入探索Python机器学习算法:模型调优
深入探索Python机器学习算法:模型调优 文章目录 深入探索Python机器学习算法:模型调优模型调优1. 超参数搜索方法1.1 网格搜索(Grid Search)1.2 随机搜索(Random Search)1.3 贝叶斯优化(Bayesia…...
【Linux】冯诺依曼体系结构-操作系统
一.冯诺依曼体系结构 我们所使用的计算机,如笔记本等都是按照冯诺依曼来设计的: 截止目前,我们所知道的计算机都是由一个一个的硬件组装起来的,这些硬件又由于功能的不同被分为了输入设备,输出设备,存储器…...
Linux第五讲----gcc与g++,makefile/make
1.代码编译 1.1预处理 我们通过vim编辑完文件之后,想看一下运行结果这时我们便可以试用gcc编译C语言,g编译c. 编译代码: 上述两种方法均可,code.c是我的c语言文件,mycode是我给编译后产生的二进制文件起的名&#x…...
FastGPT 源码:基于 LLM 实现 Rerank (含Prompt)
文章目录 基于 LLM 实现 Rerank函数定义预期输出实现说明使用建议完整 Prompt 基于 LLM 实现 Rerank 下边通过设计 Prompt 让 LLM 实现重排序的功能。 函数定义 class LLMReranker:def __init__(self, llm_client):self.llm llm_clientdef rerank(self, query: str, docume…...
Virtual Box虚拟机安装Mac苹果Monterey和big sur版本实践
虚拟机安装苹果实践,在Windows10系统,安装Virtual Box7.1.6,安装虚拟苹果Monterey版本Monterey (macOS 12) 。碰到的主要问题是安装光盘不像Windows那么容易拿到,而且根据网上很多文章制作的光盘,在viritualBox里都无法…...
【高并发】Java 并行与串行深入解析:性能优化与实战指南
Java 并行与串行深入解析:性能优化与实战指南 在高性能应用开发中,我们常常会面临 串行(Serial) 和 并行(Parallel) 的选择。串行执行任务简单直观,但并行能更高效地利用 CPU 资源,…...
软考中级-数据库-3.2 数据结构-数组和矩阵
数组 一维数组是长度固定的线性表,数组中的每个数据元素类型相同。n维数组是定长线性表在维数上的扩张,即线性表中的元素又是一个线性表。 例如一维数组a[5][a1,a2,a3,a4,a5] 二维数组a[2][3]是一个2行2列的数组 第一行[a11,a12,a13] 第二行[a21,a22,a23…...
LeetCode 解题思路 9(Hot 100)
解题思路: 遍历并调整数组: 对于每个元素 nums[i],若其值为正且不超过数组长度 len,则将其逐步交换到它应该在的位置。查找缺失的正整数: 遍历调整后的数组,若某个位置的值不等于其索引加1,则说…...
交叉编译 perl-5.40.0 perl-cross-1.5.3
1.下载地址: https://www.cpan.org/src/5.0/ https://github.com/arsv/perl-cross/tags2.编译 # 进入源码目录 cd /opt/snmp/perl # 合并perl-cross到Perl源码 cp -R perl-cross-1.5.3/* perl-5.40.0/ cd perl-5.40.0./configure --targetaarch64-poky-linux --p…...
go前后端开源项目go-admin,本地启动
https://github.com/go-admin-team/go-admin 教程 1.拉取项目 git clone https://github.com/go-admin-team/go-admin.git 2.更新整理依赖 go mod tidy会整理依赖,下载缺少的包,移除不用的,并更新go.sum。 # 更新整理依赖 go mod tidy 3.编…...
突破光学成像局限:全视野光学血管造影技术新进展
全视野光学血管造影(FFOA)作为一种实时、无创的成像技术,能够提取生物血液微循环信息,为深入探究生物组织的功能和病理变化提供关键数据。然而,传统FFOA成像方法受到光学镜头景深(DOF)的限制&am…...
RefuseManualStart/Stop增强Linux系统安全性?详解systemd单元保护机制
一、引子:一个“手滑”引发的血案 某天凌晨,运维工程师小张在维护生产服务器时,误输入了 systemctl start reboot.target,导致整台服务器瞬间重启,线上服务中断30分钟,直接损失数十万元。事后排查发现&…...
国产编辑器EverEdit - 超级丰富的标签样式设置!
1 设置-高级-标签 1.1 设置说明 选择主菜单工具 -> 设置 -> 常规,在弹出的选项窗口中选择标签分类,如下图所示: 1.1.1 多文档标签样式 默认 平坦 渐变填充 1.1.2 停靠窗格标签样式 默认 平坦 渐变填充 1.1.3 激活Tab的…...
装饰器模式:灵活扩展对象功能的利器
一、从咖啡加料说起:什么是装饰器模式? 假设您走进咖啡馆点单: 基础款:美式咖啡(15元)加料需求:加牛奶(3元)、加焦糖(5元)、加奶油(…...
# [Linux] [Anaconda]解决在 WSL Ubuntu 中安装 Anaconda 报错问题
在 Windows 10 中安装了 WSL(Windows Subsystem for Linux)并使用 Ubuntu 后,你可能会下载 Anaconda 的 Linux 版本进行安装。但在安装过程中,可能会遇到 tar (child): bzip2: Cannot exec: No such file or directory 这样的错误…...
【回溯】216. 组合总和 III
题目 216. 组合总和 III 思路 不知道for有几层时,使用回溯,比上一题多了一个条件,组合需要和为n。 代码 class Solution { private:vector<vector<int>>result;vector<int>path;void backtracking(int target,int k,i…...
AI编程工具-(四)
250304今天用【通义灵码】做了下简单的分析建模工作。不够丝滑,但是在数据预处理方面还是有用。 目录 准备工作一分析工作建模结论 这个数据集是网上随手找的时许指标数据,然后分析时序指标A和B关联关系。 准备工作一 问大模型,这个场景有哪…...
一种事件驱动的设计模式-Reactor 模型
Reactor 模型 是一种事件驱动的设计模式,主要用于处理高并发的 I/O 操作(如网络请求、文件读写等)。其核心思想是通过事件分发机制,将 I/O 事件的监听和处理解耦,从而高效管理大量并发连接,避免传统多线程模…...
AI-Ollama本地大语言模型运行框架与Ollama javascript接入
1.Ollama Ollama 是一个开源的大型语言模型(LLM)平台,旨在让用户能够轻松地在本地运行、管理和与大型语言模型进行交互。 Ollama 提供了一个简单的方式来加载和使用各种预训练的语言模型,支持文本生成、翻译、代码编写、问答等多种…...
XPath路径表达式
1. 绝对路径表达式 语法:/根元素/子元素/子子元素... 特点**:**必须从根元素开始,完整地逐层写路径。 示例代码: <!-- XML结构 --> <school> <class id"1"> <student>小明</student> &l…...
大语言模型的逻辑:从“鹦鹉学舌”到“举一反三”
引言 近年来,大语言模型(LLM)在自然语言处理领域取得了突破性进展,其强大的文本生成和理解能力令人惊叹。然而,随着应用的深入,人们也开始关注LLM的“逻辑”问题:它究竟是机械地模仿人类语言&a…...
从0到1构建AI深度学习视频分析系统--基于YOLO 目标检测的动作序列检查系统:(0)系统设计与工具链说明
文章大纲 系统简介Version 1Version2环境摄像机数据流websocket 发送图像帧RTSP 视频流树莓派windows消息队列参考文献项目地址提示词系统简介 Version 1 Version2 环境 # 配置 conda 源 # 配置conda安装源 conda config --add channels https://mirrors.tuna.tsinghua.edu.c…...
在Linux环境部署SpringBoot项目
在xshell中手动开放8080端口 sudo ufw allow 8080/tcp systemctl reload ufw systemctl restart ufw 配置文件要求 也可以使用maven来分平台 部署到linux服务器上 1.建一个文件夹 2.将jar包拖拽到文件夹中 3.运行nohup java -jar jar包 &的命令启动程序 //后台启动 …...
8. 保存应用数据
一、课程笔记 1.0 引入 针对那些体积小,访问频率高,且对它的速度有一定要求的轻量化数据。例如,用户偏好设置用配置参数等,使用传统的惯性数据库进行存储,不惊险的笨重,还可能引入不必要的性能开销。 此时…...
ADC采集模块与MCU内置ADC性能对比
2.5V基准电压源: 1. 精度更高,误差更小 ADR03B 具有 0.1% 或更小的初始精度,而 电阻分压方式的误差主要来自电阻的容差(通常 1% 或 0.5%)。长期稳定性更好,分压电阻容易受到温度、老化的影响,长…...
量子算法:英译名、概念、历史、现状与展望?
李升伟 整理 #### 英译名 量子算法的英文为 **Quantum Algorithm**。 #### 概念 量子算法是利用量子力学原理(如叠加态、纠缠态和干涉)设计的算法,旨在通过量子计算机高效解决经典计算机难以处理的问题。其核心在于利用量子比特(…...
水仙花数(华为OD)
题目描述 所谓水仙花数,是指一个n位的正整数,其各位数字的n次方和等于该数本身。 例如153是水仙花数,153是一个3位数,并且153 13 53 33。 输入描述 第一行输入一个整数n,表示一个n位的正整数。n在3到7之间&#x…...
基于编程语言的建筑行业施工图设计系统开发可行性研究————从参数化建模到全流程自动化的技术路径分析
基于编程语言的建筑行业施工图设计系统开发可行性研究————从参数化建模到全流程自动化的技术路径分析 文章目录 **基于编程语言的建筑行业施工图设计系统开发可行性研究————从参数化建模到全流程自动化的技术路径分析** 摘要引言一、技术可行性深度剖析1.1 现有编程语言…...
【Linux】【网络】UDP打洞-->不同子网下的客户端和服务器通信(未成功版)
【Linux】【网络】UDP打洞–>不同子网下的客户端和服务器通信(未成功版) 上次说基于UDP的打洞程序改了五版一直没有成功,要写一下问题所在,但是我后续又查询了一些资料,成功实现了,这次先写一下未成功的…...
C# 中的Action和Func是什么?Unity 中的UnityAction是什么? 他们有什么区别?
所属范围:Action 和 Func 是 C# 语言标准库中的委托类型,可在任何 C# 项目里使用;UnityAction 是 Unity 引擎专门定义的委托类型,只能在 Unity 项目中使用。 返回值:Action 和 UnityAction 封装的方法没有返回值&…...
SparkStreaming之03:容错、语义、整合kafka、Exactly-Once、ScalikeJDBC
SparkStreaming进阶 一 、要点:star:4.1 SparkStreaming容错4.1.1 SparkStreaming运行流程4.1.2 如果Executor失败?:star:4.1.3 如果Driver失败?4.1.4 数据丢失如何处理:star:4.1.5 当一个task很慢容错 :star:4.2 SparkSreaming语义4.3 SparkStreaming与…...
让单链表不再云里雾里
一日不见,如三月兮!接下来与我一起创建单链表吧! 目录 单链表的结构: 创建单链表: 增加结点: 插入结点: 删除结点: 打印单链表: 单链表查找: 单链表…...
Linux系统管理(十八)——Ubuntu Server环境下载安装图形化界面、英伟达显卡驱动、Cuda、cudnn、conda的深度学习环境
安装ubuntu系统 镜像源地址:https://ubuntu.com/download/server 安装镜像是最好联网,这样不需要自己配置网络地址,会自动生成动态地址 配置镜像源 在装系统时最好设置好镜像源地址 清华镜像源:https://mirrors.tuna.tsinghua.…...
深度学习的隐身术:详解 PyTorch nn.Dropout
前言 你是否遇到过这样的情况?训练时模型表现得像个学霸,准确率高得离谱,可一到测试集就原形毕露,像是考试作弊被抓包的学生,成绩一落千丈。这种现象叫过拟合,你的模型可能只是死记硬背了训练数据,并没有真正理解其中的模式。 别慌!解决过拟合的方法之一就是Dropout,…...
vscode工作区看不清光标
案例分析: 有的时候当我们把vscode的背景色设置成黑色或者默认黑色时 "workbench.colorTheme": "Visual Studio Dark"这时鼠标指针在非停留状态(指针移动时就看不清),需要改下系统的鼠标指针设置,而不是vscode的光标设置…...
2025-03-04 学习记录--C/C++-PTA 习题5-4 使用函数求素数和
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻 一、题目描述 ⭐️ 二、代码(C语言)⭐️ #include <stdio.h>// 函数声明:判断一个数是…...
Open3D 学习指南 (持续学习)
本章仅为个人学习整理。 Open3D: https://www.open3d.org/ Github repo: https://github.com/isl-org/Open3D 1. 概述 Open3D 是一个开源库,旨在为 3D 数据处理提供高效且易用的工具。它由 Intel 开发和维护,支持多种 3D 数据处理任务,如…...
端口安全测试全方位指南:风险、流程与防护策略
在数字化时代,网络安全至关重要,而端口安全作为网络防护的前沿阵地,稍有疏忽就可能为恶意攻击者打开入侵的大门。以下为您详细阐述端口安全测试的全面流程、核心风险点、应对策略及防护建议。 一、测试前的周密筹备 (一…...
3dsmax烘焙光照贴图然后在unity中使用
效果预览 看不清[完蛋!] 实现步骤 使用 软件 软体名称地址photoshophttps://www.adobe.com/products/photoshop.htmlunity3Dhttps://unity.com/3dsmaxhttps://www.autodesk.com.cn/products/3ds-max/free-trialpacker-iohttps://www.uv-packer.com/HDR 贴图地址…...
GCN从理论到实践——基于PyTorch的图卷积网络层实现
Hi,大家好,我是半亩花海。图卷积网络(Graph Convolutional Network, GCN)是一种处理图结构数据的深度学习模型。它通过聚合邻居节点的信息来更新每个节点的特征表示,广泛应用于社交网络分析、推荐系统和生物信息学等领…...
Ollama存在安全风险的情况通报及解决方案
据清华大学网络空间测绘联合研究中心分析,开源跨平台大模型工具Ollama默认配置存在未授权访问与模型窃取等安全隐患。鉴于目前DeepSeek等大模型的研究部署和应用非常广泛,多数用户使用Ollama私有化部署且未修改默认配置,存在数据泄露、算力盗…...
大模型在高血压预测及围手术期管理中的应用研究报告
目录 一、引言 1.1 研究背景与意义 1.2 研究目的 1.3 国内外研究现状 二、大模型预测高血压的原理与方法 2.1 常用大模型介绍 2.2 数据收集与预处理 2.3 模型训练与验证 三、术前风险预测与手术方案制定 3.1 术前风险因素分析 3.2 大模型预测术前风险的方法与结果 …...
网络安全rt是什么意思
1.什么时EDR :完全不同以往的端点被防护思路,而是通过云端威胁情报,机器学习,异常行为分析,攻击指示器等方式,主动发现来自外部或内部的安全威胁 。并进行自动化的阻止,取证,补救和溯源从而有效…...
数据结构篇—栈(stack)
一、引入 在数学史上有这样一个经典问题——汉诺塔问题。 通过动图演示我们发现每一个圆片的运动是什么样的呢? 我们发现,第一个放入的最大圆片将位于整个塔的最底端。所以若想将最大圆片拿出来,就得将压在它身上的所有圆片先按顺序取出才能将…...
python3.13安装教程【2025】python3.13超详细图文教程(包含安装包)
文章目录 前言一、python3.13安装包下载二、Python 3.13安装步骤三、Python3.13验证 前言 本教程将为你详细介绍 Python 3.13 python3.13安装教程,帮助你顺利搭建起 Python 3.13 开发环境,快速投身于 Python 编程的精彩实践中。 一、python3.13安装包下…...
动态内存分配
动态内存分配 1. malloc1.1函数原型1.2参数1.3特点1.4注意事项 2.calloc2.1函数原型2.2参数2.3特点2.4注意事项 3.realloc3.1函数原型3.2参数3.3特点3.4注意事项 4.free4.1 函数原型4.2参数4.3特点 结语 在 C 语言中,主要使用标准库函数 <stdlib.h> 中的几个函…...