C# 计算两个数据集的概率分布熵-文本分析和;C语言中的情感#
我正在使用160万推特语料库来训练一个朴素的贝叶斯情感引擎 我有两个n-gram字典(C# 计算两个数据集的概率分布熵-文本分析和;C语言中的情感#,c#,math,statistics,C#,Math,Statistics,我正在使用160万推特语料库来训练一个朴素的贝叶斯情感引擎 我有两个n-gram字典(Dictionary,其中string是我的n-gram,而int是我语料库中n-gram出现的次数)。第一个列表从正面推文中提取,第二个列表从负面推文中提取。在一篇关于这一主题的文章中,作者放弃了常见的n-图(即,不强烈表示任何情感或句子客观性的n-图。此类n-图在所有数据集中均匀出现)。我在概念上非常理解这一点,但他们提供的公式植根于数学,而不是代码,我无法解释我应该做什么 我花了几个小时在网上搜索如何做到
Dictionary
,其中string
是我的n-gram,而int
是我语料库中n-gram出现的次数)。第一个列表从正面推文中提取,第二个列表从负面推文中提取。在一篇关于这一主题的文章中,作者放弃了常见的n-图(即,不强烈表示任何情感或句子客观性的n-图。此类n-图在所有数据集中均匀出现)。我在概念上非常理解这一点,但他们提供的公式植根于数学,而不是代码,我无法解释我应该做什么
我花了几个小时在网上搜索如何做到这一点。我发现搜索引擎的熵计算示例,通常是计算字符串的熵,最常见的代码块是香农熵
我对这个领域也比较陌生,所以我确信我的无知在其中扮演了一个角色,但我希望有人能帮助我朝着正确的方向前进。总结如下:
给定两个字典,PosDictionary
&NegDictionary
,如何计算相同n-gram的熵
Psuedo代码很好,我想它看起来像这样:
foreach(string myNGram in PosDictionary) {
if(NegDictionary.ContainsKey(myNGram) {
double result = CalculateEntropyOfNGram(myNGram);
if(result > someThetaSuchAs0.80) {
PosDictionary.Remove(myNGram);
NegDictionary.Remove(myNGram);
}
}
}
我想这就是我需要采取的步骤。我不知道的是,calculateEntropyFnGram
函数是什么样子的
(编辑)
对于用于描述熵/显著性过程的pdf(第5.3节)本文中的等式(10)给出了定义。如果你在阅读方程式时遇到问题,这是一个简短的符号
H(..) = -log(p(S1|g)) * p(S1|g) - log(p(S2|g)) * p(S2|g) - ....
文中等式(10)给出了定义。如果你在阅读方程式时遇到问题,这是一个简短的符号
H(..) = -log(p(S1|g)) * p(S1|g) - log(p(S2|g)) * p(S2|g) - ....
你能给一个到出版物的链接吗?你能给一个到出版物的链接吗?那就是说“S1给定g的概率”——比如,给定一个n-gram,它在我的S1列表中的概率是多少?所以类似于(我的内存计数)/(我的内存计数+总内存计数)?我没有读足够深的文章来知道S1和g是什么。但你必须根据计数来估计概率。类似于“p(g)=ng/N”的东西,如果ng计算g,N是您所指集合的大小。这正是我所需要的。谢谢那么说“S1给定g的概率”——比如,给定一个n-gram,它在我的S1列表中的概率是多少?所以类似于(我的内存计数)/(我的内存计数+总内存计数)?我没有读足够深的文章来知道S1和g是什么。但你必须根据计数来估计概率。类似于“p(g)=ng/N”的东西,如果ng计算g,N是您所指集合的大小。这正是我所需要的。谢谢