首页 > 其他分享 >蝴蝶书 第1章 基础科普

蝴蝶书 第1章 基础科普

时间:2024-04-23 22:56:41浏览次数:19  
标签:语言 蝴蝶 模型 基础 词袋 单词 文本 向量 科普

ChatGPT基础科普——知其一点所以然

词向量

词向量(词嵌入):它本质上是找到一种编码方式,实现从自然语言中到数学空间的映射。(自然语言 -映射-> 向量)

我们为什么需要词向量呢?
计算机不能理解自然语言,比如:“我爱你”,要让计算机理解需要:
数字“1”代表“我”,数字“2”代表“爱”,数字“3”代表“你”,数字“0”代表“句号”。

如何进行编码才是最优的方式呢?
下面选择最经典的词袋模型和神经网络概率模型,做一些简单一点的介绍。

词袋模型

  • 词袋模型(Bag of Words,BOW):从名字来看,词袋模型就像是一个大袋子,把所有的词都装进来。文本中的每个单词都看作是独立的,忽略单词之间的顺序和语法,只关注单词出现的次数。在词袋模型中,每个文本可以表示为一个向量,向量的每个维度对应一个单词,维度的值表示该单词在文本中出现的次数。

例如三个句子如下:

句子1:小孩喜欢吃零食。
句子2:小孩喜欢玩游戏,不喜欢运动。
句子3 :大人不喜欢吃零食,喜欢运动。

首先根据语料中出现的句子分词,然后构建词袋(每一个出现的词都加进来)。计算机不认识字,只认识数字,那在计算机中怎么表示词袋模型呢?其实很简单,给每个词一个位置索引就可以了。小孩放在第一个位置,喜欢放在第二个位置,以此类推。

{“小孩”:1,“喜欢”:2,“吃”:3,“零食”:4,“玩”:5,“游戏”:6,“大人”:7,“不”:8,“运动”:9}

其中key为词,value为词的索引,预料中共有9个单词, 那么每个文本我们就可以使用一个9维的向量来表示。
如果文本中含有的一个词出现了一次,就让那个词的位置置为1,词出现几次就置为几,那么上述文本可以表示为:

句子1:[1,1,1,1,0,0,0,0,0]
句子2:[1,2,0,0,1,1,0,1,1]
句子3:[0,2,1,1,0,0,1,1,1]

该向量与原来文本中单词出现的顺序没有关系,仅仅是词典中每个单词在文本中出现的频率。

神经概率语言模型

  • 神经概率语言模型(Neural Probabilistic Language Model,NPLM):它可以通过学习大量的文本数据来预测下一个单词或字符的概率。其中,最早的神经网络语言模型是由Yoshua Bengio等人于2003年发表的《A Neural Probabilistic Language Model》提出的,它在得到语言模型的同时也产生了副产品词向量。

早期的词向量都是静态的,一旦训练完就固定不变了。随着NLP技术的不断发展,词向量技术逐渐演变成基于语言模型的动态表征。语言模型不仅可以表征词,还可以表征任意文本。

1. LM

  • 语言模型 (LM) 定义

    • 语言模型是根据自然语言构建的模型。
    • 输入文字 -计算-> 输出文字
  • 概率语言模型:

    • 通过已经有的词预测接下来的词。
    • 当模型仅了解到「我喜欢你」这句话时,当输入「我」时,模型预测下一个词很可能是「喜欢」。
    • 当模型学习了大量的文本后,它会更加丰富地理解语言。比如,当输入「我」时,输出可能不再仅限于「喜欢」,而是更多样化的词汇。
    • 问题:基于最大概率的贪心搜索可能导致模型生成重复的文本,因此语言模型通常会采用其他策略。
    • 解决方案:模型会考虑多个可能的词,而不是仅仅选择概率最高的词,以提高生成文本的多样性和准确性。
    image-20240423223838037

2. Transformer

  • 介绍

    • Transformer 是一种 Encoder-Decoder 架构,由 Google 在 2017 年发表的论文《Attention Is All You Need》中提出。它最重要的核心是 Self-Attention 机制,用于在语言模型建模过程中关注重要的 Token。
  • Self-Attention 机制

    • 在建模过程中,Transformer 通过自注意力机制将注意力集中在重要的 Token 上,而不是简单地依赖于固定的上下文窗口大小。
    • 这种机制使得 Transformer 在处理长距离依赖关系时表现优秀,而且可以并行计算,加速了模型训练过程。
  • 架构

    • Transformer 包含 Encoder 和 Decoder 两部分。Encoder 将输入序列映射到隐藏表示,而 Decoder 则根据 Encoder 的输出和已生成的部分序列来逐步生成输出序列。
    • 在 Encoder 中,由于我们知道整个输入序列,因此可以同时利用当前 Token 的历史 Token 和未来(前面的) Token;而在 Decoder 中,由于是逐步生成输出序列,因此只能利用历史 Token 和 Encoder 的输出来建模。
  • Seq2Seq 架构

    • Transformer 实际上是一种 Seq2Seq 架构,即序列到序列模型,其中输入是一个文本序列,输出是另一个文本序列。这种架构在翻译等任务中表现良好。

标签:语言,蝴蝶,模型,基础,词袋,单词,文本,向量,科普
From: https://www.cnblogs.com/passion2021/p/18154005

相关文章

  • 数据结构基础第4讲
    数据结构基础第4讲队列内容考点一:队列概念代码不考1.队列的定义考点二:顺序队列的定义考点三顺序队列的性质与操作4要素:考点四:循环队列的定义由于顺序队列会存在假溢出问题,引入循环队列。假溢出:描述:考点五:循环队列的操作判断空满:性质:考频75%元素个......
  • 数据结构基础第6讲
    数据结构基础第6讲图及其应用1-2个选择考点一:图的基本概念1.图基本概念连通图:极大连通子图-连通分量:极小连通子图-生成树:强连通顶点给定n个顶点,要保证图在任何情况下连通需要最小边数:1.生成树,边(n-1)2.完全无向图\(\frac{(n-1)\timesn}{2}\)3.\(\left......
  • 数据结构基础第5讲
    数据结构基础第5讲树和二叉树本章内容:考点一:基本术语1.数的引入2.树的定义层次,分支,一对多。互不相交的含义:3.结点的分类结点的度:4.结点的关系树的深度:树中结点最大高度称为树的高度(或树的深度)行兄弟结点:在同一层但不是兄弟的结点路径长度:等于路径......
  • 【基础】Flink -- State 状态总结
    【基础】Flink--StateFlink--StateFlink中的状态有状态算子状态的分类按键分区状态KeyedState支持的结构类型值状态ValueState列表状态ListState映射状态MapState规约状态ReducingState聚合状态AggregatingState状态的生存时间算子状态OperatorState算子......
  • python 基础习题2--字符串切片技术
    1. 有如下字符串str='123456789'字符串切片技术,例如,返回输出从第三个开始到第六个的字符(不包含)即得到:345利用字符串切片技术,代码可以这么写:print(str[2:5])如果想返回如下八行结果,利用字符串切片技术,如何编写代码?12345678912345678134534567892412345678912345678......
  • python 基础习题1--基础语法
    1.书写代码,输出结果为: 答案:print("Hello,Python!")ViewCode 2. ......
  • JS基础(二)运算符、流程控制语句、数组对象、JSON对象、Date对象、Math对象、Function对
    一运算符<script>//算数运算符//(1)自加运算varx=10;//x=x+1;//x+=2;varret=x++;//先赋值再计算:x+=1//varret=++x;//先计算再赋值:x+=1console.log(x)......
  • .net 连接数据库sql-server 基础入门
    usingSystem.Data;usingSystem.Data.SqlClient;classPranson(){publicstaticvoidMain(){//创建数据库链接对象stringconnString="Server=.;DataBase=CourseManageDB;Uid=sa;Pwd=123456";SqlConnectionconn=newSqlConn......
  • PHP基础
    PHP基础php变量规则:变量以$符号开始,后面跟变量名称变量名必须以字母或者下划线字符开始变量名只能包含字母数字字符以及下划线(A-z、0-9和_)变量名不能包含空格变量名区分大小写<?php$y=5;$x=6;$z=$x+$y;echo$z;?>php变量作用域变量的作用域是脚本中变......
  • sqlServer 基础入门
    usemastergoifexists(select*fromsysdatabaseswherename='CourseManageDB')--查询是否存在这个库dropdatabaseCourseManageDB--删除数据库(不可恢复)go--表示结束createdatabaseCourseManageDB--创建数据库onprimary(--数据库的逻辑文件名(就是......