Ich werde GloVe mit Deeplearning4j, einer Java-Bibliothek, verwenden.
Bitte bereiten Sie den Korpus, den Sie lernen möchten, im Voraus vor. Notieren Sie einen japanischen Korpus. Es kann besser sein, die Verben usw. auf die Grundform (Originalform) zu korrigieren, wenn Sie in die Form schreiben.
Die Textdatei des Korpus sollte ** input.txt ** sein. Speichern Sie das erstellte Modell als ** model.txt **.
ModelBuild.java
import org.deeplearning4j.models.embeddings.loader.WordVectorSerializer;
import org.deeplearning4j.models.glove.Glove;
import org.deeplearning4j.text.sentenceiterator.BasicLineIterator;
import org.deeplearning4j.text.sentenceiterator.SentenceIterator;
import org.deeplearning4j.text.tokenization.tokenizer.preprocessor.CommonPreprocessor;
import org.deeplearning4j.text.tokenization.tokenizerfactory.DefaultTokenizerFactory;
import org.deeplearning4j.text.tokenization.tokenizerfactory.TokenizerFactory;
import java.io.*;
public class ModelBuild {
public static void main( String[] args ) throws Exception{
//Korpusdatei lesen
System.out.println("Lade Daten...");
File inputFile = new File("input.txt");
//Als Textdatenklasse lesen
SentenceIterator iter = new BasicLineIterator(inputFile);
//Erstellen Sie eine Tokenizer-Klasse (Word Split)
System.out.println("Erstellen Sie einen Tokenizer...");
TokenizerFactory t = new DefaultTokenizerFactory();
t.setTokenPreProcessor(new CommonPreprocessor());
//Modell erstellen
System.out.println("Modell erstellen...");
Glove glove = new Glove.Builder()
.iterate(iter) //Satzdatenklasse
.tokenizerFactory(t) //Wortzerlegungsklasse
.alpha(0.75) //Parameter im Exponenten der Gewichtungsfunktion
.learningRate(0.1) //Anfangslernrate
.epochs(25) //Anzahl der Iterationen auf dem Trainingskorpus während des Trainings
.layerSize(300) //Anzahl der Dimensionen des Vektors
.maxMemory(2) //Maximale Speichernutzung
.xMax(100) //Gewichtsfunktionsabschaltung
.batchSize(1000) //Anzahl der Wörter, die in einem Mini-Batch gelernt werden sollen
.windowSize(10) //Fenstergröße
.shuffle(true)
.symmetric(true)
.build();
//Lernen
System.out.println("ich lerne...");
glove.fit();
//Modell speichern
System.out.println("Modell speichern...");
WordVectorSerializer.writeWordVectors(glove, "model.txt");
System.out.println("Das Programm ist vorbei");
}
}
Evaluation.java
import java.io.File;
import java.io.FileNotFoundException;
import java.io.UnsupportedEncodingException;
import java.util.Collection;
import org.deeplearning4j.models.embeddings.loader.WordVectorSerializer;
import org.deeplearning4j.models.embeddings.wordvectors.WordVectors;
public class Evaluation {
public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException {
//Modelldatei laden
System.out.println("Modelldatei wird geladen...");
File inputFile = new File(args[0]);
WordVectors vec = WordVectorSerializer.loadTxtVectors(inputFile);
//Zeigen Sie die 10 häufigsten Wörter für das Wort an (z. B. "Wetter").
System.out.println("Top 10 ähnliche Wörter...");
String word = "Wetter";
int ranking = 10;
Collection<String> similarTop10 = vec.wordsNearest( word , ranking );
System.out.println( String.format( "Similar word to 「%s」 is %s" , word , similarTop10 ) );
//Kosinusähnlichkeit zeigen (zB "sonnig" und "Regen")
System.out.println( "Kosinusähnlichkeit zeigen..." );
String word1 = "Sonnig";
String word2 = "Regen";
double similarity = vec.similarity( word1 , word2 );
System.out.println( String.format( "The similarity between 「%s」 and 「%s」 is %f" , word1 , word2 , similarity ) );
}
}
Recommended Posts