计算两个数据集概率分布的熵-文本分析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节)

计算两个数据集概率分布的熵-文本分析c#中的情感

文中式(10)给出了定义。如果你在阅读这个等式时有困难,它是

的一个简短符号。
    H(..) = -log(p(S1|g)) * p(S1|g)  - log(p(S2|g)) * p(S2|g) - ....