Ejemplo n.º 1
0
        /// <summary>
        /// 相当于原项目的Sij(s->i, t->j)。
        /// 暂时为最大似然估计。未考虑worker bias。
        /// 训练。
        /// </summary>
        /// <param name="t">t</param>
        /// <param name="groupindex">组号</param>
        /// <returns></returns>
        public double Pr_t_s(TargetLabeltruth t, int groupindex)
        {
            double numerator   = 0;
            double denominator = 0;

            if (this.AccordedSentenceList.Count != 0)
            {
                //遍历与此Srouce Labeltruth对应的Sentence List(与分组无关)
                foreach (Sentence sentence in this.AccordedSentenceList)
                {
                    //此sentence被标过的target annotation(与分组有关)
                    foreach (TargetAnnotation targetAnnotation in sentence.TargetWorkerTargetAnnotationDicGroup[groupindex].Values)
                    {
                        //被标次数
                        ++denominator;
                        //此target annotation里含有要找的target label truth
                        if (targetAnnotation.AccordingWithTargetLabeltruth(t))
                        {
                            ++numerator;
                        }
                    }
                }
                return(numerator / denominator);
                //return Math.Pow(numerator / denominator, ProbabilityConstant.Pr_t[t]);
            }
            else
            {
                return(0);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// s转移到t的概率矩阵。
        /// (s已知,求t的概率)。
        /// 验证和是1。
        /// </summary>
        /// <returns>s->t->概率</returns>
        static public void Pr_t_s(int groupindex)
        {
            //初始化
            CascadedConstant.Pr_t_s = new Dictionary <SourceLabeltruth, IDictionary <TargetLabeltruth, double> >();

            //开始直接取
            foreach (Label sourceLabel in Constant.SourceTaxonomy.LabelArray)
            {
                SourceLabeltruth sourceTrue  = new SourceLabeltruth(sourceLabel, true);
                SourceLabeltruth sourceFalse = new SourceLabeltruth(sourceLabel, false);
                CascadedConstant.Pr_t_s.Add(sourceTrue, new Dictionary <TargetLabeltruth, double>());
                CascadedConstant.Pr_t_s.Add(sourceFalse, new Dictionary <TargetLabeltruth, double>());

                foreach (Label targetLabel in Constant.TargetTaxonomy.LabelArray)
                {
                    TargetLabeltruth targetTrue  = new TargetLabeltruth(targetLabel, true);
                    TargetLabeltruth targetFalse = new TargetLabeltruth(targetLabel, false);
                    #region 在SourceLabeltruth内计算
                    CascadedConstant.Pr_t_s[sourceTrue].Add(targetTrue, sourceTrue.Pr_t_s(targetTrue, groupindex));
                    CascadedConstant.Pr_t_s[sourceTrue].Add(targetFalse, sourceTrue.Pr_t_s(targetFalse, groupindex));
                    CascadedConstant.Pr_t_s[sourceFalse].Add(targetTrue, sourceFalse.Pr_t_s(targetTrue, groupindex));
                    CascadedConstant.Pr_t_s[sourceFalse].Add(targetFalse, sourceFalse.Pr_t_s(targetFalse, groupindex));
                    #endregion

                    #region normalize(用Pt做指数的话需要,已废弃)
                    //double trueProbability = sourceTrue.Pr_t_s(targetTrue);
                    //double falseProbability = sourceTrue.Pr_t_s(targetFalse);
                    //double constant = trueProbability + falseProbability;
                    //ProbabilityConstant.Pr_t_s[sourceTrue].Add(targetTrue, trueProbability / constant);
                    //ProbabilityConstant.Pr_t_s[sourceTrue].Add(targetFalse, falseProbability / constant);
                    //trueProbability = sourceFalse.Pr_t_s(targetTrue);
                    //falseProbability = sourceFalse.Pr_t_s(targetFalse);
                    //constant = trueProbability + falseProbability;
                    //ProbabilityConstant.Pr_t_s[sourceFalse].Add(targetTrue, trueProbability / constant);
                    //ProbabilityConstant.Pr_t_s[sourceFalse].Add(targetFalse, falseProbability / constant);
                    #endregion
                }
            }
        }