让机器读懂文章: pLSA模型推导及实现

2024-09-03 18:38

本文主要是介绍让机器读懂文章: pLSA模型推导及实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

让机器读懂文章: pLSA模型推导及实现

    • 概述
    • pLSA模型
    • pLSA的EM算法推导
    • pLSA的实现
    • 总结
    • 参考文献

概述

人类读懂文章是一个很自然的行为,当我们读完一篇《背影》的时候,我们就可以知道这篇文章在写些什么,也就是我们说获得了这篇文章的相关知识。有了这些知识,我们就可以回答一些问题,例如:

  1. 问:这篇文章写的主要内容是什么呢?
    答: 亲情、送别
  2. 问:有类似《背影》这样的文章可以推荐的吗?
    答:龙应台-《送别》

虽然上面的问答对任务对人类来说十分简单,但对于机器来说却并不容易。机器对自然语言(中文文本)的理解实际上并不是非常简单的事情,因为自然语言本身是一个高层抽象的概念,而机器只擅长处理量化的知识,例如说让机器记住向量 x ⃗ = [ 1 , 2 , 3 ] \vec x=[1, 2, 3] x =[1,2,3] y ⃗ = [ 4 , 5 , 6 ] \vec y=[4, 5, 6] y =[4,5,6]是十分容易的事情,而且可以轻易知道 x ⃗ \vec x x y ⃗ \vec y y 的相似程度,这只需要计算其记录即可,于是我们对于向量来说就可以完成上面的问题2了。

让我们重新揣摩一下人类读懂文章的过程,实际上我们并不需要背熟每一个字词,而是阅读完成之后再总结出这篇文章主要在写什么,也就是文章的主题。为了让机器能理解文章,我们也需要把这些主题量化出来,形成类似 t o p i c → = [ ′ 亲 情 ′ : 0.5 , ′ 送 别 ′ : 0.5 ] \overrightarrow {topic}=['亲情': 0.5, '送别': 0.5] topic =[:0.5,:0.5]的向量,这种能量化文章主题的模型,也就叫做主题模型了。

在主题模型方面前人们已经做了很多工作,并且取得了非常不错的成效,其中影响较大的是一类模型叫做隐语义模型,而这类模型里面概率隐语义分析也就是本文所述的pLSA则是应用最成功的模型之一,同样成功的模型还有隐含狄利克雷分布,也就是大名鼎鼎的LDA主题模型,不过LDA与pLSA的思想一脉相承,只不过做了贝叶斯改造而已。

pLSA模型

事实上pLSA是在对我们写一篇文章的行为建模,我们先揣摩朱自清先生写《背影》的行为。首先我朱先生敲定了今天要写一篇《背影》,然后他开始构思了这篇文章的主题为:亲情、送别,并且朱先生认为这两部分的内容都几乎同等重要,也就是: [ ′ 亲 情 ′ : 0.5 , ′ 送 别 ′ : 0.5 ] ['亲情': 0.5, '送别': 0.5] [:0.5,:0.5],朱先生开始动笔,于是当朱先生写下

我买几个橘子去,你就在此地,不要走动。

实际上是朱先生先前构思好的亲情、父子、送别这三个中心思想在影响着朱先生写下了这段话。于是在这三个中心思想的影响下,朱先生写完了《背影》里面的所有词,而我们读者所谓的理解《背影》,实际上就是从我们看到的《背影》的所有词,推断出了朱先生构思的主题: [ ′ 亲 情 ′ : 0.5 , ′ 送 别 ′ : 0.5 ] ['亲情': 0.5, '送别': 0.5] [:0.5,:0.5]。而pLSA则只是用数学化的形式描述这个过程, 这样一个形式化的过程在pLSA的眼里是这样的:

  1. 从分布 p ( d m ) p(d_m) p(dm)上采样选择了一篇文章 d m d_m dm
  2. 对于文章 d m d_m dm每一个词,从分布 p ( z k ∣ d m ) p(z_k|d_m) p(zkdm)上采样一个生成一个主题 z k z_k zk
  3. 从分布 p ( w n ∣ z k ) p(w_n|z_k) p(wnzk)上采样生成了一个词 w n w_n wn

这个模型可以用plate notation更加简洁地描述:

pLSA模型
图中的阴影部分的变量 d d d w w w对应着文章和文章的所有词,表示可观测的变量, z z z是观测不到的主题,我们称之为隐变量,两个框框左下角的 N N N M M M则分别表示 N N N M M M词独立重复试验。这个图所表达的文章生成过程跟上面的文字表述是一致的。

这样写文章的模型是符合直觉的,但仔细推敲总觉得过于机械生硬,这样的机械式过程能写得出朱先生《背影》那样优秀的文章吗?

如果无限多个猴子任意敲打打字机键,最终会写出大英博物馆的所有藏书 – 爱丁顿无限猴子理论

一件小概率的事件在多次试验中必然发生,这就是为什么随机敲打键盘的猴子也能作的原因,于是上面问题答案自然是肯定的,pLSA这样合乎直觉的模型当然要比一只茫无目的敲打键盘的猴子更加具备写作天赋。

我们读者需要阅读根据文章和文章的所有内容去推断文章的主题,而pLSA眼里则是根据可观测变量 w w w和可观测变量 d d d去推断隐变量 z z z。我们可以通过海量的文章去解算出模型中的参数,也就是上文中的 p ( z k ∣ p m ) p(z_k|p_m) p(zkpm) p ( w n ∣ z k ) p(w_n|z_k) p(wnzk)两个分布,我们称之为文章主题分布主题词分布。 而 p ( z k ∣ d m ) p(z_k|d_m) p(zkdm)这个分布实际上就是文章 d m d_m dm的主题分布,也就是我们前文所说的 [ ′ 亲 情 ′ : 0.5 , ′ 送 别 ′ : 0.5 ] ['亲情': 0.5, '送别': 0.5] [:0.5,:0.5]这样的文章主题,这个分布就是我们就获取到关于文章的知识,它量化说明了文章 d m d_m dm在说什么内容。至于模型参数解算的过程,这没什么不可以理解的,正如我定义了一个 y y y的产生过程过 y = a x + b y=ax+b y=ax+b, 当我拿到足够多的样本 y 0 = 0 , y 1 = 1 , y 2 = 2 , . . . . y n = n y_0=0, y_1=1, y_2=2,....y_n=n y0=0,y1=1,y2=2,....yn=n之后,实际上我可以将他们组成方程组解出合理的参数 a a a b b b x x x来。

行文至此,我们且对pLSA的求解按下不表,先来实际感受一下pLSA的作用。这里选择格林童话中的十几篇童话作为语料训练pLSA,然后分别从5个主题分布中取出的top3词语:

topic-1topic-2topic-3topic-4topic-5
wrongbirdsmorningsoldiergood
issuefoxmetkinggave
faithhorsewoodcastlegreat

可以看到pLSA是可以正确推导出来主题分布的。

pLSA的EM算法推导

pLSA是一种含隐变量的生成模型,也就是概率化地描述了样本数据(文章)的生成并且包含隐藏变量的模型,对于这种模型可用MCMC或EM算法来求解。本文讲解的是pLSA的EM算法求解,这里并不打算讲解EM的具体推导,而是直接利用EM算法的结论来对pLSA模型求解,关于EM算法的内容读者可以自己网上搜罗一下资料,或者待我抽空再写一篇关于EM算法的文章。
在开始推导之前,我们先假设词库大小为 j j j, 每篇文章都由词库中的词 w j w_j wj构成。然后定义模型参数:
(1) θ m k = p ( z k ∣ d m ) ψ k j = p ( w j ∣ z k ) \begin{aligned} \theta_{mk}=p(z_k|d_m) \\ \psi_{kj} = p(w_j|z_k) \end{aligned} \tag{1} θmk=p(zkdm)ψkj=p(wjzk)(1)
根据EM算法的求解步骤,我们先根据plate notation写出联合分布:
(2) p ( w , z , d ) = ∏ m p ( d m ) ∏ n p ( w m n ∣ z m n ) p ( z m n ∣ d m ) p(\bm w, \bm z, \bm d) = \prod_m p(d_m) \prod_n p(w_{mn}|z_{mn})p(z_{mn}|d_m) \tag{2} p(w,z,d)=mp(dm)np(wmnzmn)p(zmndm)(2)
其中 d m d_m dm表示第 m m m篇文章, w m n w_{mn} wmn表示第 m m m篇文章中的第 n n n个词, z m n z_{mn} zmn表示第 m m m篇文章中第 n n n个词对应的主题。然后我们令给定模型参数下的主题后验证分布为:
(3) Q ( z ; θ , ψ ) = p ( z ∣ d , w ; θ , ψ ) Q(\bm z; \bm \theta, \bm \psi) = p(\bm z|\bm d, \bm w; \bm \theta, \bm \psi) \tag{3} Q(z;θ,ψ)=p(zd,w;θ,ψ)(3)
于是可以启动EM算法当中的求期望步骤:
(4) ∑ z Q ( z ) l n p ( w , z , w ) = ∑ m l n p ( d m ) ∑ n ∑ k q ( z m n k ) l n [ p ( w m n ∣ z k ) p ( z k ∣ d m ) ] \sum_{\bm z} {Q(\bm z)lnp(\bm w, \bm z, \bm w)} = \sum_mlnp(d_m) \sum_n \sum_kq(z_{mnk})ln[p(w_{mn}|z_k)p(z_k|d_m)] \tag{4} zQ(z)lnp(w,z,w)=mlnp(dm)nkq(zmnk)ln[p(wmnzk)p(zkdm)](4)
其中 q ( z m n k ) q(z_{mnk}) q(zmnk)表示在给定参数下的主题验分布,这里有:
(5) q ( z m n k ) = p ( z k ∣ d m , w n ; θ m k , ψ k j ) = p ( d m ) θ m k ψ k n ∑ k p ( d m ) θ m k ψ k n q(z_{mnk}) = p(z_k|d_m, w_n; \theta_{mk}, \psi_{kj}) = \frac {p(d_m)\theta_{mk}\psi_{kn}}{\sum_kp(d_m)\theta_{mk}\psi_{kn}} \tag{5} q(zmnk)=p(zkdm,wn;θmk,ψkj)=kp(dm)θmkψknp(dm)θmkψkn(5)

由于文章中总会出现许多重复词,例如文章 d m d_m dm中第1个词和第 5 5 5个词是一样的,那么就会有 w m 1 = w m 5 = w j w_{m1}=w_{m5}=w_j wm1=wm5=wj那么对于式子 ( 4 ) (4) (4) ∑ n ∑ k q ( z m n k ) l n [ p ( w m n ∣ z k ) p ( z k ∣ d m ) ] \sum_n \sum_kq(z_{mnk})ln[p(w_{mn}|z_k)p(z_k|d_m)] nkq(zmnk)ln[p(wmnzk)p(zkdm)]这部分,我们可以将文章 d m d_m dm中重复出现的词对应的项合并成为 ∑ j n m j ∑ k q ( z m j k ) l n [ p ( w j ∣ z k ) p ( z k ∣ d m ) ] \sum_j n_{mj}\sum_kq(z_{mjk})ln[p(w_j|z_k)p(z_k|d_m)] jnmjkq(zmjk)ln[p(wjzk)p(zkdm)], 其中 n m j n_{mj} nmj为文章 d m d_m dm中词 w j w_j wj出现的次数。于是我们重写式子 ( 4 ) (4) (4)为:
(6) ∑ z Q ( z ) l n p ( w , z , w ) = ∑ m l n p ( d m ) ∑ j n m j ∑ k q ( z m j k ) l n ( θ m k ψ k j ) \sum_{\bm z} {Q(\bm z)lnp(\bm w, \bm z, \bm w)} = \sum_mlnp(d_m) \sum_j n_{mj}\sum_kq(z_{mjk})ln(\theta_{mk}\psi_{kj}) \tag{6} zQ(z)lnp(w,z,w)=mlnp(dm)jnmjkq(zmjk)ln(θmkψkj)(6)
我们的目标是最大化式子 ( 6 ) (6) (6), 并且因为参数 θ \bm \theta θ ψ \bm \psi ψ是概率分布,所以有要约束 ∑ k θ k m = 1 \sum_k\theta_{km}=1 kθkm=1 ∑ j ψ k j = 1 \sum_j{\psi_{kj}} = 1 jψkj=1, 并且由于 p ( d m ) p(d_m) p(dm)这个先验证分布可以设置为常数,这样我们去除与优化无关的常数项和增加了约束之后,就可以得到整个带约束的优化目标:

(7) max ⁡ θ m k , ψ k j ∑ m ∑ j n m j ∑ k q ( z m j k ) l n ( θ m k ψ k j ) s . t . ∑ k θ m k = 1 , m = 1 , 2 , 3 , . . . , M ∑ j ψ k j = 1 , k = 1 , 2 , 3 , . . . , K \begin{aligned} \max \limits_{\theta_{mk}, \psi_{kj}} \quad & \sum_m \sum_j n_{mj}\sum_kq(z_{mjk})ln(\theta_{mk}\psi_{kj}) \\ \bm{s.t.} \quad & \sum_{k}\theta_{mk}=1, m=1,2,3,...,M \\ & \sum_{j} \psi_{kj} = 1, k=1,2,3,...,K \end{aligned} \tag{7} θmk,ψkjmaxs.t.mjnmjkq(zmjk)ln(θmkψkj)kθmk=1,m=1,2,3,...,Mjψkj=1,k=1,2,3,...,K(7)

这个带约束的优化目标直接使用拉格朗日乘子法:
(8) L ( θ , ψ , λ , α ) = ∑ m ∑ j n m j ∑ k q ( z m j k ) l n ( θ m k ψ k j ) + ∑ m λ m ( 1 − ∑ k θ m k ) + ∑ k α k ( 1 − ∑ j ψ k j ) L(\bm \theta, \bm \psi, \bm \lambda, \bm \alpha) = \sum_m \sum_j n_{mj} \sum_k q(z_{mjk})ln(\theta_{mk}\psi_{kj}) + \sum_m {\lambda_m} (1-\sum_k\theta_{mk}) + \sum_k \alpha_{k} (1-\sum_j {\psi_{kj}}) \tag{8} L(θ,ψ,λ,α)=mjnmjkq(zmjk)ln(θmkψkj)+mλm(1kθmk)+kαk(1jψkj)(8)
于是可以对参数 θ m k \theta_{mk} θmk求导并令其为0:
(9) ∂ L ( θ , ψ , λ , α ) ∂ θ m k = ∑ j n m j q ( z m j k ) θ m k − λ m = 0 λ m θ m k = ∑ j n m j q ( z m j k ) \frac{ \partial L(\bm \theta, \bm \psi, \bm \lambda, \bm \alpha)}{\partial \theta_{mk}} = \frac{ \sum_jn_{mj}q(z_{mjk})}{\theta_{mk}} - \lambda_m = 0 \\ \lambda_m \theta_{mk} ={ \sum_jn_{mj}q(z_{mjk})} \tag{9} θmkL(θ,ψ,λ,α)=θmkjnmjq(zmjk)λm=0λmθmk=jnmjq(zmjk)(9)
式子(9)左右两边对 k k k求和得到:
(10) λ m ∑ k θ m k = ∑ j n m j ∑ z q ( z m j k ) λ m = ∑ j n m j = N m \lambda_m \sum_k \theta_{mk} = \sum_j{n_{mj}} \sum_{z}q(z_{mjk}) \\ \lambda_m = \sum_j {n_{mj}} = N_m \tag{10} λmkθmk=jnmjzq(zmjk)λm=jnmj=Nm(10)
上述式子(10)中 N m N_m Nm表示文章 d m d_m dm的总词数,将式子 ( 10 ) (10) (10)代回式(9)可以得到:
(11) θ m k = ∑ j n m j q ( z m j k ) N m \theta_{mk} = \frac {\sum_j n_{mj}q(z_{mjk})}{N_m} \tag{11} θmk=Nmjnmjq(zmjk)(11)
同样地我们对参数 ψ k j \psi_{kj} ψkj故技重施:
(12) ∂ L ( θ , ψ , λ , α ) ∂ ψ k j = ∑ m n m j q ( z m j k ) ψ k j − α k = 0 α k ψ k j = ∑ m n m j q ( z m j k ) \frac {\partial L(\bm \theta, \bm \psi,\bm \lambda, \bm \alpha)}{\partial \psi_{kj}} = \frac{\sum_m n_{mj}q(z_{mjk})}{\psi_{kj}} - \alpha_k = 0 \\ \alpha_k \psi_{kj} = \sum_m n_{mj}q(z_{mjk}) \tag{12} ψkjL(θ,ψ,λ,α)=ψkjmnmjq(zmjk)αk=0αkψkj=mnmjq(zmjk)(12)
式子(12)左右两边对 j j j求和得到:
(13) α k ∑ j ψ k j = ∑ m ∑ j n m j q ( z m j k ) α k = ∑ m ∑ j n m j q ( z m j k ) \alpha_k \sum_{j} \psi_{kj} = \sum_m \sum_j n_{mj} q(z_{mjk}) \\ \alpha_k = \sum_m \sum_j n_{mj} q(z_{mjk}) \tag{13} αkjψkj=mjnmjq(zmjk)αk=mjnmjq(zmjk)(13)
将式子代回 ( 12 ) (12) (12)得到:
(14) ψ k j = ∑ m n m j q ( z m j k ) ∑ m ∑ j n m j q ( z m j k ) \psi_{kj} = \frac { \sum_m n_{mj}q(z_{mjk})}{ \sum_m \sum_j n_{mj} q(z_{mjk})} \tag{14} ψkj=mjnmjq(zmjk)mnmjq(zmjk)(14)
至此,pLSA参数求解完毕。根据参数更新的规则,我们设在EM算法迭代运行的过程中,第 i i i轮的参数为 θ m k i \theta_{mk}^i θmki ψ k j i \psi_{kj}^i ψkji。于是整个pLSA的EM算法可以归纳为:

  1. 随机初始化参数 θ m k 0 \theta_{mk}^0 θmk0 ψ k j 0 \psi_{kj}^0 ψkj0
  2. 开始第 i ∈ [ 1 , 2 , 3... n ] i\in[1, 2, 3...n] i[1,2,3...n]轮迭代:
    a. 求 q ( z m j k ) = p ( d m ) θ m k i − 1 ψ k j i − 1 ∑ k p ( d m ) θ m k i − 1 ψ k j i − 1 q(z_{mjk})=\frac {p(d_m)\theta_{mk}^{i-1}\psi_{kj}^{i-1}}{\sum_kp(d_m)\theta_{mk}^{i-1}\psi_{kj}^{i-1}} q(zmjk)=kp(dm)θmki1ψkji1p(dm)θmki1ψkji1
    b. 更新参数
    θ m k i = ∑ j n m j q ( z m j k ) N m ψ k j i = ∑ m n m j q ( z m j k ) ∑ m ∑ j n m j q ( z m j k ) \theta_{mk}^i = \frac {\sum_j n_{mj}q(z_{mjk})}{N_m} \\ \psi_{kj}^i = \frac { \sum_m n_{mj}q(z_{mjk})}{ \sum_m \sum_j n_{mj} q(z_{mjk})} θmki=Nmjnmjq(zmjk)ψkji=mjnmjq(zmjk)mnmjq(zmjk)
    c. 若参数收敛,则退出迭代,否则返回a继续迭代
  3. 输出模型参数 θ \bm \theta θ ψ \bm \psi ψ

pLSA的实现

从上边的式子来看pLSA是相对比较容易实现的,但是高效地实现还需要一些技巧。首先看式(14)的分母,存在一个二阶求和的过程,如果语料库中有1000篇文档,10000个词,那么就要进行一千万次运算,这样显然必须要用并行批量计算的方式来加速,在实现上我们会将涉及的所有运算都转换为矩阵运算,这样就可以通过成熟的GPU库来加速运算。其次再看内存消耗问题, q ( z m j k ) q(z_{mjk}) q(zmjk)总共需要储存m*j*k个参数,如果有1000篇文档10000个词和50个主题,那么 q ( z m j k ) q(z_{mjk}) q(zmjk)将有5亿个元素,这在内存消耗上是不可接受的,在实现上我们只会在批量计算 θ m k \theta_{mk} θmk ψ k j \psi_{kj} ψkj参数时用到的部分 q ( z m j k ) q(z_{mjk}) q(zmjk)批量计算出来,并且一旦使用完毕立即丢弃。具体代码就不在这里贴了,完整的demo见pLSA实现

总结

pLSA是概率隐语义主题模型中相对简单的一种,推导和实现都相对简单,回头看上面的算法过程,实际上只需要简单地计数迭代而已,所以pLSA非常适合在线学习。其实并非pLSA有此特点,事实上大多数生成模型都一样适合在线学习。不过pLSA的缺点也是非常明显的,pLSA将文章建模时没有考虑文章词序,也就是我们随机将一篇文章词打散,对于pLSA来说,其联合概率 p ( w , z , d ) p(\bm w, \bm z, \bm d) p(w,z,d)是不变的,这一点回头看式子 ( 2 ) (2) (2)就知道。这意味着"谁是你爸爸"和"你爸爸是谁"这两句话在pLSA眼里看来是一样的,这种情况在短文本场景中尤其常见。但幸运的是,在长文本领域,有研表究明,汉字的序顺并不能影阅响读。不过pLSA近年来正在逐渐被更新颖复杂的LDA代替,但相对LDA来说pLSA结构简单,容易做大规模并行化,所以时至今日,pLSA在大规模文本挖掘领域依旧光耀夺目。

最后,向Thomas Hofmann先生致敬,感谢先生为我们带来如此精妙的pLSA主题模型。

参考文献

[1] Probabilistic Latent Semantic Analysis
[2] Tutorial on Probablistic Latent Semantic Analysis

这篇关于让机器读懂文章: pLSA模型推导及实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1133727

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss