public CompiledHierarchicalNGram(HierarchicalNGram hierarchicalGram) { weightMultiplier = hierarchicalGram.CompiledMemoryUpdate; CompiledGrammars = new ICompiledGram[hierarchicalGram.N]; Weights = new float[hierarchicalGram.N]; n = hierarchicalGram.N; float weightSum = 0f; float currentWeight = 1f; for (int grammarSize = hierarchicalGram.N - 1; grammarSize >= 0; --grammarSize) { CompiledGrammars[grammarSize] = hierarchicalGram.Grammars[grammarSize].Compile(); currentWeight *= weightMultiplier; weightSum += currentWeight; Weights[grammarSize] = currentWeight; } for (int i = 0; i < Weights.Length; ++i) { Weights[i] /= weightSum; } }
public static IGram InitHierarchicalNGram(int n, float weightMultiplier) { Assert.IsTrue(n >= 1); IGram gram; if (n == 1) { gram = new UniGram(); } else { gram = new HierarchicalNGram(n, weightMultiplier); } return(gram); }
public void AddGrammar(IGram gram) { HierarchicalNGram grammar = gram as HierarchicalNGram; if (grammar != null) { Assert.AreEqual(N, grammar.N); for (int grammarSize = 0; grammarSize < N; ++grammarSize) { Grammars[grammarSize].AddGrammar(grammar.Grammars[grammarSize]); } } else { int n = gram.GetN(); Assert.IsTrue(n <= N); Grammars[n - 1].AddGrammar(gram); } }