3

我有一个包含单词和短语混合的大型数据集,例如:

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"

我尝试了多种方法都无济于事,包括:

dataset向量化和使用TfidfVectorizer input,然后计算向量化input值与dataset.

问题是,这只有在input包含数据集中的确切单词时才真正有效 - 例如,在input = "trai"它的余弦值为 0 的情况下,而我试图让它映射到"train"数据集中的值。

最明显的解决方案是执行简单的拼写检查,但这可能不是一个有效的选项,因为我仍然想选择最相似的结果,即使单词略有不同,即:

input = "broke"    # should map to "broken lorry" given the above dataset

如果有人可以建议我可以尝试的其他潜在方法,那将不胜感激。

4

2 回答 2

0

段落向量或 doc2vec 应该可以解决您的问题。只要您有足够且适当的数据集。当然,您必须进行大量调整才能获得正确的结果。你可以试试 gensim/deeplearning4j。但是您可能必须使用其他一些方法来管理拼写错误。

于 2018-06-21T10:56:48.920 回答
0

正如@Aaalok 在评论中所建议的那样,一个想法是使用不同的距离/相似度函数。可能的候选人包括

  • Levenshtein 距离(测量将一个字符串转换为另一个字符串的更改次数)
  • N-gram 相似度(衡量两个字符串之间共享 n-gram 的数量)

另一种可能性是特征生成,即使用附加字符串增强数据集中的项目。这些可以是 n-gram、词干或任何适合您需要的内容。例如,您可以(自动)扩展red-car

red-car red car
于 2018-06-20T16:09:58.673 回答