中文信息熵的计算

摘要:本文介绍了利用基于词的一元模型、二元模型、三元模型估计中文信息熵的计算方法,并通过中文维基百科语料得到三种统计语言模型计算得到的中文信息熵分别为13.711比特/词、6.402比特/词、1.508比特/词。

关键词:信息熵; 统计语言模型

 

  • 引言

信息是个很抽象的概念。人们常常说信息很多,或者信息较少,但却很难说清楚信息到底有多少。比如一本五十万字的中文书到底有多少信息量。直到1948年,香农提出了“信息熵”的概念,才解决了对信息的量化度量问题。

自然语言是一种上下文相关的信息表达和传递的方式,让计算机处理自然语言,一个基本的问题就是为自然语言这种上下文相关的特性建立数学模型,即统计语言模型。

吴军博士利用基于词的一元文法模型、二元文法模型和长距离二元文法模型计算得到的中文信息熵分别为7.03比特/词、5.46比特/词、5.17比特/词[1]。

  • 信息熵

通常,一个信源发送出什么符号是不确定的,衡量它可以根据其出现的概率来度量。概率大,出现机会多,不确定性小;反之不确定性就大。

不确定性函数f是概率P的减函数;两个独立符号所产生的不确定性应等于各自不确定性之和,即f(P1,P2)=f(P1)+f(P2),这称为可加性。同时满足这两个条件的函数f是对数函数,即f(P)=log(\frac{1}{p})=-logp

在信源中,考虑的不是某一单个符号发生的不确定性,而是要考虑这个信源所有可能发生情况的平均不确定性。若信源符号有n种取值:U1…Ui…Un,对应概率为:P1…Pi…Pn,且各种符号的出现彼此独立。这时,信源的平均不确定性应当为单个符号不确定性-logPi的统计平均值(E),可称为信息熵,即H(U)=E[-logp_{i}]=-\sum_{i=1}^{n}p_{i}logp_{i},式中对数一般取2为底,单位为比特。但是,也可以取其它对数底,采用其它相应的单位,它们间可用换底公式换算[2]。

变量的不确定性越大,熵也就越大。考虑信源1的符号有四种取值:a,b,c,d,对应概率为0.7,0.1,0.1,0.1,且各种符号的出现彼此独立,代入上述信息熵公式,计算得1.35678比特。考虑信源2的符号另四种取值:x,y,z,w,对应概率为0.97,0.01,0.01,0.01,且各种符号的出现彼此独立,代入上述信息熵公式,计算得0.24194比特。信源1的信息熵比信源2大,证明了信源1的不确定性比信源2大。

不同的语言平均每个字符所含有的信息量也是不同的,中文可以说是世界上最简洁的语言,如果将一本英文书翻译成中文,如果字体大致相同,中译本会比原书要薄很多。从中文和英文字符的平均熵的计算结果也可知一二,利用单词一级的语言模型,对大规模语料进行统计的结果为1.75比特/字符,对于中文,从字频出发得到的粗略结果为9.6比特/汉字[3]。

  • 统计语言模型

假定S表示某一个有意义的句子,由一连串特定顺序排列的词w1,w2,...wn组成,n为句子的长度。现在想知道S在文本中出现的可能性,即P(S)。此时需要有个模型来估算,不妨把P(S)展开表示为P(S)=P(w1,w2,...,wn)。利用条件概率的公式,S这个序列出现的概率等于每一个词出现的条件概率相乘,于是P(w1,w2,...,wn)可展开为:

P(w1,w2,...wn)=P(w1)P(w2|w1)P(w3|w1,w2)...P(wn|w1,w2,...,wn-1)

其中P(w1)表示第一个词w1出现的概率;P(w2|w1)是在已知第一个词的前提下,第二个词出现的概率;以此类推。[4]

显然,当句子长度过长时,P(wn|w1,w2,...,wn-1)的可能性太多,无法估算,俄国数学家马尔可夫假设任意一个词wi出现的概率只同它前面的词wi-1有关,这种假设成为马尔可夫假设,S的概率变为

P(S)=P(w1)P(w2|w1)P(w3|w2)...P(wi|wi-1)...P(wn|wn-1)

其对应的统计语言模型就是二元模型。也可以假设一个词由前面N-1个词决定,即N元模型。当N=1时,每个词出现的概率与其他词无关,为一元模型,对应S的概率变为

P(S)=P(w1)P(w2)P(w3)...P(wi)...P(wn)

当N=3时,每个词出现的概率与其前两个词相关,为三元模型,对应S的概率变为

P(S)=P(w1)P(w2|w1)P(w3|w1,w2)...P(wi|wi-2,wi-1)...P(wn|wn-2,wn-1)

  • 实验步骤

1.中文语料预处理

维基百科是最常用且权威的开放网络数据集之一,作为极少数的人工编辑、内丰富、格式规范的文本语料,各类语言的维基百科在NLP等诸多领域应用广泛。下载地址为

https://dumps.wikimedia.org/zhwiki/20190301/zhwiki-20190301-pages-articles.xml.bz2。维基百科提供的语料是xml格式的,因此需要将其转换为txt格式。由于维基百科中有很多是繁体中文网页,故需要将这些繁体字转换为简体字,采用opencc第三方库进行繁简转换。本文的统计语言模型都是基于词的,所以需要对中文句子进行分词,采用Jieba中文分词工具对句子进行分词[5]。

由于一元模型不需要考虑上下文关系,所以其读取语料的方式与二元模型和三元模型不一样,直接采用Gensim的数据抽取类WikiCorpus对xml文件进行抽取,它能够去掉文本中的所有标点,留下中文字符和utf-8编码下字节数为1的标点符号,去掉这些符号后再进行繁简转换和分词,得到所需要的txt格式语料库。

二元模型和三元模型需要考虑上下文关系,不能直接去掉所有标点符号得到无分隔的语料。通过bz2file不解压读取语料,再利用Gensim的extract_pages类来提取每个页面[6],此时得到的语料相比利用WikiCorpus得到的语料多了一些英文字符和中文标点符号,通过建立一个停用符号表和正则表达式两种方式清理语料,进行繁简转换和分词之后得到以一句一行的txt格式语料库。

2.词频统计

由于设备限制和时间限制,无法利用整个大小为1.6GB的语料库,故在一元模型中读取10000篇文章,共计22327931字。由于二元模型和三元模型更加复杂和耗时,故在二元模型和三元模型中读取1000篇文章,共计5374203字。

一元模型只需要统计每个词在语料库中出现的频数,得到词频表。二元模型也需要统计每次词在语料库中出现的频数,得到词频表,作为计算条件概率P(wi|wi-1)时的分母,并且需要统计每个二元词组在语料库中出现的频数,得到二元模型词频表。三元模型需要统计每个二元词组在语料库中出现的频数,得到二元模型词频表,作为计算条件概率P(wi|wi-2,wi-1)时的分母,并且需要统计每个三元词组在语料库中出现的频数,得到三元模型词频表。

3.计算信息熵

如果统计量足够,根据大数定理,词或二元词组或三元词组出现的概率大致等于其出现的频率。

一元模型的信息熵计算公式为H(x)=-\sum_{x\in X}^{ }P(x)logP(x),其中P(x)可近似等于每个词在语料库中出现的频率。

二元模型的信息熵计算公式为H(X|Y)=-\sum_{x\in X,y\in Y}^{ }P(x,y)logP(x|y),其中联合概率P(x,y)可近似等于每个二元词组在语料库中出现的频率,条件概率P(x|y)可近似等于每个二元词组在语料库中出现的频数与以该二元词组的第一个词为词首的二元词组的频数的比值。

三元模型的信息熵计算公式为H(X|Y,Z)=-\sum_{x\in X,y\in Y,z\in Z}^{ }P(x,y,z)logP(x|y,z)[7],其中联合概率P(x,y,z)可近似等于每个三元词组在语料库中出现的频率,条件概率P(x|y,z)可近似等于每个三元词组在语料库中出现的频数与以该三元词组的前两个词为词首的三元词组的频数的比值。

  • 实验结果

在一元模型中使用的语料库字数为22327931字,分词个数为11605852词,平均词长为1.924,计算得到基于词的一元模型的中文信息熵为13.711比特/词。

在二元模型中使用的语料库字数为5374203字,分词个数为2768804词,平均词长为1.941,共有二元词组2298990个,计算得到基于词的二元模型的中文信息熵为6.402比特/词。

在三元模型中使用的语料库字数为5374203字,分词个数为2768804词,平均词长为1.941,共有三元词组1891695个,计算得到基于词的二元模型的中文信息熵为1.508比特/词。

具体代码参考:https://github.com/hanmy1021/NLP

 

参考文献

[1]吴军, 王作英.汉语信息熵和语言模型的复杂度[J]. 电子学报,1996.

[2]百度百科:信息熵 https://baike.baidu.com/item/%E4%BF%A1%E6%81%AF%E7%86%B5/7302318?fr=aladdin

[3]冯志伟.汉字的熵,现代汉语定量分析[J]. 上海教育出版社,1989.

[4]吴军.数学之美(第二版) 第2章 统计语言模型. 人民邮电出版社.

[5]涂铭, 刘祥, 刘树春.Python自然语言处理实战技术核心与算法. 机械工业出版社.

[6]获取并处理中文维基百科语料 https://blog.csdn.net/jdbc/article/details/59483767

[7]吴军.数学之美(第二版) 第6章 信息的度量和作用. 人民邮电出版社.

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/33428.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信息与熵值的计算

原文地址https://blog.csdn.net/kuang_liu/article/details/21469553 1. 什么是信息? 信息的定义涉及概率论中的随机事件概率,如果待分类事物可能划分在多个分类之中,则符号 Xi 的信息定义为: 其中 p(xi) 是选择该分类的概率。&…

信息熵的数值计算公式

1948年,信息论之父 C. E. Shannon (香农)借鉴了热力学的概念,把信息中排除了冗余后的平均信息量称为“信息熵”,并给出了计算信息熵的数学表达式。 信息熵介绍 一元变量信息熵: 式中对数一般取2为底&#…

从熵到相位传递熵,附matlba和python代码

先来一张图,预览一下最近为了整明白相位传递熵所要恶补的知识叭,泪目了:( 好吧,废话不多说,直接开始吧! 一. 熵是什么? 1、香浓熵 2、联合熵、条件熵和互信息 3、传递熵 二、直方图 1、连续随…

信息熵计算权重

信息熵理论及应用 1948年美国数学家香农(shanonc.E)为解决信息的度量问题提出了信息熵的概念。信息熵是信息论中用来刻画信息无需度的一个量,熵值越大,表示信息的无序化程度越高,相对应的信息效率越高 计算过程 建立…

熵的推导与计算

一、信息熵 熵 (entropy) 这一词最初来源于热力学。1948年,克劳德爱尔伍德香农将热力学中的熵引入信息论,所以也被称为香农熵 (Shannon entropy),信息熵 (information entropy)。本文只讨论信息熵。首先,我们先来理解一下信息这个…

如何更好的分析潜在人脉?聊聊华为云图引擎GES的Cypher子查询

摘要:本文以华为云图引擎 GES 为例,来介绍如何使用图查询语言 Cypher 表达一些需要做数据局部遍历的场景。 本文分享自华为云社区《使用 Cypher 子查询进行图探索 -- 以华为云图引擎 GES 为例》,作者:蜉蝣与海。 在图数据库/图计…

基于面板数据的熵值法介绍与实现

熵值法是一种基于信息熵理论的客观赋值方法。即数据越离散,所含信息量越多,对综合评价影响越大。 目录 一、基于面板数据熵值法介绍二、R语言实现参考文献 一、基于面板数据熵值法介绍 传统的熵值法有个弊端,只能针对于截面数据,…

信息熵的计算

信息熵计算公式: 演示数据: 性别(x)考试成绩(y)男优女优男差女优男优 X的信息熵计算为: p(男) 3/5 0.6 p(女) 2/5 0.4 根据上面的计算公式可得: 列X的信息熵 为: H&…

各种信息熵(Information entropy)的计算方法

一、Jensen不等式 若f为区间I上的凹函数,则Jensen不等式成立: 这里若函数f为凹函数,则有: 凹函数(上凸)如下图所示: 归纳证明: 二、信息论 1.熵(信息不确定性度…

信息与信源熵

0x01 三个定义 信息 指各个事物运动的状态及状态变化的方式。人们从对周围世界的观察得到的数据中获得信息。信息是抽象的意识或知识,它是看不见、摸不到的。当由人脑的思维活动产生的一种想法仍被存储在脑子里时,它就是一种信息。 消息 指包含信息的…

python计算图片的信源熵值(信息熵)

附录: from PIL import Image from matplotlib import pyplot as plt import numpy as np import scipy as cp import math image Image.open(rC:\Users\Administrator\Desktop\IMG.jpg) # 读入和显示图像 imagesnp.asarray(image) plt.subplot(211) plt.imshow(im…

【熵的计算】

熵的计算 什么是熵? 定义: 熵是表示随机变量不确定性的度量 简单理解:熵就是混乱程度,一个集合中类别越多,越混乱,属于哪一个类别越不确定。 熵的计算公式: 简单理解一下公式: …

信息熵计算及代码

实验目的:了解离散信源数学模型和信息熵实验内容:以附件中英文文本文件中的内容为来源,构建26个英文字母(区分大小写)为信源符号的数学模型,要求输出字母的概率和该模型的信息熵。要求:请使用自己熟悉的编程语言,完成信源建模,输出…

信息熵的计算与分析

信息熵的计算与分析 一、[实验目的]二、[实验环境]三、[实验原理]四、[实验内容]五、[实验过程]1、二元信源熵函数曲线2、求解离散单符号信源熵3、计算图像一维图像熵 一、[实验目的] 1、掌握离散信源熵的原理和计算方法。 2、熟悉matlab 软件的基本操作,练习使 用…

【chatgpt】解除PDF的password

无论是Adobe Acrobat Pro还是Pdf xchange editor都是一样的,更改安全性就可以了。 把该加密Pdf导入软件,然后点文件,属性,安全性,改成无安全后确定就行了。 pdf是可携带文件格式,亦称“PDF(portable docum…

免费好用的聊天机器人上线,原Openai前员工们创立的Claude

1.下载slack,注册登录。 2.在claude网站上同意Al与你的slack账号相联接。 3.在slack里就可以直接与AI对话了。 4.网页端Mac、苹果手机、安卓都可以,win没试过,应该也可以。 具体的细致操作网上有,也可以留言讨论。 Anthropic是一家总部位…

国内又款智能AI聊天软件-科大讯飞星火模型

介绍 介绍 中国科大讯飞星火GPT聊天软件是一款基于自然语言处理技术的人工智能聊天机器人。它利用了大量的文本数据,通过深度学习模型进行训练,从而实现与用户的智能对话。讯飞星火GPT聊天软件能够理解用户输入的问题或指令,并根据预设的回答…

启英泰伦推出多种智能语音识别照明解决方案,改装简单,成本低

随着人工智能技术的普及,智能家居设备开始走进千家万户。而智能照明系统成为其不可或缺的一部分,占据着举足轻重的地位。 但是照明系统和其他家居设备不一样的是,开发商交房时已布好电路,或用户直接购买精装房,导致改…

让 ChatGPT 更智能,Tauri 带你实现 AI 对话应用

背景 Tauri 和 Electron 都是用于开发跨平台桌面应用程序的工具,因为最近使用ChatGPT在国内环境的确不够友好,又没有一个比较轻量简洁的工具可用,如是想自己造个轻量点的轮子,力争做到代码轻量,界面美观简洁&#xff…

[AI达人特训营第三期] 使用Lora技术用Dreambooth训练国潮风格模型

★★★ 本文源自AlStudio社区精品项目,【点击此处】查看更多精品内容 >>> DreamBooth 介绍 DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation是一种新的文本生成图像(text2image)的“个性化”(可适应用…