zipf定律与相似性度量

Zipf定律指出,在文本中,标识符出现的频率与其在排序列表中的排名或位置成反比。这个定律描述了标识符在文本中是如何分布的,即一些标志符出现的频次很大,另一些出现的频次较低,还有一些基本不出现。它是自然语言处理中,非常重要的一个定律,它的数学语言可以这样描述:在给定的语料库里,对于任意的一个term,它的频度f与这个频度在语料库中的排名r的乘积近似一个常数。即f正比于1/r。以英语语料库为例,其他语料库一样遵循zipf定律,表明在英语单词中,只有极少数的词被经常使用,而绝大多数词很少被使用。事实上,它是一个很普遍的规律,比如网站的访问者数量、每个国家公司的数量都近似服从zipf定律。下面用nltk来获取基于zipf定律的双对数图,代码如下:

#使用nltk获取基于zipf定律的双对数图
import nltk
from nltk.corpus import brown  #使用布朗语料库
from nltk.probability import FreqDist   #用来记录语料库中词频的分布
import matplotlib
import matplotlib.pyplot as plt
matplotlib.use('TkAgg')
def zipf_log_log():fd=FreqDist()    #FreqDist()获取语料库中的词的频率分布for text in brown.fileids():     #fileids()为语料库中的文件for word in brown.words(text):   #words()包含了语料库中所有的单词fd[word]+=1ranks=[]freqs=[]for rank,word in enumerate(fd):   #把rank和word做一个枚举ranks.append(rank+1)freqs.append(fd[word])plt.loglog(ranks,freqs)     #做双对数图plt.xlabel('frequency(f)',fontsize=14,fontweight='bold')plt.ylabel('rank(r)',fontsize=14,fontweight='bold')plt.grid(True)plt.show()
if __name__=="__main__":zipf_log_log()

结果如图所示:

可以看到一个词的出现越频繁,也就是词频越高,它的排名越靠后。

相似性度量

在NLP中进行距离的相似性度量很多,这里对其中的几种非常常用的作以介绍,包括编辑距离算法、Jaccard系数、Smith Waterman算法等等。

对于编辑距离算法,以两个字符串作以比较,指的是为了使两个字符串相等所插入、替换或删除的字符的数量。

下面以代码实现再加以解释,编辑距离代码如下:

#使用编辑距离进行相似性度量
import nltk
from nltk.metrics import edit_distance
e_d=edit_distance("machine_learning","deep_learning")
print("The two words edit_distance is:"+str(e_d))

输出结果:

因为要使的这两个词相等,需要做7次替换,注意这种编辑距离算法是按长的来匹配的,即把deep替换成machine,先进行4次替换再进行3次插入。

Jaccard系数相似性度量:

Jaccard系数描述的是两个集合交集的相似程度,代码实现如下:

#使用Jaccard系数度量集合X与Y的相似度
#方法一:自己造轮子实现Jaccard系数
def jaccard_similarity(query,document):molecular=set(query).intersection(set(document))   #分子,两个集合的交集denominator=set(query).union(set(document))       #分母,两个集合的并集return len(molecular)/len(denominator)
#方法二:使用nltk中的Jaccard系数
def nltk_jaccard(X,Y):import nltkfrom nltk.metrics import jaccard_distancereturn jaccard_distance(X,Y)
if __name__=="__main__":X=set([10,20,30])Y=set([20,30,40])d_1=jaccard_similarity(X,Y)    #自己的轮子实现d_2=nltk_jaccard(X,Y)          #使用nltk中的实现print("d_1="+str(d_1))print("d_2="+str(d_2))

执行完程序后,结果如下:

当然了,相似性度量的距离算法有很多,想经常用到的度量词义之间的相似性,比如在word2vec中的使用欧氏距离的度量方法来寻找词义相近的词,等等。

zipf定律与相似性度量相关推荐

  1. 01_字符串处理-----04_在文本中应用ZIpf定律

    # Zipf定律指出,文本中标识符出现的频率与其在排序列表中的排名或位置成反比. # 所以,频率最高的单词出现的频率大约是出现频率第二位的单词的2倍,而出现频率第二位的单词则是出现频率第四位的单词的2 ...

  2. [python数据分析] 简述幂率定律及绘制Power-law函数

    这篇文章主要是最近研究人类行为应用的内容,主要简单叙述下复杂网络的幂率分布以及绘制Power-law函数一些知识,同时是一篇在线笔记.希望对您有所帮助,如果文章中存在不足或错误的地方,还请海涵~    ...

  3. 语言统计学中的几个定律,可作为设计检索的参考

    30定律:出现频率最高的30个词占全文本总词数的30% 如果剔除150个最高频率的词(由于df过大被认为是停用词):倒排表记录总个数会减少25-30% Zipf定律: 在自然语料库中所有term的fr ...

  4. 搜索广告算法中4个有趣的定律

    Principle of Least Effort & Power law distribution 翻译成中文叫"省力原则"或"最小成本原则",即认为 ...

  5. python自然语言处理书籍_精通Python自然语言处理pdf

    自然语言处理(NLP)是有关计算语言学与人工智能的研究领域之一.NLP主要关注人机交互,它提供了计算机和人类之间的无缝交互,使得计算机在机器学习的帮助下理解人类语言. 本书详细介绍如何使用Python ...

  6. 【论文笔记】DeepWalk:大型社会表示的在线学习

    DeepWalk: Online Learning of Social Representations Arxiv 1403.6652 二.问题定义 我们将社交网络的成员分类问题考虑为一个或多个类别. ...

  7. 基于python的语料库数据处理电子版_[异步图书].精通Python自然语言处理[PDF][16.04MB]...

    内容简介 自然语言处理是计算语言学和人工智能之中与人机交互相关的领域之一. 本书是学习自然语言处理的一本综合学习指南,介绍了如何用Python实现各种NLP任务,以帮助读者创建基于真实生活应用的项目. ...

  8. 论文泛读记录(多模情感分析/探测;厌恶语音探测;属性级情感分析;CVPR2022和ACL2022 三元组/对比学习/视觉语言预训练/机器翻译/预训练模型/机器阅读理解)

    文章目录 1.1 CTFN: Hierarchical Learning for Multimodal Sentiment Analysis Using Coupled-Translation Fus ...

  9. NLP问题特征表达基础 - 语言模型(Language Model)发展演化历程讨论

    1. NLP问题简介 0x1:NLP问题都包括哪些内涵 人们对真实世界的感知被成为感知世界,而人们用语言表达出自己的感知视为文本数据.那么反过来,NLP,或者更精确地表达为文本挖掘,则是从文本数据出发 ...

  10. 【GNN】图嵌入之 DeepWalk:基于社交表征的在线学习算法

    论文名称:DeepWalk: Online Learning of Social Representations 论文下载:https://arxiv.org/abs/1403.6652 论文年份:S ...

最新文章

  1. 跟我做CVS版本管理试验
  2. php 事件调度,PHP单元测试调度事件
  3. 可视化戒烟对身体的影响!从20分钟到15年
  4. oracle 添加归档日志文件_oracle 归档日志文件路径设置
  5. ElasticSearch入门系列(一)是什么以及安装和运行
  6. 关于跨域的处理的几种方法的整理
  7. 【比赛】智源-知乎联合发布大规模用户邀请回答数据集,同步开启10万元竞赛...
  8. 一个button同时执行多个有返回值的函数的解决方法(return false; or return true;)...
  9. 上海译文公布2019年“新书目录” 名家名译作品结集出版
  10. 学习HTMLT5_1 拖拽
  11. 北航计算机组成原理课程设计-2020秋 PreProject-Logisim-Logisim仿真与调试应用与挑战
  12. 简图记录-番茄时间管理
  13. 彻底搞懂 python 中文乱码问题_彻底搞懂 python 中文乱码问题(深入分析)
  14. 从Shutterstock下载无水印图片
  15. 加息对股市影响|加息会有什么后果
  16. [单片机框架][DFU] Dfu升级例子 带crc校验+超时机制+led指示灯+芯片加锁+芯片自擦
  17. 【​观察】“数字广东”背后的力量 腾讯云创新政务服务新模式
  18. LeetCode 176 第二高的薪水
  19. 算法(并查集--合并集合)
  20. 法国DREAM方案SAM5504B/SAM5704B音源芯片

热门文章

  1. UG二次开发UFUN C NXOpen C++全套视频教程
  2. 计算机验证iq oq pq,验证、确认、鉴定过程、DQ、IQ、OQ、PQ这几个概念如何理解?...
  3. c语言中局部变量存放在哪里,C语言全局变量存放在哪里?
  4. 电子书,世界名著,中国名著
  5. 实现计算机系统的资源共享,实现多操作系统计算机的资源共享.pdf
  6. 在线超市系统-PythonGUI Tkinter 图片界面设计案例
  7. 一款Spring Boot前后端分离的进销存综合管理系统源码
  8. 别错过!漂亮又好用的思维导图模板
  9. rk从u盘更新屏参文件_[更新]解决八代I3在华擎B150上核显不亮机问题
  10. 城市综合杆道路智慧路灯多杆合一项目解决方案解析