文本相似在问答系统中有很重要的应用,如基于知识的问答系统(Knowledge-based QA),基于文档的问答系统(Documen-based QA),以及基于FAQ的问答系统(Community-QA)等。像 对于问题的内容,需要进行相似度匹配,从而选择出与问题最接近,同时最合理的答案。本节介绍 基于simhash相似度。
算法描述:先计算两句子的simhash二进制编码,然后使用海明距离计算,最后使用两句的最大simhash值归一化得相似度。
from simhash import Simhash
def sim_simhash(s1, s2):
"""先计算两文档的simhash值,然后使用汉明距离求相似度"""
# 1. 计算文本simhash值
a_simhash = Simhash(s1, f=64)
b_simhash = Simhash(s2, f=64)
max_hashbit = max(len(bin(a_simhash.value)), len(bin(b_simhash.value)))
# 2. 计算汉明距离汉明距离
distance = a_simhash.distance(b_simhash)
# 3. 归一化到0~1
sim = 1 - distance / max_hashbit
return sim
word1 = '这是什么'
word2 = '这个什么价钱'
word_sim = sim_simhash( word1, word2 )