文本相似在问答系统中有很重要的应用,如基于知识的问答系统(Knowledge-based QA),基于文档的问答系统(Documen-based QA),以及基于FAQ的问答系统(Community-QA)等。像 对于问题的内容,需要进行相似度匹配,从而选择出与问题最接近,同时最合理的答案。本节介绍 基于Word2Vec的wmdistance计算相似度。
需要知识:
(1)Word2Vec
(2)Word Mover Distance (WMD)
基于gensim实现:
import time
import jieba
import gensim
import threading
import numpy as np
w2v_model_file = 'w2v_model_file'
w2v_model = gensim.models.Word2Vec.load(w2v_model_file)
w2v_model.init_sims(replace=True) # normalizes vectors
distance = w2v_model.wmdistance("提前结清", "我需要提前结清")
print ('distance>>>>', distance)
测试结果:
"你有什么事你说。", "我是他家人/朋友,你有什么事可以给我说?" 0.6694891459671026
"呃,我想提前结清我名下那个款项。", "我需要提前结清" 0.6992085239002946
"你们是你们哪,你们哪里的。", "你们是哪里,你们是谁?" 0.27438064142232443
"提前结清。", "我需要提前结清" 0.5150805852253076
其他:
(1)在文本相似标注上的应用:# 粗排:使用word mover distance(WMD)来进行初始的排查,最终得分0-0.15的太相似了,0.45-1分的基本不相关,所以从0.15-0.45分钟选择了10%来进行人工标注