【发布时间】:2023-03-06 15:24:02
【问题描述】:
我正在尝试计算句子之间的文本相似度。我有包含服务文本的标准化医疗服务列表(例如神经科医生的咨询)。每次医院/诊所都有自己的服务清单,所以我需要用标准化的服务清单来映射医院的服务清单。我使用 skip-gram 令牌计算医院服务与标准化服务列表之间的 TF-IDF 余弦相似度。我已经这样做了很长时间,所以我也有大约 15 家医院的服务的正确映射。通过“正确映射”,我的组织的医学专家提供了正确的服务映射,这些服务被错误地标记或使用 tf-idf 余弦相似度算法映射。我想使用“正确映射”作为文本分类问题,但没有。在这种情况下,标签的数量超过 10K。有没有办法执行“监督文本相似性”?我尝试了 word2vec 算法,但它没有包含监督元素(即目标变量(先前结果的正确映射))。目前我正在使用 R。我也对 Python 持开放态度。
请参阅下面我的数据集示例(考虑 A as 'standardized service list', B as 'hospital's service list', C as 'correct mapping')。
A <- data.frame(name= c("Patient had X-ray right leg arteries.",
"Subject was administered Rgraphy left shoulder",
"Exam consisted of x-ray leg arteries",
"Patient administered x-ray leg with 20km distance."),
row.names = paste0("A", 1:4), stringsAsFactors = FALSE)
B <- data.frame(name= c(B = "Patient had X-ray left leg arteries",
"Rgraphy right shoulder given to patient",
"X-ray left shoulder revealed nothing sinister",
"Rgraphy right leg arteries tested"),
row.names = paste0("A", 1:4), stringsAsFactors = FALSE)
C <- data.frame(name= c("Patient had X-ray right leg arteries.",
"Subject was administered Rgraphy left shoulder",
"Exam consisted of x-ray leg arteries",
"Patient administered x-ray leg with 20km distance."),
mapping = c("Radiography right leg artery.",
"Radiography left shoulder",
"Radiography leg arteries",
"Radiography leg with more than 10km distance."),
row.names = paste0("A", 1:4), stringsAsFactors = FALSE)
【问题讨论】:
-
你的意思是分类而不是相似度?我将相似性理解为使用相似的词。 TF-IDF 余弦相似度似乎是一个很好的方法。
quanteda在textstat_simil()中有更多方法。RTextTool实现了一些用于分类的机器学习算法。不过好久没更新了。 -
谢谢。我的意思只是文本相似性。想法使用“正确映射”服务列表来查找以后可用于语义匹配的同义词。