齐普夫定律在循环神经网络中的语言模型的应用
目录
- 齐普夫定律解释
- 公式解释
- 图与公式的关系
- 代码与图的分析
- 结论
- 使用对数表达方式的原因
- 1. 线性化非线性关系
- 2. 方便数据可视化和分析
- 3. 降低数值范围
- 4. 方便参数估计
- 公式详细解释
- 结论
来自:https://zh-v2.d2l.ai/chapter_recurrent-neural-networks/language-models-and-dataset.html
齐普夫定律解释
齐普夫定律(Zipf’s Law)是一种描述自然语言中单词频率分布的经验法则,它指出在一个文本或语料库中,单词的频率与其出现的排名成反比关系。具体来说,频率最高的单词出现的次数最多,排名第二的单词出现的次数大约是最高频单词的一半,排名第三的单词出现次数是最高频单词的三分之一,依此类推。
公式解释
齐普夫定律的数学表达式可以表示为:
n i ∝ 1 i α n_i \propto \frac{1}{i^\alpha} ni∝iα1
其中, n i n_i ni 表示第 ( i ) 个单词的频率,( i ) 是该单词的排名,( \alpha ) 是一个常数。为了便于理解,这个公式可以变形为:
[ n_i = \frac{C}{i^\alpha} ]
其中 ( C ) 是一个归一化常数。
在图8.3.7和8.3.8中,这个公式被进一步转化为对数形式,以便在对数坐标系中表现出线性关系:
[ \log n_i = -\alpha \log i + c ]
这里,( \log n_i ) 是单词频率的对数,( \log i ) 是单词排名的对数,( \alpha ) 是斜率,( c ) 是截距。
图与公式的关系
在图中绘制了词频与排名的对数图。通过对图像进行对数变换,可以观察到频率与排名之间的关系是否遵循齐普夫定律。如果单词频率与排名在对数坐标系中呈现一条直线,这意味着词频与排名确实遵循齐普夫定律,即:
[ \log n_i = -\alpha \log i + c ]
从图中我们可以看到,词频分布在对数坐标系中近似为一条直线,这验证了齐普夫定律的正确性。
代码与图的分析
从代码和图中,我们可以看到以下几个步骤:
- 统计词频:读取文本数据并进行分词,统计每个单词的出现频率。
- 排序:根据单词的出现频率对单词进行排序,得到每个单词的排名。
- 绘制图形:在对数坐标系中绘制单词的频率和排名的关系图。
代码示例如下:
import random
import torch
from d2l import torch as d2ltokens = d2l.tokenize(d2l.read_time_machine())
corpus = [token for line in tokens for token in line]
vocab = d2l.Vocab(corpus)
vocab.token_freqs[:10]freqs = [freq for token, freq in vocab.token_freqs]
d2l.plot(freqs, xlabel='token: x', ylabel='frequency: n(x)',xscale='log', yscale='log')
上面的代码统计了文本数据中的词频,并在对数坐标系中绘制了词频图。
结论
通过以上分析,我们可以理解齐普夫定律的基本概念及其数学表示方式,并通过代码和图形验证了齐普夫定律在自然语言词频分布中的应用。具体地,通过观察词频和排名在对数坐标系中的线性关系,我们可以确认自然语言中的单词频率确实遵循齐普夫定律。
使用对数表达方式的原因
使用对数表达方式([ \log n_i = -\alpha \log i + c ])的原因主要有以下几点:
1. 线性化非线性关系
齐普夫定律本身是一个非线性关系:
[ n_i \propto \frac{1}{i^\alpha} ]
通过取对数,两边都取对数后变为线性关系:
[ \log n_i = -\alpha \log i + c ]
这使得我们可以用直线来描述这个关系,而直线在统计学和数据分析中更容易处理和理解。
2. 方便数据可视化和分析
对数坐标系能够更直观地展示数据的幂律分布特性。在对数坐标系中,幂律分布的数据点会呈现为一条直线,这使得我们可以更容易地识别和验证数据是否符合齐普夫定律。
在图中,横轴(单词排名)和纵轴(单词频率)都取对数,如果数据点近似排列成一条直线,就说明词频分布符合齐普夫定律。这种图形化表示使得观察和分析数据的分布规律变得直观和简单。
3. 降低数值范围
自然语言中的单词频率差异很大,频率最高的单词和频率最低的单词可能相差几个数量级。直接使用原始数据进行分析和可视化会遇到数值范围过大的问题,导致图形难以阅读和解释。而通过取对数,可以压缩数据的范围,使得不同频率的单词在图中更紧凑地展示,便于比较和分析。
4. 方便参数估计
在对数空间中,线性回归可以用来估计幂律分布中的参数。通过线性回归,我们可以得到斜率 ( -\alpha ) 和截距 ( c ),进而估计出原始幂律分布的参数。这在统计建模和参数估计中非常实用。
公式详细解释
原始齐普夫定律公式:
[ n_i \propto \frac{1}{i^\alpha} ]
取对数后变为:
[ \log n_i = \log \left( \frac{C}{i^\alpha} \right) ]
其中 ( C ) 是归一化常数,进一步分解:
[ \log n_i = \log C - \alpha \log i ]
将 ( \log C ) 记作 ( c )(因为 ( C ) 是常数,所以 ( \log C ) 也是常数),最终得到:
[ \log n_i = -\alpha \log i + c ]
结论
通过使用对数表达方式,我们将非线性的幂律关系转化为线性关系,使得数据可视化、分析和参数估计变得更加直观和方便。这种方法不仅简化了分析过程,也增强了结果的解释力和可视化效果。
相关文章:

齐普夫定律在循环神经网络中的语言模型的应用
目录 齐普夫定律解释公式解释图与公式的关系代码与图的分析结论 使用对数表达方式的原因1. 线性化非线性关系2. 方便数据可视化和分析3. 降低数值范围4. 方便参数估计公式详细解释结论 来自:https://zh-v2.d2l.ai/chapter_recurrent-neural-networks/language-model…...
如何在Android Studio上发布Flutter应用
发布Flutter应用到Android平台是一个多步骤的过程,涉及配置应用、生成签名密钥、配置Gradle文件、构建发布版本APK等步骤。本文将详细介绍这些步骤,帮助你顺利发布Flutter应用。 1. 准备你的应用 在发布之前,确保你的应用在开发环境中运行良…...
C++ 字符串处理4-根据指定的分隔符将字符串分割为多个子串根据指定的分隔符将多个子串连接成一个字符串
1. 关键词 C 字符串处理 分割字符串 连接字符串 跨平台 2. strutil.h #pragma once#include <string> #include <vector>namespace cutl {/*** brief The type of vector strings used in this library.**/using strvec std::vector<std::string>;/*** b…...

微信小程序请求request封装
公共基础路径封装 // config.js module.exports {// 测试BASE_URL: https://cloud.chejj.cn,// 正式// BASE_URL: https://cloud.mycjj.com };请求封装 // request.js import config from ../config/baseUrl// 请求未返回时的loading const showLoading () > wx.showLoadi…...
Web前端不挂科:深入探索与实战指南
Web前端不挂科:深入探索与实战指南 在数字化时代的浪潮中,Web前端开发已成为一项炙手可热的技能。然而,对于许多初学者来说,如何避免在Web前端课程中挂科却成为了一道难题。本文将从四个方面、五个方面、六个方面和七个方面&…...

Golang | Leetcode Golang题解之第149题直线上最多的点数
题目: 题解: func maxPoints(points [][]int) (ans int) {n : len(points)if n < 2 {return n}for i, p : range points {if ans > n-i || ans > n/2 {break}cnt : map[int]int{}for _, q : range points[i1:] {x, y : p[0]-q[0], p[1]-q[1]if…...

京准电钟 NTP时间同步服务器助力水库水坝水利自动化建设
京准电钟 NTP时间同步服务器助力水库水坝水利自动化建设 京准电钟 NTP时间同步服务器助力水库水坝水利自动化建设 水库大坝监测系统主要包括渗流监测系统、流量监测系统、雨量监测系统、沉降监测系统组成。每一个监测系统由监测仪器及自动化数据采集装置(内置通信装…...
程序员应该具备什么职业素养?
程序员应该有什么职业素养? 作为一个程序员,拥有以下职业素养是非常重要的: 扎实的技术功底:作为程序员,首先要具备扎实的技术基础,包括编程语言、算法、数据结构等方面的知识,能够熟练地解决问…...

linux 安装sftp及使用sftp上传和下载
一、centos7 安装sftp 1.安装 OpenSSH 服务: sudo yum install openssh-server2.启动 SSH 服务,并设置为开机启动: sudo systemctl start sshd sudo systemctl enable sshd3.创建一个新用户,用于SFTP连接(替换your_…...

AI虚拟试穿技术:开启高保真、多场景、多样化服装组合的试穿应用
随着电子商务的快速发展,消费者对于在线购物体验的要求越来越高。特别是在服装领域,消费者渴望能够在购买前直观地了解服装的试穿效果。传统的虚拟试穿技术虽然已有一定的发展,但在不同场景下的高保真度和鲁棒性方面仍面临挑战。为此,我们研发了一种全新的AI虚拟试穿技术,…...

数栈xAI:轻量化、专业化、模块化,四大功能革新 SQL 开发体验
在这个数据如潮的时代,SQL 已远远超越了简单的查询语言范畴,它已成为数据分析和决策制定的基石,成为撬动企业智慧决策的关键杠杆。SQL 的编写和执行效率直接关系到数据处理的速度和分析结果的深度,对企业洞察市场动态、优化业务流…...
oppo手机精简包名列表
oppo广告机,coloros为13.0,测试机为oppo a1x 5g。 手机第一次开机后就全屏广告,被恶心了好几个月。现使用universal Android debolater进行卸载测试,其中: 不可卸载的: 开机广告:com.coloros.…...

Cisco Packet Tracer实验(二)
二、用交换机构建 LAN 构建物件如下: 四个PC 两个交换机 一个Multi Switch多功能拓展控制器 连线必须是这个直线!!!不是虚线 最后实现效果如下: 全部的线是绿的,就表示是通的。 尝试一下,看PC…...
Julia 数学函数
Julia 数学函数 Julia 是一种高性能的动态编程语言,特别适合于数值计算和科学计算。在数学领域,Julia 提供了丰富的内置函数,这些函数涵盖了从基本运算到高级数学运算的各个方面。本文将详细介绍 Julia 中的数学函数,并提供一些示例,帮助读者更好地理解和使用这些函数。 …...

[next.js] svgr/webpack
nextjs如何配置svg文件,使其像react组件一样导入? 当前next.js 开发环境我使用了--turbo 来开启turbopack加速文件构建,所以之前的一些webpack loader之类的无法正常工作。通过搜索发现一般都是使用svgr/webpack来处理svg,打开svgr官网发现…...

vue页面和 iframe多页面无刷新方案和并行存在解决方案
面临问题 : back的后台以jsp嵌套iframe为主, 所以在前端框架要把iframe无刷新嵌套和vue页面进行并行使用,vue的keep-alive只能对虚拟dom树 vtree 进行缓存无法缓存iframe,所以要对iframe进行处理 tab标签的切换效果具体参考若依框架的tab切换,可以去若依看源码,若依源码没有实…...

Leetcode498. 对角线遍历
Every day a Leetcode 题目来源:498. 对角线遍历 解法1:模拟 根据题目要求,矩阵按照对角线进行遍历。设矩阵的行数为 m,矩阵的列数为 n,我们仔细观察对角线遍历的规律可以得到如下信息: 一共有 mn−1 条…...
flume配置----a1.sources.r1.positionFile=xxxx.json
positionFile 的作用和用途 记录读取位置: positionFile 记录了 Flume 读取文件的当前位置(偏移量),确保在 Flume 重启或崩溃后,能够从上次读取的位置继续读取文件,而不是重新开始读取。这在处理大文件或长…...
Controller 自动化日志输出
Starter库 1.定义注解 Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented public interface TraceLog {/*** 日志类型** return*/String type() default ""; }2.定义捕获日志接口方法 public interface ITraceLogProcess {void afterThr…...
css3中有哪些新属性(特性)?
在 CSS3 中引入了许多新的属性和特性,以下是其中一些主要的: Flexbox(弹性盒子布局):通过 display: flex 及其相关属性,实现灵活的布局方式,使得元素在容器中可以自动调整大小和位置。 Grid&am…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
【Redis】Redis从入门到实战:全面指南
Redis从入门到实战:全面指南 一、Redis简介 Redis(Remote Dictionary Server)是一个开源的、基于内存的键值存储系统,它可以用作数据库、缓存和消息代理。由Salvatore Sanfilippo于2009年开发,因其高性能、丰富的数据结构和广泛的语言支持而广受欢迎。 Redis核心特点:…...

简单聊下阿里云DNS劫持事件
阿里云域名被DNS劫持事件 事件总结 根据ICANN规则,域名注册商(Verisign)认定aliyuncs.com域名下的部分网站被用于非法活动(如传播恶意软件);顶级域名DNS服务器将aliyuncs.com域名的DNS记录统一解析到shado…...