s o f t m a x ( x ) i = e x p ( x i ) ∑ j = 1 n e x p ( x j ) = p i softmax(x)_i = \frac{exp(x_i)}{\sum^n_{j=1}exp(x_j)}=p_i softmax(x)i=∑j=1nexp(xj)exp(xi)=pi
s o f t m a x softmax softmax又称为多项逻辑回归( m u l t i n o m i a l l o g i s t i c r e g r e s s i o n multinomial logistic regression multinomiallogisticregression),多用于分类过程,它通过将多个神经元的输出,映射到 ( 0 , 1 ) (0,1) (0,1)区间。它通过将任意值 x i x_i xi映射到一个概率分布 p i p_i pi上," m a x max max“是因为它会将输入中最大的值的概率进一步放大,而” s o f t soft soft"则是因为对于输入中极小的值,它也人然后分配一些概率,而不是直接丢弃。因此, s o f t m a x softmax softmax函数常常用在深度学习中;
- C B O W ( C o n t i n u o u s B a g o f W o r d s ) CBOW(Continuous Bag of Words) CBOW(ContinuousBagofWords)
给定上下文中的词,然后预测中心词。从而利用中心词的预测结果情况,利用梯度下降方法不断调整上下文词的向量。训练完成后,每个词都作为中心词遍历了一遍,将上下文中的词向量进行调整,从而获取整个文本中所有词的向量;
- S G ( S k i p − G r a m ) SG(Skip-Gram) SG(Skip−Gram)
给定中心词,然后预测上下文中的词。从而利用上下文中的词的预测结果情况,利用梯度下降法不断调整中心词的词向量,最后文本遍历完一遍之后,就得到了所有词的词向量;
- C B O W CBOW CBOW和 S G SG SG的比较
两者均为三层神经网络(输入层、投影层和输出层)。 S G SG SG中,每个词作为中心词时,是一对多的情况,多个上下文中的词对一个中心词进行“训练”,然后得出较准确地中心词的向量结果,这样最终的效果更好。 C B O W CBOW CBOW中,是多对一的情况,多个上下文中的词从一个中心词处进行“学习”,这样效率更高,速度快,但是最终效果却不如 S G SG SG。此外,在 S G SG SG中,每个词都会受上下文词的影响,每个词作为中心词时,需要进行 K K K次训练( K K K为窗口大小),所以经过多次调整将使得词向量相对更准确。 C B O W CBOW CBOW预测词数和整个文本中词数几乎相等,每次预测才会进行一次反向传播。
- 分层 S o f t m a x Softmax Softmax
用于计算 s o f t m a x softmax softmax的方法,用二叉树(根据类标频数构造的霍夫曼树)来表示词汇表中的所有单词。如上图,其中,白色节点表示词汇表中的所有单词,而黑色节点则表示隐节点。其中 V V V个单词存储于二叉树的叶子节点单元,而对于每个叶子节点,都有一条唯一的路径可以从根节点达到该叶子节点,这条路径用于计算该叶子节点所代表的单词的概率。在这个模型中,不存在单词的输出向量,而是 V − 1 V-1 V−1个隐节点中都有一个输出向量 v n ( w , j ) ‘ v ^`_{n(w,j)} vn(w,j)‘,单词作为输出词的概率被定义为:
p ( w = w O ) = ∏ j = 1 L ( w ) − 1 σ ( [ [ n ( w , j + 1 ) = c h ( n ( w , j ) ) ] ] . v n ( w , j ) ‘ T h ) p(w=w_O)=\prod {L(w)-1}_{j=1}\sigma([[n(w,j+1)=ch(n(w,j))]].{v`_{n(w,j)}}^Th) p(w=wO)=j=1∏L(w)−1σ([[n(w,j+1)=ch(n(w,j))]].vn(w,j)‘Th)
其中, c h ( n ) ch(n) ch(n)是节点 n n n的左侧子节点, v n ( w , j ) ‘ v^`_{n(w,j)} vn(w,j)‘是隐节点 n ( w , j ) n(w,j) n(w,j)的向量表示(即“输出向量”)。而 h h h则是隐藏层的输出值(SG模型中, h = v w i h=v_{wi} h=vwi;CBOW模型中, h = 1 C ∑ c = 1 C v w c h=\frac{1}{C}\sum_{c=1}^C v_{w_c} h=C1∑c=1Cvwc), [ [ x ] ] [[x]] [[x]]则为一个特殊函数,其定义如下:
[ [ x ] ] = { 1 , i f x i s t r u e − 1 , o t h e r s [[x]]=\begin{cases}1\ \ ,if\ x\ is\ true\\-1\ ,\ others\end{cases} [[x]]={1 ,if x is true−1 , others
- 负采样技术
为解决数量过于庞大的输出向量的更新问题,于是在更新时不更新所有向量,而只更新他们的一个样本。正样本应该出现在我们的样本中,此外也需要加入几个单词作为负样本。而在采样的过程中,我们需要任意指定一个总体的概率分布,这个分布就叫做噪声分布,标记为 P n ( w ) P_n(w) Pn(w)。在 w o r d 2 v e c word2vec word2vec中,作者用一个定义好的后多项分布的负采样形式取代简化的训练目标,从而产生高质量的嵌入:
E = − l o g σ ( v w O ‘ T h ) − ∑ w j ∈ W n e g l o g σ ( − v w j ‘ T h ) E=-log\sigma({v`_{w_O}}Th)-\sum_{w_j\in W_{neg}}log\sigma(-{v`_{w_j}}Th) E=−logσ(vwO‘Th)−wj∈Wneg∑logσ(−vwj‘Th)
其中, w O w_O wO是正样本(即输出单词), v w O ‘ v^`_{w_O} vwO‘是词向量。而 h h h则是隐藏层的输出值(SG模型中, h = v w i h=v_{wi} h=vwi;CBOW模型中, h = 1 C ∑ c = 1 C v w c h=\frac{1}{C}\sum_{c=1}^C v_{w_c} h=C1∑c=1Cvwc)。 W n e g = { w j ∣ j = 1 , … , K } W_{neg}=\{w_j|j=1,…,K\} Wneg={wj∣j=1,…,K}是从 P n ( w ) P_n(w) Pn(w)中采样得到的单词集合,即负样本。
- 定义
基于计数和直接预测的方法;
- 目标函数
J ( θ ) = 1 2 ∑ i , j = 1 W f ( P i j ) ( u i T v j − l o g P i j ) 2 J(\theta)=\frac{1}{2}\sumW_{i,j=1}f(P_{ij})(uT_iv_j-logP_{ij})^2 J(θ)=21i,j=1∑Wf(Pij)(uiTvj−logPij)2
X f i n a l = U + V X_{final}=U+V Xfinal=U+V
其中, P i j P_{ij} Pij是单词 j j j出现在单词 i i i上下文中的概率,而 f ( P i j ) f(P_{ij}) f(Pij)则是为了去除噪声而设定的函数。
如何评价 E m b e d d i n g Embedding Embedding
-
内在方式:对特定/中间子任务的评估;
-
外在方式:应用到具体任务中;
f a s t T e x t fastText fastText分类
在文本分类任务中, f a s t T e x t fastText fastText作为一种浅层网络,能取得媲美于深度网络的精度,但是训练时间却比深度网络快许多数量级。一般情况下,用 f a s t T e x t fastText fastText进行文本分类的同时也会产生词的 e m b e d d i n g embedding embedding;
- 字符级的 n − g r a m n-gram n−gram
w o r d 2 v e c word2vec word2vec中以词作为原子,为每个词生成一个向量,而忽略词内部形态特征。面对这一问题, f a s t T e x t fastText fastText采用字符级的 n − g r a m n-gram n−gram来表示一个单词。通过这样处理则有两个优点;
-
对于低频词,生成的词向量效果更好,其 n − g r a m n-gram n−gram可以与其他词共享;
-
对于训练词库外的词,仍然可以构建其词向量,可通过叠加其字符级 n − g r a m n-gram n−gram从而生成向量;
- 模型架构
类似于 w o r d 2 v e c word2vec word2vec中的 C B O W CBOW CBOW模型,只有输入层、隐藏层、输出层三层。其中,输入为多个单词表示成的向量,输出是一个特定的 t a r g e t target target,隐藏层是对多个词向量的叠加平均。不同的是, C B O W CBOW CBOW的输入是目标词上下文中的词,而 f a s t T e x t fastText fastText的输入则是多个单词及其 n − g r a m n-gram n−gram特征。这些特征用于表示单个文档, C B O W CBOW CBOW中输入词的是经过 o n e − h o t one-hot one−hot编码过的,输出为目标词;而 f a s t T e x t fastText fastText中输入特征则是经 e m b e d d i n g embedding embedding过的特征,输出是各个文档对应的类标,且采用分层 s o f t m a x softmax softmax优化措施,大大加快了训练速度;
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
277437)]
[外链图片转存中…(img-FyU0MnK5-1710846277437)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-qJzeNVFA-1710846277438)]