3

我有一个从文本中提取公司名称的算法。它通常做得很好,但是,它有时也会提取看起来像公司名称但显然不是的字符串。例如,“Contact Us”、“Colorado Springs CO”、“Cosmetic Dentist”显然不是公司名称。这样的误报太多了,要列入黑名单,所以我想介绍一种对提取的字符串进行排序的算法方式,这样可以丢弃排名最低的字符串。

目前,我正在考虑使用统计语言模型来做到这一点。该模型可以根据字符串中每个单词的概率的乘积对每个字符串进行评分(考虑最简单的一元模型)。我的问题是:这样的模型可以用来比较不同长度的单词序列吗?由于根据定义,概率小于 1,因此较长序列的概率通常会小于较短序列的概率。这会使模型偏向于更长的序列,这不是一件好事。

有没有办法使用这种统计语言模型来比较不同长度的单词序列?或者,是否有更好的方法来对序列进行评分?

例如,使用二元模型和一些现有数据,这就是我得到的:

python slm.py About NEC
        <s> about 6
        about nec 1
        nec </s> 1
4.26701019773e-17
python slm.py NEC
        <s> nec 6
        nec </s> 1
2.21887517189e-11
python slm.py NEC Corporation
        <s> nec 6
        nec corporation 3
        corporation </s> 3593
4.59941029214e-13
python slm.py NEC Corporation of
        <s> nec 6
        nec corporation 3
        corporation of 41
        of </s> 1
1.00929844083e-20
python slm.py NEC Corporation of America
        <s> nec 6
        nec corporation 3
        corporation of 41
        of america 224
        america </s> 275
1.19561436587e-21

缩进线显示模型中的二元组及其频率。<s></s>分别是句子的开头和结尾。问题是,句子越长,它的可能性就越小,不管它的组成二元组在数据库中出现的频率如何。

4

1 回答 1

3

您能否根据句子长度对分数进行归一化,或者在 unigram、bigram 和 trigram 模型上使用EM 算法?

9/24 编辑:

您可能可以尝试一些替代方案。一种方法是对 unigram、bigram 和 trigram 模型进行最大似然估计并进行线性插值(参见:http ://www.cs.columbia.edu/~mcollins/lm-spring2013.pdf )。对于位置 i 处的每个单词,您可以确定 (i+1) 是否是句子的结尾或最有可能出现的单词。此方法要求您设置训练和测试数据集以评估性能(困惑度)。

我会避免对每个单词的概率进行简单的乘法运算。当单词不独立时,例如 P (NEC, Corporation) != P (NEC) * P (Corporation)。

于 2013-09-23T17:31:15.303 回答