09.C2W4.Word Embeddings with Neural Networks
往期文章请点这里
目录
- Overview
- Basic Word Representations
- Integers
- One-hot vectors
- Word Embeddings
- Meaning as vectors
- Word embedding vectors
- Word embedding process
- Word Embedding Methods
- Basic word embedding methods
- Advanced word embedding methods
- Continuous Bag-of-Words Model
- Center word prediction: rationale
- Creating a training example
- From corpus to training
- Cleaning and Tokenization
- Cleaning and tokenization matters
- Example in Python
- corpus
- libraries
- code
- Sliding Window of Words in Python
- Transforming Words into Vectors
- Transforming center words into vectors
- Transforming context words into vectors
- Final prepared training set
- Architecture of the CBOW Model
- Dimensions
- single input
- batch input
- Activation Functions
- Rectified Linear Unit (ReLU)
- Softmax
- Softmax: example
- Training a CBOW Model: Cost Function
- Loss
- Cross-entropy loss
- Training a CBOW Model: Forward Propagation
- Forward propagation
- Cost
- Training a CBOW Model: Backpropagation and Gradient Descent
- Backpropagation
- Gradient descent
- Extracting Word Embedding Vectors
- option 1
- option 2
- option 3
- Evaluating Word Embeddings
- Intrinsic evaluation
- Extrinsic Evaluation
往期文章请点这里
Overview
了解word embeddings一些基础应用
高级应用:
学习目标(需要掌握NN):
●Identify the key concepts of word representations
●Generate word embeddings
●Prepare text for machine learning
●Implement the continuous bag-of-words model
Basic Word Representations
Integers
直接使用唯一的Integers对单词进行编码,优点是简单:
缺点是无法表达单词的语义信息:
One-hot vectors
使用0-1词向量来表示单词,向量长度与词表长度相同:
每一个单词可以使用其对应列为1,其他列为0的方式来表示:
Integers和独热编码可以相互转化
独热编码的优点是简单,没有暗含单词的排序信息;
但仍然没有语义信息:
且当词表较大时,向量长度很长:
Word Embeddings
Meaning as vectors
向量是否能包含语义?当然可以,这里用低维向量来进行演示:
上图是一个情感分析或情感评分的示例,它表示了一些词汇与它们对应的情感分数。
有8个词汇:spider, boring, kitten, happy, anger, paper, excited, rage。
这些词汇被分为4组,每组两个词,每组词旁边有括号内的情感分数,表示这些词与特定情感的关联强度。
第一组:spider (-2.52), boring (-2.08),这些分数可能是负数,表明它们与负面情绪相关。
第二组:kitten (-1.53), happy (-0.91),这些分数接近零或稍微负,可能表示它们与轻微的负面情绪或中性情绪相关。
第三组:anger (0.03), paper (1.09),分数从接近零到正数,表明它们与正面情绪或中性情绪相关。
第四组:excited (2.31), rage,最后一个词 rage 没有给出分数,但根据上下文,它可能与强烈的负面情绪相关。
图片底部有标尺,从 -2 到 2,分为 negative(负向/消极)、0(中性)和 positive(正向/积极)三个情感区域。
当然还可以加上y轴表示单词的抽象和具体,例如:
当然,这样表示会丢失一些精确性,例如spider和snake都重合了,这个是不合理的。
Word embedding vectors
可以看到词嵌入向量表示有两个优点:
Low dimension(相对独热编码)
Embed meaning:
注意:
one-hot vectors,word embedding vectors都属于word vectors(词向量),但后者在很多场合也叫:“word vectors”,word embeddings
Word embedding process
Corpus对于生成词嵌入很重要,例如你要针对特定领域的单词进行词嵌入,则尽量包含该领域的语料,因为单词受到上下文影响很大,例如apple在农业领域是水果,在科技领域就是公司。
Embedding method这里主要是使用ML的模型,采用自监督的方式训练。
整个流程大概如下图所示:
Word Embedding Methods
Basic word embedding methods
●word2vec (Google, 2013)
○Continuous bag of words (CBOW)
○Continuous skip gram / Skip gram with negative sampling (SGNS)
●Global Vectors (GloVe) (Stanford, 2014)
●fastText (Facebook, 2016)
○Supports out of vocabulary (OOV) words
○训练速度很快
Advanced word embedding methods
Deep learning, contextual embeddings
●BERT (Google, 2018)
●ELMo (Allen Institute for AI, 2018)
●GPT 2 (OpenAI, 2018)
…
这些都是预训练模型,可以对其进行finetune
Continuous Bag-of-Words Model
Center word prediction: rationale
词向量是CBOW任务的副产物,其主线任务是做预测的,根据上下文预测中间词:
因为单词与上下文是有关系的,例如上图中,通过足够打的语料库,模型将学会预测缺失的单词与狗相关。
Creating a training example
中心词(Center word):在这个示例中,中心词是 “happy”。
上下文词(Context words):围绕中心词的词,用于提供上下文信息。在这个例子中,上下文词包括 “because”, “learning”, “am”(出现了两次)。
窗口大小(Window size):指上下文窗口可以包含的总词数。在这个例子中,窗口大小是5。
上下文半尺寸(Context half-size):指窗口一半的大小,通常用于确定窗口在中心词的左侧和右侧分别可以扩展多远。在这个例子中,上下文半尺寸是2,意味着窗口在中心词的左侧和右侧各扩展2个词的位置。
窗口(Window):实际上指的是上下文词围绕中心词的布局。根据窗口大小和上下文半尺寸,窗口包括中心词以及它左右两侧的词。
From corpus to training
根据上面的训练实例,我们对I am happy because I am learning,假设窗口大小为5
Context words | Center word |
---|---|
I am because I | happy |
am happy I am | because |
happy because am learning | I |
Cleaning and Tokenization
Cleaning and tokenization matters
数据清理是预处理阶段的重要步骤,目的是提高文本数据的质量,使其更适合后续的分析和模型训练。
●Letter case
●Punctuation
●Numbers
●Special characters
●Special words
Letter case(字母大小写):
清理操作可能包括将所有文本转换为小写或大写,以消除大小写差异带来的影响。
例如,将 “Hello” 和 “hello” 统一转换为 “hello”,以便模型不会将它们视为两个不同的词。
Punctuation(标点符号):
标点符号的清理可能涉及删除或替换文本中的所有标点符号,因为它们可能对某些NLP任务不重要或会干扰模型的分析。
例如,将句子 “Hello! How are you?” 中的感叹号和问号去除,变为 “Hello How are you”。
Numbers(数字):
数字清理通常指将文本中的数字替换或删除,因为数字可能对某些文本分析任务没有意义或会引入噪声。
例如,将 “I have 3 apples” 中的 “3” 删除或替换,变为 “I have apples”。
Special characters(特殊字符):
特殊字符包括非字母数字的符号,如 @, #, $, % 等。清理这些字符可以简化文本数据,避免它们对模型造成干扰。
例如,将 “email@example.com” 中的 “@” 和 “.” 删除,变为 “emailexamplecom”。
Special words(特殊词汇):
特殊词汇的清理可能包括去除常见的但对分析没有帮助的词,如停用词(stop words,如 “and”, “the” 等)或特定的行业术语。
例如,从 “The quick brown fox jumps over the lazy dog” 中去除 “the” 和 “over” 等停用词。
Example in Python
corpus
libraries
# pip install nltk
# pip install emoji
import nltk
from nltk.tokenize import word_tokenize
import emoji
nltk.download(' punkt') # download pre trained Punkt tokenizer for English
code
corpus = 'Who ❤️"word embeddings" in 2020? I do!!!'
data = re.sub(r'[,!?;-]+', '.', corpus)
结果:
Who ❤️"word embeddings" in 2020. I do.
data = nltk.word_tokenize(data) # tokenize string to words
结果:
[‘Who’, ‘❤️’, ‘``’, ‘word’, ‘embeddings’, “‘’”, ‘in’, ‘2020’, ‘.’, ‘I’, ‘do’, ‘.’]
data = [ ch.lower() for ch in dataif ch.isalpha() or ch == '.'or emoji.get_emoji_regexp().search(ch)]
结果:
[‘who’, ‘❤️’, ‘word’, ‘embeddings’, ‘in’, ‘.’, ‘i’, ‘do’, ‘.’]
Sliding Window of Words in Python
def get_windows (words, C):i = Cwhile i < len(words)-C:center_word = words[i]context_words = words[(i-C):i] + words[(i+ 1 ):(i+C+1)]yield context_words, center_wordi += 1
可以看到i初始化是从i = C=2开始的,也是第一个中心词happy对应的索引,i结束于倒数第三个词len(words)-C,每次i往前移动一个单词
最后使用yield 完成多次返回值传递
for x, y in get_windows([' i', ' am', ' happy', ' because', ' i', ' am', 'learning'],2
):
print(f'{x}\t{y}')
结果:
Transforming Words into Vectors
有了上下文和中心词,接下来就是将它们转化为向量。
Transforming center words into vectors
语料库:I am happy because I am learning
词库:am, because, happy, I, learning
使用独热编码表示每个中心词:
Transforming context words into vectors
使用上下文的独热编码平均值来表示,对于中心词为happy的时候:
Final prepared training set
Context words | Context words vector | Center word | Center word vector |
---|---|---|---|
I am because I | [0.25; 0.25; 0; 0.5; 0] | happy | [0; 0; 1; 0; 0] |
Architecture of the CBOW Model
CBOW 是一个典型的前馈神经网络结构,其中包括输入层、一个或多个隐藏层,以及一个输出层。每一层都包含权重和偏置,以及激活函数来处理数据和进行非线性变换。
Input layer(输入层):这一层接收输入数据,在这个例子中是文本序列 “I am happy because I am learning”。输入数据通常会被转换为数值向量,如词嵌入(Word Embeddings)。
Context words and Center word(上下文词和中心词):在某些模型中,如卷积神经网络(CNN)或循环神经网络(RNN),上下文词可以提供周围词的语境信息,而中心词是当前正在处理的词。
W1, W2, …(权重):这些表示网络中的权重参数,每个权重连接输入层和隐藏层的神经元。
b, b2, …(偏置):偏置参数,用于调整神经元的激活函数的输出。
Hidden layer(隐藏层):输入层之后是隐藏层,隐藏层中的神经元会对输入数据进行处理,提取特征。
Output layer(输出层):隐藏层之后是输出层,输出层的神经元数量通常取决于任务的类别数,用于生成最终的预测结果。
Vector(向量):表示输入文本被转换为固定大小的数值向量,以便神经网络可以处理。
ReLU(Rectified Linear Unit):一种常用的激活函数,用于增加非线性,帮助模型学习更复杂的特征。
softmax:一种在输出层使用的激活函数,用于多分类任务中将输出转换为概率分布。
V = 5:表示词表大小,这里使用独热编码,也是输入向量的维度大小。
X:可能表示输入数据的特征矩阵或特征向量。
当然还有别的超参数可以配置,例如:N: Word embedding size等等…
Dimensions
single input
如果输入不是列向量,而是行向量,则需要使用转置矩阵和矩阵乘法中的倒置项进行计算。
batch input
上面以单个样本作为输入为例,演示了CBOW的各个部分的维度,在实际操作过程中,为了加快运行速度,我们通常一次传入一个batch(批次)的数据,batch_size是一个超参数,下图给出了batch_size=m的例子:
我们将m个样本的列向量合在一起,变成输入矩阵
这里的偏置项写成了大写的B,之前的b是1×N大小的,这里在和矩阵做加法的时候,Python会自动做broadcasting,将其大小扩展到m×N大小:
这里注意输入和输出矩阵中向量于预测结果的对应关系(绿色部分):
Activation Functions
Rectified Linear Unit (ReLU)
这个没有什么好说的,还有很多变体,例如:leakyReLU
输入层经过W和b后,再进入ReLU
z 1 = W 1 x + b 1 h = R e L U ( z 1 ) z_1 = W_1 x + b_1\\ h= ReLU(z_1) z1=W1x+b1h=ReLU(z1)
ReLU公式为:
R e L U ( x ) = max ( 0 , x ) ReLU(x)=\max(0,x) ReLU(x)=max(0,x)
图像为:
下面是一组 z 1 z_1 z1对应的h值:
Softmax
Sofmax是吃隐藏层输出的线性变换:
z = W 2 h + b 2 y ^ = s o f t m a x ( z ) z= W_2 h + b_2\\ \hat y=softmax(z) z=W2h+b2y^=softmax(z)
一组实数经过Sofmax后会得到一组0-1之间的数字(可以说是概率),这一组数字和为1
对于CBOW模型,得到的是每个单词对应的出现概率:
y ^ i \hat y_i y^i的公式如下,其原理就相当于把每个 y ^ i \hat y_i y^i进行标准化,使其概率和为1。
y ^ i = e z i ∑ j = 1 V e z j \hat y_i=\cfrac{e^{z_i}}{\sum_{j=1}^Ve^{z_j}} y^i=∑j=1Vezjezi
Softmax: example
最后预测结果是happy因为其对应的概率值最大。
Training a CBOW Model: Cost Function
Loss
"Loss"通常指的是在机器学习中,模型预测值与实际值之间的差异或误差。在训练机器学习模型的过程中,目标是最小化这个损失函数(Loss function),这样可以使模型的预测更加接近真实值。
具体来说,损失函数是一个衡量模型性能的指标,它计算了模型预测值与真实值之间的差距。不同的机器学习任务会使用不同类型的损失函数。例如:
对于分类问题,常用的损失函数是交叉熵损失(Cross-Entropy Loss)。
对于回归问题,常用的损失函数是均方误差(Mean Squared Error, MSE)。
Cross-entropy loss
CBOW 使用的损失函数形式为:
J = − ∑ k = 1 V y k log y ^ k J=-\sum_{k=1}^Vy_k\log \hat y_k J=−k=1∑Vyklogy^k
真实值和预测值形式为:
对于语料:
I am happy because I am learning
前五个单词中心词是happy,假设其预测值和真实值如下:
按照公式取对数后与真实值进行点乘,然后再求和:
可以看到当预测值与真实值相近的时候,损失值较小。
下面看预测值为am是中心词的情况:
上面的损失函数计算可以进一步简化为:
J = − log y ^ a c t u a l w o r d J=-\log \hat y_{actual\space word} J=−logy^actual word
例如:
J=-log 0.01=4.61,注意这里写的是log其实是ln
根据简化后的公式可以画出其函数图像:
正确中心词对应的预测概率越大,Loss值越小,反正Loss越大。
Training a CBOW Model: Forward Propagation
整个训练过程包含:
●Forward propagation
●Cost
●Backpropagation and gradient descent
Forward propagation
其实在CBOW构架中就cover了前向传播,尝试用自己的话描述下图(注意,这里使用的是batch模式):
你能写出下面公式么?
Cost
“cost”(成本)和"loss"(损失)这两个术语经常被用来描述衡量模型预测与实际值之间差异的函数。尽管在日常使用中它们可能可以互换,但它们在严格意义上有一些区别。损失函数通常用于单个样本,而成本函数则用于整个数据集。在实践中,当我们说“最小化损失”时,我们通常指的是最小化成本函数,因为这是我们在训练模型时优化的总体目标。
这一节中的Cost是指一个Batch的Loss的平均,假设一个batch有m个样本,则:
J b a t c h = − 1 m ∑ i = 1 m ∑ j = 1 V y j ( i ) log y ^ j ( i ) J_{batch}=-\cfrac{1}{m}\sum_{i=1}^m\sum_{j=1}^Vy_j^{(i)}\log \hat y_j^{(i)} Jbatch=−m1i=1∑mj=1∑Vyj(i)logy^j(i)
同样的可以简化为:
J b a t c h = − 1 m ∑ i = 1 m J ( i ) J_{batch}=-\cfrac{1}{m}\sum_{i=1}^mJ^{(i)} Jbatch=−m1i=1∑mJ(i)
Training a CBOW Model: Backpropagation and Gradient Descent
训练模型的目的是最小化cost,按batch的cost 函数有四个变量:
J b a t c h = f ( W 1 , W 2 , b 1 , b 2 ) J_{batch}=f(W_1,W_2,b_1,b_2) Jbatch=f(W1,W2,b1,b2)
我们可以使用Backpropagation: calculate partial derivatives of cost with respect to weights and biases
使用Gradient descent: update weights and biases
Backpropagation
∂ J b a t c h ∂ W 1 = 1 m R e L U ( W 2 ⊺ ( Y ^ − Y ) ) X ⊺ \cfrac{\partial J_{batch}}{\partial W_1}=\cfrac{1}{m}ReLU\left(W_2^\intercal (\hat Y-Y)\right)X^\intercal ∂W1∂Jbatch=m1ReLU(W2⊺(Y^−Y))X⊺
∂ J b a t c h ∂ W 2 = 1 m ( Y ^ − Y ) H ⊺ \cfrac{\partial J_{batch}}{\partial W_2}=\cfrac{1}{m}(\hat Y-Y)H^\intercal ∂W2∂Jbatch=m1(Y^−Y)H⊺
∂ J b a t c h ∂ b 1 = 1 m R e L U ( W 2 ⊺ ( Y ^ − Y ) ) 1 m ⊺ \cfrac{\partial J_{batch}}{\partial b_1}=\cfrac{1}{m}ReLU\left(W_2^\intercal (\hat Y-Y)\right)1_m^\intercal ∂b1∂Jbatch=m1ReLU(W2⊺(Y^−Y))1m⊺
∂ J b a t c h ∂ b 2 = 1 m ( Y ^ − Y ) 1 m ⊺ \cfrac{\partial J_{batch}}{\partial b_2}=\cfrac{1}{m}(\hat Y-Y)1_m^\intercal ∂b2∂Jbatch=m1(Y^−Y)1m⊺
这里 1 m 1_m 1m是一个有m个元素且都为1的列向量,其转置后与其他矩阵相乘得到矩阵每行求和:
实际操作的时候是用numpy的求和函数实现的:
import numpy as np
# code to initialize matrix a omitted
np.sum(a, axis= 1 , keepdims=True )
反向传播就是要根据链式法则求偏导,具体计算推导这里不展开,可以直接使用现有的函数实现计算。
Gradient descent
Hyperparameter: learning rate α \alpha α
W 1 : = W 1 − α ∂ J b a t c h ∂ W 1 W_1:= W_1-\alpha\cfrac{\partial J_{batch}}{\partial W_1} W1:=W1−α∂W1∂Jbatch
W 2 : = W 2 − α ∂ J b a t c h ∂ W 2 W_2:= W_2-\alpha\cfrac{\partial J_{batch}}{\partial W_2} W2:=W2−α∂W2∂Jbatch
b 1 : = b 1 − α ∂ J b a t c h ∂ b 1 b_1:= b_1-\alpha\cfrac{\partial J_{batch}}{\partial b_1} b1:=b1−α∂b1∂Jbatch
b 2 : = b 2 − α ∂ J b a t c h ∂ b 2 b_2:= b_2-\alpha\cfrac{\partial J_{batch}}{\partial b_2} b2:=b2−α∂b2∂Jbatch
Extracting Word Embedding Vectors
共有3种方式
option 1
将 W 1 W_1 W1的每一个列作为词表中每一个单词的嵌入列向量, W 1 W_1 W1有V列刚好和词表长度对应,其对应方式与输入X的顺序相对应(看蓝色部分):
option 2
将 W 2 W_2 W2的每一个行作为词表中每一个单词的嵌入行向量, W 2 W_2 W2有V行刚好和词表长度对应,其对应方式与输入X的顺序相对应(看蓝色部分):
option 3
将上面二者相结合得到V×N的矩阵 W 3 W_3 W3,每一个列作为词表中每一个单词的嵌入列向量:
W 3 = 0.5 ( W 1 + W 2 T ) W_3=0.5(W_1+W_2^T) W3=0.5(W1+W2T)
Evaluating Word Embeddings
主要有两种:Intrinsic Evaluation(内在评估),Extrinsic Evaluation(外在评估)。内在评估提供了关于模型预测能力的信息,而外在评估则提供了关于模型在实际应用中效果的信息。两者都是重要的,因为一个模型可能在技术上表现良好(内在评估),但如果它不能有效地支持最终的应用目标(外在评估),那么它可能不是一个成功的模型。在实际应用中,通常需要结合这两种评估方法来全面理解模型的性能。
Intrinsic evaluation
Analogies
Clustering
Visualization
Analogies主要是Test relationships between words,有三种常见方式:
Analogies | example |
---|---|
Semantic analogies | “France” is to “Paris” as “Italy” is to <?> |
Syntactic analogies | “seen” is to “saw” as “been” is to <?> |
Ambiguity | “wolf” is to “pack” as “bee” is to <?> → swarm? colony? |
Clustering |
Visualization
Extrinsic Evaluation
使用其他任务来测试词向量的性能:
e.g. named entity recognition, parts of speech tagging
相关文章:
09.C2W4.Word Embeddings with Neural Networks
往期文章请点这里 目录 OverviewBasic Word RepresentationsIntegersOne-hot vectors Word EmbeddingsMeaning as vectorsWord embedding vectors Word embedding processWord Embedding MethodsBasic word embedding methodsAdvanced word embedding methods Continuous Bag-…...
硅谷甄选二(登录)
一、登录路由静态组件 src\views\login\index.vue <template><div class"login_container"><!-- Layout 布局 --><el-row><el-col :span"12" :xs"0"></el-col><el-col :span"12" :xs"2…...
scipy库中,不同应用滤波函数的区别,以及FIR滤波器和IIR滤波器的区别
一、在 Python 中,有多种函数可以用于应用 FIR/IIR 滤波器,每个函数的使用场景和特点各不相同。以下是一些常用的 FIR /IIR滤波器应用函数及其区别: from scipy.signal import lfiltery lfilter(fir_coeff, 1.0, x)from scipy.signal impo…...
简谈设计模式之建造者模式
建造者模式是一种创建型设计模式, 旨在将复杂对象的构建过程与其表示分离, 使同样的构建过程可以构建不同的表示. 建造者模式主要用于以下情况: 需要创建的对象非常复杂: 这个对象由多个部分组成, 且这些部分需要一步步地构建不同的表示: 通过相同的构建过程可以生成不同的表示…...
力扣 hot100 -- 动态规划(下)
目录 💻最长递增子序列 AC 动态规划 AC 动态规划(贪心) 二分 🏠乘积最大子数组 AC 动规 AC 用 0 分割 🐬分割等和子集 AC 二维DP AC 一维DP ⚾最长有效括号 AC 栈 哨兵 💻最长递增子序列 300. 最长递增子序列…...
【计算机毕业设计】018基于weixin小程序实习记录
🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板ÿ…...
力扣之有序链表去重
删除链表中的重复元素,重复元素保留一个 p1 p2 1 -> 1 -> 2 -> 3 -> 3 -> null p1.val p2.val 那么删除 p2,注意 p1 此时保持不变 p1 p2 1 -> 2 -> 3 -> 3 -> null p1.val ! p2.val 那么 p1,p2 向后移动 p1 …...
Apache配置与应用(优化apache)
Apache配置解析(配置优化) Apache链接保持 KeepAlive:决定是否打开连接保持功能,后面接 OFF 表示关闭,接 ON 表示打开 KeepAliveTimeout:表示一次连接多次请求之间的最大间隔时间,即两次请求之间…...
怎么将3张照片合并成一张?这几种拼接方法很实用!
怎么将3张照片合并成一张?在我们丰富多彩的日常生活里,是否总爱捕捉那些稍纵即逝的美好瞬间,将它们定格为一张张珍贵的图片?然而,随着时间的推移,这些满载回忆的宝藏却可能逐渐演变成一项管理挑战ÿ…...
YOLOv10改进 | 图像去雾 | MB-TaylorFormer改善YOLOv10高分辨率和图像去雾检测(ICCV,全网独家首发)
一、本文介绍 本文给大家带来的改进机制是图像去雾MB-TaylorFormer,其发布于2023年的国际计算机视觉会议(ICCV)上,可以算是一遍比较权威的图像去雾网络, MB-TaylorFormer是一种为图像去雾设计的多分支高效Transformer…...
spring boot读取yml配置注意点记录
问题1:yml中配置的值加载到代码后值变了。 现场yml配置如下: type-maps:infos:data_register: 0ns_xzdy: 010000ns_zldy: 020000ns_yl: 030000ns_jzjz: 040000ns_ggglyggfwjz: 050000ns_syffyjz: 060000ns_gyjz: 070000ns_ccywljz: 080000ns_qtjz: 090…...
电子电气架构 --- 关于DoIP的一些闲思 下
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…...
Java getSuperclass和getGenericSuperclass
1.官方API对这两个方法的介绍 getSuperclass : 返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class。如果此 Class 表示 Object 类、一个接口、一个基本类型或 void,则返回 null。如果此对象表示一个数组类ÿ…...
ARM功耗管理标准接口之ACPI
安全之安全(security)博客目录导读 思考:功耗管理有哪些标准接口?ACPI&PSCI&SCMI? Advanced Configuration and Power Interface Power State Coordination Interface System Control and Management Interface ACPI可以被理解为一…...
2024年网络监控软件排名|10大网络监控软件是哪些
网络安全,小到关系到企业的生死存亡,大到关系到国家的生死存亡。 因此网络安全刻不容缓,在这里推荐网络监控软件。 2024年这10款软件火爆监控市场。 1.安企神软件: 7天免费试用https://work.weixin.qq.com/ca/cawcde06a33907e6…...
通过Arcgis从逐月平均气温数据中提取并计算年平均气温
通过Arcgis快速将逐月平均气温数据生成年平均气温数据。本次用2020年逐月平均气温数据操作说明。 一、准备工作 (1)准备Arcmap桌面软件; (2)准备2020年逐月平均气温数据(NC格式)、范围图层数据&…...
每日一题~abc356(对于一串连续数字 找规律,开数值桶算贡献)
添加链接描述 题意:对于给定的n,m 。计算0~n 每一个数和m & 之后,得到的数 的二进制中 1的个数的和。 一位一位的算。最多是60位。 我们只需要计算 在 1-n这些数上,有多少个数 第i位 为1. 因为是连续的自然数,每一位上1 的…...
商业合作方案撰写指南:让你的提案脱颖而出的秘诀
作为一名策划人,撰写一份商业合作方案需要细致的规划和清晰的表达。 它是一个综合性的过程,需要策划人具备市场洞察力、分析能力和创意思维。 以下是能够帮助你撰写一份有效的商业合作方案的关键步骤和要点: 明确合作目标:设定…...
【MySQL】锁(黑马课程)
【MySQL】锁 0. 锁的考察点1. 概述1. 锁的分类1.1 属性分类1.2 粒度分类 2. 全局锁2.1 全局锁操作2.2.1 备份问题 3. 表级锁3.1 表锁3.2 语法3.3 表共享读锁(读锁)3.4 表独占写锁(写锁)3.5 元数据锁(meta data lock, MDL)3.6 意向…...
1.10编程基础之简单排序--02:奇数单增序列
OpenJudge - 02:奇数单增序列http://noi.openjudge.cn/ch0110/02/ 描述 给定一个长度为N(不大于500)的正整数序列,请将其中的所有奇数取出,并按升序输出。 输入 共2行: 第1行为 N; 第2行为 N 个正整数,其间用空格间隔。 输出 增序输出的奇数序列,数据之间以逗号间隔。数…...
【leetcode78-81贪心算法、技巧96-100】
贪心算法【78-81】 121.买卖股票的最佳时机 class Solution:def maxProfit(self, prices: List[int]) -> int:dp[[0,0] for _ in range(len(prices))] #dp[i][0]第i天持有股票,dp[i][1]第i天不持有股票dp[0][0] -prices[0]for i in range(1, len(prices)):dp[…...
IEC62056标准体系简介-4.IEC62056-53 COSEM应用层
为在通信介质中传输COSEM对象模型,IEC62056参照OSI参考模型,制定了简化的三层通信模型,包括应用层、数据链路层(或中间协议层)和物理层,如图6所示。COSEM应用层完成对COSEM对象的属性和方法的访问ÿ…...
嵌入式应用开发之代码整洁之道
前言:本系列教程旨在如何将自己的代码写的整洁,同时也希望小伙伴们懂如何把代码写脏,以备不时之需,同时本系列参考 正点原子 , C代码整洁之道,编写可读的代码艺术。 #好的代码的特点 好的代码应该都有着几…...
iwconfig iwpriv学习之路
iwconfig和iwpriv是两个常用的wifi调试工具,最近需要使用这两个工具完成某款wifi芯片的定频测试,俗话说好记性不如烂笔头,于是再此记录下iwconfig和iwpriv的使用方式。 -----再牛逼的梦想,也抵不住傻逼般的坚持! ----2…...
【Docker-compose】搭建php 环境
文章目录 Docker-compose容器编排1. 是什么2. 能干嘛3. 去哪下4. Compose 核心概念5. 实战 :linux 配置dns 服务器,搭建lemp环境(Nginx MySQL (MariaDB) PHP )要求6. 配置dns解析配置 lemp Docker-compose容器编排 1. 是什么 …...
【记录】LaTex|LaTex 代码片段 Listings 添加带圆圈数字标号的箭头(又名 LaTex Tikz 库画箭头的简要介绍)
文章目录 前言注意事项1 Tikz 的调用方法:newcommand2 标号圆圈数字的添加方式:\large{\textcircled{\small{1}}}\normalsize3 快速掌握 Tikz 箭头写法:插入点相对位移标号node3.1 第一张图:插入点相对位移3.2 第二张图࿱…...
《框架封装 · Redis 事件监听》
📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…...
小白学webgl合集-Three.js加载器
THREE.TextureLoader: 用途: 加载单个图像文件并将其作为纹理应用到材质上。示例: const loader new THREE.DataTextureLoader(); loader.load(path/to/data.bin, function (texture) {const material new THREE.MeshBasicMaterial({ map: texture });const geometry new TH…...
【算法】字符串的排列
难度:中等 给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。 换句话说,s1 的排列之一是 s2 的 子串 。 示例 1: 输入:…...
5-3.损失函数
文章最前: 我是Octopus,这个名字来源于我的中文名–章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的…...
河南省工程建设信息网官网入口/开封网站快速排名优化
地址:http://poj.org/problem?id2486 题意:有一颗苹果树,每个节点上面有很多苹果,从一个节点到另外一个可以到达的节点花费1步,求k步最多能吃到多少苹果。 mark:这是典型的回溯型树状dp。dp[i][j][0]代表以…...
雄安专业网站建设方案/域名访问网站怎么进入
词汇:embracing 包围支持的embracemanufacture制造ECMA:European Computer Manufactures Associationinfrastructure 基础设施Mono是一个由Novell公司(由Ximian发起,并由Miguel de lcaza领导的,一个致力于开创.NET在Linux上使用的开源工程。M…...
网站建设销售工作内容/网络热词的利弊
Portal -->bzoj2893 Descripiton 给你一个\(n\)个点\(m\)条边的有向图,有一些点是起始点,有一些点是终止点,一次操作可以从一个起始点开始沿着有向图的边走到一个终止点(中途可以经过终止点),求需要至少…...
怎么让做的网站赚钱吗/推广运营是什么工作
描述 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba"。当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串。现在要求你,给你一个字符串,可在任意位…...
汕头市门户网站建设/关键词查询工具有哪些
netstat -ntpl kill -9 PID...
wordpress静态文件nginx配置/百度app免费下载安装最新版
我真想开个程序员餐厅了,进门时先写代码再进,一楼餐厅分C包间、java包间、Linux/Unix包间...,搞开源软件的就坐大厅里,搞ruby的上二楼... 现在就来聊聊这餐厅的初期设想吧。 从语言来看,光大包间有:C和C包间…...