Python共生矩阵对比奇异值分解 (SVD)和词嵌入

词嵌入

词嵌入是转换成数字的文本。同一文本可能有不同的数字表示。

许多机器学习算法和几乎所有深度学习架构都无法处理原始形式的字符串或纯文本。 它们需要数字作为输入来执行任何类型的工作,从广义上讲是分类、回归等。

不同类型的词嵌入可以大致分为两类:

基于频率的嵌入

我们在这一类下遇到的向量一般有三类:计数向量、TF-IDF向量、具有固定上下文窗口的共生矩阵。

基于预测的嵌入

我们在这个类别下通常会遇到两种类型的向量:连续的词袋(CBOW)、Skip-Gram。

本文,我们将关注具有固定上下文窗口的共生矩阵。

共生矩阵

矩阵 A 存储单词的共生。在这种方法中,我们计算每个单词在感兴趣的单词周围特定大小的窗口内出现的次数。计算语料库中所有单词的计数。

因此,具有固定窗口大小 1 的合成共现矩阵 A 看起来像:

 NLP   flying   I   like   deep   learning   enjoy   NLP  0.0 0.0 0.0 1.0 0.0 0.0 0.0  flying  0.0 0.0 0.0 0.0 0.0 0.0 1.0  I  0.0 0.0 0.0 2.0 0.0 0.0 1.0  like  1.0 0.0 2.0 0.0 1.0 0.0 0.0  deep  0.0 0.0 0.0 1.0 0.0 1.0 0.0  learning  0.0 0.0 0.0 0.0 1.0 0.0 0.0  enjoy  0.0 1.0 1.0 0.0 0.0 0.0 0.0 \begin{array}{|l|l|l|l|l|l|l|l|}\hline & \text { NLP } & \text { flying } & \text { I } & \text { like } & \text { deep } & \text { learning } & \text { enjoy } \\\hline \text { NLP } & 0.0 & 0.0 & 0.0 & 1.0 & 0.0 & 0.0 & 0.0 \\\hline \text { flying } & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 1.0 \\\hline \text { I } & 0.0 & 0.0 & 0.0 & 2.0 & 0.0 & 0.0 & 1.0 \\\hline \text { like } & 1.0 & 0.0 & 2.0 & 0.0 & 1.0 & 0.0 & 0.0 \\\hline \text { deep } & 0.0 & 0.0 & 0.0 & 1.0 & 0.0 & 1.0 & 0.0 \\\hline \text { learning } & 0.0 & 0.0 & 0.0 & 0.0 & 1.0 & 0.0 & 0.0 \\\hline \text { enjoy } & 0.0 & 1.0 & 1.0 & 0.0 & 0.0 & 0.0 & 0.0 \\\hline\end{array}  NLP  flying  I  like  deep  learning  enjoy  NLP 0.00.00.01.00.00.00.0 flying 0.00.00.00.00.00.01.0 I 0.00.00.02.00.00.01.0 like 1.00.02.00.01.00.00.0 deep 0.00.00.01.00.01.00.0 learning 0.00.00.00.01.00.00.0 enjoy 0.01.01.00.00.00.00.0

矩阵的奇异值

令 A 为 m * m 矩阵。乘积 Aᵀ A 是一个对称矩阵。

[ ( A t A ) t = A t ⋅ ( A t ) t = A t A ] \left[\left(A^{t} A\right)^{t}=A^{t} \cdot\left(A^{t}\right)^{t}=A^{t} A\right] [(AtA)t=At(At)t=AtA]

因此 Aᵀ A 有 n 个线性独立特征向量 v₁ ,v₂…vₙ 和实特征值 λ₁ , λ₂… λₙ 。

我们知道 Aᵀ A 的特征值也都是非负的。

设 λ 是 Aᵀ A 的特征值,对应特征向量 v。 那么,

λ = λ ∥ v ∥ 2 = λ v t v = v t λ V = V t A t A v = ( A V ) t A V = ∥ A v ∥ ∥ L ⩾ 0 \begin{aligned}\lambda=\lambda\|v\|^{2}=\lambda v^{t} v &=v^{t} \lambda V=V^{t} A^{t} A v \\&=(A V)^{t} A V \\&=\|A v\| \|^{L} \geqslant 0\end{aligned} λ=λv2=λvtv=vtλV=VtAtAv=(AV)tAV=AvL0

标记特征向量 v₁, v₂… vₙ,使得 λ₁ ≥λ₂ ≥… λₙ。令 σᵢ = √λᵢ。因此,σ₁ ≥σ₂ ≥…σₙ ≥0。数 σ₁, σ₂,… σₙ 称为矩阵 A 的奇异值。

奇异值分解 (SVD)

from numpy import array
from scipy.linalg import svd
from numpy import diag
from numpy import dot
# define a matrix
A = array(df)
print('Matrix A is: \n')
print(A)
# SVD
U, s, VT = svd(A)
print('*'*120)
print('Matrix U is: \n')
print(U)
print('*'*120)
Sigma = diag(s)
print('Matrix Sigma is: \n')
print(Sigma)
print('*'*120)
print('Matrix VT is: \n')
print(VT)

共生矩阵 X 应用 SVD

∣ V ∣ [ ∣ V ∣ X ] = ∣ V ∣ [ ∣ ∣ u 1 u 2 ⋯ ∣ ∣ ] ∣ V ∣ [ ∣ V ∣ σ 1 0 ⋯ 0 σ 2 ⋯ ⋮ ⋮ ⋱ ] ∣ V ∣ [ − ∣ V ∣ − v 1 − − v 2 − ⋮ ] |V|\left[\begin{array}{l}|V| \\X\end{array}\right]=|V|\left[\begin{array}{ccc}\mid & \mid & \\u_{1} & u_{2} & \cdots \\\mid & \mid &\end{array}\right]|V|\left[\begin{array}{ccc}|V| & \\\sigma_{1} & 0 & \cdots \\0 & \sigma_{2} & \cdots \\\vdots & \vdots & \ddots\end{array}\right]|V|\left[\begin{array}{ccc}- & |V| & \\- & v_{1} & - \\- & v_{2} & - \\\vdots &\end{array}\right] V[VX]=Vu1u2VVσ100σ2VVv1v2

源代码

详情参阅 - 亚图跨际

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值