package recunn.examples;
import java.util.Random;
import recunn.datasets.bAbI;
import recunn.datastructs.DataSet;
import recunn.model.Model;
import recunn.trainer.Trainer;
import recunn.util.NeuralNetworkHelper;
public class ExampleQuestionAnswering {
public static void main(String[] args) throws Exception {
/*
EXAMPLE OF LSTM RESULTS:
47.0% avg. accuracy on #1: Single Supporting Fact
32.7% avg. accuracy on #2: Two Supporting Facts
24.0% avg. accuracy on #3: Three Supporting Facts
58.6% avg. accuracy on #4: Two Arg. Relations
60.5% avg. accuracy on #5: Three Arg. Relations
64.1% avg. accuracy on #6: Yes/No Questions
76.3% avg. accuracy on #7: Counting
69.9% avg. accuracy on #8: Lists/Sets
61.2% avg. accuracy on #9: Simple Negation
52.6% avg. accuracy on #10: Indefinite Knowledge
67.8% avg. accuracy on #11: Basic Coreference
64.4% avg. accuracy on #12: Conjunction
89.6% avg. accuracy on #13: Compound Coreference
24.2% avg. accuracy on #14: Time Reasoning
29.5% avg. accuracy on #15: Basic Deduction
46.2% avg. accuracy on #16: Basic Induction
52.1% avg. accuracy on #17: Positional Reasoning
91.2% avg. accuracy on #18: Size Reasoning
8.0% avg. accuracy on #19: Path Finding
94.0% avg. accuracy on #20: Agent's Motivations
EXAMPLE OF GRU RESULTS:
45.1% avg. accuracy on #1: Single Supporting Fact
28.3% avg. accuracy on #2: Two Supporting Facts
22.9% avg. accuracy on #3: Three Supporting Facts
64.0% avg. accuracy on #4: Two Arg. Relations
51.0% avg. accuracy on #5: Three Arg. Relations
62.3% avg. accuracy on #6: Yes/No Questions
72.1% avg. accuracy on #7: Counting
72.9% avg. accuracy on #8: Lists/Sets
64.2% avg. accuracy on #9: Simple Negation
52.5% avg. accuracy on #10: Indefinite Knowledge
64.1% avg. accuracy on #11: Basic Coreference
63.2% avg. accuracy on #12: Conjunction
92.7% avg. accuracy on #13: Compound Coreference
23.8% avg. accuracy on #14: Time Reasoning
29.3% avg. accuracy on #15: Basic Deduction
43.9% avg. accuracy on #16: Basic Induction
51.0% avg. accuracy on #17: Positional Reasoning
90.6% avg. accuracy on #18: Size Reasoning
9.2% avg. accuracy on #19: Path Finding
93.7% avg. accuracy on #20: Agent's Motivations
*/
Random rng = new Random();
int hiddenDimension = 10;
int hiddenLayers = 1;
double learningRate = 0.005;
double initParamsStdDev = 0.08;
int epochsPerTask = 50;
int experiments = 1;
boolean onlyShowSupportingFacts = false;
double[] losses = new double[bAbI.TASK_NAMES.length];
for (int experiment = 0; experiment < experiments; experiment++) {
for (int task = 0; task < bAbI.TASK_NAMES.length; task++) {
int setId = task + 1;
System.out.println("\n==============================================================");
System.out.println("bAbI experiment "+(experiment+1)+" of "+experiments);
System.out.println("Task #" + setId + ": "+bAbI.TASK_NAMES[task]+"\n");
int totalExamples = 1000;
DataSet data = new bAbI(setId, totalExamples, onlyShowSupportingFacts, rng);
Model nn = NeuralNetworkHelper.makeLstm(
data.inputDimension,
hiddenDimension, hiddenLayers,
data.outputDimension, data.getModelOutputUnitToUse(),
initParamsStdDev, rng);
/*
Model nn = NeuralNetworkHelper.makeGru(
data.inputDimension,
hiddenDimension, hiddenLayers,
data.outputDimension, data.getModelOutputUnitToUse(),
initParamsStdDev, rng);
//*/
int reportEveryNthEpoch = 10;
double loss = Trainer.train(epochsPerTask, learningRate, nn, data, reportEveryNthEpoch, rng);
losses[task] += loss;
System.out.println("\nFINAL: " + String.format("%.1f", (100*(1-loss))) + "% accuracy");
}
}
System.out.println("\n\n==============================================================");
System.out.println("SUMMED RESULTS:");
for (int task = 0; task < bAbI.TASK_NAMES.length; task++) {
System.out.println("\t" + String.format("%.1f", (100*(1-(losses[task]/(double)experiments)))) + "% avg. accuracy on #"+(task+1)+": " + bAbI.TASK_NAMES[task]);
}
}
}
Ads help maintain this website.