コード例 #1
0
        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;
            }
        }
コード例 #2
0
ファイル: NGramFactory.cs プロジェクト: bi3mer/Tools
        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);
        }
コード例 #3
0
        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);
            }
        }