Analyse de sujets (LDA) en Java

À propos de cette page

Je voulais pratiquer JavaFX et les packages autonomes, Je voulais faire un outil que je pourrais utiliser de toute façon, alors j'ai décidé d'utiliser LDA. Voici un résumé de LDA sur Java. Voir les liens à la fin de ce livre pour JavaFX et les packages autonomes.

Qu'est-ce que LDA?

Il s'agit de l'une des méthodes d'apprentissage automatique (à usage général) pour estimer des sujets à partir de documents spécifiés dans le traitement du langage naturel. Depuis 2019, l'apprentissage en profondeur est populaire, mais avant cela, j'étais en voyage d'affaires pour améliorer la précision dans le domaine de la PNL. Pour ceux qui veulent en savoir plus sur la logique, les pages suivantes sont recommandées pour une lecture facile.

Extrait de Latent Dirichlet Allocation (LDA) Introduction to Yurufuwa

LDA est un type de modèle de langage qui suppose qu'un document se compose de plusieurs rubriques. En japonais, on l'appelle "Potential Diricle Allocation Method". Si vous décrivez un mot comme superficiel, le sujet est potentiel car il n'apparaît pas en surface contrairement à un mot. Je me demande si on l'appelle «méthode de distribution potentielle de Diricle» car on suppose que la distribution de Diricle est la distribution a priori de la distribution des éléments potentiels. (Omis) La distribution de Diricre est à peu près la distribution de probabilité de la distribution de probabilité. Par exemple, s'il y a trois thèmes, "sports", "économie" et "politique" La probabilité que chaque thème soit généré (sport, économie, politique) = (0,3, 0,2, 0,5) La probabilité que 0> .1, (sports, économie, politique) = (0,1, 0,2, 0,7) détermine la probabilité de la distribution de probabilité égale à 0,2.

Politique de mise en œuvre

En tant que politique d'implémentation LDA, la bibliothèque Python appelée gensim semble être célèbre. Référence: Introduction to gensim

Du point de vue de la simplification des applications JavaFX ultérieures, nous ne collaborerons pas avec Python et Java. Un exemple d'implémentation Java LDA a été publié sur GitHub, j'ai donc décidé de l'emprunter. Merci.

J'ai fait deux hits sous le nom de LDA4j, mais cette fois j'ai adopté le module de Mr. hankcs. Je l'aime presque. (Pour conserver un ensemble de documents en entrée, 1 fichier (1 document par ligne) dans breakbee / LDA4J, Dans hankcs / LDA4j, il y avait une différence entre plusieurs fichiers (1 fichier, 1 document). J'ai personnellement préféré par dossier)

Courons

environnement un service/version
Environnement d'exécution Windows10
Environnement de développement eclipse 4.1.0
langage de développement Java 8

Tirez le module pour éclipser de manière appropriée. Téléchargez forks & clones ou Zip depuis Github et importez des projets. Après cela, j'ai créé mon propre module d'exécution. (MainRunner.java)

image.png

Comme le dit ReadMe ...

MainRunner.java


package com.ketman.app;

import java.io.IOException;
import java.util.Map;

import com.hankcs.lda.Corpus;
import com.hankcs.lda.LdaGibbsSampler;
import com.hankcs.lda.LdaUtil;

public class MainRunner {
	public static void main(String[] args)
	{
		// 1. Load corpus from disk
		Corpus corpus;
		try {
			corpus = Corpus.load("data/mini");
			// 2. Create a LDA sampler
			LdaGibbsSampler ldaGibbsSampler = new LdaGibbsSampler(corpus.getDocument(), corpus.getVocabularySize());
			// 3. Train it
			ldaGibbsSampler.gibbs(10);
			// 4. The phi matrix is a LDA model, you can use LdaUtil to explain it.
			double[][] phi = ldaGibbsSampler.getPhi();
			Map<String, Double>[] topicMap = LdaUtil.translate(phi, corpus.getVocabulary(), 10);
			LdaUtil.explain(topicMap);
		} catch (IOException e) {
			//Bloc de capture généré automatiquement TODO
			e.printStackTrace();
		}
	}
}

Essayez d'exécuter MainRunner à partir de Exécuter ⇒ Exécuter la configuration ⇒ Application Java. Vous devriez voir la sortie suivante sur la console. Estime le nombre spécifié (10) de sujets pour l'ensemble de documents stockés dans data / mini.

Sampling 1000 iterations with burn-in of 100 (B/S=20).
BBBBB|S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||S||
topic 0 :
Chine=0.0097164123524064
Marché=0.007268178259268298
Entreprise=0.006646897977003122
Ltd.=0.006420165848545306
Exposition=0.005931172520179485
Périple=0.005517115761050293
Imminent=0.004144655174798414
Journaliste=0.003896963247878764
Des produits=0.0038405773231741857
Un service=0.0036131627315211285

topic 1 :
Beau pays=0.007753386939328633
Japon=0.004271883755069139
训练=0.0039382838929572965
Systématique=0.0038821627109404673
Bureau=0.0037908977218186262
département=0.003713327985408122
Nuire=0.003662570207063461
Avance=0.003548971364140448
Création=0.003465095755923189
Équipement=0.0033491792847693187

~ Omis ~

topic 9 :
Hirai=0.00887335526016362
队员=0.003820752808354389
联赛=0.0034088636107220934
Balle=0.0030593385176732896
俱 乐 Département=0.002519739439727434
couronne=0.0025101075962186965
Chine=0.002314435002019442
Balle=0.0023066510579788685
赛=0.002282312176369107
Journaliste=0.0022029528425211455

Une histoire que j'ai effectivement utilisée comme outil

Recommended Posts

Analyse de sujets (LDA) en Java
Analyse morphologique en Java avec Kuromoji
Faire une analyse de phrase en Java 8 (partie 2)
1 Implémentez une analyse de phrase simple en Java
Création d'une analyse de phrase dans Java 8 (partie 1)
Partition en Java
Changements dans Java 11
Janken à Java
Taux circonférentiel à Java
FizzBuzz en Java
NLP4J [001b] Analyse morphologique en Java (utilisant kuromoji)
Implémentation de l'interpréteur par Java
Faites un blackjack avec Java
Application Janken en Java
Programmation par contraintes en Java
Mettez java8 dans centos7
NVL-ish guy en Java
"Hello World" en Java
Interface appelable en Java
Commentaires dans la source Java
Fonctions Azure en Java
Formater XML en Java
Simple htmlspecialchars en Java
Implémentation Boyer-Moore en Java
Hello World en Java
Utiliser OpenCV avec Java
Mémorandum WebApi avec Java
Détermination de type en Java
Exécuter des commandes en Java (ping)
Divers threads en java
Implémentation du tri de tas (en java)
API Zabbix en Java
Art ASCII à Java
Comparer des listes en Java
POST JSON en Java
Exprimer l'échec en Java
Créer JSON en Java
Manipulation de la date dans Java 8
Nouveautés de Java 8
Utiliser PreparedStatement en Java
Nouveautés de Java 9,10,11
Exécution parallèle en Java
Essayez d'utiliser RocksDB avec Java
Lire des fichiers binaires en Java 1
Évitez l'erreur que Yuma a donnée en Java
Obtenir des informations EXIF en Java
[Neta] Sleep Sort en Java
Modifier ini en Java: ini4j
L'histoire de Java dans ce monde
Segfo Java en 6 lignes
Agrégation et analyse de journaux (utilisation d'AWS Athena en Java)
Essayez de développer Spresense avec Java (1)
Essayez le type fonctionnel en Java! ①
J'ai fait une roulette à Java.
Implémentation de l'authentification en deux étapes en Java
Ecrire des rappels de vol en Java
Importer des données Excel avec Java 2