自然语言处理系列二十六》文本相似度算法》字符串编辑距离》算法原理

54 篇文章 1 订阅
51 篇文章 1 订阅
本文介绍了自然语言处理中的文本相似度算法,重点讲解了字符串编辑距离,即Levenshtein距离的算法原理。该算法通过字符操作计算两个字符串之间的转换步数,常用于文本比较。文章还提供了Java和Python的代码实现示例,展示了如何通过动态规划解决这一问题。此外,文中提及该算法在推荐系统、问答系统和预处理等多个场景的应用。
摘要由CSDN通过智能技术生成

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】

自然语言处理系列二十六

文本相似度算法

在自然语言处理中,我们经常需要判定两个东西是否相似。比如,在微博的热点话题推荐那里,我们需要比较微博之间的相似度,让相似度高的微博聚集在一起形成一个簇,提出一个主题。在问答系统中,比如说人工客服,我们需要提前准备好问题和一些答案,让用户输入的问题与题库中的问题进行相似度的比较,最后输出答案。
在推荐系统中,我们需要提取一个用户的所有物品,在根据这个物品找到对应的用户群,比较两个用户之间的相似性,在进行相应的推荐(协同过滤)。在对语料进行预处理的时候,我们需要给予文本的相似度,把相似度高的重复主题过滤掉。
总之,相似度是一种非常有用的工具,可以帮助我们解决很多问题。一般来说,是比较两个物体(商品,文本)之间的相似度。这里的相似度是一个抽象的值,它可以抽象成估计的百分比。在推荐工程中,计算相似度是为了给用户推送一定量的物品。即把所有的相似度排序,然后选出最高的那几个物品。
人是很容易判断出物品的相似度的,人们会在心里有一个考量。那么程序如何判断呢?
如果是文本分析,它首先就要用到分词技术,然后去掉不必要的词(语气词,连接词)。然后对词给一个抽象的量表示权重,最后在用一些方法去统计出整体的相似度。如果是其他的,可能首先也需要进行数据清洗的工作,留下那些关键的能够表示物体特征的部分,对这些部分定权值,再去估计整体。
下面给大家介绍几种常见的文本相似度算法,比如字符串编辑距离、余弦相似度等。

字符串编辑距离

字符串编辑距离是做文本相似度经常用到的算法,下面我们介绍其原理,并同时用Java和Python代码实现。

算法原理

字符串编辑距离,又称为Levenshtein距离,由俄罗斯的数学家Vladimir Levenshtein在1965年提出。是指利用字符操作,把字符串A转换成字符串B所需要的最少操作数。其中,字符操作包括:
删除一个字符
插入一个字符
修改一个字符
例如对于字符串"if"和"iff",可以通过插入一个’f’或者删除一个’f’来达到目的。
问题描述:给定两个字符串A和B,求字符串A至少经过多少步字符操作变成字符串B。
我们先以一个例子分析,比如eat变成tea。对于第一个字符,e != a,所以要想让这两个字符相等,有三种可以选择的办法
修改字符,将e直接变成a,需要走1步。
插入字符,在e的前面插入a,也需要走1步。
删除字符,将e删除,然后比较后面的与a,也需要走1步。
如果是 e==a,那么就可以直接跳过这个字符比较下面的字符,那么他们的距离也就是前面一步的举例了。
经过举例子分析,很容易发现这是一个动态规划问题,那么我们就按照动态规划的一套方法来求解。
1、维护一个dp数组,其中dp[i][j]表示s1[0]—s1[i]和s2[0]–s2[j]相同需要进行的最少步骤;
2、边界条件初始化,dp[i][0]=i,相当于将s1挨个变成空所要进行的步数,对于dp[0][j]=j同理;
3、状态转移方程,我们要得到dp[i][j]的值,假设s1[i-1]和s2[j-1]之前的都已经相等了,那么如果s1[i]==s2[j],显然不需要进行操作,dp[i][j]dp[i-1][j-1];如果s1[i]!=s2[j],那么到达dp[i][j]的就有三条路,分别从dp[i-1][j-1]、dp[i-1][j]、dp[i][j-1],对应的含义分别是修改字符、删除字符和插入字符,在三种操作下,经历的步数都要+1,所以我们只要找三者的最小值然后+1就可以了。
这个题目有一种巧妙的理解办法,就是画表格。画表格法在动态规划太有用了!!!特别是处理这种数组是二维的情况,可以直观的理解状态转移的过程,非常值得学习。
这里以s1=“cafe” s2=“coffee”。表格如下:
(1)初始状态,这里要注意dp数组的长度要比字符串长度+1,因为要保存字符串为空的状态。
初始状态
(2)边界条件初始化
边界条件初始化
(3)状态转移
我们以3,3为例,开始计算。因为c
c,所以3,3格和2,2格相同,都为0。
对于3,4,因为c!=o,所以到达3,4格有三个方向,我们取以下三个值的最小值:
对角数字+1(对于3,4来说为2)
左方数字+1(对于3,4格来说为1)
上方数字+1(对于3,4格来说为3)
因此为格3,4为1
状态转移1
循环操作,推出下表
状态转移2
取右下角,得编辑距离为3
求解字符串编辑距离方法大概就是如此,主要还是会通过表格来找状态转移过程。

总结

此文章有对应的配套视频,其它更多精彩文章请大家下载充电了么app,可获取千万免费好课和文章,配套新书教材请看陈敬雷新书:《分布式机器学习实战》(人工智能科学与技术丛书)

【新书介绍】
《分布式机器学习实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】
新书特色:深入浅出,逐步讲解分布式机器学习的框架及应用配套个性化推荐算法系统、人脸识别、对话机器人等实战项目

【新书介绍视频】
分布式机器学习实战(人工智能科学与技术丛书)新书【陈敬雷】
视频特色:重点对新书进行介绍,最新前沿技术热点剖析,技术职业规划建议!听完此课你对人工智能领域将有一个崭新的技术视野!职业发展也将有更加清晰的认识!

【精品课程】
《分布式机器学习实战》大数据人工智能AI专家级精品课程

【免费体验视频】:
人工智能百万年薪成长路线/从Python到最新热点技术

从Python编程零基础小白入门到人工智能高级实战系列课

视频特色: 本系列专家级精品课有对应的配套书籍《分布式机器学习实战》,精品课和书籍可以互补式学习,彼此相互补充,大大提高了学习效率。本系列课和书籍是以分布式机器学习为主线,并对其依赖的大数据技术做了详细介绍,之后对目前主流的分布式机器学习框架和算法进行重点讲解,本系列课和书籍侧重实战,最后讲几个工业级的系统实战项目给大家。 课程核心内容有互联网公司大数据和人工智能那些事、大数据算法系统架构、大数据基础、Python编程、Java编程、Scala编程、Docker容器、Mahout分布式机器学习平台、Spark分布式机器学习平台、分布式深度学习框架和神经网络算法、自然语言处理算法、工业级完整系统实战(推荐算法系统实战、人脸识别实战、对话机器人实战)、就业/面试技巧/职业生涯规划/职业晋升指导等内容。

【充电了么公司介绍】

充电了么App是专注上班族职业培训充电学习的在线教育平台。

专注工作职业技能提升和学习,提高工作效率,带来经济效益!今天你充电了么?

充电了么官网
http://www.chongdianleme.com/

充电了么App官网下载地址
https://a.app.qq.com/o/simple.jsp?pkgname=com.charged.app

功能特色如下:

【全行业职位】 - 专注职场上班族职业技能提升

覆盖所有行业和职位,不管你是上班族,高管,还是创业都有你要学习的视频和文章。其中大数据智能AI、区块链、深度学习是互联网一线工业级的实战经验。

除了专业技能学习,还有通用职场技能,比如企业管理、股权激励和设计、职业生涯规划、社交礼仪、沟通技巧、演讲技巧、开会技巧、发邮件技巧、工作压力如何放松、人脉关系等等,全方位提高你的专业水平和整体素质。

【牛人课堂】 - 学习牛人的工作经验

1.智能个性化引擎:

海量视频课程,覆盖所有行业、所有职位,通过不同行业职位的技能词偏好挖掘分析,智能匹配你目前职位最感兴趣的技能学习课程。

2.听课全网搜索

输入关键词搜索海量视频课程,应有尽有,总有适合你的课程。

3.听课播放详情

视频播放详情,除了播放当前视频,更有相关视频课程和文章阅读,对某个技能知识点强化,让你轻松成为某个领域的资深专家。

【精品阅读】 - 技能文章兴趣阅读

1.个性化阅读引擎:

千万级文章阅读,覆盖所有行业、所有职位,通过不同行业职位的技能词偏好挖掘分析,智能匹配你目前职位最感兴趣的技能学习文章。

2.阅读全网搜索

输入关键词搜索海量文章阅读,应有尽有,总有你感兴趣的技能学习文章。

【机器人老师】 - 个人提升趣味学习

基于搜索引擎和智能深度学习训练,为您打造更懂你的机器人老师,用自然语言和机器人老师聊天学习,寓教于乐,高效学习,快乐人生。

【精短课程】 - 高效学习知识

海量精短牛人课程,满足你的时间碎片化学习,快速提高某个技能知识点。

上一篇:自然语言处理系列二十五》词性标注》词性标注原理》CRF词性标注
下一篇:自然语言处理系列二十七》文本相似度算法》字符串编辑距离》Java代码实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈敬雷-充电了么-CEO兼CTO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值