nlp - 如何计算文本分类中的困惑度?
问题描述
我正在使用 scikit learn、naive bayes 和 countvectorizer 进行方言文本分类。到目前为止,我只做 3 种方言文本分类。我将添加一种新的方言(或者实际上,这些方言的正式语言)。问题是,我要添加的新文本与其他 3 种方言有很多相同的词。所以我在一份研究文件中阅读了以下内容:
我们从收集的数据中为每种方言训练一个 n-gram 模型。为了训练 MSA 模型,我们从阿拉伯联合国语料库和新闻集中选择句子。所有方言和 MSA 模型共享相同的词汇表,因此可以正确比较困惑度。在分类时,给定一个输入句子,分类器计算每种方言类型的困惑度,并选择困惑度最小的一个作为标签。
他们的意思是 MSA(现代标准阿拉伯语),这是这些方言的正式语言。他们如何计算困惑度?他们只是使用朴素贝叶斯还是更多?
解决方案
从我在这里看到的情况来看,引用的工作根本没有使用朴素贝叶斯分类器。该方法与您的建议不同。
所提出的方法是为每种要分类的方言训练基于 n-gram 的语言模型。为了分类给定输入的方言,输入文本使用每种语言模型进行评分。LM 的困惑度越低,概率越高。因此,如果在方言 A 上训练的 LM 为输入分配比方言 B 更低的困惑度(即更高的概率),则输入文本更有可能是方言 A。
困惑度是某些文本按单词数(来源)归一化的逆概率。
对于一个句子 W,
Perplexity(W) = P(W)^(-1/N)
,其中N
是句子中的单词数,P(W)
是 W 根据 LM 的概率。
因此,根据每种语言模型计算输入的概率,进而计算困惑度,并将这些进行比较以选择最可能的方言。
推荐阅读
- android - Firebase 谷歌身份验证
- python - 如何删除具有许多子文件夹的主文件夹中的所有文件?
- python - PyvBox 类型错误
- java - Firebase数据库如何知道用户在哪里编辑值
- r - R中的子集嵌套列表
- angularjs-1.6 - 模块'gantt.table'不可用angularjs1.6
- java - 使用 reassured 远程构建带有文件参数的 jenkins 作业
- ios - 如何使用带有变异键的可编码来解码 JSON?
- postgresql - 如何从 PostgreSQL 返回多个 ref 游标?
- javascript - 如何在 500 内部服务器错误 angularjs 之后/何时获得发布响应