我正在使用一个1.6M的推文语料库来训练一个天真的贝叶斯情绪引擎。
我有两个n-gram字典(Dictionary<string,int>
,其中string
是我的n-gram,int
是我的语料库中n-gram的出现次数) 。第一个列表是从正面推文中提取的,第二个列表是从负面推文中提取的。在一篇关于这个主题的文章中,作者抛弃了常见的n-gram(即n-gram不强烈表示任何情绪,也没有表明句子的客观性。这样的n-gram在所有数据集中均匀出现)。我在概念上很清楚这一点,但他们提供的公式植根于数学,而不是代码,我无法破译我应该做的事情。
我花了几个小时在网上搜索如何做到这一点。我找到了搜索引擎的熵计算的例子,它通常计算字符串的熵,最常见的代码块是ShannonsEntropy。
我对这个领域也比较陌生,所以我敢肯定我的无知在这方面起了一定的作用,但我希望有人能帮助推动我朝着正确的方向发展。总结一下:
给出两个词典,PosDictionary
&amp; NegDictionary
,如何计算相同n-gram的熵?
Psuedo-code很好,我想它看起来像这样:
foreach(string myNGram in PosDictionary) {
if(NegDictionary.ContainsKey(myNGram) {
double result = CalculateEntropyOfNGram(myNGram);
if(result > someThetaSuchAs0.80) {
PosDictionary.Remove(myNGram);
NegDictionary.Remove(myNGram);
}
}
}
我认为这是我需要采取的过程。我不知道CalculateEntropyOfNGram
函数是什么样的......
(编辑) Here is the link用于描述熵/突出过程的pdf(第5.3节)
答案 0 :(得分:1)
本文中的等式(10)给出了定义。如果您在阅读等式时遇到问题,那么
就是一个简短的符号 H(..) = -log(p(S1|g)) * p(S1|g) - log(p(S2|g)) * p(S2|g) - ....