Je vais utiliser GloVe avec Deeplearning4j, une bibliothèque Java.
Veuillez préparer à l'avance le corpus que vous souhaitez apprendre. Dans le cas d'un corpus japonais, notez-le. Il peut être préférable de corriger les verbes etc. à la forme de base (forme originale) lors de l'écriture dans la forme.
Le fichier texte du corpus doit être ** input.txt **. Enregistrez le modèle créé sous ** 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{
//Lire le fichier corpus
System.out.println("Chargement des données...");
File inputFile = new File("input.txt");
//Lire comme classe de données texte
SentenceIterator iter = new BasicLineIterator(inputFile);
//Créer une classe tokenizer (word split)
System.out.println("Créer un tokenizer...");
TokenizerFactory t = new DefaultTokenizerFactory();
t.setTokenPreProcessor(new CommonPreprocessor());
//Créer un modèle
System.out.println("Créer un modèle...");
Glove glove = new Glove.Builder()
.iterate(iter) //Classe de données de phrase
.tokenizerFactory(t) //Classe de décomposition de mots
.alpha(0.75) //Paramètres dans l'exposant de la fonction de pondération
.learningRate(0.1) //Taux d'apprentissage initial
.epochs(25) //Nombre d'itérations sur le corpus de formation pendant la formation
.layerSize(300) //Nombre de dimensions du vecteur
.maxMemory(2) //Utilisation maximale de la mémoire
.xMax(100) //Coupure de la fonction de poids
.batchSize(1000) //Nombre de mots à apprendre dans un mini-lot
.windowSize(10) //La taille de la fenêtre
.shuffle(true)
.symmetric(true)
.build();
//Apprentissage
System.out.println("J'apprends...");
glove.fit();
//Enregistrer le modèle
System.out.println("Sauvegarder le modèle...");
WordVectorSerializer.writeWordVectors(glove, "model.txt");
System.out.println("Le programme est terminé");
}
}
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 {
//Charger le fichier de modèle
System.out.println("Chargement du fichier de modèle...");
File inputFile = new File(args[0]);
WordVectors vec = WordVectorSerializer.loadTxtVectors(inputFile);
//Afficher les 10 principaux mots similaires pour le mot (par exemple, «météo»)
System.out.println("Top 10 des mots similaires...");
String word = "Météo";
int ranking = 10;
Collection<String> similarTop10 = vec.wordsNearest( word , ranking );
System.out.println( String.format( "Similar word to 「%s」 is %s" , word , similarTop10 ) );
//Afficher la similitude cosinus (par exemple "ensoleillé" et "pluie")
System.out.println( "Afficher la similitude cosinus..." );
String word1 = "Ensoleillé";
String word2 = "pluie";
double similarity = vec.similarity( word1 , word2 );
System.out.println( String.format( "The similarity between 「%s」 and 「%s」 is %f" , word1 , word2 , similarity ) );
}
}
Recommended Posts