Implémentation de l'estimation la plus probable du modèle de sujet en python. En tant que manuel [Topic model](https://www.amazon.co.jp/ Topic model-Machine learning professional series-Iwata-Guji / dp / 4061529048 / ref = sr_1_2? Ie = UTF8 & qid = 1501997285 & sr = 8-2 & keywords = Modèle de sujet) a été utilisé.
Structure de cet article
Le modèle de rubrique suppose qu'un document comporte plusieurs rubriques.
** Exemple ** Article sur "Délibération de projet de loi médicale" => Deux thèmes, "médical" et "politique" Article sur "Effets économiques des Jeux Olympiques" => Deux thèmes, "Sports" et "Economie"
Pour mieux exprimer l'hypothèse qu'un document comporte plusieurs sujets Définissez la distribution des rubriques $ \ boldsymbol \ theta_d = (\ theta_ {d1}, \ cdots, \ theta_ {dK}) $ pour chaque document. $ \ theta_ {dk} = p (k \ | \ \ boldsymbol \ theta_d) $ est la probabilité que le sujet $ k $ soit affecté à un mot du document $ d $. Le sujet $ z_ {dn} $ est assigné à chaque mot du document $ d $ selon la distribution de sujet $ \ boldsymbol \ theta_d $. Les mots sont générés selon la distribution des mots $ \ boldsymbol \ phi_ {z_ {dn}} $ du sujet assigné. $ \ boldsymbol \ phi_k = (\ phi_ {k1}, \ cdots, \ phi_ {kV}) $ représente la probabilité que le sujet $ k $ génère le vocabulaire $ v $.
La figure ci-dessous montre le processus de génération d'un ensemble spécifique de documents.
Un thème est attribué à chaque mot et les mots sont générés à partir de la distribution des mots en fonction de ce thème. Au milieu de la figure, il y a une forte probabilité que les thèmes «sports» et «économie» soient attribués. De nombreux mots liés à ces deux sujets sont observés. En regardant la distribution des mots des sujets économiques, par ordre décroissant de probabilité de génération Il est aligné avec «économie», «cours des actions», «économie» et «yen fort».
La méthode d'estimation du modèle thématique le plus probable est appelée ** analyse probabiliste de la signification latente ** (** PLSA ). À propos, l'estimation bayésienne du modèle thématique est une méthode appelée ** modèle d'allocation de diricle latent ** ( LDA **).
PLSA utilise l'algorithme EM pour estimer le modèle de sujet le plus probable. Les paramètres suivants qui maximisent la probabilité du journal $ \ boldsymbol \ Theta = (\ boldsymbol \ theta_1, \ cdots, \ boldsymbol \ theta_D) $ et $ \ boldsymbol \ Phi = (\ boldsymbol \ phi_1, \ cdots, \ boldsymbol \ phi_K) Trouvez $.
\begin{align}
L &= \sum^D_{d = 1} \sum^{N_d}_{n = 1} \log \sum^K_{k = 1} \theta_{dk}\phi_{kw_{dn}} \\
&= \sum^D_{d = 1} \sum^{N_d}_{n = 1} \log \sum^K_{k = 1} q_{dnk} \frac{\theta_{dk}\phi_{kw_{dn}}}{q_{dnk}} \\
&\geq \sum^D_{d = 1} \sum^{N_d}_{n = 1} \sum^K_{k = 1} q_{dnk} \log \frac{\theta_{dk}\phi_{kw_{dn}}}{q_{dnk}} \\
&= \sum^D_{d = 1} \sum^{N_d}_{n = 1} \sum^K_{k = 1} q_{dnk} \log \theta_{dk}\phi_{kw_{dn}} - \sum^D_{d = 1} \sum^{N_d}_{n = 1} \sum^K_{k = 1} q_{dnk} \log q_{dnk} \equiv F \tag{1}
\end{align}
Utilisez l'algorithme EM pour maximiser la borne inférieure $ F $. Ci-dessous, nous allons développer la formule en la divisant en ** E étape ** et ** M étape **.
Ici, je vais trier les caractères utilisés une fois.
$ D $: Nombre de documents
$ N_d $: Nombre de mots contenus dans le document $ d $ (longueur du document)
$ V $: Nombre de types de mots (nombre de vocabulaire) apparaissant dans tous les documents
$ \ boldsymbol W $: Ensemble de documents
$ \ boldsymbol w_d $: Document $ d $
$ w_ {dn} $: $ n $ ème mot dans le document $ d $
$ K $: Nombre de sujets
$ \ theta_ {dk} $: Probabilité d'attribuer le sujet $ k $ dans le document $ d $
$ \ phi_ {kv} $: Probabilité que le sujet $ k $ génère du vocabulaire $ v $
$ q_ {dnk} $: Probabilité (taux de charge) que le sujet $ k $ soit affecté au $ n $ ème mot du document $ d $
E step
Pour utiliser la méthode du multiplicateur indéterminé de Lagrange, nous définissons $ F_q $ comme suit.
F_q \equiv \sum^D_{d = 1} \sum^{N_d}_{n = 1} \sum^K_{k = 1} q_{dnk} \log \theta_{dk}\phi_{kw_{dn}} - \sum^D_{d = 1} \sum^{N_d}_{n = 1} \sum^K_{k = 1} q_{dnk} \log q_{dnk} + \lambda \bigl(\sum^K_{k = 1} q_{dnk} - 1 \bigr) \tag{2}
Différenciez partiellement $ F_q $ avec $ q_ {dnk} $.
\frac{\partial F_q}{\partial q_{dnk}} = \log \theta_{dk}\phi_{kw_{dn}} - \log q_{dnk} - 1 + \lambda = 0 \tag{3}
De $ \ frac {\ partial F_q} {\ partial q_ {dnk}} = 0 $
q_{dnk} = \exp(\lambda - 1) \theta_{dk}\phi_{kw_{dn}} \tag{4}
De $ \ sum ^ K_ {k = 1} q_ {dnk} = 1 $
\begin{align}
& \sum^K_{k = 1} \exp(\lambda - 1) \theta_{dk}\phi_{kw_{dn}} = 1 \\
& \exp(\lambda - 1) = \frac{1}{\displaystyle \sum^K_{k = 1} \theta_{dk}\phi_{kw_{dn}}} \tag{5}
\end{align}
Remplacez l'équation (5) par l'équation (4) pour obtenir $ q_ {dnk} $.
q_{dnk} = \frac{\theta_{dk}\phi_{kw_{dn}}}{\displaystyle \sum^K_{k' = 1} \theta_{dk'}\phi_{k'w_{dn}}} \tag{6}
$ q_ {dnk} $ est appelé le facteur de charge et représente la probabilité que le sujet $ k $ soit attribué au $ n $ ème mot du document $ d $.
M step
A l'étape M, les paramètres $ \ boldsymbol \ Theta = (\ boldsymbol \ theta_1, \ cdots, \ theta_D) $ et $ \ boldsymbol \ Phi = (\ phi_1, \ cdots, \ phi_K) $ sont considérés séparément. Les deux utilisent la méthode du multiplicateur indéterminé de Lagrange comme dans l'étape E.
Pour utiliser la méthode du multiplicateur indéterminé de Lagrange, nous définissons $ F_ \ theta $ comme suit.
F_\theta \equiv \sum^D_{d = 1} \sum^{N_d}_{n = 1} \sum^K_{k = 1} q_{dnk} \log \theta_{dk}\phi_{kw_{dn}} - \sum^D_{d = 1} \sum^{N_d}_{n = 1} \sum^K_{k = 1} q_{dnk} \log q_{dnk} + \lambda \bigl(\sum^K_{k = 1} \theta_{dk} - 1 \bigr) \tag{7}
Différenciez partiellement $ F_ \ theta $ avec $ \ theta_ {dk} $.
\frac{\partial F_\theta}{\partial \theta_{dk}} = \sum^{N_d}_{n = 1} \frac{q_{dnk}}{\theta_{dk}} + \lambda \tag{8}
De $ \ frac {\ partial F_ \ theta} {\ partial \ theta_ {dk}} = 0 $
\theta_{dk} = - \sum^{N_d}_{n = 1} \frac{q_{dnk}}{\lambda} \tag{9}
De $ \ sum ^ K_ {k = 1} \ theta_ {dk} = 1 $
\begin{align}
& - \sum^K_{k = 1} \sum^{N_d}_{n = 1} \frac{q_{dnk}}{\lambda} = 1 \\
& \lambda = - \sum^K_{k = 1} \sum^{N_d}_{n = 1} q_{dnk} \tag{10}
\end{align}
Remplacez l'équation (10) par l'équation (9) pour obtenir $ \ theta_ {dk} $.
\theta_{dk} = \frac{\displaystyle \sum^{N_d}_{n = 1} q_{dnk}}{\displaystyle \sum^K_{k' = 1} \sum^{N_d}_{n = 1} q_{dnk'}} \tag{11}
Pour utiliser la méthode du multiplicateur indéterminé de Lagrange, nous définissons $ F_ \ phi $ comme suit.
F_\phi \equiv \sum^D_{d = 1} \sum^{N_d}_{n = 1} \sum^K_{k = 1} q_{dnk} \log \theta_{dk}\phi_{kw_{dn}} - \sum^D_{d = 1} \sum^{N_d}_{n = 1} \sum^K_{k = 1} q_{dnk} \log q_{dnk} + \lambda \bigl(\sum^V_{v = 1} \phi_{kv} - 1 \bigr) \tag{12}
Différenciez partiellement $ F_ \ phi $ avec $ \ phi_ {kv} $.
\frac{\partial F_\phi}{\partial \phi_{kv}} = \sum^D_{d = 1} \sum^{}_{n:w_{dn} = v} \frac{q_{dnk}}{\phi_{kv}} + \lambda \tag{13}
De $ \ frac {\ partial F_ \ phi} {\ partial \ phi_ {kv}} = 0 $
\phi_{kv} = - \sum^D_{d = 1} \sum^{}_{n:w_{dn} = v} \frac{q_{dnk}}{\lambda} \tag{14}
De $ \ sum ^ V_ {v = 1} \ phi_ {kv} = 1 $
\begin{align}
& - \sum^V_{v = 1} \sum^D_{d = 1} \sum^{}_{n:w_{dn} = v} \frac{q_{dnk}}{\lambda} = 1 \\
& \lambda = - \sum^V_{v = 1} \sum^D_{d = 1} \sum^{}_{n:w_{dn} = v} q_{dnk} \tag{15}
\end{align}
Remplacez l'équation (15) par l'équation (14) pour obtenir $ \ phi_ {kv} $.
\phi_{kv} = \frac{\displaystyle \sum^D_{d = 1} \sum^{}_{n:w_{dn} = v} q_{dnk}}{\displaystyle \sum^V_{v' = 1} \sum^D_{d = 1} \sum^{}_{n:w_{dn} = v'} q_{dnk}}
J'ai implémenté un programme jouet pour l'estimation la plus probable du modèle de sujet en python.
import numpy as np
def normalize(ndarray, axis):
return ndarray / ndarray.sum(axis = axis, keepdims = True)
def normalized_random_array(d0, d1):
ndarray = np.random.rand(d0, d1)
return normalize(ndarray, axis = 1)
if __name__ == "__main__":
# initialize parameters
D, K, V = 1000, 3, 6
theta = normalized_random_array(D, K)
phi = normalized_random_array(K, V)
theta_est = normalized_random_array(D, K)
phi_est = normalized_random_array(K, V)
# for generate documents
_theta = np.array([theta[:, :k+1].sum(axis = 1) for k in range(K)]).T
_phi = np.array([phi[:, :v+1].sum(axis = 1) for v in range(V)]).T
# generate documents
W, Z = [], []
N = np.random.randint(100, 300, D)
for (d, N_d) in enumerate(N):
Z.append((np.random.rand(N_d, 1) < _theta[d, :]).argmax(axis = 1))
W.append((np.random.rand(N_d, 1) < _phi[Z[-1], :]).argmax(axis = 1))
# estimate parameters
q = np.zeros((D, np.max(N), K))
T = 300
likelihood = np.zeros(T)
for t in range(T):
print(t)
# E step
for (d, N_d) in enumerate(N):
q[d, :N_d, :] = normalize(theta_est[d, :] * phi_est[:, W[d]].T, axis = 1)
# M step
theta_est[:, :] = normalize(q.sum(axis = 1), axis = 1)
q_sum = np.zeros((K, V))
for (d, W_d) in enumerate(W):
v, index, count = np.unique(W_d, return_index= True, return_counts = True)
q_sum[:, v[:]] += count[:] * q[d, index[:], :].T
phi_est[:, :] = normalize(q_sum, axis = 1)
# likelihood
for (d, W_d) in enumerate(W):
likelihood[t] += np.log(theta_est[d, :].dot(phi_est[:, W_d])).sum()
# perplexity
perplexity = np.exp(-likelihood[:] / N.sum())
Le résultat de l'exécution du code implémenté est affiché. Là encore, chaque paramètre est le suivant.
La distribution des mots estimée comme la vraie distribution des mots est indiquée ci-dessous.
phi
[[ 0.06837655 0.2294022 0.29048815 0.01610669 0.31437584 0.08125057]
[ 0.19902324 0.19283392 0.0251427 0.23391767 0.10622823 0.24285424]
[ 0.04165762 0.30678289 0.2579833 0.00882557 0.25580282 0.12894781]]
phi_est
[[ 0.04572686 0.20003413 0.33589344 0.00282668 0.36368718 0.0518317 ]
[ 0.20342652 0.16884355 0.04403442 0.23473554 0.12226066 0.22669932]
[ 0.05439782 0.37614278 0.18788228 0.01364525 0.18248741 0.18544446]]
Un graphique de vraisemblance logarithmique est présenté. La vraisemblance logarithmique est calculée par la formule suivante.
\begin{align}
likelihood &= \sum^D_{d = 1} \log p(\boldsymbol w_d \ | \ M) \\
&= \sum^D_{d = 1} \log \prod^{N_d}_{n = 1} \sum^K_{k = 1} \theta_{dk} \phi_{kw_{dn}}
\end{align}
Le graphique de la perplexité est montré.
perplexity = \exp\Biggl(- \frac{\displaystyle \sum^D_{d = 1} \log p(\boldsymbol w_d \ | \ M)}{\displaystyle \sum^D_{d = 1} N_d}\Biggr)
Nous avons pu mettre en œuvre l'estimation la plus probable du modèle thématique. Ensuite, j'essaierai ** LDA **.
Recommended Posts