我有一个庞大的数据集,其中包含单词和短短语的组合,例如:
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
值的余弦相似度。 / p>
问题是,仅当input
包含数据集中的确切单词时,这才真正起作用-例如,在input = "trai"
的情况下,它将具有一个余弦值0,而我正试图使其映射到数据集中的值"train"
。
最明显的解决方案是执行简单的拼写检查,但这可能不是一个有效的选择,因为即使在单词略有不同的情况下,我仍然希望选择最相似的结果,即:
input = "broke" # should map to "broken lorry" given the above dataset
如果有人可以建议我尝试其他可能的方法,那将不胜感激。
答案 0 :(得分:0)
正如@Aaalok在评论中建议的那样,一种想法是使用不同的距离/相似度函数。可能的候选人包括
另一种可能性是功能生成,即使用其他字符串增强数据集中的项目。这些可以是n-gram,词干或任何适合您的需求。例如,您可以(自动)将red-car
展开为
red-car red car
答案 1 :(得分:0)
段落向量或doc2vec应该可以解决您的问题。提供足够和适当的数据集。当然,您必须进行大量调整才能使结果正确。您可以尝试gensim / deeplearning4j。但是您可能必须使用其他方法来管理拼写错误。