我有一个从文本中提取公司名称的算法。它通常做得很好,但是,它有时也会提取看起来像公司名称但显然不是的字符串。例如,“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>
分别是句子的开头和结尾。问题是,句子越长,它的可能性就越小,不管它的组成二元组在数据库中出现的频率如何。