word2vec模型深度解析

『词向量』用Word2Vec训练中文词向量(一)—— 采用搜狗新闻数据集 用搜狗新闻数据集来训练中文词向量(Word2Vec),自己做的时候踩了很多的坑,希望分享出来让大家少走弯路。 阅读详情

来自 | 知乎   作者 | TianMin

链接丨https://zhuanlan.zhihu.com/p/85998950

编辑 | 深度学习这件小事公众号

本文仅作学术交流,如有侵权,请联系删除

【前言】word2vec是一个被广泛应用的word embedding方法,由于最近研究需要,将算法模型研究了一下由于word2vec内容很多,这里尽量讲解核心内容,有不足之处还请指出!

word2vec是轻量级的神经网络,其模型仅仅包括输入层、隐藏层和输出层,模型框架根据输入输出的不同,主要包括CBOW和skip-gram模型,CBOW模型是通过上下文的内容预测中间的目标词,而skip-gram则相反,通过目标词预测其上下文的词,通过最大化词出现的概率,我们训练模型可得到各个层之间的权重矩阵,我们所说的得到的word embedding vector就是从这个权重矩阵里面得来的。


   1、CBOW

(1)Simple CBOW model

为了更好的了解模型深处的原理,我们先从Simple CBOW model(仅输入一个词,输出一个词)框架 说起。

Simple CBOW model 框架

如图:

a. input layer输入的X是单词的one-hot representation(考虑一个词表V,里面的每一个词wi都有一个编号i∈{1,...,|V|},那么词wi的one-hot表示就是一个维度为|V|的向量,其中第i个元素值非零,其余元素全为0,例如:w2=[0,1,0,...,0]T);

b. 输入层到隐藏层之间有一个权重矩阵W,隐藏层得到的值是由输入X乘上权重矩阵得到的(细心的人会发现,0-1向量乘上一个矩阵,就相当于选择了权重矩阵的某一行,如图:输入的向量X是[0,0,1,0,0,0],W的转置乘上X就相当于从矩阵中选择第3行[2,1,3]作为隐藏层的值);

c. 隐藏层到输出层也有一个权重矩阵W ,因此,输出层向量y的每一个值,其实就是隐藏层的向量点乘权重向量W 的每一列,比如输出层的第一个数7,就是向量[2,1,3]和列向量[1,2,1]点乘之后的结果。

d. 最终的输出需要经过softmax函数(不懂可以百度一下),将输出向量中的每一个元素归一化到0-1之间的概率,概率最大的,就是预测的词。

了解了Simple CBOW model的模型框架之后,我们来学习一下其目标函数。

输出层softmax,u代表的是输出层的原始结果

这个公式学过高数的应该都懂

通过上一个公式,我们的目标函数可以转化为现在这个形式

加上负号之后,就变成最小化损失函数

训练方法就是经典的反向传播和梯度下降(不是本章重点,不展开说了)

(2)CBOW

了解了Simple CBOW model之后,扩展到CBOW就很容易了,只是把单个输入换成多个输入罢了(划红线部分)。

对比可以发现,和simple CBOW不同之处在于,输入由1个变成了C个,每个输入Xik到达隐藏层都会经过相同的权重矩阵W,隐藏层h的值变成了多个词乘上权重矩阵之后加和求平均值。

   2、skip-gram model

有了CBOW的介绍,对于skip-gram model 的理解应该会更快一些。

如图所示:

skip-gram model是通过输入一个词去预测多个词的概率。输入层到隐藏层的原理和simple CBOW一样,不同的是隐藏层到输出层,损失函数变成了C个词损失函数的总和,权重矩阵W 还是共享的。

   3、word2vec模型训练机制(优化方法)

一般神经网络语言模型在预测的时候,输出的是预测目标词的概率,也就是说我每一次预测都要基于全部的数据集进行计算,这无疑会带来很大的时间开销。不同于其他神经网络,word2vec提出两种加快训练速度的方式,一种是Hierarchical softmax,另一种是Negative Sampling。

(1)hierarchical softmax

预备知识:哈夫曼编码,如图所示:

哈夫曼树

哈夫曼编码

原始神经网络模型的输入输出框架

word2vec hierarchical softmax结构

和传统的神经网络输出不同的是,word2vec的hierarchical softmax结构是把输出层改成了一颗哈夫曼树,其中图中白色的叶子节点表示词汇表中所有的|V|个词,黑色节点表示非叶子节点,每一个叶子节点也就是每一个单词,都对应唯一的一条从root节点出发的路径。我们的目的是使的w=wO这条路径的概率最大,即: P(w=wO|wI)最大,假设最后输出的条件概率是W2最大,那么我只需要去更新从根结点到w2这一个叶子结点的路径上面节点的向量即可,而不需要更新所有的词的出现概率,这样大大的缩小了模型训练更新的时间。

我们应该如何得到某个叶子结点的概率呢?

假设我们要计算W2叶子节点的概率,我们需要从根节点到叶子结点计算概率的乘积。我们知道,本模型替代的只是原始模型的softmax层,因此,某个非叶子节点的值即隐藏层到输出层的结果仍然是uj,我们对这个结果进行sigmoid之后,得到节点往左子树走的概率p,1-p则为往右子树走的概率。关于这棵树的训练方式比较复杂,但也是通过梯度下降等方法,这里不详述,感兴趣的可以阅读论文word2vec Parameter Learning Explained。

(2)Negative Sampling 负采样

传统神经网络在训练过程中的每一步,都需要计算词库中其他词在当前的上下文环境下出现的概率值,这导致计算量十分巨大。

然而,对于word2vec中的特征学习,可以不需要一个完整的概率模型。CBOW和Skip-Gram模型在输出端使用的是一个二分类器(即Logistic Regression),来区分目标词和词库中其他的 k个词(也就是把目标词作为一类,其他词作为另一类)。下面是一个CBOW模型的图示,对于Skip-Gram模型输入输出是倒置的。

此时,最大化的目标函数如下:

其中,Qθ(D=1|w,h)为二元逻辑回归的概率,具体为在数据集 D中、输入的embedding vector θ、上下文为 h的情况下词语 w 出现的概率;公式后半部分为 k 个从 [噪声数据集] 中随机选择 kk个对立的词语出现概率(log形式)的期望值。可以看出,目标函数的意义是显然的,即尽可能的 [分配(assign)] 高概率给真实的目标词,而低概率给其他 k 个 [噪声词],这种技术称为负采样(Negative Sampling)。

这种想法来源于噪声对比评估方法(NEC),大致思想是:假设X=(x1,x2,⋯,xTd)是从真实的数据(或语料库)中抽取样本,但是样本服从什么样的分布我们不知道,那么先假设其中的每个xi服从一个未知的概率密度函数pd。这样我们需要一个相对可参考的分布反过来去估计概率密度函数pd,这个可参考的分布或称之为噪音分布应该是我们知道的,比如高斯分布,均匀分布等。假设这个噪音分布的概率密度函数pn,从中抽取样本数据为Y=(y1,y2,⋯,yTn)Y=(y1,y2,⋯,yTn),而这个数据称之为噪声样本,我们的目的就是通过学习一个分类器把这两类样本区别开来,并能从模型中学到数据的属性,噪音对比估计的思想就是“通过比较而学习”。

具体来说,word2vec里面的负采样:将输出层的V个样本分为正例(Positive Sample)也就是目标词对应的项,以及剩余V−1个负例(Negative Samples)。举个例子有个样本phone number,这样wI=phone, wO=number, 正例就是number这个词,负例就是不太可能与phone共同出现的词。负采样的思想是每次训练只随机取一小部分的负例使他们的概率最小,以及对应的正例概率最大。随机采样需要假定一个概率分布,word2vec中直接使用词频作为词的分布,不同的是频数上乘上0.75,相比于直接使用频次作为权重,取0.75幂的好处可以减弱不同频次差异过大带来的影响,使得小频次的单词被采样的概率变大。

采样权重

负采样定义的损失函数如下:

损失函数,一部分是正样本(期望输出的词),另一部分是负采样随机抽取出来的负样本集合,V wo是输出向量

如果大家理解的还不是很深的话,接下来将通过谷歌发布的tensorflow官方word2vec代码解析加深理解。

代码链接:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/word2vec/word2vec_basic.py

之后我会对代码进行详细剖析,欢迎跟踪~谢谢

   推荐阅读相关论文

(完)





词向量模型Word2Vec 在自然语言处理中,我们如何将词转化成向量,从而使计算机进行识别呢 阅读详情

相关推荐

【主题建模】Gensim 中的 Word2Vec

BOW 和 TF-IDF 都只着重于词汇出现在文件中的次数,未考虑语言、文字有上下文的关联,针对上下文的关联,Google 研发团队提出了词向量 Word2vec,将每个单字改以上下文表达,然后转换为向量,这就是词嵌入(Word Embedding),与 TF-IDF 输出的是稀疏向量不同,词嵌入的输出是一个稠密的样本空间。

Data · Model · Agent · Repeat 1808

Word2Vec模型——将文本转换成向量的方法

用Word2Vec模型提取单词的特征向量

m0_56540237的博客 8509

【AI大模型:技术原理】14、NLP预训练模型深度解析:从Word2Vec到认知智能

类对语言理解的追求,本质是一场“技术深度”与“认知维度”的螺旋上升之旅: 1. **从模式到意义**:早期模型(Word2Vec)只能捕捉词语共现模式,如今GPT-4已能解析法律条文的隐含逻辑(准确率78%)。 2. **从符号到具身**:NLP正从纯文本处理迈向“语言-感知-行动”的闭环,具身模型在虚拟环境中执行指令的成功率已达81%。 3. **从工具到伙伴**:随着RLHF和ToM模块的进步,模型开始理解人类的情感与意图,在心理咨询场景中,共情回应准确率达85%,接近专业咨询师水平(89%)。 当我

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 1216

深度学习方法(十七):word2vec算法原理(1):跳字模型(skip-gram) 和连续词袋模型(CBOW)

word embedding算法中最为经典的算法就是今天要介绍的word2vec,最早来源于Google的Mikolov的: 1、Distributed Representations of Sentences and Documents 2、Efficient estimation of word representations in vector space 也是开创了无监督词嵌入的新局面,让...

Bin 的专栏 2万+

AD/Protel老手才知道的PCB过孔查看技巧:3分钟分清通孔、盲孔和埋孔

本文为PCB设计工程师提供了在Altium Designer/Protel中快速鉴别通孔、盲孔和埋孔的实用技巧。通过层叠管理器、高级筛选工具和实战五步法,帮助用户在3分钟内精准识别过孔类型,提升设计效率和电路性能。特别适合处理高密度HDI板卡中的复杂过孔布局。

weixin_29164497的博客 581

Globus数据下载全攻略:从零配置到批量下载大文件(附常见问题解决)

本文详细介绍了Globus数据下载的全流程,从零配置到批量下载大文件的实用技巧,包括环境准备、高级传输策略、性能优化及常见问题解决方案。Globus作为科研数据的高效传输工具,通过并行流传输和自动校验技术,显著提升大规模数据传输的效率和可靠性。

u9v0w的博客 663

word2vec模型评估_word2vec模型深度解析

【前言】word2vec是一个被广泛应用的word embedding方法,由于最近研究需要,将算法模型研究了一下由于word2vec内容很多,这里尽量讲解核心内容,有不足之处还请指出!word2vec是轻量级的神经网络,其模型仅仅包括输入层、隐藏层和输出层,模型框架根据输入输出的不同,主要包括CBOW和skip-gram模型,CBOW模型是通过上下文的内容预测中间的目标词,而skip-gram则...

weixin_39870199的博客 702

合并数组与非合并数组——SystemVerilog

合并型数组(packed): — 合并型数组可以实现连续的存储,赋值时不需要用 '{ }。 //合并型数组 bit [3] [7:0] b_pack // 表示3行 x 8列的数组,[3]是高维度(高维度),[7:0]是低维度(第一维) 数组中,数据排列为{b_pack[3],b_pack[2],b_pack[1],b_pack[0]},其中每个b_pack为8个bit; bit是二值逻辑,每位bit只占据1位。故24位bit只占据一个word(一般一个word为32bit)的存储空间

SummerXRT的博客 7641

word2vec代码_word2vec模型深度解析

word2vec是一个被广泛应用的word embedding方法,由于最近研究需要,将算法模型研究了一下由于word2vec内容很多,这里尽量讲解核心内容,有不足之处还请指出!-----------------------------------------------------------------------------------------------word2vec是轻量级的神经网...

weixin_39561168的博客 300

CATIA V5新手必看:从零开始的界面导航与基础操作指南(附常见问题解决)

本文为CATIA V5新手提供全面的界面导航与基础操作指南,涵盖核心工作区解析、文件管理规范、视图操作秘籍及常见问题解决方案。通过详细的步骤说明和实用技巧,帮助用户快速掌握这一工业设计标杆软件,特别适合从SolidWorks、AutoCAD等软件过渡的用户。

b9c0d的博客 536

在 Ubuntu 上安装和配置 PostgreSQL 实录

本文介绍了在Ubuntu系统上安装和配置PostgreSQL数据库的完整步骤。主要内容包括:1)通过官方源或PPA源安装最新版本;2)修改配置文件(postgresql.conf和pg_hba.conf)以允许远程访问;3)设置postgres用户密码;4)创建新用户并配置权限;5)防火墙设置和重启服务;6)验证安装和远程连接方法。文章提供了详细的命令行操作指导,帮助用户完成从安装到远程访问的全部配置过程。

qq_58168857的博客 1210

nlp-tutorial基础嵌入模型:NNLM与Word2Vec深度解析

nlp-tutorial基础嵌入模型:NNLM与Word2Vec深度解析 【免费下载链接】nlp-tutorial graykode/nlp-tutorial: 是一个基于 Python 的自然语言处理教程,涵盖了各种自然语言处理技术和算法。该项目提供了一个全面的自然语言处理教程,可以帮助开发者快速入门和掌握自然语言处理...

gitblog_00640的博客 710

nature子刊:MCNN基于电池故障诊断的模型约束的深度学习方法

本研究提出了一种基于模型约束神经网络(MCNN)的锂离子电池在线故障诊断方法,整合物理模型与深度学习,有效解决了随机工况下传统方法诊断精度低、依赖故障样本等问题。通过统计修正电池包模型和双向LSTM网络,实现了电池状态的高精度预测(平均RMSE 3.9%),并设计模型耦合自动编码器提取可解释特征。在包含18.2百万条真实车辆数据的验证中,该方法故障检测TPR在FPR=0.1时达85%,较基准方法提升超46.5%,且能提前30分钟预警内部短路等故障。研究还展示了算法在跨电池包结构迁移中的优越性,为工业应用提供

hasakie的博客 1760

Word2Vec模型参数深度解析: gensim.models.word2vec() 使用指南

Word2vec是一个用来产生词向量的模型。是一个将单词转换成向量形式的工具。通过转换,可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相似度。

bishedaima_com_v的博客 584

华为灵衢UB总线介绍

华为发布"灵衢"(UB)超节点互联协议,旨在构建支持AI大模型计算的基础设施。该协议采用统一内存语义和对等架构,使设备可直接访问远程内存,实现资源池化。技术突破包括2.1微秒超低时延和TB级带宽,支持64节点、52万张昇腾卡的集群互联。相比传统RDMA,"灵衢"更注重系统级资源调度,而非单纯数据传输。华为开放技术规范,推动生态建设,已有厂商开发兼容IP核。"灵衢"可适应x86、RISC-V等架构,未来将扩展至百万卡规模集群。

技术引领业务创新 4430

华为OD机考双机位C卷 - 简单的解压缩算法 (Java & Python & JS & GO & C++ & C)

华为OD机考双机位C卷 - 简单的解压缩算法 , 提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 131

《深度学习》神经语言模型 Word2vec CBOW项目解析、npy/npz文件解析

Word2Vec是一种用于将单词表示为连续向量的技术。它是一种浅层、双层的神经网络模型,用于训练单词的分布式表示。Word2Vec模型将单词映射到一个低维向量空间中,使得具有相似含义的单词在向量空间中距离较近。这种表示方法有助于在自然语言处理任务中更好地捕捉和理解单词之间的语义关系。npy文件是NumPy库中用于保存数组数据的二进制文件格式。npz文件是NumPy用于存储数值数据的压缩格式。它实际上是一个压缩存档文件,可以包含一个或多个NumPy数组。

wx_AHao1004Y的博客 1949

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Word2Vec词嵌入技术深度解析:Skip-Gram模型完整实现

Word2Vec词嵌入技术是自然语言处理领域的重要突破,它能够将文本中的词语转换为具有语义信息的向量表示。通过学习词语在上下文中的分布模式,Word2Vec模型能够捕捉到词语之间的语义关系,为机器翻译、情感分析等应用提供强大的基础支持。 ## 🤔 为什么需要词嵌入技术? 在传统的自然语言处理中,我们通常使用**one-hot编码**来表示词语,但这种方法存在明显的局限性。当词汇表包含数万个词

gitblog_00502的博客 908

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

ChatGPT 的语义基础:Word2Vec 深度解析从模型原理、代码实现到实际应用

本文介绍了Word2Vec及其两种主要模型(CBOW和Skip-Gram)的工作原理与应用。词嵌入将语义相近的单词映射到邻近向量空间,使计算机能理解词汇关系。CBOW通过上下文预测中心词,而Skip-Gram则相反。文章还展示了Word2Vec在ChatGPT、教育、法律、医疗和高科技等领域的实际应用,并提供了在Colab中训练Word2Vec模型及可视化词向量的实践指南。

XXQuagmireXX的博客 1337

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

word2vec核心原理解析:CBOW与Skip-Gram模型深度对比

word2vec是自然语言处理领域中极具影响力的词向量生成工具,它通过CBOW(连续词袋模型)和Skip-Gram两种核心架构,将文本中的词语转化为计算机可理解的数值向量。本文将深入对比这两种模型的工作原理、应用场景及性能表现,帮助读者快速掌握word2vec的核心技术。 ## 🌟 两种模型的核心架构 ### 🔍 CBOW模型:从上下文预测目标词 CBOW(Continuous Bag-o

gitblog_00688的博客 933

大模型实习模拟面试:自然语言处理核心基础——Word2Vec 与 Seq2Seq 深度解析

好的!Word2Vec 是 Google 在 2013 年提出的一种高效学习词向量(word embeddings)的方法。“一个词的意义由其上下文决定”Skip-gram:给定一个中心词,预测它周围的上下文词;:给定上下文词,预测中间的中心词。其中,Skip-gram 更适合处理低频词,而 CBOW 训练速度更快、更稳定。这两种模型都使用浅层神经网络(通常只有一层隐藏层),通过优化目标函数来学习每个词的稠密向量表示。当然有意义!

吾为热爱计科,致力于知识分享的践行者,此博客是我在这条道路上留下的足迹。 367

cbow word2vec 损失_word2vec(cbow+skip-gram+hierarchical softmax+Negative sampling)模型深度解析...

word2vec是一个被广泛应用的word embedding方法,由于最近研究需要,将算法模型研究了一下由于word2vec内容很多,这里尽量讲解核心内容,有不足之处还请指出!-----------------------------------------------------------------------------------------------word2vec是轻量级的神经网...

weixin_39847034的博客 128

Gensim『Word2Vec』

深度解析Word2vecWord2Vec的参数解释

纸上得来终觉浅,绝知此事要躬行! 300

一篇文章入门Word2Vec

一篇文章入门Word2Vec

julac的博客 9603

Embedding和Word2vec的理解

Embedding就是用一个低维的向量表示一个物体,这个Embedding向量的性质是能使距离相近的向量对应的物体有相近的含义,正是因为Embedding能够用低维向量对物体进行编码还能保留其含义的特点,所以其非常适合用于深度学习。由于我们熟知的one hot encoding、multi hot encoding是一种稀疏向量的编码方式,所以不适合用来深度学习进行特征表示,相反Embedding概括而言,就是一种高效的低维稠密的操作。

BoCong-Deng的博客 3632
上一篇: 在线就能用的代码编译器我给你找好了!
下一篇: 宫崎骏动画里的新垣结衣见过没?这个开源动漫生成器让你的照片秒变手绘日漫...
Wang_AI
博客等级 码龄12年 997粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值