我在数据库中有一个相当小的结构化记录集。鉴于单个记录中包含的信息的一小部分,通过Web表单提交(结构与表模式相同),(让我们将其称为测试记录)我需要快速绘制一个列表记录最有可能匹配测试记录的记录,并提供搜索词与记录匹配程度的置信度。此搜索的主要目的是发现某人是否正在尝试输入与语料库中的一个重复的记录。有一个合理的机会,测试记录将成为一个骗局,并且测试记录不会成为欺骗的合理机会。
记录大约12000字节宽,记录总数约为150,000。表模式中有110列,95%的搜索将位于前5%最常搜索的列中。
数据包括姓名,地址,电话号码和其他行业特定号码。在语料库和测试记录中,它是手动输入的,并且在单个字段内是半结构化的。你可能会乍一看说“用手对列进行加权并匹配其中的单词标记”,但这并不容易。我也这么认为:如果我得到一个电话号码,我认为这表明完美匹配。问题在于表单中没有单个字段,其令牌频率不会按数量级变化。电话号码可能在语料库中出现100次,或在语料库中出现1次。任何其他领域也是如此。这使得在现场级别的加权不切实际。我需要一种更细粒度的方法来获得合适的匹配。
我最初的计划是创建哈希哈希值,顶级域名是字段名称。然后,我将从语料库中选择给定字段的所有信息,尝试清理其中包含的数据,并对已清理的数据进行标记,在第二级对标记进行哈希处理,将标记作为键,频率作为值。
我会将频率计数用作权重:参考语料库中令牌的频率越高,如果在测试记录中找到该标记,我附加的权重就越小。
我的第一个问题是房间里的统计人员:我如何将频率用作重量?是否存在n,记录数,f(t),令牌t出现在语料库中的频率,记录是原始而非重复的概率o以及概率p之间的精确数学关系测试记录实际上是一个记录x给定测试,x在同一个字段中包含相同的t?跨多个字段的多个令牌匹配的关系怎么样?
因为我真诚地怀疑是否存在,是否有任何让我接近但却比完全随意的充满魔法因素的黑客更好?
除此之外,有没有人有办法做到这一点?
我特别热衷于其他不涉及在数据库中维护另一个表的建议,例如令牌频率查找表。
答案 0 :(得分:0)
你可以从这个不同但相似的SO问题中得到一些想法: calculating-context-sensitive-text-correlation
对于手头的问题更具体,这里有一些想法和想法:
首先,承认非常不正确的用法(只有6到10个属性覆盖95%的使用),你可以/应该对属性应用非对称的努力,即在编程时间和期限方面投入更多运行时CPU分配,用于处理这些少数属性,而不是100多个附加属性。
作为输入提供的相对少量的数据用于匹配数据库中可能的重复项,通常使用的相对较小的属性集,以及这些(电话号码,地址,名称......)的明显常见语义表明一只手根据机器学习,制作的解决方案而非一个完全。
注意:此后很多建议不需要应用于所有属性(因为其中不到十几个几乎涵盖了所有用法,没有必要,至少在开始时对其他属性投入很多
以上所有内容仅仅是实际执行比赛的离线准备时间。现在..用户输入他/她的查询...这里有一些关于如何处理它的想法
向最终用户显示超过相似度值特定阈值的记录,以供审核
最后,有一个部分自动化的过程,你可以根据最终用户提供的一些反馈改变一些参数。 (这是非常棘手的,我会把这个留给其他一些帖子;-))