计算两个数据集概率分布的熵-文本分析c#中的情感
本文关键字:文本 情感 计算 两个 概率分布 数据集 | 更新日期: 2023-09-27 18:09:59
我正在使用160 m的tweet语料库来训练朴素贝叶斯情感引擎。
我有两个n-gram的字典(Dictionary<string,int>
,其中string
是我的n-gram, int
是n-gram在我的语料库中出现的次数)。第一个列表是从积极的推特中提取的,第二个列表是从消极的推特中提取的。在一篇关于这个主题的文章中,作者抛弃了常见的n-gram(即不强烈表示任何情感或表明句子客观性的n-gram)。这样的n-gram均匀地出现在所有数据集中)。我在概念上理解得很好,但他们提供的公式植根于数学,而不是代码,我无法破译我应该做什么。
我花了几个小时在网上搜索如何做到这一点。我已经找到了搜索引擎熵计算的例子,它通常是计算字符串的熵,最常见的代码块是ShannonsEntropy。
我对这个领域也比较陌生,所以我确信我的无知在这方面起了一点作用,但我希望有人能在so上帮助我朝正确的方向推动。总结:
给定两个字典,PosDictionary
&NegDictionary
,我如何计算相同n-g的熵?
伪代码很好,我想象它看起来像这样:
foreach(string myNGram in PosDictionary) {
if(NegDictionary.ContainsKey(myNGram) {
double result = CalculateEntropyOfNGram(myNGram);
if(result > someThetaSuchAs0.80) {
PosDictionary.Remove(myNGram);
NegDictionary.Remove(myNGram);
}
}
}
我认为这是我需要采取的过程。我不知道的是CalculateEntropyOfNGram
函数是什么样子的…
(编辑)这里是用于描述熵/显著性过程的pdf的链接(第5.3节)
文中式(10)给出了定义。如果你在阅读这个等式时有困难,它是
的一个简短符号。 H(..) = -log(p(S1|g)) * p(S1|g) - log(p(S2|g)) * p(S2|g) - ....