文本匹配算法综述

文本匹配,顾名思义,就是描述两段文本之间的关系,是否指向同一语义;比如两句话是否描述同一件事,或者两句话是否是上下文/问题与答案的关系。例:

小宝宝生病怎么办 狗宝宝生病怎么办
明天天气怎么样 明天预报有雨
先帝创业未半而中道崩殂 今天下三分,益州疲弊,此诚危急存亡之秋也

文本匹配任务在自然语言处理中是非常重要的基础任务之一,有很多应用场景;如信息检索、问答系统、智能对话、文本鉴别、智能推荐、文本数据去重等,但文本匹配或者说自然语言处理仍然存在很多难点。

       如语言不规范,同一句话可以有多种表达方式;如“股市跳水、股市大跌、股市一片绿”

       歧义,同一个词语或句子在不同语境可能表达不同意思;如“割韭菜”,“领盒饭”,“能穿多少穿多少”,在不同语境下语义完全不同

        不规范或错误的输入;如 “ yyds”,“举个栗子”

        需要知识依赖;如丰田supra绰号“牛魔王”等。

        

常见的文本匹配算法如下表,按传统模型和深度模型简单的分为两类:

算法 类型
Jaccord 传统模型
BM25 传统模型
VSM 传统模型
SimHash 传统模型
Levenshtein 传统模型
cdssm 深度模型
arc-ii 深度模型
match_pyramid 深度模型
mvlstm 深度模型
bimpm 深度模型
drcn 深度模型
esim 深度模型
textmatching 深度模型
bert-base 深度模型
albert-base 深度模型

albert-large

深度模型
raberta 深度模型
sbert 深度模型

接下来,让我们通过一个例子,来具体看一下各个算法的实现过程及匹配效果(其中并没有实现深度学习类算法)。

举个栗子:

序号 句1 句2 真实结果
1 内蒙古锡林郭勒盟多伦县县医院 多伦县医院 1(匹配)
2 绵阳市四零四医院 四川绵阳404医院 1(匹配)
3 邓州市人民医院 南召县人民医院 0(不匹配)

1.Jaccard杰卡德相似系数

        jaccard相似度是一种非常直观的相似度计算方式,即两句子分词后词语的交集中词语数与并集中词语数之比。

jaccard = \frac{A\bigcap B}{A\bigcup B}

def jaccard(list1, list2):
    """
    jaccard相似系数
    :param list1:第一句话的词列表 
    :param list2: 第二句话的词列表
    :return:相似度,float值 
    """
    list1, list2 = set(list1), set(list2) #去重
    intersection = list1.intersection(list2) # 交集
    union = list1.union(list2)  # 并集
    Similarity = 1.0 * len(intersection) / len(union) #交集比并集
    return Similarity

  a.分词

        内蒙古 锡林郭勒盟 多伦县 县医院    /    多伦县 医院

        绵阳市  四 零 四 医院     /     四川 绵阳 404 医院

        邓州市 人民 医院       /       南召县 人民 医院

b.去重求交集--并集

        多伦县(交集)    --      内蒙古、锡林郭勒盟、多伦县县医院、医院(并集)

        医院(交集)      --        绵阳市、四、零、医院、四川、绵阳、404(并集)

        人民、医院(交集)    --     邓州市、人民、医院、南召县(并集)

c.相似度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值