您能推荐我最好的方法吗?我有一系列短语,例如[“免费鲜花配送”,”莫斯科鲜花配送”,”颜色 + 家居配送”,”鲜花配送 + 配送”,”订购鲜花 + 带配送”,”颜色配送”],以及一个模式 – “鲜花配送”。我需要得到一个与模式尽可能接近的短语列表。
您能给一些建议吗?
回答:
简单方法
暴力搜索
有很多方法可以做到这一点,但最简单的方法是直接匹配:只需在输入短语中搜索字符串”鲜花配送”。这种方法相当二元,但您可以修改这种方法以使用二元语法或词袋模型。
词袋模型
词袋模型意味着我们解析短语和模式,并获得其中的词列表或集合,即[“鲜花”, “配送”]。您可以通过计算某种相似度指标来为每个短语评分(即,模式中的词集合是否出现在短语中),然后根据最接近的匹配对短语进行排名:
bag_pattern = set()for word in pattern: set.add(word)for phrase in phrases: score = 0 for word in phrase: if word in bag_pattern: score += 1 # 根据分数做一些事情
N元语法
我们可能希望考虑位置 – 即”鲜花配送”比”配送鲜花”更相关。我们可以计算短语和模式的N元语法(通常是二元语法或三元语法,即2或3个词的组合)。假设我们使用二元语法:
“鲜花配送莫斯科” -> [“鲜花配送”, “配送莫斯科”
然后您可以应用某种评分来决定这是一个多么好的匹配。
文本预处理
通常,您需要进行一些文本预处理。您可能希望在词袋模型中消除停用词(如”the”, “a”等),并且您可能希望将动词等标准化为其词根形式。
机器学习
好的,所以您的上司不喜欢简单有效的方法,规定您必须使用机器学习。这也行得通!
朴素贝叶斯
最简单的技术是查看词的概率,并将它们相乘。经典的例子是电子邮件的垃圾邮件检测。
方法是获取一批文本形式的电子邮件,并将它们分为两类 – 垃圾邮件和非垃圾邮件。然后,您浏览所有电子邮件,对于您看到的每个唯一词,您计算在垃圾邮件和非垃圾邮件中的出现次数。这给您提供了词出现在垃圾邮件中的概率。
假设您有一封包含以下内容的电子邮件:
“你好,我是一位尼日利亚王子。”
根据您之前计算的概率,您可以查找每个词的概率,将它们相乘,并得到电子邮件的得分,按词数进行归一化。”尼日利亚”和”王子”将具有不成比例的高概率出现在垃圾邮件中,因此这封电子邮件将得分很高!
深度学习
以下链接涵盖了使用深度学习技术的词袋模型和N元语法:
https://pytorch.org/tutorials/beginner/deep_learning_nlp_tutorial.html