当前位置: 首页 > article >正文

【A I应用】1.原理入门以及应用方式

90分钟!清华博士带你一口气搞懂人工智能和神经网络_哔哩哔哩_bilibili

画板

原理

搭建黑箱(也就是预训练的模型)

专家系统

感知机

token

  1. 定义
    • 在人工智能领域,特别是在自然语言处理(NLP)中,token 是文本处理的基本单位。它可以是一个单词、一个标点符号、一个数字,或者是其他语言单位。例如,在句子 “I love AI.” 中,“I”“love”“AI” 以及 “.” 都是 token。
  2. 分词(Tokenization)过程
    • 分词是将文本序列分割成 token 的过程。这是自然语言处理任务的一个重要预处理步骤。
    • 不同的语言有不同的分词方式。对于像英语这样以空格分隔单词的语言,分词相对简单,但也需要考虑标点符号和特殊字符。例如,“I’m” 可能会被分为 “I” 和 “'m” 两个 token。而对于像中文这样没有明显空格分隔单词的语言,分词就更加复杂,需要使用专门的中文分词工具。例如,“我爱人工智能” 可以被分为 “我”“爱”“人工智能” 三个 token。
  3. 在模型中的作用
    • 模型输入表示:在神经网络模型(如 Transformer 架构的模型,包括 ChatGPT 等)中,文本通常以 token 序列的形式输入。模型会将每个 token 转换为一个向量表示,这些向量包含了 token 的语义和语法等信息。例如,在一个预训练语言模型中,会为每个 token 分配一个对应的嵌入向量(Embedding Vector),通过对大量文本的学习,这些嵌入向量能够捕捉 token 之间的语义关系。
    • 限制输入长度:模型通常会对输入的 token 数量有一定的限制。这是因为模型的计算资源和架构设计决定了它能够有效处理的文本长度是有限的。例如,一些模型可能最多允许输入 512 个 token。如果输入的文本分割后的 token 数量超过这个限制,就需要对文本进行截断或采用其他策略(如摘要等)来适应模型的要求。
    • 计算成本和效率:token 的数量也会影响模型的计算成本。更多的 token 意味着模型需要处理更多的信息,计算量会增加。同时,token 的划分方式也会影响模型的效率。如果 token 划分得不合理,可能会导致模型难以学习到有效的语义关系,从而影响模型的性能。

向量

  1. 向量是一种数据类型
    • 向量是一种有序的数字列表,在数学和计算机科学中被视为一种数据类型。它可以用来表示多种信息,例如在二维空间中,一个向量可以表示一个点的坐标;在三维空间中,可以表示为。在数据处理领域,向量的维度可以更高,每个维度都可以携带不同的信息。
  2. 神经网络对向量的良好适应性
    • 方便的数学运算基础
      • 神经网络的计算过程大量依赖于线性代数中的运算,如矩阵乘法、加法等。向量作为矩阵的特殊形式(列向量或行向量),可以很好地融入这些运算。例如,在一个全连接神经网络层中,输入向量与权重矩阵相乘,再加上偏置向量,得到输出向量,其计算公式为。这种计算方式使得神经网络能够高效地处理向量形式的输入,并且通过调整权重矩阵和偏置向量来学习数据中的模式。
    • 能够表示多种数据
      • 向量可以用于表示各种类型的数据,以适应神经网络的不同应用场景。
      • 在文本处理中,如前面提到的词向量可以表示单词的语义信息。一个文本序列可以通过将其中的单词对应的词向量组合(例如拼接或求和等操作)来形成一个句子向量,进而作为神经网络的输入,用于文本分类、机器翻译等任务。
      • 在图像识别中,图像可以被转换为向量。以简单的灰度图像为例,一幅像素的图像可以被看作是一个维的向量,每个维度代表一个像素的灰度值。这样的向量表示能够让神经网络对图像的特征进行学习和分类。
    • 符合神经网络的架构特点
      • 神经网络的神经元之间的连接方式和信息传递方式也与向量的处理相契合。从输入层到隐藏层再到输出层,数据以向量的形式在各层之间流动。每一层的神经元可以看作是对输入向量进行一种非线性变换,这种变换通过神经元的激活函数来实现。例如,常见的激活函数如 Sigmoid、ReLU 等,都是对向量中的每个元素(对应神经元的输入)进行操作,使得神经网络能够学习到复杂的非线性关系,而向量的结构方便了这种逐元素的操作和信息传递。
  • 向量数据例子
  • 文本处理中的词向量示例
    • 在自然语言处理中,假设我们有一个简单的词汇表,包含 “苹果”“香蕉”“橘子”“喜欢”“吃” 这 5 个词。我们可以使用一种简单的 one - hot 向量表示法。以 “苹果” 为例,它的向量表示为 [1,0,0,0,0],“香蕉” 为 [0,1,0,0,0],“橘子” 为 [0,0,1,0,0],“喜欢” 为 [0,0,0,1,0],“吃” 为 [0,0,0,0,1]。
    • 更常见的是使用预训练的词向量,如 Word2Vec 或 GloVe 生成的词向量。假设 Word2Vec 生成的向量维度是 300 维,对于 “苹果” 这个词,它的向量可能是一个 300 维的实数向量,例如 [0.12, - 0.34, 0.56,…,0.78](这里只列举了向量的前 3 个维度和最后一个维度,中间省略了很多)。这些词向量能够更好地捕捉词与词之间的语义关系,比如 “苹果” 和 “香蕉” 的向量在语义空间中的距离可能比 “苹果” 和 “吃” 的向量距离更近,反映出它们语义上的相似性。

模型训练原理

  1. 数据预处理阶段
    • 文本清洗:首先,大量的文本数据(如书籍、新闻文章、学术论文、网页内容等)被收集用于训练语言生成模型。在使用这些数据之前,会进行文本清洗操作,去除噪声信息,例如 HTML 标签、特殊符号、多余的空格等。同时,也会处理一些不规范的文本格式,如大小写统一等。
    • 分词(Tokenization):这是将文本划分成一个个基本单元(token)的过程。对于像英语这样以空格分隔单词的语言,分词相对简单,但也需要考虑标点符号和特殊字符的处理。例如,“I’m” 可能会被分为 “I” 和 “'m” 两个 token。而对于像中文这样没有明显空格分隔单词的语言,分词就更加复杂,需要使用专门的中文分词工具。这些 token 将作为模型的输入单元。
    • 构建词汇表(Vocabulary):在分词后,会构建一个词汇表。词汇表包含了文本数据中出现的所有不同的 token。每个 token 在词汇表中都有一个对应的索引(index),模型在处理文本时,会将 token 转换为其对应的索引,以方便进行向量表示和计算。词汇表的大小会影响模型的性能和复杂性,太大的词汇表可能导致模型参数过多,而太小的词汇表可能无法充分表示文本的语义。
  2. 模型架构阶段(以 Transformer 架构为例)
    • 输入嵌入(Input Embedding):经过分词和词汇表转换后的文本序列(以 token 索引表示)被输入到模型中。首先,通过一个嵌入层(Embedding Layer)将 token 索引转换为向量表示。这个向量空间能够捕捉 token 之间的语义关系,例如,语义相似的单词对应的向量在这个空间中的距离会比较近。
    • 多头注意力机制(Multi - Head Attention):这是 Transformer 架构的核心部分。在多头注意力机制中,输入向量会被并行地经过多个注意力头(Attention Head)。每个注意力头都可以学习文本序列中不同位置之间的关系。例如,在生成一个句子时,一个注意力头可能会关注句子中的主语和谓语之间的关系,另一个注意力头可能会关注修饰语和中心词之间的关系。通过这种方式,多头注意力机制能够全面地捕捉文本的语义和语法结构。
    • 前馈神经网络(Feed - Forward Neural Network):在经过多头注意力机制后,输出会经过一个前馈神经网络。这个网络由两个线性变换层和一个激活函数(如 ReLU)组成,它能够对文本序列进行进一步的非线性变换,增强模型的表达能力,学习到更复杂的文本模式。
    • 层归一化(Layer Normalization)和残差连接(Residual Connection):在 Transformer 架构中,每一层都包含层归一化和残差连接。层归一化可以加速模型的训练过程,提高模型的稳定性,它通过对每一层的输入进行归一化处理,使得模型的训练更加容易。残差连接则允许信息直接跳过一层或多层,有助于解决深度神经网络中的梯度消失问题,使得模型能够有效地学习到深层次的文本特征。
  3. 训练阶段
    • 自监督学习(Self - Supervised Learning):语言生成模型通常采用自监督学习的方式进行训练。以常见的 “预测下一个单词” 任务为例,模型会根据输入文本序列的前面部分来预测后面的单词。例如,给定句子 “The cat is sitting on the”,模型要预测出下一个单词 “mat”。在训练过程中,模型的预测结果与真实的下一个单词进行比较,通过计算损失函数(如交叉熵损失)来衡量预测的准确性。
    • 优化器调整(Optimizer):为了使模型能够不断地学习和改进,会使用优化器(如 Adam、Adagrad 等)来调整模型的参数。优化器根据损失函数的梯度来更新参数,使得模型在每次训练迭代后,预测结果能够更接近真实值。这个过程会经过多个训练周期(epoch),每个周期模型都会遍历一次全部的训练数据,随着训练的进行,模型逐渐学会语言的规律和模式。
  4. 生成阶段
    • 起始输入(Initial Input):当要生成文本时,需要给模型一个起始输入。这个起始输入可以是一个特定的单词、一个句子片段或者一个特殊的起始标记(如 [CLS])。例如,在回答一个问题时,起始输入可能是问题中的关键词或者一个通用的回答起始语,如 “In response to your question”。
    • 概率采样(Probabilistic Sampling):模型会根据输入生成下一个单词的概率分布。这个概率分布是基于模型在训练阶段学习到的语言知识和模式。然后,通过概率采样的方法从这个分布中选择一个单词作为下一个输出。常见的采样方法有贪心采样(Greedy Sampling)和束搜索(Beam Search)。贪心采样每次选择概率最高的单词作为下一个输出,这种方法简单但可能会导致生成的文本比较单调。束搜索则会考虑多个可能的单词组合,选择概率最高的一组单词序列作为输出,能够生成质量更高的文本,但计算成本也相对较高。
    • 持续生成(Continuous Generation):在选择了下一个单词后,将这个单词添加到输入序列中,作为新的输入,再次让模型生成下一个单词的概率分布,重复这个过程,直到达到预定的文本长度或者生成了结束标记(如 [SEP])。这样就可以生成一段完整的文本内容。在生成过程中,还可以对生成的单词进行筛选和调整,例如,根据上下文和语义要求,排除一些不合理的单词,或者对单词的词性、语法等进行修正,以提高生成文本的质量

AI应用

模型微调

目前要做的工作主要就是模型微调

  1. 定义
    • 模型微调(Fine - Tuning)是一种在预训练模型基础上进行进一步训练的技术。它主要用于将预训练模型适应于特定的任务或领域(建设公司内部的知识问答平台)。
    • 例如,有一个已经在大规模通用文本数据(如维基百科、新闻文章等)上进行预训练的语言模型,这个模型已经学习到了基本的语言语法、语义等知识。当我们想要将这个模型用于特定的任务,如情感分析、机器翻译或回答公司内部的专业问题时,就可以使用微调。
  2. 微调的过程
    • 固定部分参数:在微调开始时,通常会选择保留预训练模型的大部分架构和参数不变。这是因为预训练模型已经学到了很多通用的语言知识,这些知识对于新任务仍然是有价值的。例如,Transformer 架构中的嵌入层(Embedding Layer)和部分层的多头注意力机制(Multi - Head Attention)参数可能会被固定,这些参数包含了词汇的语义表示和基本的文本结构信息。
    • 调整特定参数:在保留部分参数的基础上,对模型的最后几层(对于神经网络模型)或部分关键参数进行调整。这些参数通常是与任务输出直接相关的部分。例如,在一个用于文本分类的微调模型中,输出层的权重会根据特定的类别标签(如情感分类中的 “正面”“负面”“中性” 标签)进行调整。
    • 使用特定任务数据训练:使用与特定任务相关的数据对模型进行重新训练。这些数据的规模可以相对预训练数据小很多。例如,对于一个公司内部问题回答的任务,训练数据就是公司内部的任务单子数据。在训练过程中,模型会根据这些特定数据中的模式和标签来优化被选定的参数,从而使模型能够更好地适应新任务的要求。

特定任务问答平台

一、数据准备

  1. 数据收集与整理
    • 首先要确保收集到的公司内部任务单子数据完整且准确。这可能包括任务描述、涉及的问题、采取的解决方法、相关部门或人员等信息。
    • 对数据进行清洗,去除重复记录、错误信息以及不相关的内容,比如一些无关的备注或个人隐私数据(如果有的话)。
    • 将数据按照合适的格式进行整理,例如可以整理成表格形式(如果使用 Excel 等工具存储数据),每一行代表一个任务案例,不同列对应任务的不同属性,如问题描述、解决办法等。
  2. 数据标注(可选但可能有帮助)
    • 如果数据本身没有明确的分类或标注,你可以考虑进行标注工作。比如根据问题的类型(技术问题、流程问题、沟通问题等)对任务单子进行标注,或者标注出解决方法所涉及的关键技术、步骤等。
    • 标注后的数据集可以让模型在训练过程中更有针对性地学习不同类型问题的特征和对应的解决策略。

二、选择合适的模型架构

  1. 简单的机器学习模型
    • 如果你刚开始尝试且数据集规模不是特别大,一些传统的机器学习模型如决策树、朴素贝叶斯等可以作为选择。
    • 决策树模型可以通过对数据中的特征进行划分来构建一棵决策树,从而根据输入的问题特征找到对应的解决分支。朴素贝叶斯则基于概率统计原理,通过计算不同类别(问题类型或解决方法类别)的概率来进行预测。
    • 这些模型相对简单,训练速度可能较快,但对于复杂的语义理解和关系捕捉能力相对有限。
  2. 神经网络模型
    • 考虑到自然语言处理的需求,神经网络模型尤其是基于 Transformer 架构的模型可能更合适。
    • 例如,你可以使用一些开源的预训练语言模型框架如 Hugging Face 的 Transformer 库,基于它来微调(fine-tune)适合你公司数据集的模型。
    • 微调的好处是可以利用预训练模型在大量通用文本上学习到的语言知识,然后结合公司内部的特定数据进行针对性训练,这样能在较短时间内获得较好的效果。

三、模型训练

  1. 划分数据集
    • 将整理好的公司内部任务单子数据集划分为训练集、验证集和测试集。通常可以按照如 70%:15%:15% 的比例进行划分。
    • 训练集用于模型的训练过程,让模型学习数据中的模式和关系。验证集在训练过程中用于评估模型的性能,以便及时调整模型的参数等,防止过拟合。测试集则在训练完成后用于最终评估模型的实际效果。
  2. 设置训练参数
    • 根据选择的模型架构,设置合适的训练参数。对于传统机器学习模型,可能需要设置如决策树的最大深度、朴素贝叶斯的先验概率等参数。
    • 对于神经网络模型,常见的参数包括学习率(控制模型学习的速度)、批大小(每次参与训练的样本数量)、训练轮数(模型对整个训练集重复训练的次数)等。
    • 需要通过一些试验和调整来找到最适合你数据集的参数设置,以获得最佳的训练效果。
  3. 开始训练
    • 使用划分好的训练集按照设置好的参数对所选模型进行训练。
    • 在训练过程中,要密切关注模型在验证集上的性能表现,如准确率、召回率、F1 值等指标(对于分类问题),或者均方误差(MSE)等指标(对于回归问题)。
    • 如果发现模型在验证集上的性能开始下降,可能是出现了过拟合现象,需要及时调整训练参数或采取一些防止过拟合的措施,如增加正则化项、降低训练轮数等。

四、模型评估与优化

  1. 在测试集上评估
    • 当模型训练完成后,使用测试集对模型进行最终评估。计算相关的性能指标,如前面提到的准确率、召回率、F1 值(对于分类问题)或均方误差(MSE)(对于回归问题)。
    • 通过这些指标来判断模型是否达到了预期的效果,如果性能指标不理想,需要进一步分析原因并采取相应的优化措施。
  2. 优化措施
    • 如果发现模型存在过拟合问题,可以尝试增加更多的训练数据(如果有的话)、采用数据增强技术(如对文本数据进行同义词替换、语句变换等)、调整模型的复杂度(如减少神经网络的层数或神经元数量)等措施来解决。
    • 如果模型存在欠拟合问题,即模型对数据的拟合程度不够,可能需要增加模型的复杂度、延长训练轮数、调整学习率等。

五、搭建平台

  1. 前端开发
    • 设计一个用户友好的前端界面,类似于 stackoverflow 的风格。用户可以在界面上输入问题,查看问题的分类(如果有设置分类功能),以及浏览已有的问题和答案等。
    • 可以使用常见的前端开发技术如 HTML、CSS、JavaScript 等来实现界面的设计和交互功能。
  2. 后端开发
    • 将训练好的模型部署到后端服务器上,实现模型与前端界面的交互。后端需要接收前端传来的用户问题,将其传递给训练好的模型进行处理,然后将模型生成的答案返回给前端。
    • 可以使用一些后端开发语言如 Python(结合 Flask 或 Django 等框架)、Java 等以及相关的数据库(如 MySQL 等)来实现后端的功能。
  3. 集成与测试
    • 将前端和后端进行集成,进行全面的测试,确保用户输入问题后能准确地得到模型生成的答案,并且界面的各项功能(如提问、浏览、分类等)都能正常工作。

http://www.kler.cn/a/470009.html

相关文章:

  • C#高级:递归4-根据一颗树递归生成数据列表
  • 改进萤火虫算法之一:离散萤火虫算法(Discrete Firefly Algorithm, DFA)
  • OpenCV轮廓相关操作API (C++)
  • 小程序26-事件绑定和事件对象
  • 周记-Repeater中的children和item区别
  • QT上实现SVM进行数据分类
  • 『SQLite』SELECT语句查询数据
  • 机器学习基础-线性回归和逻辑回归
  • OpenGl(四) 提升Shader性能--VBO、EBO、VAO之EBO
  • Reactor测试框架之StepVerifier
  • JavaScript语言的编程范式
  • Python爬虫入门指南:从零开始抓取数据
  • Mysql--基础篇--概述
  • 专业无人机飞手培训,考证、组装、调参、维修全面技术详解
  • 网络协议安全
  • NLP论文速读|基于主动检索的渐进多模态推理
  • 【C++】AVL树|插入|单旋|双旋
  • 反向代理模块开发,
  • type1-88
  • python打包open3d问题
  • 尚硅谷· vue3+ts 知识点学习整理 |14h的课程(持续更ing)
  • 如何分析 Nginx 日志
  • 并查集:合并集合
  • (leetcode算法题)137. 只出现一次的数字 II
  • cursor vip
  • AFFAM模型详解及分析