自动化 text/fuzzy 匹配的最佳机器学习方法

Best machine learning approach to automate text/fuzzy matching

我是机器学习的新手,我在 python 做过几个项目。我正在寻找有关如何解决我认为可以自动化的以下问题的建议。

我组织数据质量团队的一名用户的日常任务是获取手动输入的公司名称(带地址)列表,然后他必须搜索公司数据库以找到匹配结果, 使用他的判断 - 即没有硬性规定。

输入示例为:

公司名称、地址第 1 行、国家/地区

其中,用户获取公司名称并将其输入到搜索工具中。在向他呈现结果列表的情况下,他选择最佳匹配但可以选择不选择任何匹配。搜索工具内置于内部并与外部 API 对话,我可以访问源代码,因此我可以修改搜索工具以捕获输入、结果列表,我可以添加一个复选框来查看使用了哪个结果,以及表示已选择 none 的复选框。因此这将成为我标记的训练数据。

从结果中用来判断的列大致相同:

公司名称、地址第 1 行、国家/地区

给定像 Stack Overflow 这样的公司名称,结果可能 return Stack Overflow Ltd.、Stacking Overflowing Shelves Ltd. 等。输入数据相当不错,因此结果通常会产生大约 10 个匹配项,并且对于人类来说,选择哪一个是相当明显的。

我的想法是,如果有足够的训练数据,我可以直接用搜索词调用 API,然后从结果列表中选择合适的结果。

这是可以通过机器学习实现的吗?我正在为每次数据都会不同这一事实而苦苦挣扎。欢迎提出实现这一目标的最佳方法,特别是如何为模型构建数据以及使用哪种分类器等。

要将其定义为 ML 问题,您可以学习相似度函数。

不是class将"Acme Corp"匹配为目标class "Acme"(classifier),而是学习一个函数来学习说明 "Acme Corp" 与 "Acme" 相似,但与 "ABC Corp" 不同。

这通常称为 "Similarity Learning",在您的情况下,可能更具体地说是 "Ranking similarity learning",因为您的目标不是学习将输出相似度值的函数,而是对潜在候选人进行排名。

但在使用完整的 ML 算法之前,我会首先使用字符串距离度量,例如 Levenshtein 距离度量(非常常见且容易找到)。在正面和负面示例中转换您的数据(正面示例:Acme 与 Acme Corp 匹配)。最简单的学习功能是找到最大化分数的编辑距离阈值。您还可以添加参数,例如:"remove Corp."、"remove Ltd" 等,然后找出最适合的组合。

我很高兴看到有人在研究类似的解决方案。

我正在为此使用 fuzzywuzzy,但我想创建一个推荐系统,根据可用信息向公司提出建议,但由于您只有 2 个数据点,我建议如下:

准备2个独立的模糊查找脚本。一份用于公司名称,另一份用于地址。 选择最接近的结果并尝试找出它们各自对象的距离。 示例 - 地址 1 与地址 2 的匹配率为 92% 检查地址 1 的公司名称与地址 2 的公司名称的距离是多少。如果比赛足够好,你就得到了比赛。

我在尝试实施此解决方案时犯的错误是只准备了 1 个严重依赖公司名称的脚本,后来匹配了地址,这降低了我找到匹配项的机会。

谢谢,