disgare 的博客
首页
博客
分类
标签
首页
博客
分类
标签
  • 网络

    • 计算机网络学习笔记
    • 网络安全相关
    • 域名和子网掩码
    • CORS 跨域资源共享
    • DNS、HTTP 与 HTTPS
    • Server-Sent Events (SSE)
    • WebSocket 长连接
  • 计算机基础

    • 操作系统 IO 相关知识
    • 操作系统学习笔记
    • 程序的机器级表示
    • 音频文件基础
    • 正则表达式相关概念
    • ffmpeg 的安装以及实现音频切分功能
    • Hex 和 Base64 编码
    • XML 的使用
  • 数据结构与算法

    • 动态规划算法学习笔记
    • 基于比较的排序算法的最坏情况下的最优下界为什么是O(nlogn)
    • 集合与数据结构学习笔记
    • 面试常见算法总结
    • 算法导论第二部分排序学习笔记
    • 算法导论第一部分学习笔记
  • Java

    • 对象之间的映射与转换
    • 反射学习笔记
    • 泛型相关概念
    • 关于 boolean 类型的坑
    • 如何使用 lambda 表达式实现排序
    • CompletableFuture 相关用法
    • CompletableFuture 源码浅要阅读
    • FutureTask 源码阅读
    • Guava 常用 API
    • Guava 源码阅读:Multimap 相关
    • Jackson 的各种使用
    • Java 的 Excel 相关操作
    • java 的常见性能问题分析以及出现场景
    • java 基础知识
    • JAVA 枚举的基础和原理
    • Java 图片文件上传下载处理
    • Java 序列化
    • Java 异常
    • Java 语法糖
    • Java 中关于字符串处理的常用方法
    • Java 中强、软、弱、虚引用
    • JAVA 注解小结
    • Java Http 访问框架
    • Java Stream 的使用
    • Java8 新特性
    • netty 学习笔记
    • Scanner 的各种用法
    • Servlet 学习笔记
    • String、StringBuffer、StringBuilder 学习笔记
  • JVM

    • 虚拟机执行子系统
    • JVM 自动内存管理
    • Linux 中 JVM 常用工具以及常见问题解决思路
  • Linux

    • crontab 表达式
    • Linux 常见命令
    • Linux 文件系统
  • 中间件

    • 关于定时任务原理
    • 详解 kafka
    • ES 搜索引擎
    • flink 提交流程
    • Grape-RAG
    • Hadoop 基础原理
  • 多线程

    • 多线程基础学习笔记
    • 简单了解并发集合
    • 如何手写单例
    • 深入理解 java 多线程安全
    • 生产者消费者问题
    • 线程池作用、用法以及原理
    • AQS 组件
    • ThreadLocal 原理以及使用
  • 非关系型数据库

    • Redis 集群
    • Redis 数据结构、对象与数据库
    • Redis 学习笔记
  • 关系型数据库

    • B+ 树的插入、删除和数据页分裂机制
    • MySQL 的 binglog、redolog、undolog
    • MySQL 的记录存储结构、存储引擎与 Buffer Pool
    • MySQL 基本的特性
    • MySQL 开发规范
    • MySQL 事务与锁与 MVCC
    • MySQL 数据类型、字符集相关内容
    • MySQL 索引与索引优化
    • PostgreSQL 更新数据时 HOT优化
    • PostgreSQL 相关用法
  • Python

    • Python 基础语法
    • Python 学习
  • Spring 项目

    • Lombok 的常用注解
    • maven 小结
    • MyBatis 框架的使用
    • MyBatis 重要知识点总结
    • MybatisPlus 的使用
    • Spring 框架基础使用
    • Spring 事务相关
    • Spring IOC 的原理及源码
    • Spring AOP 的使用和原理
    • SpringBoot 的原理
    • SpringBoot 基础使用
    • SpringWeb 重要知识点
  • 分布式

    • 初步了解 docker
    • 从 ACID 到 BASE 事务处理的实现
    • 访问远程服务
    • 分布式 id
    • 分布式缓存相关问题
    • 分布式集群理论和分布式事务协议
    • 分布式架构的观测
    • 分布式一致性算法
    • 负载均衡 Load Balancing
    • 关于分布式系统 RPC 中高可用功能的实现
    • 集群间数据同步的目的
    • 三高问题下的系统优化
    • 数据库分库分表
    • 详解 Spring Cloud
    • Dubbo 基础概念
    • Gossip 协议
    • nginx 学习笔记
    • Protobuf 通信协议
    • Zookeeper 基础学习
  • 架构设计

    • 参数校验与异常处理
    • 抽象方法与设计模式
    • 代码整洁之道
    • 权限系统设计
    • 用低内存处理大量数据
    • 设计模式——策略模式
    • 设计模式——过滤器模式在 Spring 中的实践
    • 状态模式
    • 统一结果返回
    • 为什么要打日志?怎么打日志?打什么日志?
    • 运维监控常见指标含义
    • 资深研发进阶
    • DDD 架构学习笔记
    • Java 常用的规则引擎
    • MVC 架构学习笔记
  • AI

    • 如何编写 Prompt
    • Agent 工程架构
    • LLM 相关内容
    • NLP 相关知识
      • 技术范式
        • 监督学习
        • 无监督学习
        • 自监督学习
      • 分词
      • Embedding(嵌入)
      • 神经网络
      • 强化学习
    • vibe coding 最佳实践
    • windows 下 ollama 迁移到 D 盘
  • 开发工具

    • 如何画时序图、流程图、状态流转图
    • excel 关于 =vlookup 的用法
    • git 的学习以及使用
    • IDEA 插件推荐
    • IDEA 常用快捷键以及调试
    • Shell 脚本
    • swagger 的使用
  • 前端

    • 简单了解前端页面开发
    • 伪静态是什么
    • GitHub Pages 部署教程
    • Vercel 部署教程
    • vue-admin-template 简单使用
    • VuePress 博客搭建指南
  • 项目

    • 面试刷题网——技术方案
    • 影视资源聚合站——技术方案
  • 问题记录

    • 定时任务单线程消费 redis 中数据导致消费能力不足
    • 提供可传递的易受攻击的依赖项
    • Liteflow 在 SpringBoot 启动时无法注入组件问题 couldn‘t find chain with the id[THEN(NodeComponent)]
  • 金融

    • 股票分析——关于电力
    • 股票技术面——量价关系
    • 股票技术面——盘口
    • 股票技术面——基础
    • 基础的金融知识
    • 基金与股票
    • 韭菜的自我总结
    • 聊聊价值投资
  • 其他

    • 程序员职场工作需要注意什么
    • 创业全链路SOP:从灵光一现到系统化增长的实战指南
    • 观罗翔讲刑法随笔
    • 价格和价值
    • 立直麻将牌效益理论
    • 梅花易数学习笔记
    • 压力管理
2024-06-27
人工智能
目录

NLP 相关知识

NLP(Natuarl Language Processing)是人工智能的一个分支,中文名自然语言处理,专注于处理和理解人类使用的自然语言。它涵盖了多个子领域,如文本分类、情感分析、机器翻译、问答系统、语音识别、语义解析等。粗糙一点理解,就是可以和人类沟通的 AI

# 技术范式

NLP 的常见的相关技术如下:

# 监督学习

监督学习是指根据已有的数据集,知道输入和输出结果之间的关系。根据这种已知的关系,训练得到一个最优的模型

在监督学习中训练数据既有特征(feature,输入的变量,有可能有几千万个)又有标签(label,需要预测的事务,比如输入特征黑白相间、名字带熊、毛茸茸的,输出的标签为熊猫),通过训练,让机器可以自己找到特征和标签之间的联系,在面对只有特征没有标签的数据时,可以判断出标签

eg:经典的机械学习入门案例,波士顿房价预测,就是监督学习,这题算的上是算法届的 hello world

波士顿房地产市场竞争激烈,而你想成为该地区最好的房地产经纪人。为了更好地与同行竞争,你决定运用机器学习的一些基本概念,帮助客户为自己的房产定下最佳售价。幸运的是,你找到了波士顿房价的数据集,里面聚合了波士顿郊区包含多个特征维度的房价数据。你的任务是用可用的工具进行统计分析,并基于分析建立优化模型。这个模型将用来为你的客户评估房产的最佳售价 、 监督学习所使用的技术:

1:线性回归算法,线性回归是一种用于建立自变量(输入)和因变量(输出)之间线性关系的模型,其重点是

  • 通过提供数据训练模型,让模型得到自变量和因变量对应的映射关系
  • 映射关系是连续且线性的

2:决策树算法,该算法用于解决分类和回归问题。它通过构建一棵树形结构来进行决策,每个内部节点表示一个特征或属性(色泽和触感),每个叶节点表示一个类别或一个数值(好瓜、坏瓜) alt text 决策树算法的基本步骤如下:

  • 特征选择:根据某个准则选择最佳的特征作为当前节点的划分依据。常用的特征选择准则包括信息增益、信息增益比、基尼指数等
  • 决策树生成:根据特征选择的结果,递归地生成决策树的内部节点和叶节点。每个内部节点表示一个特征,根据该特征的取值将样本划分到不同的子节点中
  • 决策树剪枝:为了防止过拟合,可以进行决策树的剪枝操作。剪枝过程可以通过预剪枝或后剪枝来实现。预剪枝是在决策树生成过程中进行判断,如果划分不再显著提高性能,则停止划分。后剪枝是在决策树生成之后,通过剪枝操作来减小决策树的复杂度

3:朴素贝叶斯算法是基于贝叶斯定理和特征条件独立假设的分类算法。它假设特征之间是相互独立的,然后根据已知的特征和类别的条件概率,计算待分类样本属于每个类别的概率,并选择概率最大的类别作为预测结果

4:K 近邻算法就是如果一个样本附近的 k 个最近(即特征空间中最邻近)样本的大多数属于某一个类别,则该样本也属于这个类别

# 无监督学习

我们不知道数据集中数据、特征之间的关系,而是要根据聚类或一定的模型得到数据之间的关系,这种情况就需要使用无监督学习了

在无监督学习中数据只有特征无标签,是一种机器学习的训练方式,它本质上是一个统计手段,让模型在没有标签的数据里发现各个数据之间的联系。比起监督学习,无监督学习更像是自学,让机器学会自己做事情 举个例子:左图是无监督学习的过程,虽然数据被分成了两类,但是没有对应的数据标签,统一用蓝色的圆点表示,这更像是把具有相同的特征的数据聚集在一起,所以无监督学习实现分类的算法又叫做聚类,而有监督学习则更向是分类。右图是监督学习中二分类的过程,标签在图中体现为三角和圆

在执行聚类算法后,数据可能会根据算法,分为很多类,如果数据是二维属性的,划分数据的可能是一条线,如果数据是三维属性的,划分数据的可能是一个切面,如果数据是 n 维的,那划分数据的是 n-1 维的超平面

除了无监督学习之外还有半监督学习,半监督学习的目标是利用同时包含有标签和无标签的数据来构建一个模型,使得模型能够在测试阶段更好地泛化到新的、未见过的数据

无监督学习所使用的技术:

1,K 均值聚类是一种常用的聚类算法,用于将数据集划分为 K 个不重叠的簇。每个簇代表一个数据的集合,其中相似的数据被分配到同一个簇中,K-Means 算法的基本思想是通过迭代优化的方式来找到最优的簇划分。具体步骤如下:

  • 定义 K 个重心。一开始这些重心是随机的(也有一些更加有效的用于初始化重心的算法)
  • 寻找最近的重心并且更新聚类分配。将每个数据点都分配给这 K 个聚类中的一个。每个数据点都被分配给离它们最近的重心的聚类。这里的「接近程度」的度量是一个超参数——通常是欧几里得距离(Euclidean distance)
  • 将重心移动到它们的聚类的中心。每个聚类的重心的新位置是通过计算该聚类中所有数据点的平均位置得到的
  • 重复第 2 和 3 步,直到每次迭代时重心的位置不再显著变化(即直到该算法收敛)

2,层次聚类。如果你不知道应该分为几类,那么层次聚类就比较适合了。层次聚类会构建一个多层嵌套的分类,类似一个树状结构 层次聚类的步骤如下:

  • 首先从 N 个聚类开始,每个数据点一个聚类。
  • 将彼此靠得最近的两个聚类融合为一个。现在你有 N-1 个聚类。
  • 重新计算这些聚类之间的距离。
  • 重复第 2 和 3 步,直到你得到包含 N 个数据点的一个聚类。
  • 选择一个聚类数量,然后在这个树状图中划一条水平线。

# 自监督学习

LLM 的预训练是无监督学习,更准确地说,它是自监督学习(Self-Supervised Learning),属于无监督学习的一种特殊形式。以 GPT 为例,我们给定一段文本,让模型预测下一个词(语言建模任务)

  • 输入:"今天天气很___"
  • 目标:让模型预测 "好"(无需人工标注,答案来自文本本身)

因为这种方式无需人工标注,标签是文本中自带的,只不过给模型的时候把一个词给挖掉了,所以是无监督学习下的一类,这种训练方式数据利用效率高,所有文本均可用于训练

这个说专业一点叫掩码预测

# 分词

大模型的分词器是将文本拆分为模型可处理的基本单元的核心组件,直接影响模型的理解能力和生成效果,我们简单介绍一下主流的分词器

1,基于词的分词(Word-based),做法是按空格或词典切分完整单词。这么做的话词表庞大,因为需覆盖所有单词。并且无法处理未登录词,万一出现什么新词需要额外登录一下

2,基于字符的分词,一般不会这么干

3,子词分词(Subword),高频词保留完整,低频词拆分为子词。是目前最主流的方法,具体做法为 Byte Pair Encoding (BPE),BPE 会统计所有相邻字符对频率(举例来说,“h”+“e”在“hello,java;hello es;hello nlp”中出现3次,BPE 会记录下来),然后合并最高频字符对(“h”+“e”→“he”),更新词表,重复直到词表达预定大小

# Embedding(嵌入)

这里说个题外话,上文说:聚类算法可以将一些 n 维的数据聚集成一个簇,来让计算机理解数据的相似性,那我们面对 GPT 输入的都是文字,GPT 怎么能做到对这些单词聚类的呢?只要将文字转化成向量,我们就可以使用上面的聚类算法让计算机理解我们说的话了。那么我们将问题简单化,如果我输入的是一段文字,或者一个单词,计算机是怎么将数据转换成 n 维的向量的呢

Embedding 意思是嵌入,文本向量化(Text Embedding)就是将文本数据(词、句子、文档)表示成向量的方法。词向量化将词转为二进制或高维实数向量,句子和文档向量化则将句子或文档转为数值向量。总之,Embedding 向量不仅仅是对物体进行简单编号或标识,而是通过特征抽象和编码,在尽量保持物体间相似性的前提下,将物体映射到一个高维特征空间中。Embedding 向量能够捕捉到物体之间的相似性和关系,在映射到高维特征空间后,相似的物体在空间中会聚集在一起,而不同的物体会被分隔开 将离散的文字信息(如单词)转换成连续的向量数据。这样,语义相似的词在向量空间中位置相近,并通过高维度捕捉语言的复杂性。语义上相近的单词在向量空间中被映射到相近的位置。大模型使用了很多的维度(有些模型可能只有几千,有些模型也可能有数十万)来表示人类语言的复杂度

这么说可能比较抽象,我们举个例子来说明降维和聚类:

假设我们正在构建一个非常简单的单词向量模型,其中每个单词都被表示为一个四维向量,这里的维度代表了某种抽象的概念,比如性别、王室地位、战斗能力和智慧。我们将使用女王、国王、皇后和士兵作为示例单词

  • 女王:我们可以将其表示为向量 [1, 1, 0, 1],其中第一个1表示女性,第二个1表示王室成员,0表示战斗能力较弱,1表示智慧程度
  • 国王:向量为 [0, 1, 0, 1],0表示男性,1表示王室成员,0表示战斗能力较弱,1表示智慧程度
  • 皇后:向量为 [1, 1, 0, 0],与女王相似,只是在这里我们用0表示她的智慧程度可能与女王不同
  • 士兵:向量为 [0, 0, 1, 0],0表示男性,0表示不是王室成员,1表示战斗能力强,0表示智慧程度

我们可以让计算机使用一些聚类算法来比较上面四个的相似程度,比如通过一个最简单的聚类算法:比较向量中同一列相同的个数最多,我们发现女王和国王、女王和皇后的相似程度最高

GPT 会根据这种方式,去理解用户的意图,当用户输入一些完全不相关的话时,模型也可以理解并指正,eg:

  • 输入:我认为意大利面应该伴42号混泥土
  • 输出:看起来你可能是在开玩笑或者引用某种幽默的说法,但实际上,意大利面和42号混凝土是两种完全不相关的东西。意大利面是一种源自意大利的传统食物,通常与各种酱料搭配食用,如番茄酱、奶油酱、肉酱或是橄榄油和大蒜等。 而42号混凝土(实际上混凝土没有“42号”这种说法,可能是参考了《银河系漫游指南》中的“生命、宇宙以及一切的答案是42”,这里做幽默解读)是指建筑材料中的一种,用于建筑和工程中,显然与食物无关,更不用说与意大利面一起食用了

这就是计算机可以理解语意的原理,这同时也是向量库检索的原理。现实生产环境中算法会更加复杂,在将单词、句子、excel、word 转换为向量(嵌入层所处理的事情,会使用降维算法,主要处理将数据降维成向量)以及比较向量近似程度(聚类算法所处理的事情)两个算法中有很深的钻研空间

# 神经网络

上面说监督学习会学习输入和输出之间的映射关系。监督学习可以分为两大类:基于神经网络的方法和非神经网络的方法。这两类方法在原理、结构和应用场景上有一些显著的区别,目前的 LLM 大模型,大多都是用神经网络的方式构建的

为什么要用神经网络?因为我们要解决的问题变复杂了。比如识别一张图是不是猫,这不是面积->房价这种简单直线关系。图片是像素,是海量数据,关系弯弯绕绕。我现在需要让机器不是找一条直线,而是找一大堆可以弯曲的线(激活函数),把它们一层层叠起来,去拟合那些弯弯绕绕的关系

神经网络是一种受生物神经系统启发的计算模型,由大量互连的节点(神经元)组成。这些节点通过多层结构连接,每一层都对输入数据进行变换,最终输出预测结果。这种技术适用于大规模数据集,计算资源需求较高,包含多层结构,包含大量神经元

在自然语言处理中,递归神经网络,或者说循环神经网络(RNN)、Transformer 等用于文本分类、机器翻译、情感分析等。接下来很简单的聊一下他们的原理以及能做什么

首先了解一下神经网络的构建原理,它起源于很简单的函数,比如 y = ax + b,我们给定一组 x,和 y,让模型给我们猜出 a 和 b 的值,这个猜的结果就是模型的输出,让模型猜对的过程就是预训练和微调

举例说明:

1,Masked Language Modeling (MLM):随机遮盖15%的 token,预测被遮盖的,示例:"我喜欢吃[MASK]果" → 预测"苹"

2,Causal Language Modeling (CLM):预测下一个 token。示例:"今天天气很好," → 预测"我"

当然现实中的关系往往不是线性的,我们需要使用激活函数比如 len 啥的。我们每次让模型猜一个值,都使用损失函数来计算这个值和最终结果的差值,差值越小,说明我们越接近正确答案,训练完毕后可能会遇到欠拟合和过拟合的问题,下面是一个简单的激活函数 请添加图片描述 当然这只是一个输入神经元和一个输出神经元,真实的情况可能会感觉复杂,比如下图,有多个中间层(卷积层、池化层、全连接层),多个输出和多个输入: 请添加图片描述 上面这些基础了解完毕后,我们结合上文中提到的嵌入知识,我们可以将一个单词,升纬成一个多纬向量,这个多维向量的每个纬度的值,可以理解成神经元的多个入参,我们可以将这个单词输入,然后得到一个结果

RNN 可以用于文本分类任务,例如情感分析,其解决的问题,是一句话输入输入层时,输入层不知道每个词直接的关系,并且一句话是可变长的,但是模型的输入层一般都是固定的,我们怎么让一个可变长的话转换成一组长度固定的输入呢

给定一段文本,RNN 会逐词处理,并且将上一个处理的单词,额外添加进下一个单词的入参中,让本单词的输入带有上一个单词的信息,以此让模型知道上文说了什么 在处理长序列时,RNN 的梯度可能会变得非常小(消失)或非常大(爆炸),导致训练困难。eg:

  • 输入序列:["The", "cat", "sat", "on", "the", "mat"]
  • 处理过程:RNN 从左到右逐词处理,每个时间都更新隐藏状态。最终的隐藏状态用于分类。如果句子很长,RNN 可能会忘记最前面的单词,导致分类不准确

在图像识别 cv 领域,我们有类似的操作:CNN 卷积神经网络的模型,它的输入是一个图像,卷积是将图像的一个像素块,卷成一个向量,这么做也是为了将上下文信息收集到一个向量中,然后做处理 层级

# 强化学习

强化学习是让一个智能体在环境中通过尝试和错误来学习行为策略。智能体通过与环境进行交互,根据奖励信号来调整其行为策略,以达到最大化累积奖励的目标。强化学习和监督学习、无监督学习 最大的不同就是不需要大量的数据喂养,而是通过自己不停的尝试来学会某些技能

具体方式是,我们先使用一些数据来训练模型,然后给他一些任务,对于他的执行结果,我们会返回一个奖励信号,表示他执行该任务的好坏程度,下一次模型执行类似任务时,会根据奖励信号更新其策略

比如在围棋界有一个很出名的事情,AlphaGo Master 击败李世石,使用强化学习的 AlphaGo Zero 仅花了40天时间,就击败了自己的前辈 AlphaGo Master

强化学习的本质是通过奖励信号优化行为。目标是让模型学会最大化奖励函数的累计值,并且我们只提供模型与环境的交互,无固定输入-输出对,只有试错反馈,因此和微调不太一样,微调是什么后续会介绍

#NLP
最后更新: 2/23/2026, 9:23:04 AM
LLM 相关内容
vibe coding 最佳实践

← LLM 相关内容 vibe coding 最佳实践→

最近更新
01
vibe coding 最佳实践
02-24
02
立直麻将牌效益理论
02-23
03
伪静态是什么
02-08
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式