Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Machine learning 自动化文本/模糊匹配的最佳机器学习方法_Machine Learning_Text Classification_Fuzzy Comparison_Record Linkage - Fatal编程技术网

Machine learning 自动化文本/模糊匹配的最佳机器学习方法

Machine learning 自动化文本/模糊匹配的最佳机器学习方法,machine-learning,text-classification,fuzzy-comparison,record-linkage,Machine Learning,Text Classification,Fuzzy Comparison,Record Linkage,我对机器学习相当陌生,我用python做过几个项目。我正在寻找关于如何解决以下问题的建议,我相信这些问题可以自动解决 我所在组织的数据质量团队中的用户每天都有一项任务,即获取手动输入的公司名称(含地址)列表,然后他必须使用自己的判断搜索公司数据库以找到匹配结果,即没有硬性规定 输入的一个例子是: 公司名称、地址第1行、国家/地区 其中,用户获取公司名称并将其输入搜索工具。向他展示一份结果列表,他选择最佳匹配,但可以选择不选择任何匹配。搜索工具内置并与外部API对话,我可以访问源代码,这样我可以修

我对机器学习相当陌生,我用python做过几个项目。我正在寻找关于如何解决以下问题的建议,我相信这些问题可以自动解决

我所在组织的数据质量团队中的用户每天都有一项任务,即获取手动输入的公司名称(含地址)列表,然后他必须使用自己的判断搜索公司数据库以找到匹配结果,即没有硬性规定

输入的一个例子是:

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

其中,用户获取公司名称并将其输入搜索工具。向他展示一份结果列表,他选择最佳匹配,但可以选择不选择任何匹配。搜索工具内置并与外部API对话,我可以访问源代码,这样我可以修改搜索工具以捕获输入、结果列表,并且可以添加一个复选框以查看使用了哪个结果,以及一个复选框以表示未选择任何结果。因此,这将成为我的标签培训数据

从结果中得出判断所用的列大致相同:

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

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

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


这是通过ML可以实现的吗?每次数据都会不一样,这一事实让我难以接受。关于实现这一点的最佳方法的想法是受欢迎的,特别是如何为模型构造数据以及使用什么样的分类器等。

要将其作为一个ML问题,您可以学习相似性函数

与将“Acme Corp”分类为与目标类“Acme”(分类器)匹配不同,您将学习一个函数,该函数学习告诉您“Acme Corp”类似于“Acme”,但与“ABC Corp”不同

这通常被称为“相似性学习”,在您的情况下,可能更具体地说是“排序相似性学习”,因为您的目标不是学习将输出相似性值的函数,而是对潜在候选对象进行排序


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

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

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

准备2个独立的模糊查找脚本。一个代表公司名称,另一个代表地址。 选择最近的结果,并尝试查找其各自对象的距离。 示例-address1与address2的匹配为92%,检查address1的公司名称与address2的公司名称之间的距离。如果这场比赛足够好,你就得到了你的对手

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


谢谢,

这听起来更像是模糊匹配,而不是文本分类。你可能会收到糟糕的ML分类结果,因为有大量的标签,这将是所有可能的公司名称,你想匹配。谢谢,我已经更新了描述。我想知道是否有一种方法可以给出一个模糊匹配的结果,并结合选择哪一个来增强它。当有相似的结果时,或者同一家公司有多个结果时,有一些逻辑用来决定采用哪一个结果。例如,如果可用,他们将总部置于公司分支机构之上,这在另一个字段中表示。我想这也可以被视为一个二元分类问题,对于每一对公司描述,你必须回答它们是否对应于同一家公司。Levenshtein距离、tfidf或ngrams匹配可以用作特征。即使解决方案很简单,如选择Levenshtein距离中的阈值,或应用词干/停止词的一些组合,使用ML方法选择阈值并测量分类质量也很好。@NickP您能共享数据(公司名称)吗?Hi Pascal,这听起来像是我想要的那种东西,我想你在任何地方都没有看到过这样的好例子,是吗?另外,你知道有什么好的相似性学习库吗。Ta.@NickP也许你根本不需要“真正的”ML。首先,我将使用字符串距离度量,例如Levenshtein距离度量(非常常见且容易找到)。在正面和负面的例子中转换您的数据(正面的例子:Acme与Acme Corp匹配)。最简单的学习功能是找到最大化分数的编辑距离阈值。您还可以添加参数,如:“remove Corp.”、“remove Ltd.”等,并找到最佳组合。这里可能不需要完整的ML。@NickP请查看,以了解如何使用ML进行此操作的说明problem@PascalSoucy你能就如何获得正面和负面的例子给出一些建议吗?对于大多数班级