2

我对机器学习非常熟悉,我在Python中完成了一些项目。我正在寻找如何解决我认为可以实现自动化的以下问题的建议。自动化文本/模糊匹配的最佳机器学习方法

我组织中的数据质量团队中的用户每天都会收集已手动输入的公司名称(含地址)列表,他必须搜索公司数据库以查找匹配结果,使用他的判断 - 即没有硬性规定。

输入的一个例子是:

公司名称,地址行1,国家

如此,用户实现了公司名称和将其输入的搜索工具。他在哪里得到一份结果列表,并且选择最佳匹配,但可能选择不选择任何匹配。搜索工具是内置的,可与外部API交流,我可以访问源代码,因此我可以修改搜索工具以捕获输入,结果列表,并且可以添加复选框以查看使用哪个结果,还有一个复选框表示没有人被选中。因此这将成为我标记的训练数据。

从结果来做出判断的列是大致相同:

公司名称,地址行1,国家

鉴于公司名称,如堆栈溢出,结果可能会返回堆栈溢出有限公司Stacking Overflowing Shelves Ltd.等。输入数据相当不错,所以结果通常会产生大约10场比赛,而对于一个人来说,很明显选择哪一个。

我的想法是,有足够的训练数据,我可以与搜索项直接调用API,然后从结果列表中相应的结果。

这是可以通过ML来实现的吗?我正在努力争取数据每次都会有所不同。的最佳方式思考实现这一目标的欢迎,特别是如何构建的模型数据,并使用哪种分类等

+0

这听起来更像是模糊匹配而不是文本分类。由于标签数量庞大,您可能会收到糟糕的ML分类结果,这将成为您希望匹配的所有可能的公司名称。 – aberger

+0

谢谢,我已经更新了描述。我想知道是否有一种方法可以将模糊匹配的结果与选择哪种模糊匹配的结果相结合,从而增强模糊匹配的效果。当存在类似的结果时,有一些逻辑用于决定采取哪种结果,或者对于同一家公司来说,采用多个结果。例如。他们将公司的总部设在公司的分支机构上,这在另一个领域是有意义的。 –

+0

我想这也可以被看作二元分类问题,其中对于公司的每一对描述,您都必须回答他们是否对应于同一家公司。 Levenshtein距离,tfidf或ngrams匹配可用作特征。即使解决方案将像在Levenshtein距离中选择阈值一样简单,或者应用词干/停用词的某种组合,使用ML方法来选择该阈值并测量分类质量仍然很不错。 – Dienow

回答

4

到帧它作为一个ML问题,你可以学到相似的功能。

而不是将“Acme Corp”分类为匹配目标类“Acme”(分类器),而是学习一个函数,学习如何识别“Acme Corp”与“Acme”类似,但与“ABC公司”。

这通常被称为“相似性学习”,你的情况,也许更具体的“排名相似性学习”,因为你的目标是不学,将输出一个相似值,而是排名潜在候选人的功能。

但使用全ML算法之前,我会使用字符串距离度量,比如莱文斯坦距离度量(非常普遍,容易找到)首先启动。在正面和负面的例子中转换您的数据(一个正面的例子:Acme是Acme Corp的一个匹配)。最简单的学习功能是找到最大化您的分数的编辑距离阈值。您还可以添加如下参数:“删除公司”,“删除有限公司”等,并找出最适合的组合。

+0

嗨帕斯卡尔,这听起来像是我以后的事情,我不认为你曾经见过这样一个体面的例子吗?另外,你是否知道任何用于相似性学习的好的库。助教。 –

+0

@NickP也许你根本不需要“真正的”ML。我会首先使用字符串距离度量标准来开始,例如Levenshtein距离度量标准(非常常见且容易找到)。在正面和负面的例子中转换您的数据(一个正面的例子:Acme是Acme Corp的一个匹配)。最简单的学习功能是找到最大化您的分数的编辑距离阈值。您还可以添加如下参数:“删除公司”,“删除有限公司”等,并找出最适合的组合。这里你可能不需要完整的ML。 –

+1

@NickP查看[重复数据删除库概述](https://dedupe.readthedocs.io/en/latest/How-it-works.html),了解如何针对此问题使用ML的说明 – fgregg