Themenanalyse (LDA) in Java

Über diese Seite

Ich wollte JavaFX & in sich geschlossene Pakete üben, Ich wollte ein Tool erstellen, das ich sowieso verwenden konnte, also entschied ich mich für LDA. Hier ist eine Zusammenfassung von LDA auf Java. Unter den Links am Ende dieses Artikels finden Sie Informationen zu JavaFX und eigenständigen Paketen.

Was ist LDA?

Es ist eine der (universellen) Methoden des maschinellen Lernens zum Schätzen von Themen aus bestimmten Dokumenten in der Verarbeitung natürlicher Sprache. Ab 2019 ist Deep Learning sehr beliebt, aber zuvor war ich auf Geschäftsreise, um die Genauigkeit im NLP-Bereich zu verbessern. Für diejenigen, die etwas über Logik lesen möchten, werden die folgenden Seiten zum einfachen Lesen empfohlen.

Auszug aus Latent Dirichlet Allocation (LDA) Einführung in Yurufuwa

LDA ist eine Art Sprachmodell, bei dem davon ausgegangen wird, dass ein Dokument aus mehreren Themen besteht. Auf Japanisch heißt es "Potential Diricle Allocation Method". Wenn Sie ein Wort als oberflächlich beschreiben, ist das Thema latent, da es im Gegensatz zu einem Wort nicht auf der Oberfläche erscheint. Ich frage mich, ob es als "potenzielle Richtungsverteilungsmethode" bezeichnet wird, da angenommen wird, dass die Richtungsverteilung die vorherige Verteilung der Verteilung der potenziellen Elemente ist. (Weggelassen) Die Diricre-Verteilung ist ungefähr die Wahrscheinlichkeitsverteilung der Wahrscheinlichkeitsverteilung. Wenn es beispielsweise drei Themen gibt: "Sport", "Wirtschaft" und "Politik" Die Wahrscheinlichkeit, dass jedes Thema generiert wird (Sport, Wirtschaft, Politik) = (0,3, 0,2, 0,5) Die Wahrscheinlichkeit, dass 0> .1 (Sport, Wirtschaft, Politik) = (0.1, 0.2, 0.7) ist, bestimmt die Wahrscheinlichkeit der Wahrscheinlichkeitsverteilung als 0.2.

Implementierungsrichtlinie

Als LDA-Implementierungsrichtlinie scheint die Python-Bibliothek namens gensim berühmt zu sein. Referenz: Einführung in gensim

Im Hinblick auf die Vereinfachung nachfolgender JavaFX-Apps werden wir nicht mit Python und Java zusammenarbeiten. Ein Beispiel für die Implementierung von Java LDA wurde auf GitHub veröffentlicht, daher habe ich beschlossen, es auszuleihen. Vielen Dank.

Ich habe zwei Hits unter dem Namen LDA4j gemacht, aber dieses Mal habe ich das Modul von Mr. Hankcs übernommen. Ich mag es fast. (Um eine Reihe von Dokumenten als Eingabe zu speichern, 1 Datei (1 Dokument pro Zeile) in breakbee / LDA4J, In hankcs / LDA4j gab es einen Unterschied zwischen mehreren Dateien (1 Datei, 1 Dokument). Ich persönlich bevorzuge per Datei)

Lass uns rennen

Umgebung Bedienung/Ausführung
Ausführungsumgebung Windows10
Entwicklungsumgebung eclipse 4.1.0
Entwicklungssprache Java 8

Ziehen Sie das Modul, um es entsprechend zu verdunkeln. Laden Sie Gabeln & Klone oder Zip von Github herunter und importieren Sie Projekte. Danach habe ich mein eigenes Ausführungsmodul erstellt. (MainRunner.java)

image.png

Wie ReadMe sagt ...

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) {
			//TODO automatisch generierter Fangblock
			e.printStackTrace();
		}
	}
}

Versuchen Sie, MainRunner über Ausführen ⇒ Konfiguration ausführen ⇒ Java-Anwendung auszuführen. Sie sollten die folgende Ausgabe auf der Konsole sehen. Schätzt die angegebene Anzahl (10) von Themen für den in data / mini gespeicherten Dokumentensatz.

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 :
China=0.0097164123524064
Markt=0.007268178259268298
Unternehmen=0.006646897977003122
GmbH.=0.006420165848545306
Ausstellung=0.005931172520179485
Reise=0.005517115761050293
Unmittelbar bevorstehend=0.004144655174798414
Reporter=0.003896963247878764
Produkte=0.0038405773231741857
Bedienung=0.0036131627315211285

topic 1 :
Wunderschönes Land=0.007753386939328633
Japan=0.004271883755069139
训练=0.0039382838929572965
Systematisch=0.0038821627109404673
Schreibtisch=0.0037908977218186262
Abteilung=0.003713327985408122
Schaden=0.003662570207063461
Voraus=0.003548971364140448
Schaffung=0.003465095755923189
Ausrüstung=0.0033491792847693187

~ Ausgelassen ~

topic 9 :
Hirai=0.00887335526016362
队员=0.003820752808354389
联赛=0.0034088636107220934
Ball=0.0030593385176732896
俱 乐 Abteilung=0.002519739439727434
Krone=0.0025101075962186965
China=0.002314435002019442
Ball=0.0023066510579788685
赛=0.002282312176369107
Reporter=0.0022029528425211455

Eine Geschichte, die ich tatsächlich als Werkzeug verwendet habe

Recommended Posts

Themenanalyse (LDA) in Java
Morphologische Analyse in Java mit Kuromoji
Führen Sie eine Phrasenanalyse in Java 8 durch (Teil 2).
1 Implementieren Sie eine einfache Phrasenanalyse in Java
Erstellen einer Phrasenanalyse in Java 8 (Teil 1)
Partisierung in Java
Änderungen in Java 11
Janken in Java
Umfangsrate in Java
FizzBuzz in Java
NLP4J Morphologische Analyse in Java (unter Verwendung von Kuromoji)
Interpreter-Implementierung durch Java
Machen Sie einen Blackjack mit Java
Janken App in Java
Einschränkungsprogrammierung in Java
Setzen Sie Java8 in Centos7
NVL-artiger Typ in Java
"Hallo Welt" in Java
Aufrufbare Schnittstelle in Java
Kommentare in der Java-Quelle
Azure funktioniert in Java
Formatieren Sie XML in Java
Einfache HTML-Spezialchars in Java
Boyer-Moore-Implementierung in Java
Hallo Welt in Java
Verwenden Sie OpenCV mit Java
WebApi-Memorandum mit Java
Typbestimmung in Java
Befehle in Java ausführen (Ping)
Verschiedene Threads in Java
Implementierung der Heap-Sortierung (in Java)
Zabbix API in Java
ASCII-Kunst in Java
Listen in Java vergleichen
POST JSON in Java
Fehler in Java ausdrücken
Erstellen Sie JSON in Java
Datumsmanipulation in Java 8
Was ist neu in Java 8?
Verwenden Sie PreparedStatement in Java
Was ist neu in Java 9,10,11
Parallele Ausführung in Java
Versuchen Sie es mit RocksDB mit Java
Lesen Sie Binärdateien in Java 1
Vermeiden Sie den Fehler, den Yuma in Java gemacht hat
Holen Sie sich EXIF-Informationen in Java
[Neta] Sleep Sort in Java
Bearbeiten von ini in Java: ini4j
Java-Geschichte in dieser Welt
Segfo Java in 6 Zeilen
Protokollaggregation und -analyse (Arbeiten mit AWS Athena in Java)
Lassen Sie uns Spresense mit Java entwickeln (1)
Probieren Sie den Funktionstyp in Java aus! ①
Ich habe ein Roulette in Java gemacht.
Implementierung der zweistufigen Authentifizierung in Java
Schreiben Sie Flyway-Rückrufe in Java
Importieren Sie Excel-Daten mit Java 2