词的向量化和文本向量化

词的向量化和文本向量化

  • 向量化
    • one-hot编码
      • 提前准备词表
      • 不提前准备词表
      • one-hot缺点
  • 词向量
    • 简介
      • 词向量的定义和目标
      • word embedding和word vector的区别
      • onehot编码与词向量关系构建
    • 训练方式1(基于语言模型)
    • 训练方式2(基于窗口)
      • CBOW模型
      • SkipGram模型
      • 缺点
      • 缺点解决方案-Huffman树
        • Huffman树构建过程:
      • 缺点解决方案-负采样(negative sampling)
    • 训练方式3(基于共现矩阵Glove)
      • 共现矩阵
      • 共现概率
      • 共现概率比
      • 共现矩阵训练词向量
    • 总结
      • 训练流程
      • 存在的问题
    • 词向量应用
      • 1. 寻找近义词
      • 2. 句向量或文本向量
        • KMeans聚类
    • 词向量总结

向量化

引子: 向量对于机器学习非常重要,大量的算法都需要基于向量来完成

原因:

对于机器来说,字符是没有含义的,只是有区别
只使用字符无法去刻画字与字、词与词、文本与文本之间的关系
文本转化为向量可以更好地刻画文本之间的关系
而向量化后,可以启用大量的机器学习算法,具有很高的价值

文本向量化: 文本是由词和字组成的,想将文本转化为向量,首先要能够把词和字转化为向量;并且就同一个任务或者模型,向量化的维度应该是相同的,如果为n维,我们就称是n维语义空间。

如下图: 随机初始化向量后,通过训练,使得表示的向量可以表达词、字之间的语义关系:
在这里插入图片描述

one-hot编码

提前准备词表

释义:

1.首先我们会提前准备一个字表或词表,选出n个字或词;
2.然后根据词表的大小,决定向量的维度;
3.通过词的序号,在向量的对应维度上数值设为1,其余维度则为0

举例如下:

那么根据上面的编码,我们就可以将句子用向量表示:
今天不错 --> [1,0,0,1,0]
天气真不错 --> [0,1,1,1,0]

向量化文本时,也可以通过叠加,表示词频含义
今天不错不错 --》 [1,0,0,2,0]

不提前准备词表

引子: one-shot发展到后面,就考虑不准备词表,直接根据材料的字动态给生成。
举例:
假设现在有语料

  1. 你好吗?
  2. 你身体好吗?

自动的统计语料中出现的字,然后按照出现,不断的扩大向量的维度,并把新的字表示进去

在这里插入图片描述

one-hot缺点

  1. 如果词特别多,编码的向量维度会特别大,维度灾难,并且向量特别稀疏,只有词的地方才有值,这样会带来巨大的计算量
  2. 编码的向量并没有反应词与词之间的语义关系,只是做到区分不同字词的作用

词向量

简介

词向量的定义和目标

词向量,即我们希望得到一个词之间的向量能够反映语义关系的向量权重信息。
有以下三个维度

1.词义的相似性反映向量的相似性

即有三个词向量: 您好、你好、天气
有:cos(您好,你好) > cos(你好,天气)

2.向量可以通过数值的运算反应词之间的关系
即有四个向量:国王、男人、皇后、女人
有:国王 - 男人 = 皇后 - 女人

3.同时不管词表有多少词,我们希望表示词的语义空间是大小是固定的,即向量的维度相同.

word embedding和word vector的区别

简单来说,两个没有区别,我们知道词向量的作用,是将字符转化为有一定含义向量,便于后续去进行模型的计算。

在这里的区别

embedding业内更强调是将字符转为对应的向量
Word2Vec 强调的是对词向量的训练,使其具有一些特定得含义和作用,即通过向量相似度反映语义得相似度

onehot编码与词向量关系构建

即我们可以将embedding矩阵看成一个线性层,而onehot作为编码输入,由于onehot编码得稀疏性,以及只有对应词得序号所在下标才有值,通过和embedding的运算,就可以获取该词的向量了

示意图如下:在这里插入图片描述

训练方式1(基于语言模型)

语言模型释义: 语言模型就是输入几个词,它能预测下一词;预测的下一词由它前面的n个词决定,那么就需要理解词的含义。

比如:

晴空 万里 碧波 如洗 我们 出去 玩 吧
晴空 -->万里
模型根据晴空预测出下一个词万里

本质: 这种预测本质是一个分类的问题,即我们由一个词表,我们将前面输入的词或者一句话作为分类任务,判别它是属于词表中的词的哪一类;即可达成预测效果。根据词表分类

好处: 我们的分类任务需要标注;但是上述中,我们只需要把前面的n个词输入,将句子的下一个词做输出即可进行训练;降低了标注的工作。

训练方式2(基于窗口)

基于窗口: 如果两个词在文本中出现时,它前后出现的词相似,则这两个词相似,我们可以通过前后的词来表示中间词
如下图所示
在这里插入图片描述
释义: 窗口是指需要前后抓取几个词去表示目标词

CBOW模型

基于前述的思想,用窗口中的词(即目标词周围的词)来表示预测中间词
示意图如下:
在这里插入图片描述
模型结构:

第一层:即embedding层
第二层:即模型的pooling层
第三层:即线性层将结果转为我们需要的维度

好处:

1.相对于基于模型的训练,结构很简单,所以训练的资源相对较小
2.相对于基于模型训练出来的embedding,训练的效果,更能体现embedding好;简单说就是,窗口训练的embedding和模型训练出来的,窗口的embedding更能表示词关系。因为模型简单,效果更依赖于embedding

举例:

窗口:你想明白 了吗?
输入:你想了吗?
输出:明白

SkipGram模型

释义: 与CBOW模型原理类似,区别在于用中间词,去预测两边的词
示意图
在这里插入图片描述
举例:

窗口: 你 想 明白 了 吗
(输入,输出) :
(明白,你)(明白,想)(明白,了)(明白,吗)

缺点

在当时提出上述的训练方法时,在最后一层,即将结果映射到词表的维度,由于词表非常的大,并且输出层使用的是onehot(因为预测某个词),所以会面临维度灾难,并且会导致收敛缓慢
当然当前已经不存在这个问题了,因为由于时代的发展,机器的性能提高了很多倍,上面的就变成小kiss

缺点解决方案-Huffman树

Huffman树是对所有词进行二进制编码,使其符合以下特点:

  1. 保证不同的词编码不同
  2. 每一个词的编码不会成为另外一个词编码的前缀(即:某个词的编码011;则不能有词的编码为0110;0111等等)
  3. 构造出的词编码总体长度最小,且越高频词编码越短
Huffman树构建过程:

1.我们先要将编码的词统计出词频
如下:

你 50
我 10
他 8
你们 7
我们 6
他们 3
它们 2

2.将词构建在二叉树上,将词频由低到高进行构建,先将最小的两个词频的词放到树的两个叉上,节点为两个词频的之后,下一次构建时,则将该二叉树作为一个节点进行比较
如下:
在这里插入图片描述
3.有第一个二叉树后,在新的词频上,再次选择最小的两个词频进行二叉树构建,将词频低的放到左侧,高的放到右侧,如果相等,就您随意。如下:

你 50
我 10
他 8
你们 7
我们 6
它们 | 他们 5

构建如下:在这里插入图片描述
4.在第3步的基础上完成新的二叉树构建后,我们在这个基础上进行下一轮构建,直到所有词都在一个树上为止。如下:

你 50
它们 | 他们 | 我们 11
我 10
他 8
你们 7
继续下一轮构建

5.在得到完整的词频构建的树后,我们从初始的节点开始,往右移动一次,则编码为1;往左移动一次,则编码0;最终可以得到下面的结果
在这里插入图片描述
Huffman树的编码结果为:

你 1
我 010
他 001
你们 000
我们 0111
他们 01101
它们 01100

达成目标:
1.每个词的编码不同
2.每个词的编码不会成为其他词的前缀
3.词频越高编码长度越短

训练方案

原来的词向量训练中,我们采用三次,embedding、pooling层、一个线性层
困难点: 在线下层需要映射到词表的词上,也就是说线下层的参数为: embedding_size X vector_size
现在我把一个线下层任务,按照上面的Huffman树构建成多个二分类的线性层;即原来是一次从词表中1万个词中找到预测词;现在我只需要在每层编码,判断下是往左还是往右就可以了;其次,对于高频的词,编码的短,所有二分类计算的线下层也就少,训练的速度也就更
现在线下层的参数:embedding_size X 2 * 词的最长编码数

当然,上面那个例子的参数并没有减少多少;这是因为实际实现中,还需要一些工程上的优化操作。这样就可以快速训练出效果较好的词向量。

缺点解决方案-负采样(negative sampling)

引子: 我们知道词表特别大,导致最后得到预测词的分布,由于预测的分类太多了,所以存在维度爆炸的问题,对机器性能要求很高

解决: 负采样的逻辑即,我们在算预测词分布时,需要算的分类太多了;一次任务训练,其中其实只有一个词是我们要预测的,我们希望预测它的概率接近1,其他的词的概率为0

步骤:
1.如果词表有1万个词;我们正常需要计算embedding_size * 10001词
2.现在每一次训练,我找出需要预测的词,其他非预测词,我木门把它拆成1000词一份,就一个10份
3.那么原来是一次训练计算1万个词;现在我分为10次训练,每次训练计算其中的1001个词;多出来的这一个词,就我们的要预测的词
那么我们就可以大幅降低模型训练对机器的性能要求了
注意:上面我们训练10次举个例子,实际中并不是平均分为10份进行训练的,而是随机选择训练的词,加上预测词训练

即随机选取非预测词的方案就是负采样。
按照词频进行随机采样,有一个经验公式
在这里插入图片描述

训练方式3(基于共现矩阵Glove)

释义: 共现,就是说两个词共同出现的次数

共现矩阵

示例

现在有语料:
今天 天气 不错
今天 天气 很 好
天气 很 好
天气 不错

从上面语料中,构建词表:

今天、天气、很、好、不错

我们基于共现窗口为1,即词与左右相邻词算共现:
在这里插入图片描述
这样就可以得到,每个词和它相邻词共同出现的次数

共现概率

释义:词(天气)出现在词(今天)周围的概率,被称为词(今天)与词的(天气)共现概率

P(天气|今天) = 2/2 = 1

公式:在这里插入图片描述

共现概率比

释义: 两个共现概率的比值
在这里插入图片描述
价值:

共现概率比反映了一定的语义信息
a.如果词A与词B的相关性,大于词A与词C的相关性,则共享概率比 P(A|B)/P(A|C) 会较高,反之亦然
b.P(A|B)/P(A|C)共享概率比较大,或者较小;都说明B与C有一个词和A的关系更加紧密
c.P(A|B)/P(A|C)共享概率接近1;要么说明B与C词和A的词关系都很密切,要么都没什么关系

共现矩阵训练词向量

根据共现矩阵的价值,我们就有了新的训练词向量的目标:

1.给定三个词的词向量,Va, Vb, Vc三者的通过某个函数映射后,其比值应接近ABC的共现概率比
2.即目标为找到向量使得 f(Va, Vb, Vc) = P(A|B)/P(A|C)
3.预测数值,属于回归问题, 损失函数使用均方差;设计论文中给出的是f(Va, Vb, Vc) = (Va - Vb )·Vc

总结

训练流程

1、根据词与词之间关系的某种假设,制定训练目标,这个假设不一定完全正确,但是它代表了词与词之间的某种关系。

2、设计模型,以词向量为输入

3、随机初始化词向量,开始训练

4、训练过程中词向量作为参数不断调整,获取一定的语义信息

5、使用训练好的词向量做下游任务

存在的问题

1.词向量是“静态”的。每个词使用固定向量,没有考虑前后文

2.一词多义的情况。西瓜 - 苹果 - 华为

3.影响效果的因素非常多
维度选择、随机初始化、skip-gram/cbow/glove、分词质量、词频截断、未登录词、窗口大小、迭代轮数、停止条件、语料质量等

4.没有好的直接评价指标。常需要用下游任务来评价

词向量应用

1. 寻找近义词

输入:红烧肉

注意:
依赖分词正确,与A最接近的词是B,不代表B最接近的是A,有时也会有反义词很相似,会有很多badcase

2. 句向量或文本向量

步骤:
1.将一句话或一段文本分成若干个词
2.找到每个词对应的词向量
3.所有词向量加和求平均或通过各种网络模型,得到文本向量
4.使用文本向量计算相似度或进行聚类等

KMeans聚类

步骤:

1.随机选择k个点作为初始质心
2.将每个点指派到最近的质心,形成k个簇,即k类
3.重新计算每个簇(类)的质心 (可以通过求平均等)
4.反复执行2-3步骤,直到质心不在发生变化

KMeans优点:

1.速度很快,可以支持很大量的数据
2.样本均匀特征明显的情况下,效果不错

KMeans缺点:

1.人为设定聚类数量
2.初始化中心影响效果,导致结果不稳定
3.对于个别特殊样本敏感,会大幅影响聚类中心位置
4.不适合多分类或样本较为离散的数据

KMeans使用技巧:

1.先设定较多的聚类类别
2.聚类结束后计算类内平均距离
3.排序后,舍弃类内平均距离较长的类别
4.计算距离时可以尝试欧式距离、余弦距离或其他距离
5.短文本的聚类记得先去重,以及其他预处理

词向量总结

1.质变:将离散的字符转化为连续的数值

2.通过向量的相似度代表语义的相似度

3.词向量的训练基于很多不完全正确的假设,但是据此训练的词向量是有意义的

4.使用无标注的文本的一种好方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/50782.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

选择排序思路和算法实现

选择排序 在未排序的数组中,用第一个数去和后面的数比较,找出最小的数,和第一个数交换。第一个数已为已排序的数。 相当于0~7 从0~7中找到最小的数放在0 从1~7中找到最小的数放在1 从2~7中找到最小的数放在2 ...以此类推 从6~7中找到最…

从简单到复杂:9款画底纹软件让设计更生动

底纹不知道怎么画?快来试一试这9款软件吧,可以让你的设计作品更加出彩,相信我,用了就是赚到,分别是即时设计、Adobe Illustrator、CorelDRAW、Photoshop、AutoCAD、Inkscape、GIMP、ZebraDesigner、LabelJoy。 1、即时…

软件定义AI算力:解锁AI算力的新时代

从1964年发明CPU——即IBM System 360发布的那一年算起,已经过去60年,我们已经从传统的CPU算力时代跨越到了以GPU算力为代表的加速计算时代。尤其是随着大模型的广泛应用和AIGC技术的崛起,行业对GPU等AI算力的需求呈现出爆炸式的增长。据华为…

微短剧出海CPS分销推广影视平台系统搭建思维逻辑介绍

随着国内短剧市场的蓬勃发展,其独特的魅力与影响力已跨越国界,成为海外观众的新宠。这一趋势不仅推动了短剧内容的全球化传播,也为海外市场的CPS(按销售分润)分销模式提供了广阔舞台。连接内容创作者、平台运营者、系统…

VMware 的网络模式详解

VMware 的网络模式详解 使用 VMware 创建虚拟机,配置虚拟机网络时,主要有三个选项,分别是桥接模式、NAT 模式、仅主机模式 这三个模式到底有什么含义? VMware 是通过虚拟网络,即虚拟交换机,来连接物理机&…

angular入门基础教程(五)父子组件的数据通信

组件之间的通信是我们业务开发中少不了的,先了解下父子组件的通信 父组件传数据给子组件 前面,我们学会会动态属性的绑定,所以在父组件中给子组件绑定属性,在子组件中就可以使用这个属性了。 父组件中声明然后赋值 export class AppCompon…

智能开关助力酒店管理提升

随着科技的迅猛跃进,智能化浪潮席卷全球,酒店业亦不例外地迎来了智能化转型的新纪元。智能开关,作为这股浪潮中的先锋,凭借其尖端的通信技术和智能控制逻辑,正深刻改变着酒店的运营模式与顾客体验。 它不仅赋予了酒店远…

IP地址证书签发之后可以绑定到指定端口访问吗?

IP地址证书概述 IP地址证书,也称为IP SSL证书,是为互联网协议(IP)地址提供安全认证的一种证书。它包含公钥、所有者信息以及由可信的证书颁发机构(CA)签发的数字签名。通过使用公钥基础设施(PKI),IP地址证书确保了网络实体之间的信任和验证。…

React基础知识 精简全面 推荐

这篇博文主要对一些刚入门react框架的同学,以及对react基本知识进行巩固的,最后就是精简一下基本知识,以方便自己查看,感谢参考,有问题评论区交流,谢谢。 目录 1.JSX 2.Props 和 State 3.组件生命周期…

基于JAVA的美妆购物商城系统/美妆销售系统的设计与实现/美妆网站的设计与开发/在线美妆购物平台

摘 要 本毕业设计的内容是设计并且实现一个基于SSM框架的美妆购物商城系统。它是在Windows下,JSP技术,以MYSQL为数据库开发平台,Tomcat网络信息服务作为应用服务器。美妆购物商城系统的功能已基本实现,主要包括用户、商品信息、…

2024电赛H题参考方案(+视频演示+核心控制代码)——自动行使小车

目录 一、题目要求 二、参考资源获取 三、参考方案 1、环境搭建及工程移植 2、相关模块的移植 4、整体控制方案视频演示 5、视频演示部分核心代码 总结 一、题目要求 小编自认为:此次H题属于控制类题目,相较于往年较为简单,功能也算单一&…

科普文:『 码到三十五 』Java微服务中Token鉴权设计的4种方案

吐槽~~~~~~~ Java微服务中Token鉴权设计的几种方案: 1. JWT鉴权 「概述」:JWT是一种用于双方之间安全传输信息的简洁的、URL安全的令牌标准。它基于JSON格式,包含三个部分:头部(Header)、负载(Payload&a…

如何将WordPress文章中的外链图片批量导入到本地

在使用采集软件进行内容创作时,很多文章中的图片都是远程链接,这不仅会导致前端加载速度慢,还会在微信小程序和抖音小程序中添加各种域名,造成管理上的麻烦。特别是遇到没有备案的外链,更是让人头疼。因此,…

Monte Carlo Tree Search Boosts Reasoning via Iterative Preference Learning

Monte Carlo Tree Search Boosts Reasoning via Iterative Preference Learning Github:https://github.com/YuxiXie/MCTS-DPO 一、动机 大语言模型在偏好对齐环节可以提高模型的性能。目前有诸多工作尝试将偏好对齐通过迭代的形式进行改进: It involves a cycle …

装修行业办公家具销售公司网站带模版 附带完整的源代码包以及搭建部署教程

系统概述 这款网站源码系统是针对装修行业办公家具销售公司的特点定制的,它融合了现代化的设计理念和先进的技术架构,旨在为用户提供极佳的浏览和购物体验。系统采用了响应式设计,能够自适应不同设备的屏幕尺寸,确保用户在手机、…

【ai】 2005年 rule based expert system学习笔记1

PPT 是2005年的? Negnevitsky, Pearson Education 使用两种推理引擎的选择 backward chaining(逆向链接)推理过程 backward chaining(逆向链接)推理过程的GPT解释 这幅图展示了一个基于规则的专家系统如何通过backward chaining(逆向链接)推理过程来达到最终的推理目标…

大数据-55 Kafka sh脚本使用 与 JavaAPI使用 topics.sh producer.sh consumer.sh kafka-clients

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

禁毒教育展厅应如何创新展示方式,提升教育意义?

为了深刻揭示毒品的危害,促进禁毒知识的广泛传播,并显著提升公众的防范意识,禁毒教育展厅的推广举措正紧锣密鼓地展开。在这一关键进程中,展厅的空间布局与内容设计的合理性与针对性成为了至关重要的环节。接下来,我们…

angular入门基础教程(二)第一个angular组件

ng中的语法跟vue中是一样的插值语法,其实也是早期vue抄的ng的思路,使用{{variable}}形式,vue借鉴了ng和react,这个我们就不多了。 新建一个子组件 在项目根目录下面,执行 ng g component ./components/UserList这样…

【RL】强化学习入门:从基础到应用

本篇文章是博主强化学习RL领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章强化学习: 强化学习…