我对机器学习还比较新手,已经用Python完成了几个项目。我正在寻求建议,如何解决下面的问题,我认为可以自动化处理。
我所在组织的数据质量团队中的一位用户每天需要处理一份手动输入的公司名称(连同地址)列表,他需要在公司数据库中搜索以找到匹配的结果,依靠他的判断——即没有固定的规则。
输入的示例可能是:
公司名称,地址行1,国家
用户会从中提取公司名称并输入到搜索工具中。他会看到一系列结果,并选择最佳匹配,但也可能选择不匹配任何结果。搜索工具是内部开发的,并与外部API通信,我可以访问源代码,因此我可以修改搜索工具以捕获输入、结果列表,并且可以添加复选框来查看使用了哪个结果,以及一个复选框表示未选择任何结果。因此,这将成为我的标记训练数据。
用于判断的结果中的列大致相同:
公司名称,地址行1,国家
对于像Stack Overflow这样的公司名称,结果可能会返回Stack Overflow Ltd., Stacking Overflowing Shelves Ltd.等。输入数据质量较好,因此结果通常会产生大约10个匹配,对于人类来说,选择哪个是相当明显的。
我的想法是,通过足够的训练数据,我可以直接用搜索词调用API,然后从结果列表中选择适当的结果。
这是可以通过机器学习实现的吗?我在处理每次数据都不同的问题上遇到了困难。欢迎对实现这一目标的最佳方法的建议,特别是如何为模型构建数据以及使用哪种分类器等的建议。
回答:
将其定义为机器学习问题,你可以学习一个相似性函数。
不是将”Acme Corp”分类为匹配目标类”Acme”(分类器),而是学习一个函数,学会判断”Acme Corp”与”Acme”相似,但与”ABC Corp”不相似。
这通常被称为“相似性学习”,在你的情况下,可能更具体地称为“排序相似性学习”,因为你的目标不是学习一个输出相似值的函数,而是对潜在候选进行排序。
但在使用完整的机器学习算法之前,我会先从使用字符串距离度量开始,例如Levenshtein距离度量(非常常见且易于找到)。将你的数据转换为正负示例(正面示例:Acme与Acme Corp匹配)。最简单的学习函数将是找到最大化你的得分的编辑距离阈值。你还可以添加参数,如:“去掉Corp.”、“去掉Ltd”等,并找出最佳组合效果。