NLP学习路线图(十四):词袋模型(Bag of Words)
在自然语言处理(NLP)的广阔天地中,词袋模型(Bag of Words, BoW) 宛如一块历经岁月沉淀的基石。它虽非当今最耀眼的明星,却为整个领域奠定了至关重要的基础,深刻影响了我们让计算机“理解”文本的方式。本文将深入探讨词袋模型的原理、实现、应用、局限及其在现代NLP中的深远影响。
一、文本理解的困境与向量化曙光
计算机擅长处理结构化的数字和符号,但人类语言却是非结构化、高度灵活且充满歧义的。如何将一段文字(如“这部电影精彩绝伦,演员表演令人叹服!”)转化为计算机能够处理、分析的形式,是NLP面临的首要挑战。
核心需求在于表示(Representation):我们需要一种方法,将文本从字符序列转化为一种数学对象(通常是向量或矩阵),从而能够应用各种机器学习算法进行分类、聚类、检索等任务。
词袋模型应运而生,它提供了一种简单、直观且极其有效的文本向量化方法,其核心思想在于:
-
忽略顺序: 暂时抛弃词语在句子中出现的先后顺序。
-
忽略语法: 暂时不考虑词语之间的句法关系(如主谓宾)。
-
关注词频: 只关心文档中出现了哪些词,以及这些词出现了多少次。
想象一个袋子(Bag),你把文档中的所有词都扔进去,然后摇晃均匀。最后,你只关心袋子里有几种不同的词,以及每种词各有多少个。袋子里的词失去了原有的顺序和上下文关系,这就是“词袋”名字的由来。
二、词袋模型的核心机制:构建文本向量
词袋模型的实现是一个清晰的流程化操作:
-
分词(Tokenization):
-
将原始文本分割成更小的单元,通常是单词(Word) 或词元(Token)。例如:
-
句子:
"The quick brown fox jumps over the lazy dog."
-
分词结果:
["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog", "."]
(通常标点符号会被移除或单独处理)。
-
-
-
构建词汇表(Vocabulary Construction):
-
收集所有在训练语料库(用于构建模型的文档集合)中出现的唯一词(Unique Word),并按照某种规则(如字母顺序)排列,形成一个固定大小的列表。这就是模型的“词典”。
-
例如,基于上述句子(假设语料库仅此一句),词汇表可能为:
["brown", "dog", "fox", "jumps", "lazy", "over", "quick", "the"]
(注意去除了重复的"the"和句点".")。词汇表大小V
= 8。
-
-
向量化(Vectorization / Encoding):
-
对于每一篇文档(Document),创建一个长度为
V
(词汇表大小)的向量。 -
遍历词汇表中的每一个词:
-
如果该词在当前文档中出现过,则在向量中该词对应的位置上,填入该词在文档中出现的次数(Count)。
-
如果该词没有出现,则填入0。
-
-
这就是文档的词袋表示——一个词频向量(Term Frequency Vector)。
-
实例演示:
考虑两个文档:
-
Doc1: "The cat sat on the mat."
-
Doc2: "The dog chased the cat."
步骤1:分词 & 预处理 (假设去除停用词'the', 'on'和标点)
-
Doc1 Tokens: ["cat", "sat", "mat"]
-
Doc2 Tokens: ["dog", "chased", "cat"]
步骤2:构建词汇表 (基于两个文档)
-
Vocabulary:
["cat", "chased", "dog", "mat", "sat"]
(V=5, 按字母顺序)
步骤3:向量化
-
Doc1 Vector:
词汇表位置:-
"cat" -> 出现1次 ->
1
-
"chased" -> 出现0次 ->
0
-
"dog" -> 出现0次 ->
0
-
"mat" -> 出现1次 ->
1
-
"sat" -> 出现1次 ->
1
-
向量:
[1, 0, 0, 1, 1]
-
-
Doc2 Vector:
-
"cat" -> 出现1次 ->
1
-
"chased" -> 出现1次 ->
1
-
"dog" -> 出现1次 ->
1
-
"mat" -> 出现0次 ->
0
-
"sat" -> 出现0次 ->
0
-
向量:
[1, 1, 1, 0, 0]
-
现在,原本是自然语言的Doc1
和Doc2
,被转化成了计算机可以轻松处理的数值向量[1, 0, 0, 1, 1]
和[1, 1, 1, 0, 0]
。这些向量构成了后续机器学习模型的输入特征(Feature)。
三、关键概念与技术演进
-
词频(Term Frequency, TF): 词袋模型最基础的形式就是使用词频计数,如上例所示。它直接反映了词在文档中的重要性(通常,一个词在文档中出现的次数越多,它对文档主题的贡献可能越大)。
-
停用词(Stop Words):
-
像“the”, “a”, “an”, “in”, “on”, “is”, “and”, “or”等词在几乎所有文档中都高频出现,但对区分文档内容几乎没有帮助,反而会增加噪声和计算负担。
-
在构建词袋模型前,通常需要移除停用词。这能显著降低向量维度(词汇表大小V),提高模型效率,并可能提升下游任务(如分类)的准确性。移除停用词后的
Doc1
和Doc2
向量就是应用了此步骤的结果。
-
-
词干提取与词形还原(Stemming and Lemmatization):
-
目标:将词语的不同形态(如复数、时态、比较级等)归并到其基本形式(词干Stem或词元Lemma)。
-
词干提取(Stemming): 使用启发式规则(常会出错)粗暴地截取单词前缀。如:
-
“jumps”, “jumped”, “jumping” ->
"jump"
-
“running” ->
"run"
(较好) /"runn"
(可能,取决于算法)
-
-
词形还原(Lemmatization): 利用词典和词性分析,返回单词的规范字典形式(Lemma)。如:
-
“is”, “am”, “are”, “been” ->
"be"
-
“better” ->
"good"
(需知道它是形容词)
-
-
作用: 减少词汇表大小(V),将语义相似的词(如“run”和“running”)映射到同一个特征上,避免因词形变化导致特征分散,增强模型泛化能力。例如,“I am running” 和 “He runs fast” 经过词形还原(run)后,都能体现“跑步”的概念。
-
-
逆文档频率(Inverse Document Frequency, IDF)与 TF-IDF:
-
词频(TF)的局限性: 像“the”这样的词在很多文档中TF都很高,但它并不重要;而像“quantum”这样的词,即使在一个文档中TF不高,但如果它出现了,往往表明该文档讨论的是量子物理,这个信息非常重要。
-
IDF思想: 一个词在整个语料库(所有文档集合)中出现的文档越少(即越稀有),它包含的信息量就越大,对区分文档越有价值。
-
IDF 计算:
IDF(t) = log(N / (df(t) + 1))
其中:-
N
:语料库中文档总数。 -
df(t)
(Document Frequency):包含词t
的文档数量。 -
+1
:平滑项,防止df(t)=0时除零错误。 -
log
(通常取自然对数或log10):压缩IDF值的范围。
-
-
TF-IDF(Term Frequency-Inverse Document Frequency): 将TF和IDF结合起来,成为词袋模型最强大、最常用的加权方案。
TF-IDF(t, d) = TF(t, d) * IDF(t)
-
意义: TF-IDF值衡量了一个词
t
对于一个特定文档d
的重要性。-
在
d
中TF高 -> 重要。 -
在整个语料库中IDF高(即该词稀有)-> 重要。
-
同时满足两者 -> 非常高的TF-IDF值,是该文档的强特征词。
-
-
效果: 降低了常见词(高DF,低IDF)的权重,提升了稀有但重要的词(低DF,高IDF)的权重,显著改善了词袋表示的信息量和区分度,广泛应用于信息检索、文本分类等。
-
-
N元语法(N-grams):
-
词袋模型的根本局限: 完全丢失了词的顺序信息。“狗咬人”和“人咬狗”在词袋模型下向量完全相同。
-
N-gram 的引入: 将连续的N个词(或字)作为一个单元(Token)放入“袋子”。常用的是:
-
Unigram (1-gram): 单个词 (即标准词袋)。
-
Bigram (2-gram): 连续的两个词 (如 "quick brown", "brown fox")。
-
Trigram (3-gram): 连续的三个词 (如 "quick brown fox")。
-
-
作用: 部分捕捉了局部词序信息和上下文。例如,“strong tea”和“strong support”中的“strong”含义不同,作为Unigram无法区分,但作为Bigram (
"strong_tea"
vs"strong_support"
) 则能很好地区分。 -
代价: 词汇表大小
V
会急剧膨胀(从V个词到大约V^N个可能的N-gram),导致维度灾难(Curse of Dimensionality),增加存储和计算负担,并可能引入更多噪声。
-
四、词袋模型的应用场景
尽管简单,词袋模型(尤其是TF-IDF变体)凭借其有效性和可解释性,在诸多NLP任务中曾长期占据主导地位,至今仍在某些场景下发挥着重要作用:
-
文本分类(Text Classification):
-
任务: 将文档分配到预定义的类别中(如新闻分类-体育/财经/娱乐;情感分析-正面/负面/中立;垃圾邮件检测)。
-
应用: 词袋/TF-IDF向量作为文档特征输入到分类器(如朴素贝叶斯Naive Bayes、支持向量机SVM、逻辑回归Logistic Regression)中。高频词或高TF-IDF词往往能有效表征类别(如体育新闻中高频出现“比赛”、“球员”、“进球”等)。
-
-
情感分析(Sentiment Analysis):
-
任务: 判断文本(如评论、微博)表达的情感倾向(积极、消极、中性)。
-
应用: 积极词(“好”、“棒”、“喜欢”、“推荐”)和消极词(“差”、“烂”、“讨厌”、“失望”)通常具有较高的TF或TF-IDF值,并带有明显的类别区分性。基于词袋特征的分类器是传统情感分析的基石。例如,评论“画面精美,演员演技在线,剧情跌宕起伏”中,“精美”、“在线”、“跌宕起伏”等词的TF-IDF值会较高,并被分类器识别为积极信号。
-
-
信息检索(Information Retrieval, IR)与搜索引擎:
-
任务: 根据用户查询(Query),从大规模文档集合中找到最相关的文档。
-
应用: 词袋是布尔模型和向量空间模型(Vector Space Model, VSM)的核心。
-
布尔模型: 查询被表示为关键词的布尔组合(AND/OR/NOT),文档表示为词的存在与否(1/0)。匹配规则简单直接。
-
向量空间模型(VSM): 将查询和文档都表示为TF-IDF向量(通常在高维空间中)。文档
d
与查询q
的相关性通过计算它们向量之间的余弦相似度(Cosine Similarity) 来衡量:cos(θ) = (d · q) / (||d|| * ||q||)
。余弦相似度越高,相关性越强。这是早期搜索引擎排序的核心原理之一。当用户搜索“词袋模型原理”,搜索引擎会将查询转化为TF-IDF向量,并与索引中所有文档的TF-IDF向量计算余弦相似度,返回相似度最高的文档。
-
-
-
文档聚类(Document Clustering):
-
任务: 将文档集合自动分组(聚类),使得同一组(簇)内的文档彼此相似,不同组的文档差异较大(无预先定义类别)。
-
应用: 使用词袋/TF-IDF向量表示文档,应用聚类算法(如K-Means、层次聚类)。具有相似关键词分布(即向量在高维空间中距离相近)的文档会被聚到一起。例如,新闻聚合网站自动将讨论相似话题(如“世界杯”、“人工智能”、“股市波动”)的新闻归类。
-
-
主题建模(Topic Modeling)的基础:
-
如潜在语义分析(LSA/LSI) 和概率潜在语义分析(pLSA) 等经典主题模型,其输入通常就是文档-词项矩阵(Document-Term Matrix),这正是词袋模型(通常是TF-IDF加权)构建的矩阵(行是文档,列是词汇表中的词,值是TF或TF-IDF)。这些模型试图从词频共现模式中发现潜在的语义主题。
-
五、词袋模型的显著优势
-
概念简单直观: 核心思想易于理解,实现逻辑清晰。
-
实现容易高效: 算法流程明确,计算复杂度相对较低(主要是计数和查表),易于编程实现和并行化。使用
scikit-learn
的CountVectorizer
和TfidfVectorizer
,几行Python代码即可完成转换。 -
可解释性强: 特征直接对应词汇表中的词,TF-IDF值的高低直观反映了词在文档中的重要性,便于人类理解和调试模型。例如,在分类任务中,可以查看哪些词的权重对分类决策贡献最大。
-
作为强大的基线: 即使面对现代深度学习方法,一个精心调优的TF-IDF + 线性模型(如SVM、Logistic Regression)在中小规模数据集上的文本分类等任务中,依然能提供极具竞争力的结果,是评估新模型性能的重要基线(Baseline)。
-
特征工程的基础: 为更复杂的文本表示方法(如基于词袋的特征组合、特征选择)提供了起点。
六、词袋模型的内在局限与挑战
词袋模型的简单性也带来了不可避免的缺陷:
-
丢失词序与句法信息: 这是最根本的缺陷。“北京欢迎你”和“你欢迎北京”在词袋模型下完全相同,但语义迥异。无法捕捉短语结构、句子结构等关键语法信息。
-
忽略语义信息与上下文:
-
一词多义(Polysemy): 同一个词在不同语境下有不同含义(如“苹果”指水果还是公司?)。词袋模型无法区分。
-
同义词(Synonymy): 不同词可能有相同或相近含义(如“计算机”、“电脑”)。词袋模型将它们视为完全不同的特征,缺乏语义关联性。
-
无法理解词语之间的语义关系(如反义、上下位、部分整体)。
-
-
高维稀疏性(High Dimensionality and Sparsity):
-
词汇表大小
V
很容易达到数万甚至数十万(尤其在N-gram时)。每个文档向量长度等于V
。 -
但单个文档包含的独特词数量远小于
V
,导致文档向量中绝大部分元素为0(稀疏向量)。这不仅造成巨大的存储和计算开销(维度灾难),也可能影响一些机器学习算法的性能。
-
-
词汇表外问题(Out-of-Vocabulary, OOV):
-
模型基于训练语料库构建词汇表。对于新文档中出现但未在训练词汇表中的词(新词、拼写错误、罕见词),模型无法处理(只能标记为0或特殊符号),丢失信息。
-
-
无法处理词形变化与未登录词: 虽然词干提取/词形还原可以缓解,但无法完美解决,且可能引入错误。新词(如网络流行语)或专有名词也构成挑战。
-
权重计算的局限性: TF-IDF虽然有效,但仍是一种基于统计的启发式方法,未能真正捕捉深层次的语义关联。
七、超越词袋:现代NLP的演进
词袋模型的局限推动了NLP表示学习的发展,核心目标是获得低维、稠密、蕴含语义的向量表示:
-
词嵌入(Word Embedding):
-
思想: 将词汇表中的每个词映射到一个固定长度的稠密实数向量(如50维、100维、300维)。
-
核心: 分布式假设(Distributional Hypothesis)——“一个词的语义由其上下文决定”。出现在相似上下文中的词具有相似的语义。
-
代表模型:
-
Word2Vec (Mikolov et al., 2013): 包含Skip-gram(用中心词预测上下文词)和CBOW(用上下文词预测中心词)两种结构。通过浅层神经网络训练得到词向量。
king - man + woman ≈ queen
的经典例子展示了其捕捉语义关系的能力。 -
GloVe (Global Vectors for Word Representation, Pennington et al., 2014): 基于全局词-词共现统计信息(类似于词袋的共现矩阵),利用矩阵分解技术学习词向量。结合了全局统计和局部上下文信息。
-
-
优势: 解决了词袋模型的稀疏性、OOV(可通过子词或字符级缓解)、语义关联性(同义词/近义词向量距离近)等问题。向量维度显著降低(如300维 vs 10万维词袋)。
-
-
上下文相关的词嵌入(Contextualized Word Embeddings):
-
词嵌入的局限: 一个词在所有语境下只有一个固定向量表示,无法解决一词多义问题(“bank”在“河岸”和“银行”语境下应有不同表示)。
-
突破:
-
ELMo (Embeddings from Language Models, Peters et al., 2018): 利用双向LSTM语言模型,根据词的上下文生成动态词向量。同一个词在不同句子中会得到不同的向量表示。
-
Transformer 架构 (Vaswani et al., 2017): 基于自注意力机制(Self-Attention),彻底革新了序列建模。强大的并行计算能力使其能够处理长距离依赖。
-
BERT (Bidirectional Encoder Representations from Transformers, Devlin et al., 2018) 及后续大模型 (GPT, T5, XLNet等): 基于Transformer Encoder/Decoder,在大规模语料上进行掩码语言模型(Masked Language Model)或自回归语言模型(Autoregressive Language Model)预训练,学习深度的上下文相关表示。这些模型生成的词表示(通常取某个层的输出)强烈依赖于其所在的整个句子(甚至段落)的上下文信息,彻底解决了传统词嵌入和词袋模型无法处理上下文和一词多义的核心痛点。它们已成为现代NLP几乎所有任务的新基础。
-
-
八、词袋模型在现代NLP中的意义与定位
尽管风头被深度神经网络和Transformer架构所盖过,词袋模型并未消亡,其价值和影响深远:
-
历史基石与教学价值: 它是理解文本向量化、特征工程、信息检索基础(TF-IDF、VSM)的必经之路。学习词袋模型有助于深入理解NLP的底层挑战和解决方案的演进逻辑。
-
实用性与快速原型: 对于计算资源有限、数据量不大、任务相对简单(如基于关键词的分类/检索)或需要极高可解释性的场景,TF-IDF + 简单模型(如Naive Bayes, SVM)依然是快速构建有效解决方案的实用选择。启动成本低,易于部署。
-
特征融合: 词袋/TF-IDF特征可以与词嵌入、句子嵌入等深度特征拼接(Concatenate) 或通过其他方式融合(Fusion),为下游模型提供互补信息(如显式的关键词信息)。有时能带来性能提升。
-
可解释性的标杆: 当深度模型像一个黑箱时,基于词袋的模型(如TF-IDF + Logistic Regression)的特征权重提供了清晰的解释:哪些词对预测某个类别贡献最大?这对于需要模型透明度的应用(如金融风控、医疗诊断辅助)至关重要。
-
特定任务的基石: 在某些任务中(如基于布尔逻辑的精确关键词过滤、一些特定领域的主题模型),词袋或其变体仍是核心组件。
九、总结
词袋模型,这一诞生于NLP早期的朴素思想,以其“无视顺序,只计词频”的核心策略,成功地撬开了让计算机处理自然语言文本的大门。它通过构建词频向量或TF-IDF向量,将非结构化的文本转化为结构化的数值表示,为文本分类、情感分析、信息检索、聚类等众多任务提供了可行的解决方案。其概念简单、实现高效、可解释性强的优点使其成为NLP历史上不可或缺的里程碑。
相关文章:

NLP学习路线图(十四):词袋模型(Bag of Words)
在自然语言处理(NLP)的广阔天地中,词袋模型(Bag of Words, BoW) 宛如一块历经岁月沉淀的基石。它虽非当今最耀眼的明星,却为整个领域奠定了至关重要的基础,深刻影响了我们让计算机“理解”文本的…...
Oracle数据库事务学习
目录 一、什么是事务,事务的作用是什么 二、事务的四大特性(ACID) 1. 原子性(Atomicity) 2. 一致性(Consistency) 3. 隔离性(Isolation) 4. 持久性(Durability) 三、关于锁的概念——表锁、行锁、死锁、乐观/悲观锁、 1.行锁 2.表锁 3.死锁 4.乐观锁 5.…...
MySQL 全量 增量备份与恢复
目录 前言 一、MySQL 数据库备份概述 1. 数据备份的重要性 2. 数据库备份类型 2.1 从物理与逻辑的角度分类 2.2 从数据库的备份策略角度分类 3. 常见的备份方法 二、数据库完全备份操作 1. 物理冷备份与恢复 1.1 备份数据库 1.2 恢复数据库 2. mysqldump 备份与恢复…...
【仿生机器人系统设计】涉及到的伦理与安全问题
随着材料科学、人工智能与生物工程学的融合突破,仿生机器人正从科幻走向现实。它们被寄予厚望——在医疗康复、老年照护、极端环境作业甚至社交陪伴等领域释放巨大价值。然而,当机器无限趋近于“生命体”,其设计过程中潜伏的伦理与安全迷宫便…...
NodeJS全栈WEB3面试题——P5全栈集成与 DApp 构建
5.1 如何实现一个完整的 Web3 登录流程(前端 后端)? ✅ 核心机制:钱包签名 后端验签 Web3 登录是基于“消息签名”来验证用户链上身份,而非传统用户名/密码。 💻 前端(使用 MetaMask&#…...

鸿蒙进阶——Mindspore Lite AI框架源码解读之模型加载详解(一)
文章大纲 引言一、模型加载概述二、核心数据结构三、模型加载核心流程 引言 Mindspore 是一款华为开发开源的AI推理框架,而Mindspore Lite则是华为为了适配在移动终端设备上运行专门定制的版本,使得我们可以在OpenHarmony快速实现模型加载和推理等功能&…...

【数据结构】图论核心算法解析:深度优先搜索(DFS)的纵深遍历与生成树实战指南
深度优先搜索 导读:从广度到深度,探索图的遍历奥秘一、深度优先搜索二、算法思路三、算法逻辑四、算法评价五、深度优先生成树六、有向图与无向图结语:深潜与回溯,揭开图论世界的另一面 导读:从广度到深度,…...
Mysql数据库 索引,事务
Mysql数据库 索引,事务 一.索引 简介 索引是数据库中用于提高查询效率的一种数据结构,它通过预先排序和存储特定列的值,帮助数据库快速定位符合条件的数据行,避免全表扫描。以下是关于索引的核心简介: 1. 核心作用…...

RESTful APInahamcon Fuzzies-write-up
RESTful API 路径详解 RESTful API(Representational State Transfer)是一种 基于 HTTP 协议的 API 设计风格,它通过 URL 路径 和 HTTP 方法(GET、POST、PUT、DELETE 等)来定义资源的访问方式。它的核心思想是 将数据…...
安装DockerDocker-Compose
Docker 1、换掉关键文件 vim /etc/yum.repos.d/CentOS-Base.repo ▽ [base] nameCentOS-$releasever - Base - Mirrors Aliyun baseurlhttp://mirrors.aliyun.com/centos/$releasever/os/$basearch/ gpgcheck1 enabled1 gpgkeyhttp://mirrors.aliyun.com/centos/RPM-GPG-KEY-C…...

2025年机械化设计制造与计算机工程国际会议(MDMCE 2025)
2025年机械化设计制造与计算机工程国际会议(MDMCE 2025) 2025 International Conference on Mechanized Design, Manufacturing, and Computer Engineering 一、大会信息 会议简称:MDMCE 2025 大会地点:中国贵阳 审稿通知&#…...
Java生态中的NLP框架
Java生态系统中提供了多个强大的自然语言处理(NLP)框架,以下是主要的NLP框架及其详细说明: 1、Apache OpenNLP 简介:Apache OpenNLP是Apache软件基金会的开源项目,提供了一系列常用的NLP工具。 主要功能: …...
NVM,Node.Js 管理工具
node_mirror: https://npmmirror.com/mirrors/node/ npm_mirror: https://npmmirror.com/mirrors/npm/ 一、什么是 NVM? NVM 是一个命令行工具,允许你在同一台机器上安装、切换和管理多个 Node.js 版本,解决项目间版本冲突问题。 二、安装 …...

Jmeter逻辑控制器、定时器
目录 一、Jmeter逻辑控制器 ①IF(如果)控制器 作用: 位置: 参数介绍: 步骤: ②循环控制器 作用: 位置: 步骤: 线程组属性VS循环控制器 ③ForEach控制器 作用: 位置&am…...
每日八股文6.2
每日八股-6.2 Go1.GMP调度原理(这部分多去看看golang三关加深理解)2.GC(同样多去看看golang三关加深理解)3.闭包4.go语言函数是一等公民是什么意思5.sync.Mutex和sync.RWMutex6.sync.WaitGroup7.sync.Cond8.sync.Pool9.panic和rec…...

R3GAN利用配置好的Pytorch训练自己的数据集
简介 简介:这篇论文挑战了"GANs难以训练"的广泛观点,通过提出一个更稳定的损失函数和现代化的网络架构,构建了一个简洁而高效的GAN基线模型R3GAN。作者证明了通过合适的理论基础和架构设计,GANs可以稳定训练并达到优异性能。 论文题目:The GAN is dead; long l…...

吴恩达机器学习笔记(1)—引言
目录 一、欢迎 二、机器学习是什么 三、监督学习 四、无监督学习 一、欢迎 机器学习是当前信息技术领域中最令人兴奋的方向之一。在这门课程中,你不仅会学习机器学习的前沿知识,还将亲手实现相关算法,从而深入理解其内部机理。 事实上&…...
信贷风控规则策略累计增益lift测算
在大数据风控业务实践过程中,目前业内主要还是采用规则叠加的办法做策略,但是会遇到一些问题: 1.我们有10条规则,我上了前7条后,后面3条的绝对风险增益是多少? 2.我的规则之间应该做排序吗,最重…...

【笔记】Windows 部署 Suna 开源项目完整流程记录
#工作记录 因篇幅有限,所有涉及处理步骤的详细处理办法请参考文末资料。 Microsoft Windows [Version 10.0.27868.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗…...

【Elasticsearch】Elasticsearch 核心技术(一):索引
Elasticsearch 核心技术(一):索引 1.索引的定义2.索引的命名规范3.索引的增、删、改、查3.1 创建索引3.1.1 创建空索引 3.2 删除索引3.3 文档操作3.3.1 添加/更新文档(指定ID)3.3.2 添加文档(自动生成ID&am…...
AudioTrack的理解
采样率说的是一秒钟采样多少点 波形频率说的是一个采样周期内有多少个波形 pcm编码说的是 16 还是8 直接决定write的时候使用short还是byte 一、初始化配置 参数设定 需定义音频格式、采样率及缓冲区大小,确保符合硬件支持范围 // 音频参数配置 int sample…...
HTTP请求与HTTP响应介绍及其字段
HTTP请求 请求行:请求行主要包含请求方法、请求URI(统一资源标识符)和HTTP协议版本。例如: GET /index.html HTTP/1.1 请求头(Headers):包含客户端的元数据,为服务器提供了额外信息…...

Fullstack 面试复习笔记:操作系统 / 网络 / HTTP / 设计模式梳理
Fullstack 面试复习笔记:操作系统 / 网络 / HTTP / 设计模式梳理 面试周期就是要根据JD调整准备内容(挠头),最近会混合复习针对全栈这块的内容,目前是根据受伤的JD,优先选择一些基础的操作系统、Java、Nod…...

中科院报道铁电液晶:从实验室突破到多场景应用展望
2020年的时候,相信很多关注科技前沿的朋友都注意到,中国科学院一篇报道聚焦一项有望改写显示产业格局的新技术 —— 铁电液晶(FeLC)。这项被业内称为 "下一代显示核心材料" 的研究,究竟取得了哪些实质性进展…...

智慧政务标准规范介绍:构建高效、协同的政务信息体系
在当今信息化快速发展的时代,智慧政务作为政府数字化转型的重要方向,正逐步改变着政府管理和服务的方式。为了确保智慧政务系统的建设能够有序、高效地进行,国家制定了一系列标准规范,其中GB∕T 21062系列标准《政务信息资源交换体…...
6个月Python学习计划 Day 12 - 字符串处理 文件路径操作
第一周 Day 1 - Python 基础入门 & 开发环境搭建 Day 2 - 条件判断、用户输入、格式化输出 Day 3 - 循环语句 range 函数 Day 4 - 列表 & 元组基础 Day 5 - 字典(dict)与集合(set) Day 6 - 综合实战:学生信息…...
CSS篇-3
1. CSS 中哪些样式可以继承?哪些不可以继承? 可继承的样式: 与字体相关的样式,如:font-size、font-family、color 列表样式:list-style(如 UL、OL 的 list-style-type) 不可继承的样式: 与布局和尺寸相关的样式,如:border、padding、margin、width、height 总结: …...
Unity使用Lua框架和C#框架开发游戏的区别
在Unity中使用Lua框架和C#框架开发游戏有显著的区别,主要体现在性能、开发效率、热更新能力、维护成本等方面。 1. 语言类型与设计目标 维度LuaC#类型动态类型、解释型脚本语言静态类型、编译型面向对象语言设计初衷轻量级嵌入、配置和扩展宿主程序通用开发&#…...
Go开发简历优化指南
一、简历格式与排版 (一)简洁至上 去除多余装饰:在 Go 后台开发简历中,应摒弃那些花哨却无实际作用的元素,比如复杂的封面、页眉、页脚等。设想招聘人员每日要处理大量简历,若你的简历有繁杂的封面设计&a…...

手机照片太多了存哪里?
手机相册里塞满了旅行照片、生活碎片,每次清理都舍不得删?NAS——一款超实用的存储方案,让你的回忆安全又有序~ 1️⃣自动备份解放双手 手机 / 电脑 / 相机照片全自动同步到 NAS,再也不用手动传文件 2️⃣远程访问像…...