【发布时间】:2018-06-20 15:28:51
【问题描述】:
我有一个包含单词和短语混合的大型数据集,例如:
dataset = [
"car",
"red-car",
"lorry",
"broken lorry",
"truck owner",
"train",
...
]
我正在尝试找到一种方法来从一个短句中确定最相似的单词,例如:
input = "I love my car that is red" # should map to "red-car"
input = "I purchased a new lorry" # should map to "lorry"
input = "I hate my redcar" # should map to "red-car"
input = "I will use my truck" # should map to "truck owner"
input = "Look at that yellow lorri" # should map to "lorry"
我尝试了很多方法都没有成功,包括:
使用 TfidfVectorizer 向量化 dataset 和 input,然后计算向量化的 input 值与来自 dataset 的每个单独的向量化项目值的余弦相似度。
问题是,这只有在 input 包含数据集中的确切单词时才真正有效 - 例如,在 input = "trai" 的情况下,它的余弦值为 0 ,而我试图让它映射到数据集中的值"train"。
最明显的解决方案是执行简单的拼写检查,但这可能不是一个有效的选择,因为我仍然想选择最相似的结果,即使单词略有不同,即:
input = "broke" # should map to "broken lorry" given the above dataset
如果有人可以建议我可以尝试的其他潜在方法,那将不胜感激。
【问题讨论】:
-
您可能需要考虑词对之间的 Levenshtein 距离,因为即使输入拼写错误,您似乎也希望能够预测匹配项
-
类似地,使用
nltk包应该可以让您找到词干(例如,break、break、break 都可以映射到单个词干)。 -
@Aalok 我已经尝试了 Levenshtein 距离,我应该提到它,但它似乎不是一个有效的选项,因为在某些情况下
dataset可能包含更长的句子,例如 @ 987654333@,而input可能只是一个单词,例如red,鉴于Levenshtein 距离的性质,它们不太可能被准确映射(尤其是因为它是一个如此庞大的数据集)。
标签: python scikit-learn nlp cosine-similarity sentence-similarity