潜在语义分析(LSA)相关知识
文章目录
- 单词-文本矩阵
- 话题向量空间
- 文本在话题向量空间中的表示
- 从单词向量空间到话题向量空间的线性变换
- 潜在语义分析算法
- 矩阵奇异值(SVD)分解算法
- 非负矩阵(NMF)分解算法
- 基本思想
- 损失函数
- (1)平方损失
- (2)散度损失函数
- 迭代学习算法
- (1)平方损失函数更新法则
- (2)散度损失函数的更新法则
- 算法实现
潜在语义分析(latent semantic analysis, LSA)是一种无监督方法,主要用于文本的话题分析。其特点是通过对 单词-文本矩阵进行进行奇异值分解,从而得到 话题向量空间和 文本在话题向量空间中的表示。
单词-文本矩阵
给定 nnn 个文本集合D={d1,d2,…dn}D = \{d_1,d_2,\ldots d_n\}D={d1,d2,…dn},以及在所有文本中出现的 mmm 个单词的集合W={w1,w2,…,wm}W = \{w_1,w_2,\ldots,w_m\}W={w1,w2,…,wm} 。单词-文本矩阵如下:
X=[x11x12⋯x1nx21x22⋯x2n⋮⋮⋮xm1xm2⋯xmn]X= \left[ \begin{matrix} x_{11}&x_{12}&\cdots&x_{1n}\\ x_{21}&x_{22}&\cdots&x_{2n}\\ \vdots&\vdots&&\vdots\\ x_{m1}&x_{m2}&\cdots&x_{mn} \end{matrix} \right] X=⎣⎢⎢⎢⎡x11x21⋮xm1x12x22⋮xm2⋯⋯⋯x1nx2n⋮xmn⎦⎥⎥⎥⎤
每个列向量x⋅jx_{ \cdot j}x⋅j对应文本 j 的不同单词,xi,jx_{i,j}xi,j表示第 j 个文本中第 i 个单词wiw_iwi的权值。权值可以是单词的在文本的出现次数,也可以是其他的数值,例如TD-IDF值:
TFIDFij=tfijtf⋅jlogdfdfii=1,2,⋯,m;j=1,2,⋯,nTFIDF_{ij}=\frac{tf_{ij}}{tf_{\cdot j}}\log\frac{\mathrm{d}f}{\mathrm{d}f_i}\\ i=1,2,\cdots,m;\\ j=1,2,\cdots,n TFIDFij=tf⋅jtfijlogdfidfi=1,2,⋯,m;j=1,2,⋯,n
tfijtf_{ij}tfij 是单词wiw_iwi 出现在文本djd_jdj 中的频数,tf.jtf_{.j}tf.j 是文本djd_jdj 中出现所有单词的频数之和,所以tfijtf⋅j\frac{tf_{ij}}{tf_{\cdot j}}tf⋅jtfij可以表示单词wiw_iwi在当前文本的出现次数的占比。一个单词在一个文本中出现的频数越高,这个单词在这个文本中的重要度就越高,即tfijtf⋅j\frac{tf_{ij}}{tf_{\cdot j}}tf⋅jtfij 越大 ;
dfdfdf 是文本集合D的全部文本集,dfidf_idfi 是含有单词wiw_iwi 的文本数。一个单词在整个文本集合中出现的文本数越少,这个单词就越能表示其所在文本的特点,重要度就越高,即logdfdfi\log\frac{\mathrm{d}f}{\mathrm{d}f_i}logdfidf 越大;
一个单词在一个文本的TF-IDF是两种重要度的积,表示综合重要度。
单词-文本矩阵的每个列向量对应一个文本,两个列向量之间的的余弦相似度表示对应文本之间的语义相似度。
缺点:单词向量通常是稀疏的。没有考虑到在自然语言处理中的一词多义以及多词一义,所以基于词向量的相似度计算不精确。
话题向量空间
两个文本的相似度可以体现在话题的相似度上。一个文本一般包含若干个话题,如果两个文本相似,那么这两个应该有相似的话题。
可以设想定义一种话题向量空间模型,进而可以用话题向量来表示文本。这个向量的每一个分量都对应一个话题,分量的数值大小为该话题在文本中的权值。实际上,潜在语义分析正是构建话题向量空间的方法。
给定 单词-文本矩阵 如下:
X=[x11x12⋯x1nx21x22⋯x2n⋮⋮⋮xm1xm2⋯xmn]X=\left[\begin{matrix}x_{11}&x_{12}&\cdots&x_{1n}\\x_{21}&x_{22}&\cdots&x_{2n}\\\vdots&\vdots&&\vdots\\x_{m1}&x_{m2}&\cdots&x_{mn}\end{matrix}\right] X=⎣⎢⎢⎢⎡x11x21⋮xm1x12x22⋮xm2⋯⋯⋯x1nx2n⋮xmn⎦⎥⎥⎥⎤
X 也可以写作: X=[x1x2⋅⋅⋅xn]X=[x_1 \;\; x_2 \;\; ··· \;\; x_n]X=[x1x2⋅⋅⋅xn]。
假设所有文本共含有kkk 个话题,每个话题由定义在单词集合W的m维向量表示,称为话题向量,即:
tl=[t1lt2l⋮tml],l=1,2,...kt_l = \left[ \begin{matrix} &t_{1l} \\ &t_{2l} \\ &\vdots \\ &t_{ml} \\ \end{matrix} \right], l=1,2,...k tl=⎣⎢⎢⎢⎡t1lt2l⋮tml⎦⎥⎥⎥⎤,l=1,2,...k
其中,tilt_{il}til是单词wiw_iwi在话题tlt_ltl的权重,权重越大,则该单词在话题中的重要程度越高。k个话题向量tlt_ltl张成话题向量空间,维度为k。
话题向量空间 T 也可以表示为一个矩阵,称之为单词—话题矩阵 如下:
T=[t11t12⋯t1kt21t22⋯t2k⋮⋮⋮tm1t12⋯tmk]T=\left[ \begin{matrix} &t_{11} &t_{12} &\cdots &t_{1k} \\ &t_{21} &t_{22} &\cdots &t_{2k} \\ &\vdots &\vdots & &\vdots \\ &t_{m1} &t_{12} &\cdots &t_{mk} \\ \end{matrix} \right] T=⎣⎢⎢⎢⎡t11t21⋮tm1t12t22⋮t12⋯⋯⋯t1kt2k⋮tmk⎦⎥⎥⎥⎤
总共有k列,每个列向量tlt_ltl对应一个话题,每一行的元素tilt_{il}til代表单词wiw_iwi在话题tlt_ltl中的权值。
文本在话题向量空间中的表示
现在考虑将文本djd_jdj在单词向量空间的向量投影到话题向量空间,用话题向量空间中的向量yjy_jyj表示,yjy_jyj是个k维的列向量,表达式为:
yj=[y1jy2j⋮ykj],j=1,2,...,ny_j =\left[ \begin{matrix} &y_{1j} \\ &y_{2j} \\ &\vdots \\ &y_{kj} \\ \end{matrix} \right],j=1,2,...,n yj=⎣⎢⎢⎢⎡y1jy2j⋮ykj⎦⎥⎥⎥⎤,j=1,2,...,n
元素yljy_{lj}ylj表示文本djd_jdj在话题tlt_ltl的权重,权重越大,说明该话题的重要程度越高。
由n个文本在话题向量空间向量yjy_{j}yj构成的矩阵,称之为话题—文本矩阵:
Y=[y11y12⋯y1ny21y22⋯y2n⋮⋮⋮yk1yk2⋯ykn]Y=\left[ \begin{matrix} &y_{11} &y_{12} &\cdots &y_{1n} \\ &y_{21} &y_{22} &\cdots &y_{2n} \\ &\vdots &\vdots & &\vdots \\ &y_{k1} &y_{k2} &\cdots &y_{kn} \\ \end{matrix} \right] Y=⎣⎢⎢⎢⎡y11y21⋮yk1y12y22⋮yk2⋯⋯⋯y1ny2n⋮ykn⎦⎥⎥⎥⎤
每个列向量对应一个文本,每一行对应话题tlt_ltl ,元素yljy_{lj}ylj代表文本djd_jdj 在话题tlt_ltl中出现的权值。也可以记作Y=[y1y2⋅⋅⋅yn]Y=[y_1 \;\; y_2 \;\; ··· \;\; y_n]Y=[y1y2⋅⋅⋅yn]。
从单词向量空间到话题向量空间的线性变换
潜在语义分析的思想,就是单词向量空间变换到话题向量空间,通过矩阵的因子分解,将单词—文本矩阵X近似的用单词—话题矩阵TTT 与话题—文本矩阵YYY 的乘积表示,即:
X≈TYX \approx TY X≈TY
如下图所示:
在原始的单词向量空间中,两个文本did_idi与djd_jdj的相似度可以由对应的向量的内积表示,即di⋅djd_i \cdot d_jdi⋅dj。经过潜在语义分析之后,在话题向量空间中,两个文本d1d_1d1与d2d_2d2的相似度可以由对应的向量的内积即yi⋅yjy_i \cdot y_jyi⋅yj表示。简单来说就是从文本单词的相似度的计算,转换为文本主题的相似度的计算。
潜在语义分析算法
矩阵奇异值(SVD)分解算法
给定文本集合D={d1,d2,⋯,dn}D=\{d_1, d_2,\cdots,d_n\}D={d1,d2,⋯,dn},单词集合W={w1,w2,⋯,wm}W=\{w_1,w_2,\cdots,w_m\}W={w1,w2,⋯,wm},则单词-文本矩阵Xm×nX_{m\times n}Xm×n:
X=[x11x12⋯x1nx21x22⋯x2n⋮⋮⋮xm1xm2⋯xmn]X=\left[ \begin{matrix} &x_{11} &x_{12} &\cdots &x_{1n} \\ &x_{21} &x_{22} &\cdots &x_{2n} \\ &\vdots &\vdots & &\vdots\\ &x_{m1} &x_{m2} &\cdots &x_{mn} \\ \end{matrix} \right] X=⎣⎢⎢⎢⎡x11x21⋮xm1x12x22⋮xm2⋯⋯⋯x1nx2n⋮xmn⎦⎥⎥⎥⎤
潜在语义分析根据确定的话题个数k对单词-文本矩阵进行截断奇异值分解:
X≈UkΣkVkT=[u1u2⋯uk][σ10000σ20000⋱0000σk][v1Tv2T⋮vkT]X\thickapprox U_k{\Sigma_k}V_k^\mathrm{T} \bf =\left[ \begin{matrix} u_1 &u_2 &\cdots &u_k \end{matrix} \right] \left[ \begin{matrix} \sigma_1 &0 &0 &0\\ 0 &\sigma_2 &0 &0 \\ 0 &0 &\ddots &0\\ 0 &0 &0 &\sigma_k \end{matrix} \right] \left[ \begin{matrix} v_1^\mathrm{T}\\ v_2^\mathrm{T}\\ \vdots\\ v_k^\mathrm{T} \end{matrix} \right] X≈UkΣkVkT=[u1u2⋯uk]⎣⎢⎢⎡σ10000σ20000⋱0000σk⎦⎥⎥⎤⎣⎢⎢⎢⎡v1Tv2T⋮vkT⎦⎥⎥⎥⎤
这中间k≤n≤mk\le n \le mk≤n≤m 这里假设了文档数量要比单词数量少。
其中:
(1) UkU_kUk是 m×km\times km×k 矩阵,由X的前kkk个相互正交的左奇异向量组成,UkU_kUk 每一列ulu_lul表示一个话题,kkk个话题张成一个子空间,称为话题向量空间:
Uk=[u1u2⋯uk]U_k=\left[\begin{matrix}u_1&u_2&\cdots&u_k\end{matrix}\right] Uk=[u1u2⋯uk]
(2)Σk\Sigma_kΣk是kkk阶方阵,由X的前kkk个最大奇异值组成;
(3)VkV_kVk是n×kn\times kn×k矩阵,由X的前kkk个相互正交的右奇异向量组成。
ΣkVkT{\Sigma_k}V_k^\mathrm{T}ΣkVkT两个矩阵的乘积,则对应了话题-文本矩阵(文本在话题空间的向量表示)。所以,矩阵XXX 的第jjj列向量xjx_jxj 满足:
xj≈Uk(ΣkVkT)j=[u1u2⋯uk][σ1vj1σ2vj2⋮σkvjk]=∑l=1kσlvjlul,j=1,2,⋯,n\begin{aligned} x_j&\thickapprox U_k(\Sigma_k V_k^\mathrm{T})_j\\ &= \left[ \begin{matrix} u_1& u_2& \cdots& u_k \end{matrix} \right] \left[ \begin{matrix} \sigma_1v_{j1}\\ \sigma_2v_{j2}\\ \vdots\\ \sigma_kv_{jk} \end{matrix} \right] \\ &=\sum_{l=1}^k\sigma_lv_{jl}u_l,j=1,2,\cdots,n \end{aligned} xj≈Uk(ΣkVkT)j=[u1u2⋯uk]⎣⎢⎢⎢⎡σ1vj1σ2vj2⋮σkvjk⎦⎥⎥⎥⎤=l=1∑kσlvjlul,j=1,2,⋯,n
式中:(ΣkVkT)j(\Sigma_k V_k^\mathrm{T})_j(ΣkVkT)j 是矩阵(ΣkVkT)(\Sigma_k V_k^\mathrm{T})(ΣkVkT) 的第jjj 列向量。矩阵(ΣkVkT)j(\Sigma_k V_k^\mathrm{T})_j(ΣkVkT)j的每一个列向量:
[σ1v11σ2v12⋮σkv1k],[σ1v21σ2v22⋮σkv2k],…,[σ1vn1σ2vn2⋮σkvnk]\left[ \begin{matrix} \sigma_1v_{11}\\ \sigma_2v_{12}\\ \vdots\\ \sigma_kv_{1k} \end{matrix} \right] , \left[ \begin{matrix} \sigma_1v_{21}\\ \sigma_2v_{22}\\ \vdots\\ \sigma_kv_{2k} \end{matrix} \right], \ldots, \left[ \begin{matrix} \sigma_1v_{n1}\\ \sigma_2v_{n2}\\ \vdots\\ \sigma_kv_{nk} \end{matrix} \right] ⎣⎢⎢⎢⎡σ1v11σ2v12⋮σkv1k⎦⎥⎥⎥⎤,⎣⎢⎢⎢⎡σ1v21σ2v22⋮σkv2k⎦⎥⎥⎥⎤,…,⎣⎢⎢⎢⎡σ1vn1σ2vn2⋮σkvnk⎦⎥⎥⎥⎤
是n个文本在话题向量空间的表示。
所以,通过矩阵的SVD分解进行潜在语义分析:
X≈UkΣkVkT=Uk(ΣkVkT)X\approx U_k{\Sigma_k}V_k^\mathrm{T} =U_k({\Sigma_k}V_k^\mathrm{T}) X≈UkΣkVkT=Uk(ΣkVkT)
从而得到了话题空间UkU_kUk,以及文本在话题空间的表示(ΣkVkT)({\Sigma_k}V_k^\mathrm{T})(ΣkVkT) 。
非负矩阵(NMF)分解算法
除了可以使用SVD分解,还可以使用非负矩阵分解算法。
基本思想
对单词—文本矩阵进行非负矩阵分解,将其左矩阵作为话题向量空间,将其右矩阵作为文本在话题向量空间的表示。
设单词—文本矩阵是 m×nm\times nm×n的非负矩阵XXX,文本集合包含kkk个话题,对XXX进行非负矩阵分解。即求m×km\times km×k的非负矩阵和k×nk\times nk×n的非负矩阵满足
X≈WHX\thickapprox WH X≈WH
其中: W=[w1w2⋯wk]W=\left[\begin{matrix}w_1& w_2& \cdots& w_k\end{matrix}\right]W=[w1w2⋯wk]表示话题向量空间,w1,w2,⋯,wkw_1, w_2, \cdots, w_kw1,w2,⋯,wk表示文本集合的kkk个话题。
H=[h1h2⋯hk]H=\left[\begin{matrix}h_1& h_2& \cdots& h_k\end{matrix}\right]H=[h1h2⋯hk]表示文本在话题向量空间的表示,h1,h2,⋯,hkh_1, h_2, \cdots, h_kh1,h2,⋯,hk表示文本集合的nnn个文本。
损失函数
使用迭代的方法进行学习,则可以使用的损失函数有:
(1)平方损失
目标函数:
minW,H∣∣X−WH∣∣2s.t.W,H≥0\min\limits_{W,H}||X - WH||^2 \\ s.t. \quad W,H \ge 0 W,Hmin∣∣X−WH∣∣2s.t.W,H≥0
(2)散度损失函数
首先看看散度的定义:
D(A∣∣B)=∑i,j(aijlogaijbij−aij+bij)D(A||B) = \sum_{i,j} \left(a_{ij}\log\frac{a_{ij}}{b_{ij}} - a_{ij} + b_{ij}\right) D(A∣∣B)=i,j∑(aijlogbijaij−aij+bij)
称为非负矩阵A和B的散度损失函数。其下界时0,当且仅当A=B时达到下届。
当∑ijaij=∑ijbij=1\sum_{ij}a_{ij} = \sum_{ij}b_{ij}=1∑ijaij=∑ijbij=1 时,散度损失函数退化为KL散度或相对熵。
所以右散度损失函数为:
minW,HD(X∣∣WH)s.t.W,H≥0\min \limits_{W,H} D\left(X||WH\right) \\ s.t. \quad W,H \ge 0 W,HminD(X∣∣WH)s.t.W,H≥0
迭代学习算法
(1)平方损失函数更新法则
J(W,H)=12∥X−WH∥2=12∑i,j[Xij−(WH)ij]2J(W,H)=\frac{1}{2}\|X-WH\|^2=\frac{1}{2}\sum_{i,j}[X_{ij}-(WH)_{ij}]^2 J(W,H)=21∥X−WH∥2=21i,j∑[Xij−(WH)ij]2
采用梯度下降法求解,这里用到了矩阵求导
∂J(W,H)∂Wil=−∑j[Xij−(WH)ij]Hlj=−[(XHT)il−(WHHT)il]∂J(W,H)∂Hlj=−[(WTX)lj−(WTWH)lj]\begin{aligned} \frac{\partial J(W,H)}{\partial W_{il}}&=-\sum_j[X_{ij}-(WH)_{ij}]H_{lj}=-[(XH^\mathrm{T})_{il}-(WHH^\mathrm{T})_{il}]\\ \frac{\partial J(W,H)}{\partial H_{lj}}&=-[(W^\mathrm{T}X)_{lj}-(W^\mathrm{T}WH)_{lj}] \end{aligned} ∂Wil∂J(W,H)∂Hlj∂J(W,H)=−j∑[Xij−(WH)ij]Hlj=−[(XHT)il−(WHHT)il]=−[(WTX)lj−(WTWH)lj]
根据更新规则有
Wil=Wil+λil[(XHT)il−(WHHT)il]Hlj=Hlj+μlj[(WTX)lj−(WTWH)lj]λil=Wil(WHHT)ilμlj=Hlj(WTWH)ljW_{il}=W_{il}+\lambda_{il}[(XH^\mathrm{T})_{il}-(WHH^\mathrm{T})_{il}]\\ H_{lj}=H_{lj}+\mu_{lj}[(W^\mathrm{T}X)_{lj}-(W^\mathrm{T}WH)_{lj}]\\ \lambda_{il}=\frac{W_{il}}{(WHH^\mathrm{T})_{il}}\\ \mu_{lj}=\frac{H_{lj}}{(W^\mathrm{T}WH)_{lj}} Wil=Wil+λil[(XHT)il−(WHHT)il]Hlj=Hlj+μlj[(WTX)lj−(WTWH)lj]λil=(WHHT)ilWilμlj=(WTWH)ljHlj
得到最终的乘法更新法则:
Hlj←Hlj(WTX)lj(WTWH)ljWil←Wil(XHT)il(WHHT)ilH_{lj}\leftarrow H_{lj}\frac{(W^\mathrm{T}X)_{lj}}{(W^\mathrm{T}WH)_{lj}}\\ W_{il}\leftarrow W_{il}\frac{(XH^\mathrm{T})_{il}}{(WHH^\mathrm{T})_{il}} Hlj←Hlj(WTWH)lj(WTX)ljWil←Wil(WHHT)il(XHT)il
(2)散度损失函数的更新法则
散度乘法更新法则如下:
Hlj←Hlj∑i[WilXij/(WH)ij]∑iWilWil←Wil∑j[HljXij/(WH)ij]∑jHljH_{lj}\leftarrow H_{lj}\frac{\sum\limits_i[W_{il}X_{ij}/(WH)_{ij}]}{\sum\limits_iW_{il}}\\ W_{il}\leftarrow W_{il}\frac{\sum\limits_j[H_{lj}X_{ij}/(WH)_{ij}]}{\sum\limits_jH_{lj}} Hlj←Hlji∑Wili∑[WilXij/(WH)ij]Wil←Wilj∑Hljj∑[HljXij/(WH)ij]
算法实现
具体算法如下:
输入:单词-文本矩阵X≥0X\ge 0X≥0,文本集合的话题个数kkk,最大迭代次数ttt;
输出:话题矩阵WWW,文本表示矩阵HHH
- 初始化
W≥0W\ge 0W≥0,并对WWW的每一列数据归一化
H≥0H\ge 0H≥0- 迭代
对迭代次数从111到ttt执行下列步骤:
a. 更新WWW的元素,每次迭代对WWW的列向量归一化,使基向量为单位向量。
b. 更新HHH的元素。
参考文章:
《统计学习方法 第二版》
潜在语义分析(LSA)相关知识相关推荐
- 概率潜在语义分析(pLSA) 相关知识
文章目录 生成模型 共现模型 模型性质 共现模型表示 PLSA算法 概率潜在语义分析(PLSA)是一种利用概率生成模型对文本集合进行话题分析的无监督方法. PLSA 模型假设每个文本由一个话题分布决定 ...
- 潜在语义分析 (LSA),概率潜在语义分析 (PLSA)
目录 潜在语义分析 (latent semantic analysis, LSA) 单词向量空间与话题向量空间 单词向量空间 (word vector space) 话题向量空间 (topic vec ...
- SVD分解——潜在语义分析LSA(I)——概率性潜在语义分析PLSA(I)
SVD分解 正交矩阵:若一个方阵其行与列皆为正交的单位向量,则该矩阵为正交矩阵,且该矩阵的转置和其逆相等.两个向量正交的意思是两个向量的内积为 0. 正定矩阵:如果对于所有的非零实系数向量 z z z ...
- 电信保温杯笔记——《统计学习方法(第二版)——李航》第17章 潜在语义分析
电信保温杯笔记--<统计学习方法(第二版)--李航>第17章 潜在语义分析 论文 介绍 单词向量空间 话题向量空间 话题向量空间 文本在话题向量空间的表示 从单词向量空间到话题向量空间的线 ...
- 潜在语义分析(LSA)
潜在语义分析(LSA) 潜在语义分析LSA(Latent Semantic Analysis )也叫作潜在语义索引LSI( Latent Semantic Indexing )顾名思义是通过分析文 ...
- 【译】潜在语义分析Latent Semantic Analysis (LSA)
目录 目录 概述 Tutorial LSA的工作原理 How Latent Semantic Analysis Works 实例A Small Example Part 1 - Creating th ...
- SVD(奇异值分解)与LSA(潜在语义分析)
特征值与特征向量 在讲解SVD(奇异值分解)之前,首先回顾一下线性代数中的特征值分解,对于一个 n ∗ n n*n n∗n的矩阵 A A A,存在实数 λ 和 n 维向量 x \lambda和n维向量 ...
- 潜在语义分析(Latent Semantic Analysis)
潜在语义分析(Latent Semantic Analysis) 潜在语义分析(Latent Semantic Analysis, LSA)是自然语言处理中的一种方法或技术.潜在语义分析(LSA)的主 ...
- 【词的分布式表示】点互信息PMI和基于SVD的潜在语义分析
学习心得 (1)为了解决高频词误导计算机结果的问题(如"我"."."与其他词的共现频次很高,以至于有些木有关系的词语之间也会产生联系,即相似度)--用PMI ( ...
最新文章
- 码code | 巧用2种方法,打破20条云开发数据库限制
- IREP_SOA Integration程序注释语法Annotations(概念)
- Java回顾之多线程同步
- 如何让 Spring Boot 启动的更快?
- 20 CO配置-控制-产品成本控制-产品成本计划编制-定义成本核算变式
- 软考信息安全工程师学习笔记三(1.3 信息安全管理基础)
- 前端—每天5道面试题(4)
- python3 windows console 输出乱码问题
- 时间序列的归一化方法
- DSA数字签名含C语言实例
- 流体力学有限元法(一)
- 【民大Linux课件】Linux的基础操作1
- BZOJ2434【NOI2011】阿狸的打字机 AC自动机+Fail树+树状数组
- 深度学习之卷积神经网络
- 内蒙古自治区鄂尔多斯市谷歌高清卫星地图下载
- 一维数组的定义以及使用
- 安卓刷量技术揭秘(一) 工具篇
- 第一章:第1章 CRM核心业务介绍--概述,crm架构,公司组织结构,软件开发的生命周期,crm项目的核心业务介绍。...
- Oracle一条资源消耗较高但是Executions=0的问题排查...
- nyoj82(迷宫寻宝)
热门文章
- xfce开始菜单增加一个新的图标
- octave绘制图片Figure后无法关闭
- 三星note4 9100自动关机问题以及空间不够的问题研究。。。。
- notes from《classification and regression trees》
- 07_QueueWithTwoStacks
- 竞价点击软件_百度的关键词竞价广告:百度竞价广告关键词怎么设置?28法则是什么?...
- mysql sql字符串连接函数_Mysql字符串连接函数 CONCAT()与 CONCAT_WS()
- Log4cpp介绍及使用
- MySQL 5.6 Threadpool(优先队列)介绍及性能测试【转】
- 浅谈提升C#正则表达式效率