Python +机器学习:字符串匹配问题

时间:2019-03-17 19:23:26

标签: python machine-learning nlp string-matching

我遇到了一个要解决的问题:

问题在下面解释:

该公司维护着其销售的所有产品(目前将近4,500)的规格数据集。现在,每个客户共享他/她想从公司购买的产品的详细信息(名称,数量,品牌等)。现在,客户在其数据集中输入详细信息时可能会错误地拼写产品名称。同样,可以通过公司数据集中的许多不同方式引用产品。例如:红色冷风可以称为古特尔冷风,整个红色冷风,带茎的红色冷风,不带茎的红色冷风等。

我对如何解决这个问题感到非常困惑。我应该使用任何基于机器学习的技术吗?如果是,请给我解释该怎么办。或者,如果无需机器学习就可以解决此问题,那么也请解释您的方法。我正在使用Python。

挑战:客户可以通过多种方式引用产品,并且公司还可以通过多种方式存储具有不同规格(例如名称,数量,度量单位等)的单个产品。标记数据集我可以发现,红牛能量饮料(客户输入的数据)是红牛(标签),红牛(客户输入的)也是红牛。但是找到这个标签有什么用?因为在我的公司数据集中,红牛也以多种方式出现。同样,我必须找到公司数据集中出现的所有不同名称的红牛。

我的方法: 我将准备这样的Python字典:

{
"red chilly" : ['red chilly', 'guntur chilly', 'red chilly with stem'],
"red bull" : ['red bull energy drink', 'red bull']
}

词典中的每个条目都是一个产品。其键是产品的主干名称的种类,值是产品的所有可能名称。现在,客户输入产品名称,例如红牛能量饮料。我将检查字典中的每个键。如果该键的任何值匹配,那么我将理解该产品实际上是红牛,并且在公司数据集中这两种方式都可以称为红牛和红牛能量饮料。这种方法怎么样?

1 个答案:

答案 0 :(得分:1)

最佳情况

如果您可以访问产品的所有可能的用法名称,那将是最好的情况,您要做的就是检查用户输入的名称是否属于同义词。强大的数据库系统应该可以轻松地处理5000种产品,其中包括10个同义词,每个同义词都具有理想的模式。

基于搜索引擎的解决方案

让我们说如果您不能使用同义词,但可以访问产品的详细英语描述,那么您可以在描述中搜索用户输入的名称。可以使用Apache Solr之类的搜索引擎,该引擎使用基于TFIDF的反向索引。那么SOLR作为最佳结果返回的文档将是相应的产品。简而言之,将您的描述记录到solr中,并在solr中搜索用户输入的产品名称。请注意,只要您的用户不会将香蕉称为“黄色圆柱状水果”,这便是基于词典而不是基于语义而是基于词典的语言就足够了。

基于ML

是称为嵌入的良好分布式矢量表示形式(word2vec,手套)。嵌入的重要重要之处在于相关词之间的距离应很小。但是,这些向量对您不利,因为您拥有的是短语而不是单词(红色是单词,而红色冷颤是短语)。在开源中,没有很好的针对向量嵌入的预训练短语。如果要使用基于向量相似性的模型,则必须构建自己的短语2vec模型。因此,假设您能够构建一个phrase2vec模型,则必须找到与客户键入的产品名称的向量接近的向量(与产品相对应)。