Пример #1
0
 public FactorTable(Edu.Stanford.Nlp.IE.Crf.FactorTable t)
 {
     numClasses = t.NumClasses();
     windowSize = t.WindowSize();
     table      = new double[t.Size()];
     System.Array.Copy(t.table, 0, table, 0, t.Size());
 }
Пример #2
0
        public virtual void MultiplyInEnd(Edu.Stanford.Nlp.IE.Crf.FactorTable other)
        {
            int divisor = SloppyMath.IntPow(numClasses, other.WindowSize());

            for (int i = 0; i < table.Length; i++)
            {
                table[i] += other.GetValue(i % divisor);
            }
        }
Пример #3
0
 public virtual void DivideBy(Edu.Stanford.Nlp.IE.Crf.FactorTable other)
 {
     for (int i = 0; i < table.Length; i++)
     {
         if (table[i] != double.NegativeInfinity || other.table[i] != double.NegativeInfinity)
         {
             table[i] -= other.table[i];
         }
     }
 }
Пример #4
0
        public virtual Edu.Stanford.Nlp.IE.Crf.FactorTable SumOutFront()
        {
            Edu.Stanford.Nlp.IE.Crf.FactorTable ft = new Edu.Stanford.Nlp.IE.Crf.FactorTable(numClasses, windowSize - 1);
            int stride = ft.Size();

            for (int i = 0; i < stride; i++)
            {
                ft.SetValue(i, ArrayMath.LogSum(table, i, table.Length, stride));
            }
            return(ft);
        }
Пример #5
0
        public virtual Edu.Stanford.Nlp.IE.Crf.FactorTable SumOutEnd()
        {
            Edu.Stanford.Nlp.IE.Crf.FactorTable ft = new Edu.Stanford.Nlp.IE.Crf.FactorTable(numClasses, windowSize - 1);
            for (int i = 0; i < sz; i++)
            {
                ft.table[i] = ArrayMath.LogSum(table, i * numClasses, (i + 1) * numClasses);
            }

            /*
             * for (int i = 0; i < table.length; i++) {
             * ft.logIncrementValue(i / numClasses, table[i]);
             * }
             */
            return(ft);
        }
Пример #6
0
        public static void Main(string[] args)
        {
            int numClasses = 6;
            int cliqueSize = 3;

            System.Console.Error.Printf("Creating factor table with %d classes and window (clique) size %d%n", numClasses, cliqueSize);
            Edu.Stanford.Nlp.IE.Crf.FactorTable ft = new Edu.Stanford.Nlp.IE.Crf.FactorTable(numClasses, cliqueSize);
            for (int i = 0; i < numClasses; i++)
            {
                for (int j = 0; j < numClasses; j++)
                {
                    for (int k = 0; k < numClasses; k++)
                    {
                        int[] b = new int[] { i, j, k };
                        ft.SetValue(b, (i * 4) + (j * 2) + k);
                    }
                }
            }
            log.Info(ft);
            double normalization = 0.0;

            for (int i_1 = 0; i_1 < numClasses; i_1++)
            {
                for (int j = 0; j < numClasses; j++)
                {
                    for (int k = 0; k < numClasses; k++)
                    {
                        normalization += ft.UnnormalizedLogProb(new int[] { i_1, j, k });
                    }
                }
            }
            log.Info("Normalization Z = " + normalization);
            log.Info(ft.SumOutFront());
            Edu.Stanford.Nlp.IE.Crf.FactorTable ft2 = new Edu.Stanford.Nlp.IE.Crf.FactorTable(numClasses, 2);
            for (int i_2 = 0; i_2 < numClasses; i_2++)
            {
                for (int j = 0; j < numClasses; j++)
                {
                    int[] b = new int[] { i_2, j };
                    ft2.SetValue(b, i_2 * numClasses + j);
                }
            }
            log.Info(ft2);
            // FactorTable ft3 = ft2.sumOutFront();
            // log.info(ft3);
            for (int i_3 = 0; i_3 < numClasses; i_3++)
            {
                for (int j = 0; j < numClasses; j++)
                {
                    int[]  b = new int[] { i_3, j };
                    double t = 0;
                    for (int k = 0; k < numClasses; k++)
                    {
                        t += System.Math.Exp(ft.ConditionalLogProbGivenPrevious(b, k));
                        System.Console.Error.WriteLine(k + "|" + i_3 + ',' + j + " : " + System.Math.Exp(ft.ConditionalLogProbGivenPrevious(b, k)));
                    }
                    log.Info(t);
                }
            }
            log.Info("conditionalLogProbGivenFirst");
            for (int j_1 = 0; j_1 < numClasses; j_1++)
            {
                for (int k = 0; k < numClasses; k++)
                {
                    int[]  b = new int[] { j_1, k };
                    double t = 0.0;
                    for (int i_4 = 0; i_4 < numClasses; i_4++)
                    {
                        t += ft.UnnormalizedConditionalLogProbGivenFirst(i_4, b);
                        System.Console.Error.WriteLine(i_4 + "|" + j_1 + ',' + k + " : " + ft.UnnormalizedConditionalLogProbGivenFirst(i_4, b));
                    }
                    log.Info(t);
                }
            }
            log.Info("conditionalLogProbGivenFirst");
            for (int i_5 = 0; i_5 < numClasses; i_5++)
            {
                for (int j = 0; j_1 < numClasses; j_1++)
                {
                    int[]  b = new int[] { i_5, j_1 };
                    double t = 0.0;
                    for (int k = 0; k < numClasses; k++)
                    {
                        t += ft.ConditionalLogProbGivenNext(b, k);
                        System.Console.Error.WriteLine(i_5 + "," + j_1 + '|' + k + " : " + ft.ConditionalLogProbGivenNext(b, k));
                    }
                    log.Info(t);
                }
            }
            numClasses = 2;
            Edu.Stanford.Nlp.IE.Crf.FactorTable ft3 = new Edu.Stanford.Nlp.IE.Crf.FactorTable(numClasses, cliqueSize);
            ft3.SetValue(new int[] { 0, 0, 0 }, System.Math.Log(0.25));
            ft3.SetValue(new int[] { 0, 0, 1 }, System.Math.Log(0.35));
            ft3.SetValue(new int[] { 0, 1, 0 }, System.Math.Log(0.05));
            ft3.SetValue(new int[] { 0, 1, 1 }, System.Math.Log(0.07));
            ft3.SetValue(new int[] { 1, 0, 0 }, System.Math.Log(0.08));
            ft3.SetValue(new int[] { 1, 0, 1 }, System.Math.Log(0.16));
            ft3.SetValue(new int[] { 1, 1, 0 }, System.Math.Log(1e-50));
            ft3.SetValue(new int[] { 1, 1, 1 }, System.Math.Log(1e-50));
            Edu.Stanford.Nlp.IE.Crf.FactorTable ft4 = ft3.SumOutFront();
            log.Info(ft4.ToNonLogString());
            Edu.Stanford.Nlp.IE.Crf.FactorTable ft5 = ft3.SumOutEnd();
            log.Info(ft5.ToNonLogString());
        }