【LLM基础教程】文本特征表示方法入门(一):BoW

【AI知识点】词袋模型(Bag-of-Words,BOW) 词袋模型(Bag-of-Words,简称BOW)是一种用于文本表示的简单且常用的方法,尤其在自然语言处理(NLP)和信息检索领域中广泛应用。词袋模型的核心思想是将文本表示为一个词频统计的集合,而不考虑词的顺序和语法结构。每个词在文本中出现的频率被用来表示文本的特征。 阅读详情

​ 语言人工智能历史始于一种名为词袋(bag-of-words)的技术,这是一种表示非结构化文本的方法 。它早在20世纪50年代就被提出,但直到2000年前后才开始流行。

  • 核心思想:将文本看作一个“词的集合”,忽略词序,只统计每个词出现的次数。

    换言之,在 BoW 模型中,句子或文档被表示为一个固定长度的向量,向量的每个维度对应词汇表(vocabulary)中的一个词,值表示该词在文本中出现的频率或次数。

一、介绍

​ 词袋模型是一种文本表示,用于描述文档中单词的出现情况。我们只跟踪单词数量,忽略语法细节和词序。之所以称之为“词袋”,是因为任何关于文档中单词顺序或结构的信息都会被丢弃。该模型只关注已知单词是否出现在文档中,而不是出现在文档的哪个位置。

在这里插入图片描述

1.1 结构化处理文本

​ 文本的最大问题之一是它混乱且非结构化,而机器学习算法更喜欢结构化、定义明确的固定长度输入,通过使用词袋技术,我们可以将可变长度的文本转换为固定长度的向量**。**

​ 此外,在更精细的层面上,机器学习模型处理的是数值数据,而不是文本数据。更具体地说,通过使用词袋(BoW)技术,我们将文本转换为其等效的数字向量。

1.2 模型特点

优点缺点
简单易实现,计算高效完全丢失词序与上下文信息
可作为许多模型(如朴素贝叶斯、SVM)的输入特征词汇表维度高,稀疏性强
适用于小规模文本分析、特征工程初期无法处理同义词、多义词问题

​ 总的来说,词袋模型为文本向量化提供了最基础的形式化框架。但由于它仅仅将语言视为一个几乎字面意义上的“词袋”,而忽略了文本的语义特性和上下文含义,因此难以有效表达词与词之间的语义联系。这也成为后续 Word2Vec、Transformer 等模型提出的直接动因。

二、构建步骤

​ 词袋模型的工作原理如下:

2.1 文本表示的起点:分词(Tokenization)

分词是构建词袋模型的第一步,也是影响模型性能的重要因素。

​ 在自然语言处理中,计算机无法直接理解原始文本。分词(Tokenization) 是将文本切分成最小可处理单元(词或子词,token)的过程,是所有文本表示方法的基础步骤。

  • 举例:

​ 假设我们有两个句子需要创建数值表示。词袋模型的第一步是分词(tokenization),即将句子拆分成单个词或子词(词元,token)。最常见的分词方法是通过空格分割来把句子分割成词。然而,这种方法也有其缺点,因为某些语言(如汉语)的词之间没有空格。

在这里插入图片描述

(1) 为什么需要分词?
  • 模型的输入必须是离散的 token 序列,不能直接处理字符串。
  • 对于英语等以空格分词的语言,可直接按空格或标点切分;
  • 对于中文、日语等无显式词界的语言,需要使用分词算法(如结巴分词、BERT WordPiece、SentencePiece 等)。
(2) 常见分词方式
方法说明适用场景
Word-level Tokenization按词切分,例如“我 喜欢 NLP” → [“我”, “喜欢”, “NLP”]英语、经过分词的中文文本
Character-level Tokenization按字切分,例如“我喜欢NLP” → [“我”, “喜”, “欢”, “N”, “L”, “P”]低资源语言、字符模型
Subword Tokenization(BPE/WordPiece)将词拆成更小的单元(如“unhappiness” → [“un”, “happy”, “ness”])现代大模型(如 BERT、LLaMA)常用
  • 在 BoW 模型中,分词结果决定了词汇表的构成。
    不同的分词策略,会显著影响 BoW 特征空间的维度与稀疏性:
    • 分得太细 → 词汇表过大,稀疏性高;
    • 分得太粗 → 无法捕捉词义变化。

2.1 建立词汇表(Vocabulary)

​ 在分词之后,我们将每个句子中所有不同的词组合起来,创建一个可用于表示句子的词表(vocabulary)。即从语料库中提取所有不同的词,形成一个固定的词汇集合。

在这里插入图片描述

​ 使用词表,我们只需计算每个句子中词出现的次数,就创建了一个词袋。

2.2 向量化表示(Vectorization)

​ 词袋模型旨在以数字形式创建文本的表示(representation),也称为向量或向量表示。通过过计算单个词出现的次数创建词袋,这些值被称为向量表示。
在这里插入图片描述

2.3 语料库和词表

名称含义示例
corpus原始语料库(原始文本集合)[“this is a book”, “that is a pen”]
feature_names特征词汇表(经过分词、清洗后)[‘book’, ‘pen’, ‘this’, ‘that’]

三、BoW构建

​ 下面通过一个简单示例来说明 词袋模型(Bag of Words) 的构建过程。

  • Sentence 1: ”Welcome to Great Learning, Now start learning”

  • Sentence 2: “Learning is a good practice”

3.1 分词

Tokenization

将每个句子拆分为单词:

  • Sentence 1 → [Welcome, To, Great, Learning, Now, start, learning]
  • Sentence 2 → [learning, is, a, good, practice]
    在这里插入图片描述

3.2 构建词表

Vocabulary

​ 浏览上述文本中的所有单词,并列出模型词汇表中的所有单词。

Welcome
To
Great
Learning
,
Now
start
learning
is
a
good
practice

​ 这里需要注意,“Learning” 和 “learning” 因大小写不同被视为两个不同的词,因此在词汇表中会重复出现。同时,标点符号(如逗号 “,”) 也被分词器识别为独立的 token,并被计入词袋中。

​ 因为我们知道词汇表有 12 个单词,所以我们可以使用固定长度为 12 的文档表示,并在向量中的一个位置对每个单词进行评分。

3.3 计算词频并用向量表示

​ 我们这里采用的评分方法是统计每个单词的出现次数,不存在则记为0。这种评分方法比较常用。

  • Sentence1

    在这里插入图片描述

    将上述频率写入向量中:

    [1,1,1,1,1,1,1,1,0,0,0]
    
  • Sentence2

    在这里插入图片描述

    将上述频率写入向量中:

    [0,0,0,0,0,0,0,1,1,1,1,1]
    
  • 综上所述:
    在这里插入图片描述

3.4 局限性

​ 词袋模型仅能反映文本中词出现的频率,而忽略了语言的结构与语义信息,主要局限如下:

  • 忽略词序:例如,“Learning start now” 与 “Now start learning” 在 BoW 表示中完全相同,无法体现语序差异。
  • 忽略语义差异:例如,“good practice” 与 “bad practice” 的结构一致,但语义相反。
  • 大小写敏感:如 “Learning” 与 “learning” 含义相同,却被视为两个不同的词。
  • 包含无意义符号:标点符号(如逗号 “,”)会被当作独立 token 加入词汇表,增加噪声却无实际信息。

因此,词袋模型仅将语言视为一个几乎字面意义上的“词袋”,无法捕捉上下文与语义关系。 这一局限正是 TF-IDF 与后续词向量模型(如 Word2Vec、GloVe)出现的动机。

四、BoWs实现

​ sklearn的CountVectorizer类可以实现Bag Of Words的功能。

from sklearn.feature_extraction.text import CountVectorizer

vectorizer = CountVectorizer(max_features=max_features, stop_words=stop_words)
X_train = vectorizer.fit_transform(train_texts)
X_test = vectorizer.transform(test_texts)

1. 参数说明

参数类型默认值作用 / 描述
max_featuresint 或 NoneNone限制词表大小。对所有词的 词频(term frequency) 排序,取前 max_features 个作为关键词集合。例如 max_features=10000 表示只保留前 10,000 个高频词。
stop_wordsstring/list/NoneNone去除停用词。例如 stop_words='english' 自动去掉英文常用停用词。
ngram_rangetuple (min_n, max_n)(1, 1)控制 n-gram 范围。默认 (1,1) 只保留 unigram(单词), (1,2) 表示保留 unigram + bigram(两词组合)。
lowercaseboolTrue是否将文本转换为小写。通常保持 True 以减少词表冗余。
min_dfint / float1最小文档频率。词语至少出现在 min_df 个文档中才会被保留。
max_dfint / float1.0最大文档频率。词语若出现在超过 max_df 个文档中(或比例),则被忽略。常用来去掉高频词。
token_patternstringr"(?u)\b\w\w+\b"正则表达式,用于识别词语边界。默认匹配至少两个字符的单词。
analyzerstring/callable‘word’指定分析对象:'word' 按单词分词,'char' 按字符,'char_wb' 按字符且只考虑单词边界。

2. fit:统计训练文本中所有词出现的频率

​ 根据 max_features 和 stop_words 生成一个 词汇表(vocabulary)。词汇表里每个词对应一个索引,比如:

{'apple': 0, 'banana': 1, 'orange': 2}

3. transform:把测试文本也转换成同样维度的词频向量

  • 使用已有词汇表,把新文本映射成向量
  • 例如:
test_texts = ["apple orange"]
X_test =
[[1 0 1]]

​ 注意,如果测试文本里有训练集中没有出现的词,它们会被 忽略(不会增加新维度)。

五、BoW 与现代 LLM 的关系

BoW其实是语言表示演进的第一步

5.1 从 BoW 到 LLM:语言表示的技术演化路径

​ 从历史视角看,BoW 并不是“被淘汰的旧技术”,而是现代大模型语言表示体系的起点。

  • 语言表示方法大致经历了以下阶段:
阶段表示方式核心思想
BoW / TF-IDF稀疏词频向量统计词出现
Word2Vec / GloVe稠密词向量学习词语语义空间
RNN / LSTM序列模型建模词序
Transformer注意力机制建模长距离依赖
LLM大规模预训练学习语言的隐式概率结构

​ 可以看到,BoW 是第一个将“文本 → 数值向量”的工程可行方案,没有它,就没有后续的词向量和 Transformer 输入形式。

5.2 为什么说 BoW 不是“差模型”,而是“时代最优解”

​ 很多现代 NLP 教程会把 BoW 描述为“原始、简单、效果差”,这种说法在工程史上是不准确的。

(1) 计算资源限制决定了模型形式
  • 在 BoW 流行的年代(1990–2010),那时:

    • GPU 尚未普及
    • 深度神经网络训练成本极高
    • 大规模语料不可获得
    • 分布式训练基础设施不存在
  • 在这种环境下:

    • 稠密向量训练几乎不可行
    • Transformer 完全无法训练
    • BoW 是唯一可工业化落地的文本表示方式
(2) 在很多任务上,BoW 至今仍然是强基线
  • 即使在今天,文本分类、信息检索、搜索排序、推荐系统特征工程,BoW / TF-IDF + 线性模型仍然是强基线,且成本极低。

  • 在工业界常见经验是:一个调优良好的 TF-IDF + Logistic Regression,往往能击败一个没有调参的小型神经网络模型。

5.3 BoW 与现代 LLM 的本质差异

​ 从数学本质上看,BoW 和 LLM 的区别是统计阶数与结构建模能力:

模型建模能力表示类型
BoW一阶统计(词频)稀疏向量
Word2Vec二阶共现统计稠密嵌入
Transformer高阶条件概率序列隐空间
LLM全局语言分布隐式世界模型
  • BoW 是P(w)P(w)P(w)

  • LLM 是:
    P(wt∣w<t,context) P(w_t|w_{<t}, \text{context}) P(wt​∣w<t​,context)
    本质上,LLM 是 BoW 的高阶条件概率扩展。

5.4 从工程角度看:LLM 仍然继承了 BoW 的思想

​ 尽管 Transformer 表面上非常复杂,但在底层LLM 仍然需要:

  • Tokenization(分词)

  • Vocabulary(词表)

  • Token ID 向量化

  • 稀疏→稠密嵌入映射

    这样看来,BoW 的思想仍然存在于 embedding lookup 表中,只是被神经网络“软化”了。

5.5 为什么说 BoW 是 NLP 的“牛顿力学”

在这里插入图片描述

​ 可以用一个物理学类比:

NLP物理学
BoW牛顿力学
Word2Vec经典统计物理
Transformer相对论
LLM量子场论级复杂系统

​ 牛顿力学并没有“过时”,只是适用范围有限。同理,BoW 不是错误模型,而是在低复杂度语言建模中的最优工程选择。

5.6 BoW 的思想在现代系统中的隐秘复活

​ 有趣的是,很多现代 LLM 系统又回归了“词频思想”:

  • BM25 仍然是搜索引擎核心

  • Hybrid Search = BM25 + Embedding

  • RAG 系统中仍使用 TF-IDF / BM25 召回

  • Prompt caching / prefix caching 本质是统计语言片段复用

    深度模型并没有取代统计模型,而是与之叠加。

六、总结

​ 词袋模型并不是一个“落后的技术”,它是现代语言模型体系的工程原点:

  • 第一次实现文本 → 数值空间映射
  • 建立了词表、分词、向量化的统一范式
  • 为 Word2Vec、Transformer、LLM 提供了概念与工程基础

​ 没有 BoW,就没有今天的大模型语言智能。它不是被淘汰的旧模型,而是语言智能工程史上的第一块基石。它的局限来自时代,而它的思想仍活在每一个 LLM 的 embedding 层中。

文本表示方法对比:从TF-IDF到LLM Embeddings 文本表示是自然语言处理的基础技术,它将非结构化的文本数据转换为机器可处理的数值形式。传统方法如词袋模型(BoW)和TF-IDF基于词频统计,计算高效但语义捕捉有限;现代方法如LLM Embeddings通过深度神经网络学习上下文感知的语义表示,效果显著但资源消耗大。在Scikit-learn等机器学习框架中,文本表示的选择直接影响模型性能和系统效率。实际应用中需要权衡准确率与计算成本,例如新闻分类等场景可能优先选择TF-IDF,而语义理解任务则适合LLM Embeddings。优化技巧如TF-IDF的ngr 阅读详情

相关推荐

ROS激光雷达动态避障算法优化(C++实战)

本文深入探讨了ROS激光雷达动态避障算法的C++实战优化。针对动态环境的核心挑战,文章系统性地介绍了从激光数据预处理(降噪、瘦身)、动态障碍物检测与跟踪,到基于动态窗口法(DWA)的智能决策与调优的全流程。重点分享了如何将障碍物速度预测融入DWA打分函数,以实现更安全、流畅的避障,并提供了工程架构、性能优化及真机调试的实用建议。

weixin_29192141的博客 943

BoW(词袋)算法

BoW BoW模型最初是为解决文档建模问题而提出的,因为文本本身就是由单词组成的。它忽略文本的词序,语法,句法,仅仅将文本当作一个个词的集合,并且假设每个词彼此都是独立的。这样就可以使用文本中词出现的频率来对文档进行描述,将一个文档表示成一个一维的向量。 将BoW引入到计算机视觉中,就是将一幅图像看着文本对象,图像中的不同特征可以看着构成图像的不同词汇。和文本的BoW类似,这样就可以使用图像特...

niuniu0243111006的博客 7192

AOI检测总误判?五大常见问题与实战解决方案

通过对图像质量、检测程序、外界干扰、算法优化以及设备维护和校准的全面把控,企业可以有效降低误判率,提升AOI检测的准确性和可靠性,为工业生产提供更有力的质量保障。表现描述:在AOI检测时,元器件字符因印刷颜色深浅、模糊或受到灰尘干扰等差异,再加上元件库参数未根据实际生产优化,会使系统误将合格元件判定为不合格,严重影响生产效益和产品质量。优化元件库:着重检测关键差异字符,如型号编码等关键信息,剔除不必要字符的检测项,减少干扰,专注于关键识别的准确性。检测时,根据物料信息动态更新检测参数,使系统适应物料变化。

ALeader_AOI的博客 3494

NLP基础——Bag of Words 词袋法

另外,BoW 还有一个问题是高维度,因为它的维度是词汇表的大小,这对于大语料来说可能是非常大的。对于这两个句子,我们首先创建词汇表,包含所有的单词:{ “The”, “cat”, “sat”, “on”, “the”, “mat”, “dog”, “log”}。[2, 1, 1, 1, 2, 1, 0, 0] (对应 “The cat sat on the mat.”),然后对于每一个文本,生成一个向量,长度为词汇表的大小,每一个元素是对应单词在该文本中出现的次数。这就是 BoW 的基本思想。

qq_42902997的博客 2730

【模拟电子设计实战】开源!基于Multisim与AD620的心电采集电路仿真与优化

本文详细介绍了基于Multisim与AD620的心电采集电路仿真与优化实战。通过分析心电信号采集的挑战,重点讲解了AD620仪表放大器和OP07运算放大器的选型优势及电路设计技巧,包括对抗50Hz工频干扰和基线漂移的优化方法。文章还分享了Multisim仿真参数设置与实测对比经验,最终实现性能达标的心电采集电路设计。

weixin_30555125的博客 95

华为防火墙——本地Portal认证

配置IP地址、路由、Nat策略使得内网主机可以访问公网服务器对网段不进行认证,对网段进行portal认证。

m0_49864110的博客 3258

BOW--创建和训练目标检测器

BOW--创建和训练目标检测器 1、bow方法的实现步骤 去一个样本数据集 对样本集中的每幅图像提取描述符(采用SIFT,SURF等方法) 将每一个描述符都加入到BOW训练器中 将描述符聚类到K簇中(聚类的中心就是视觉单词) 接下来要测试一下分类器,并尝试进行检测,这个过程和前面介绍的非常相似:给定测试的图像,提取特征,然后基于这些特征到最近簇心的距离来实现向量化,已形成直方图。 下图...

庾信平生最萧瑟 2343

今日指数项目之实时流数据采集【六】

实时数据采集代码

Maynor的博客 2146

语义分析的一些方法(二)

2 文本语义分析 前面讲到一些文本基本处理方法。一个文本串,对其进行分词和重要性打分后(当然还有更多的文本处理任务),就可以开始更高层的语义分析任务。 2.1 Topic Model 首先介绍主题模型。说到主题模型,第一时间会想到pLSA,NMF,LDA。关于这几个目前业界最常用的主题模型,已经有相当多的介绍了,譬如文献[60,64]。在这里,主要想聊一下主题模型的应用以及最新进展(考虑...

soledede 2014

QT Android开发之Android端usb调试模式设置与问题解决

QT Android开发之Android端usb调试模式设置与问题解决 一.QT android开发android端usb调试模式设置 QT android开发环境搭建完成后,android设备需要打开usb调试模式才能正常连接,下面以小米ipad为例进行设置(其他手机和ipad设置方法类似) 二.小米ipad打开usb调试模式 1.设置----我的设备-----全部参数信息-----OS版本---点击这里6次以上就进入开发者模式。

热土程序园,利他愉己~ 1130

Unity零基础到入门 ☀️| 轻松学会 Unity界面布局和简单实例——入门级!(^_−)☆

入门级Unity知识,一起加油呀!

努力前行,总会成为自己心中的那道光 1万+

文本表示方法对比:词袋、TF-IDF与LLM嵌入

文本表示是自然语言处理的基础技术,其核心是将非结构化的文本数据转化为计算机可处理的数值形式。从传统的词袋模型、TF-IDF到现代的大语言模型嵌入(LLM Embeddings),不同方法在语义理解、计算效率和资源消耗等方面各有特点。词袋模型通过统计词频实现简单快速的文本表示,TF-IDF则引入逆文档频率优化特征权重,而基于Transformer架构的LLM Embeddings能捕捉深层语义关系。这些技术在文本分类、信息检索、情感分析等场景广泛应用,其中LLM Embeddings尤其适合处理语义相似度计算

weixin_30521161的博客 428

25、压电泵致动器变形计算与测量及转弯腔射流特性的有限元分析

本文围绕压电泵致动器的变形计算与测量以及转弯腔射流特性的有限元分析展开研究。通过建立有限元模型和抛物线拟合方法,对压电泵致动器的位移和变形体积进行了详细计算,并探讨了其对传感器性能的影响。同时,利用ANSYS软件对转弯腔在不同角速率输入下的射流特性进行了仿真分析,揭示了流场分布随角速率变化的规律。研究成果为压电流体角速率传感器的设计优化提供了理论依据和技术支持。

ooo22的博客 125

AI LLM架构基础-自然语言处理基础之文本表示

离散式表示包括One-Hot编码、词袋模型和TF-IDF,虽简单但无法捕捉语义关系;分布式表示如词嵌入(Word2Vec、GloVe)、上下文词嵌入(BERT、GPT)和句子嵌入,能更好地处理语义和上下文信息。文章还通过代码示例展示了One-Hot编码、Word2Vec和BERT的实现方法,为文本数据处理提供了实用参考。

achenbusi的博客 854

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【LLM】第二章:文本表示:词袋模型、小案例:基于文本的推荐系统(酒店推荐)

上一个章节我们讲了如何分词,分完词下一步就是,如何把这些词(tokens)转化为计算机可以读懂的词向量,这个步骤也叫文本表示。

因为热爱所以坚持 417

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【LLM理论学习】稀疏特征 vs 稠密 embedding

自然语言处理领域经历了从词袋模型(BoW)到现代词嵌入(Embedding)的范式转变。BoW采用高维稀疏向量进行显式统计,每个维度对应词表中的一个词,具有强可解释性;而现代Embedding通过低维稠密向量隐式学习语言分布,语义信息编码在向量间的几何关系中。尽管Embedding在语义理解任务上表现更优,但BoW在小数据集、低延迟、高可解释性场景中仍具优势。两种方法反映了对语言本质的不同建模假设:BoW关注离散符号统计,Embedding则捕捉连续分布结构。理解这一核心差异对NLP实践至关重要。

Rabbit_QL的博客 350

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

从BOW到DeepCBOW:nn4nlp-code词袋模型演进与代码实现详解

nn4nlp-code项目提供了从基础词袋模型(BOW)到深度连续词袋模型(DeepCBOW)的完整实现,帮助NLP初学者理解词向量表示的演进过程。本文将系统解析这三种模型的核心原理、代码实现及性能差异,为文本分类任务提供清晰的技术路线图。 ## 词袋模型(BOW):文本表示的基础范式 词袋模型(Bag-of-Words)是最基础的文本表示方法,它将文本视为单词的无序集合,通过词频构建特征向量

gitblog_00177的博客 479

NLP文本表示方法对比:词袋、TF-IDF与LLM嵌入

文本表示是自然语言处理的基础技术,它将非结构化的文本数据转换为机器可处理的数值形式。从经典的词袋模型到TF-IDF加权方法,再到基于深度学习的语言模型嵌入,不同方法在语义捕获能力和计算效率上各有优劣。词袋模型通过简单的词频统计实现快速向量化,而TF-IDF则通过逆文档频率加权提升特征区分度。随着预训练语言模型(LLM)的发展,基于Transformer的嵌入表示能够捕获更深层次的语义关系。在实际应用中,选择文本表示方法需要综合考虑任务复杂度、数据规模和计算资源。对于新闻分类等结构化任务,TF-IDF与SVM

weixin_35749545的博客 333

【LLM理论基础】结构化表示语言:从词袋模型到语义嵌入

本文探讨了自然语言处理中的文本表示技术演进,从词袋模型到词嵌入方法。计算机无法直接理解非结构化的自然语言,必须将其转换为结构化、可计算的向量表示。词袋模型通过词频统计实现文本向量化,但无法建模语义关系。Word2Vec则通过神经网络学习词向量,将语义信息编码到连续向量空间中,使相似上下文的词在向量空间中距离相近。这种分布式语义表示突破了词袋模型的局限,为后续深度学习模型奠定了基础。文章系统分析了不同方法的核心思想、实现原理及优缺点,揭示了文本表示学习作为语言智能第一步的关键作用。

Rabbit_QL的博客 704

论文《AutoQual:基于LLM Agent的评论质量可解释特征自动发现方法》

论文《AutoQual: An LLM Agent for Automated Discovery of Interpretable Features for Review Quality Assessment》 《AutoQual:面向评论质量评估的可解释特征自动发现 LLM Agent》

Growth Diary 318

关于LLM:揭秘token与embedding的机制

「GPT4 Turbo 的上下文长度为 128K token」「Claude 2.1 的上下文长度为 200K token」听起来像是一些重要的细节,那么token到底是什么?请看一句话——It’s over 9000!我们可以将其表示为 [“It’s”, “over”, “9000!”] 每个数组元素都可以称为一个token。在自然语言处理(NLP)领域,它是我们定义的最小分析单位。如何称呼token取决于你的token化方法;有很多这样的方法。创建token基本上是大多数 NLP 任务的第一步。让我们直

python1234567_的博客 2248

LLM大模型基础入门系列之:(六)Tokens 和 Embeddings

本文是LLM大模型基础入门系列的第6篇。在这篇文章中,我们重点介绍LLMs中的Tokens 和 Embeddings!

m_aigc2022的博客 2000

LLM与词袋、TF-IDF在新闻数据集上分类与聚类多维对比 | 附代码数据

如今,借助机器学习,我们只需将文本转换为计算机能理解的数字形式,模型便能自动完成这些任务。先进技术(如LLM)在需要语义理解的任务中优势明显,但在强信号的传统分类任务中,传统方法(如TF-IDF)凭借高效和鲁棒性依然不可替代。本文所有代码和数据已上传至交流社群,如需完整代码(包括绘图、交叉验证、超参数调优等),请扫描下方二维码或点击“阅读原文”加入社群,与900+同行交流成长,获取24小时技术支持。:在BoW基础上,给每个词加上一个权重——如果某个词在很多文章中都出现(如“的”“是”),它的重要性就降低;

拓端研究室TRL 351

GitHub超3万星!LLM大模型入门教程,业界最热门资源一网打尽

这篇博客介绍了一门关于大型语言模型(LLM)的课程,分为三个主要部分:LLM基础、LLM科学家和LLM工程师。LLM基础部分涵盖了机器学习所需的数学知识、Python编程技能以及神经网络的基本概念。LLM科学家部分专注于如何构建和优化LLM,包括模型架构、数据集构建、预训练和微调技术。LLM工程师部分则关注如何将LLM应用于实际场景并进行部署。课程提供了丰富的学习资源,如视频教程、书籍和开源工具,帮助学习者从理论到实践全面掌握LLM的开发与应用。

2401_84495872的博客 963

大语言模型(LLM)入门学习路线图

Github项目上有一个,它涵盖了大语言模型基础学习,LLM前沿算法和架构学习,以及如何将大语言模型进行工程化,是一个很好的帮助初学者入门大语言模型的路线图。

weixin_36751401的博客 3万+
上一篇: [Cursor代码跳转失效]为什么 Cursor 在 SSH 项目中无法跳转?一次远程开发索引机制的工程级拆解
下一篇: 【水印添加工具】从零设计一个工程级 Python 图片水印工具:WaterMask 架构与实现
未收敛
博客等级 码龄11年 3309粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未收敛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值