数据的平滑方法

数据平滑

  • 数据平滑的基本思想:
    调整最大似然估计的概率值,使零概率增值,使非零概率下调,“劫富济贫”,消除零概率,改进模型的整体正确率。
  • 基本目标:测试样本的语言模型困惑度越小越好。
  • 基本约束: \(\Sigma p ( wi | w_{1}, w_{2},…, w_{i-1})=1\)

拉普拉斯平滑

其实就是最简单的加一平滑。基本思想是在当前语言模型中,每一种可能出现的基元情况都加1。也就是说在原本的最大似然估计的基础上,分子加一,分母加上语言模型词汇表的大小。例如对于2-gram模型来说,进行如下平滑:

该算法可以把加一改进为加上一个delta,通常是一个小于1的正数,效果会得到少许提升。

###减值法/折扣法(Discount)

Good-Turing估计

该方法适用于大词汇集产生的符合多项式分布的大量的观测数据。其基本思想是:利用频率的类别信息来平滑频率。对于任何发生r次数的n元语法,都假设它发生了r*次。

其中,nr是训练语料中正好发生r次的n-gram的个数。也就是说,发生r次的N元组的调整由发生r次的N元组与发生r+1次的n-gram两个类别共同决定。
经过上述计算后,出现次数大于等于1次的基元的频率降低,导致总的有\(n_1/N\)的频率被节省下来,将这些频率给那些未见词使用。

按照公式的话,出现次数最多的频次被平滑后被变成0(因为比这次词出现次数还多的词的数目是零),所以在处理中可以不进行处理这些出现次数最多的词,这样的话有可能导致不归一的情况,最后需要人为归一化。

####Back-Off法

基本思想:当某一事件在样本中出现的频率大于阈值K (通常取 K 为0 或1)时,运用最大似然估计的减值法来估计其概率,否则,使用低阶的,即 (n-1)gram 的概率替代 n-gram 概率,而这种替代需受归一化因子\(\alpha\)的作用。
可以这么理解:对于每个计数 r > 0 的n元文法的出现次数减值,把因减值而节省下来的剩余概率根据低阶的 (n-1)gram 分配给未见事件。
计算公式为:

Read More

形式语言与自动机基础

数学表达式支持来自于MathJax,如果渲染失败,刷新一下试试。使用latex公式语法。快速查询

基本概念

形式语法

形式语法是一个4元组 G=(N, \(\Sigma\) P, S), 其中:

  • N 是非终结符的有限集合(有时也叫变量集或句法种类集);
  • \(\Sigma\)是终结符的有限集合,\(\Sigma\)和N的交集为空且\(\Sigma\)和N的并集;称总词汇表;
  • P是一组重写规则的有限集合:P={\(\alpha \rightarrow \beta\)},其中,\(\alpha\)和\(\beta\)是 V 中元素构成的串,但\(\alpha\)中至少应含有一个非终结符号;
  • S\(\in\)N,称为句子符或初始符。

句型和句子

一些特殊类型的符号串为文法 G=(N,\(\Sigma\) , P, S) 的句子形式(句型),采取递归的方式定义:

  1. S 是一个句子形式;
  2. 如果\(\alpha\)\(\beta\)\(\gamma\)是一个句子形式,且\(\beta\rightarrow\delta\)是 P 的产生式,则\(\alpha\)\(\delta\)\(\gamma\)也是一个句子形式;

文法 G 的不含非终结符的句子形式称为 G 生成的句子。由文法 G 生成的语言,记作 L(G),指 G 生成的所有句子的集合。

正则文法

如果文法 G=(N,\(\Sigma\) , P, S) 的 P 中的规则满足如下形式:

A\(\rightarrow\)Bx, 或 A\(\rightarrow\)x, 其中 A, B \(\in\) N, x\(\in\)\(\Sigma\),则

称该文法为正则文法或称3型文法。(左线性正则文法)
如果 A\(\rightarrow\)xB,则该文法称为右线性正则文法。

Read More

信息论基础

信息论基础


如上图在以2为底计算的时候,信息熵的单位是比特,如果以e为底则是奈特,以3为底则是铁特。
信息熵的意义是一个离散随机变量的不确定度,换言之也就是获取到一位这样的随机变量所得到的信息的大小。所以当一个有n种可能性的离散随机变量均匀分布,各个符号的可能性都是1/n时,信息上取最大值log(n)

几种常见语言字母的信息熵如下:

语言
法语 3.98
意大利语 4.00
西班牙语 4.01
英语 4.03
俄语 4.35

以上来自于冯志伟教授的统计结果,20世纪末期,冯志伟教授/刘源教授等人开展对汉语字的信息熵的测定,得到一个汉字的信息熵约为9.7个比特。

联合熵

联合上的意义是描述一对随机变量平均需要的信息量。

条件熵

可以看出条件上实际上是logp(y|x)在联合分布下的期望,条件上反应的是一个条件变量在领一个条件变量给定的情况下的平均不确定性。

Read More

基于词向量和LSTM的情感判别

基于中文的评价情感分析

项目目标

我选择的题目是基于中文文本情感的文本自动分类系统。由于对张家俊老师讲的神经语言模型部分与词向量表示很感兴趣,所以希望通过词向量模型和神经语言模型结合实现一个有较高分类正确率的情感分析模型。

国内外相关工作

集成工具调研

情感分析实际上就是一个文本二分类的问题,目前也有不少集成的自然语言处理的非常好的一体化工具,比如Stanford CoreNLP和TextBlob,还有国人开发的针对中文文本的python库SnowNLP。
以SnowNLP为例,基于python的它使用起来十分方便:

1
2
3
4
5
6
7
8
9
10
11
12
>>> from snownlp import SnowNLP

>>> s = SnowNLP(u'这个东西真心很赞')

>>> s.words
[u'这个', u'东西', u'真心', u'很', u'赞']

>>> s.tags
[(u'这个', u'r'), (u'东西', u'n'), (u'真心', u'd'), (u'很', u'd'), (u'赞', u'Vg')]

>>> s.sentiments
0.9769663402895832 # positive的概率

这个工具中通过sentiments返回的是一个0到1之间的正数来表示测试文本是正向情感的可能性的大小。实验中并没有没有进行深入了解,因此不进行这几个工具的详细介绍。

Read More

字符集与字符编码问题

字符集

ascii

基本学计算机的童鞋接触到字符串的时候都会学ascii编码,在这里不用特意去分字符集和编码的问题,因为此时ascii是字符集同时也规定了编码。
ascii实际上就是用一个字节8位去表示控制码,大小写英文字母以及阿拉伯数字,当时电脑还没有普及开,所以这种简单的甚至是简陋的方法得以正常使用,ascii的名字也可以看出当时的人的看法:American Standard Code for Information Interchange(美国信息互换标准代码)。
此时的ascii码只用到了低128位,最高位默认位0。然而低128位只用来编码英文字符没有问题,但是当电脑发展到其他一些欧洲国家或者采用拉丁字母的国家中,这些国家自己用的字母在ascii中是不存在的。于是各个国家开始自己给自己编码,为了保持对ascii的兼容,就在ascii的128到255编码范围内做文章。补充进来的被称为“扩展字符集”。
但是由于各个国家都编写自己的编码规则,导致不同国家的编码是不通用的,此时就已经开始出现一些编码导致的通信问题。但是当计算机传入中国的时候大问题才来了。

gb×系列

ascii是单字节编码,就算加上扩展字符集也只能编码256个字符,然而中国文化博大精深,即使是只考虑常用汉字也有六千多个。于是在ascii这种单字节编码上做文章是不大可能了,因为采用双字节编码,就是gb2312编码。

规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xA1用到 0xF7,后面一个字节(低字节)从0xA1到0xFE,这样我们就可以组合出大约7000多个简体汉字了。在这些编码里,我们还把数学符号、罗马希腊的字母、日文的假名们都编进去了,连在 ASCII 里本来就有的数字、标点、字母都统统重新编了两个字节长的编码,这就是常说的”全角”字符,而原来在127号以下的那些就叫”半角”字符了。

双字节理论上可以编码65536种字符,但是由于为了解决当时燃眉之急,只收录了六千余个汉字,并且为了保持与ascii的兼容,就规定对于汉字的编码只使用一个字节的128到255的范围,低于128的范围保留用于与ascii兼容。然后台湾等地区由于常用繁体字,所以他们也有一套自己的编码规则Big5,即大五码,收录了一万三千多个汉子。
后来用着用着,发现在某些人名地名古汉字上,gb2312总是有不支持的地方,开始的时候用一些造字软件凑合,后来这种问题越来越多,于是大家就像干脆再出一套新的编码,这就是GBK。
GBK兼容gb2312,采用单双字节变长编码,英文使用单字节编码,完全兼容ASCII字符编码,中文部分采用双字节编码。GBK和gb2312都是采用双字节字符集(DBCS),扩展出来的原理是解除了gb2312对于低位字节的限制,GBK中只要求第一个字节是大于127就固定表示这是一个汉字的开始,不管后面跟的是不是扩展字符集里的内容。
然后后来又有更大的扩展即gb18030,这个字符集基本涵盖了所有汉字,少数民族文字,采用四字节变长编码方式。这里就不细说了。

ANSI

ANSI不是特指某种编码,前面的GB系列中文编码实际上都是属于ANSI,但是ANSI也不止这些。
不同的国家和地区制定了不同的标准,由此产生了 GB2312、GBK、GB18030、Big5、JIS 等各自的编码标准。这些使用多个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文Windows操作系统中,ANSI 编码代表 GBK 编码;在繁体中文Windows操作系统中,ANSI编码代表Big5;在日文Windows操作系统中,ANSI 编码代表 JIS 编码。
不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。
ANSI编码表示英文字符时用一个字节,表示中文用两个或四个字节。

UCS(unicode)

但是各个国家民族都在自己的语言上开发编码,那么在计算机的领域内,交流的鸿沟就会越来越大,最好的方式就是一共有足够公信力的机构组织以全球的语言体系为基础开发一套字符集与对应的编码方案。
果不其然,这档子事是由ISO(国际标准化组织)来做的,他们重新做了一套”Universal Multiple-Octet Coded Character Set”,简称 UCS, 是一种定长编码方式,俗称 “UNICODE”,通过ISO10646标准发布。
UCS分为UCS-2和UCS-4,分别指使用两字节和四字节的编码方案。目前所有的编码都可以用UCS2涵盖,UCS如果前两字节是0x00,那么就成为UCS4的BMP(Basic Multilingual Plane)。将UCS-4的BMP去掉前面的两个零字节就得到了UCS-2。在UCS-2的两个字节前加上两个零字节,就得到了UCS-4的BMP。而目前的UCS-4规范中还没有任何字符被分配在BMP之外。

字符编码

UTF

前面已经说了,字符集和字符编码是不同的东西,但是前面的ANSI系列的字符集和编码集合在使用方式上有着局部性,所以基本编码方式是唯一的。

Read More

本站总访问量