栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 \hlineend{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} Aright)^{t}=A^{t} cdotleft(A^{t}right)^{t}=A^{t} Aright] [(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 0end{aligned} λ=λ∥v∥2=λvtv​=vtλV=VtAtAv=(AV)tAV=∥Av∥∥L⩾0​

标记特征向量 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| \Xend{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 & ddotsend{array}right]|V|left[begin{array}{ccc}- & |V| & \- & v_{1} & - \- & v_{2} & - \vdots &end{array}right] ∣V∣[∣V∣X​]=∣V∣⎣⎡​∣u1​∣​∣u2​∣​⋯​⎦⎤​∣V∣⎣⎢⎢⎢⎡​∣V∣σ1​0⋮​0σ2​⋮​⋯⋯⋱​⎦⎥⎥⎥⎤​∣V∣⎣⎢⎢⎢⎡​−−−⋮​∣V∣v1​v2​​−−​⎦⎥⎥⎥⎤​

源代码

详情参阅 - 亚图跨际

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/849381.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号