深度学习 三 :深入浅出 Word2vec--图文解读原理 一

article/2025/11/11 0:16:14

鸣谢!!!

深入浅出 Word2vec–图文解读原理 二

文章很长请耐心阅读,但一定会有收获!!!

什么是W2V

embedding 是机器学习中最迷人的想法之一。如果你曾经使用Siri、Google Assistant、Alexa、Google翻译,甚至智能手机键盘进行下一词预测,那么你很有可能从这个已经成为自然语言处理模型核心的想法中受益。

在过去的几十年中,嵌入技术用于神经网络模型已有相当大的发展。尤其是最近,其发展包括导致BERT和GPT2等尖端模型的语境化嵌入
BERT:
什么是bert请戳这里

Word2vec是一种有效创建词嵌入的方法,它自2013年以来就一直存在。但除了作为词嵌入的方法之外,它的一些概念已经被证明可以有效地创建推荐引擎和理解时序数据。在商业的、非语言的任务中。像Airbnb、阿里巴巴、Spotify这样的公司都从NLP领域中提取灵感并用于产品中,从而为新型推荐引擎提供支持。

在这篇文章中,我们将讨论嵌入的概念,以及使用word2vec生成嵌入的机制。让我们从一个例子开始,熟悉使用向量来表示事物。你是否知道你的个性可以仅被五个数字的列表(向量)表示?

Personality Embeddings: What are you like?

如何用0到100的范围来表示你是多么内向/外向(其中0是最内向的,100是最外向的)?你有没有做过像MBTI那样的人格测试,或者五大人格特质测试?如果你还没有,这些测试会问你一系列的问题,然后在很多维度给你打分,内向/外向就是其中之一。
在这里插入图片描述
五大人格特质测试测试结果示例。它可以真正告诉你很多关于你自己的事情,并且在学术、人格和职业成功方面都具有预测能力。此处可以找到测试结果

假设我的内向/外向得分为38/100。我们可以用这种方式绘图:
在这里插入图片描述
让我们把范围收缩到-1到1:

在这里插入图片描述
当你只知道这一条信息的时候,你觉得你有多了解这个人?了解不多。人很复杂,让我们添加另一测试的得分作为新维度。

在这里插入图片描述

我们可以将两个维度表示为图形上的一个点,或者作为从原点到该点的向量。我们拥有很棒的工具来处理即将上场的向量们。

我已经隐藏了我们正在绘制的人格特征,这样你会渐渐习惯于在不知道每个维度代表什么的情况下,从一个人格的向量表示中获得价值信息。

我们现在可以说这个向量部分地代表了我的人格。当你想要将另外两个人与我进行比较时,这种表示法就有用了。假设我被公共汽车撞了,我需要被性格相似的人替换,那在下图中,两个人中哪一个更像我?

在这里插入图片描述
处理向量时,计算相似度得分的常用方法是余弦相似度:

在这里插入图片描述
1号替身在性格上与我更相似。指向相同方向的向量(长度也起作用)具有更高的余弦相似度。

再一次,两个维度还不足以捕获有关不同人群的足够信息。心理学已经研究出了五个主要人格特征(以及大量的子特征),所以让我们使用所有五个维度进行比较:
在这里插入图片描述
使用五个维度的问题是我们不能在二维平面绘制整齐小箭头了。这是机器学习中的常见问题,我们经常需要在更高维度的空间中思考。但好在余弦相似度仍然有效,它适用于任意维度:

在这里插入图片描述

余弦相似度适用于任意数量的维度。这些得分比上次的得分要更好,因为它们是根据被比较事物的更高维度算出的。

在本节的最后,我希望提出两个中心思想:
1.我们可以将人和事物表示为代数向量(这对机器来说很棒!)。
2.我们可以很容易地计算出相似的向量之间的相互关系。
在这里插入图片描述

Word Embeddings

通过上文的理解,我们继续看看训练好的词向量实例(也被称为词嵌入)并探索它们的一些有趣属性。

这是一个单词“king”的词嵌入(在维基百科上训练的GloVe向量):

 [ 0.50451 , 0.68607 , -0.59517 , -0.022801, 0.60046 , -0.13498 , -0.08813 ,  0.47377 , -0.61798 , -0.31012 , -0.076666, 1.493 , -0.034189, -0.98173 , 0.68229 , 0.81722 , -0.51874 , -0.31503 , -0.55809 , 0.66421 , 0.1961 , -0.13495 , -0.11476 , -0.30344 , 0.41177 , -2.223 , -1.0756 , -1.0783 , -0.34354 , 0.33505 , 1.9927 , -0.04234 , -0.64319 , 0.71125 , 0.49159 , 0.16754 , 0.34344 , -0.25663 , -0.8523 , 0.1661 , 0.40102 , 1.1685 , -1.0137 , -0.21585 , -0.15155 , 0.78321 , -0.91241 , -1.6106 , -0.64426 , -0.51042 ]

这是一个包含50个数字的列表。通过观察数值我们看不出什么,但是让我们稍微给它可视化,以便比较其它词向量。我们把所有这些数字放在一行:
在这里插入图片描述
让我们根据它们的值对单元格进行颜色编码(如果它们接近2则为红色,接近0则为白色,接近-2则为蓝色):
在这里插入图片描述

我们将忽略数字并仅查看颜色以指示单元格的值。现在让我们将“king”与其它单词进行比较:
在这里插入图片描述
看看“Man”和“Woman”彼此之间是如何比它们任一一个单词与“King”相比更相似的?这暗示你一些事情。这些向量图示很好的展现了这些单词的信息/含义/关联。

这是另一个示例列表(通过垂直扫描列来查找具有相似颜色的列):
在这里插入图片描述
有几个要点需要指出:
1.所有这些不同的单词都有一条直的红色列。它们在这个维度上是相似的(虽然我们不知道每个维度是什么)
2.你可以看到“woman”和“girl”在很多地方是相似的,“man”和“boy”也是一样
3.“boy”和“girl”也有彼此相似的地方,但这些地方却与“woman”或“man”不同。这些是否可以总结出一个模糊的“youth”概念?可能吧。
4.除了最后一个单词,所有单词都是代表人。我添加了一个对象“water”来显示类别之间的差异。你可以看到蓝色列一直向下并在 “water”的词嵌入之前停下了。
5.“king”和“queen”彼此之间相似,但它们与其它单词都不同。这些是否可以总结出一个模糊的“royalty”概念?
**

Analogies

**

展现嵌入奇妙属性的著名例子是类比。我们可以添加、减去词嵌入并得到有趣的结果。一个著名例子是公式:“king”-“man”+“woman”:

在这里插入图片描述

在python中使用Gensim库,我们可以添加和减去词向量,它会找到与结果向量最相似的单词。该图像显示了最相似的单词列表,每个单词都具有余弦相似性。
我们可以像之前一样可视化这个类比:

在这里插入图片描述
由“king-man + woman”生成的向量并不完全等同于“queen”,但“queen”是我们在此集合中包含的400,000个字嵌入中最接近它的单词。

现在我们已经看过训练好的词嵌入,接下来让我们更多地了解训练过程。但在我们开始使用word2vec之前,我们需要看一下词嵌入的父概念:神经语言模型。

Language Modeling

如果要举自然语言处理最典型的例子,那应该就是智能手机输入法中的下一单词预测功能。这是个被数十亿人每天使用上百次的功能。

在这里插入图片描述
下一单词预测是一个可以通过语言模型实现的任务。语言模型会通过单词列表(比如说两个词)去尝试预测可能紧随其后的单词。

在上面这个手机截屏中,我们可以认为该模型接收到两个绿色单词(thou shalt)并推荐了一组单词(“not” 就是其中最有可能被选用的一个):

在这里插入图片描述

我们可以把这个模型想象为这个黑盒:
在这里插入图片描述
但事实上,该模型不会只输出一个单词。实际上,它对所有它知道的单词(模型的词库,可能有几千到几百万个单词)的按可能性打分,输入法程序会选出其中分数最高的推荐给用户。
在这里插入图片描述
自然语言模型的输出就是模型所知单词的概率评分,我们通常把概率按百分比表示,但是实际上,40%这样的分数在输出向量组是表示为0.4

自然语言模型(请参考Bengio 2003)在完成训练后,会按如下中所示法人三步完成预测:
在这里插入图片描述
第一步与我们最相关,因为我们讨论的就是Embedding。模型在经过训练之后会生成一个映射单词表所有单词的矩阵。在进行预测的时候,我们的算法就是在这个映射矩阵中查询输入的单词,然后计算出预测值:
在这里插入图片描述
在这里插入图片描述

Language Model Training

相较于大多数其他机器学习模型,语言模型有一个很大有优势,那就是我们有丰富的文本来训练语言模型。所有我们的书籍、文章、维基百科、及各种类型的文本内容都可用。相比之下,许多其他机器学习的模型开发就需要手工设计数据或者专门采集数据。

我们通过找常出现在每个单词附近的词,就能获得它们的映射关系。机制如下:

1.先是获取大量文本数据(例如所有维基百科内容)
2. 然后我们建立一个可以沿文本滑动的窗(例如一个窗里包含三个单词)
3. 利用这样的滑动窗就能为训练模型生成大量样本数据。

在这里插入图片描述
当这个窗口沿着文本滑动时,我们就能(真实地)生成一套用于模型训练的数据集。为了明确理解这个过程,我们看下滑动窗是如何处理这个短语的:

在一开始的时候,窗口锁定在句子的前三个单词上:
在这里插入图片描述
我们把前两个单词单做特征,第三个单词单做标签:

在这里插入图片描述

这时我们就生产了数据集中的第一个样本,它会被用在我们后续的语言模型训练中。

接着,我们将窗口滑动到下一个位置并生产第二个样本:
在这里插入图片描述

这时第二个样本也生成了。

不用多久,我们就能得到一个较大的数据集,从数据集中我们能看到在不同的单词组后面会出现的单词:

在这里插入图片描述
在实际应用中,模型往往在我们滑动窗口时就被训练的。但是我觉得将生成数据集和训练模型分为两个阶段会显得更清晰易懂一些。除了使用神经网络建模之外,大家还常用一项名为N-gams的技术进行模型训练。

如果想了解现实产品从使用N-gams模型到使用神经模型的转变,可以看一下Swiftkey (我最喜欢的安卓输入法)在2015年的发表一篇博客,文中介绍了他们的自然语言模型及该模型与早期N-gams模型的对比。我很喜这个例子,因为这个它能告诉你如何在营销宣讲中把Embedding的算法属性解释清楚。

Look both ways

根据前面的信息进行填空:

在这里插入图片描述
在空白前面,我提供的背景是五个单词(如果事先提及到‘bus’),可以肯定,大多数人都会把bus填入空白中。但是如果我再给你一条信息——比如空白后的一个单词,那答案会有变吗?
在这里插入图片描述
这下空白处改填的内容完全变了。这时’red’这个词最有可能适合这个位置。从这个例子中我们能学到,一个单词的前后词语都带信息价值。事实证明,我们需要考虑两个方向的单词(目标单词的左侧单词与右侧单词)。那我们该如何调整训练方式以满足这个要求呢,继续往下看。


http://chatgpt.dhexx.cn/article/T6nWU0VC.shtml

相关文章

Word进阶学习总结

一:前言 word从来不是一个需要花费很多时间的工具,如果你花费了很多时间,思考一下是不是方法不合理或者解决问题的思维不正确 未来在做文档的时候推荐 边输入边设置样式 常用的设计方法如下: 设置页面 设置样式 设置分节 …

视频教程-Word从入门到精美排版教程:手把手学习Word2019精美排版-Office/WPS

Word从入门到精美排版教程:手把手学习Word2019精美排版 15年以上IT行业工作经验、8年以上IT行业教学经验。丰富的项目经验和授课经验,授课形式不拘一格。熟悉iOS开发,网页开发、Java开发、平面设计等技术,是一名经验丰富的全栈开发…

word文本框换页

word文本框换页 觉得有用的话,欢迎一起讨论相互学习~ 今天再写word文档出现一个问题,就是上一页的文本框如果太长了就在这一页自动隐藏了,也不会换行到另一页。 解决方案 这时候可以在第二页或者你想要续写这个文本框的地方重新新建一个空白的文本框(…

一.office-Word2010 办公常用功能操作教程

为什么我们要学习Word 文档? 对于我们软件开发人员来说,编写开发文档的帮助手册是日常工作的需要,所以,我们必须要学习并掌握一些基本的Word使用技巧。才能在日常工作中化繁为简,批量处理,快速制作出精美&…

MySQL----SQL性能分析

文章目录 SQL性能分析1 SQL执行频率2 慢查询日志2.1 查询慢日志是否开启2.2 查询慢日志的时间2.3 查看慢日志文件中记录的信息 3 profile详情3.1 查询是否支持 profile3.2 查询 profile 是否开启3.3 开启 profile3.4 查看每一条SQL的耗时基本情况3.5 查看指定query_id的SQL语句…

性能评估

目录 分类模型评估指标 精确率/错误率 查准率/查全率 混淆矩阵 F1-score Fβ Score P-R 曲线 ROC 曲线 AUC面积 总结 回归模型评估指标 MAE MSE RMSE R2 MAPE 参考博客 一言以蔽之,所谓性能评估,简单来说就是运用一些数学方法去衡量模型…

程序的性能分析~

程序性能分析 在此文档中,内容包括但不限于: 空间复杂度,时间复杂度等概念定义;性能的测量标准;各种常见算法(可能特指排序算法?)的最好、最差情况;略。 可能会牵涉的…

【性能指标】性能测试数据分析

TPS:每秒处理事务数。一般用于衡量服务器的处理能力,或者说服务器的吞吐率 场景:测试场景系统资源:主要是CPU、内存、IO成功率:超时、业务失败耗时:业务处理时间 性能指标-vmstat vmstat 命令报告关于内核…

性能测试-操作和优化分析

打流工具 iperf 测试吞吐率 服务端:iperf -u -s 客户端:iperf -u -c 1.1.1.1 -b 500M -t 10 测试结果 ------------------------------------------------------------ Client connecting to 192.168.56.106, UDP port 5001 Sending 1470 byte d…

程序性能分析

程序性能 算法分析程序性能空间复杂度时间复杂度 空间复杂度程序所需空间组成指令空间(instruction space)数据空间(data space)环境栈空间(environment stack space) 空间复杂度分析 时间复杂度渐进记法(approximate notations)1.*O*记法2.*Ω*记法3.*θ*记法 时间复杂度分析常…

性能分析之 SQL 性能分析(MySQL)

在性能分析中,SQL 的分析那是必须的。 不同的库又有着不同的命令,但是总体来说,同一类型的数据库,除了有一些手段上的不同之外,给出的结果基本上都是类似的。 今天说一下 MySQL 的。 每次我都会说,对数据库…

性能分析—前端性能监测

目录 一、概述 二、性能优化指标 三、三大核心指标 四、怎么监测Web Vitals 五、谷歌怎么查看JS内存使用情况 六、怎么查看GPU情况 一、概述 记录前端性能监测的指标及部分监测手段。本文很多内容,参考掘金、CSDN等社区,如有侵权,可以联…

程序性能分析及性能测试

这里所说的程序是指对外提供tcp/ip交互协议的服务性程序。网络程序性能分析很重要,比如随着网络请求流量越来越大,我们需要知道已部署的服务能不能满足需求。这里采用对网络服务程序进行建模的方法分析影响程序性能的各要素,并计算相关性能值…

CPU分析系列--性能测试---数据库性能分析

目录 1.数据库设置 2.nmon查看服务器状态 3.分析定位性能瓶颈:响应时长过长,TPS低: a.查看服务器资源使用情况,如果user态%CPU使用率高, 1.定位是哪个进程占用率高: 2.查看响应时间: 3.查询慢查询日志中就有相关sql 4.在执行计划EXPLAIN中查看执行信息. b.查看服务器资源使用情…

性能测试-结果分析与性能调优

一、性能分析过程 1、分析过程 检查RT:模拟用户发起负载后,采用自顶向下的方式首先分析RT(响应时间)检查TPS:TPS大时RT小,说明性能良好检查负载机资源消耗:检查cpu使用率,cpu负载&…

性能统计分析

1. 为啥要性能统计? 性能测试性能分析 2. 性能统计的维度 系统级别性能数据分析进程级别性能数据分析:更常用 3. 常用的性能指标 cpu:代表算法的高效性,优先分析 查看系统cpu信息,cat /proc/cpuinfo系统负载与进程…

全网最全性能测试总结,分析性能测试问题+性能调优方案...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 性能分析和优化一…

性能测试之性能问题分析

开始性能测试前需要了解的内容: 1、项目具体需求。 2、指标:响应时间在多少以内,并发数多少,tps多少,总tps多少,稳定性交易总量多少,事务成功率,交易波动范围,稳定运行时…

深入性能测试数据分析

一、背景 进行性能测试时,常用的一些技术指标能够发现大部分常见问题,但是有一些不够明显的性能异常可能需要做更深入的分析。本文详细记录了一些性能场景下相关数据分析方法及思路,对不够明显的数据变动做深入性能分析,从而发现性…

系统性能分析

系统性能分析中,CPU、内存和 IO 是主要关注项。 对于 CPU,如果是常见的 Linux,可以先用 top 命令查看负载状况,下图是我截取的一个状态。 可以看到,其平均负载(load average)的三个值&#xf…