自然语言处理task3

互信息

信息熵

信息是个抽象的概念。我们常说信息量多或者信息量少,但具体有多少却无法量化。信息熵则是一个可将信息量具体量化的概念,由香农首次提出,也叫香农信息熵。
熵是对事件不确定性的描述,熵值越大,表示时间的不确定性也就越大。同理,如果一句话的熵值越大,这句话得不确定性越大,所包含的信息量也就越少。
对于任意一个随机变量X。它的熵定义如下:
H ( X ) = − ∑ x ∈ X P ( x ) log ⁡ P ( x ) H(X)=-\sum_{x\in{X}}{P(x)\log{P(x)}} H(X)=xXP(x)logP(x)
变量不确定性越大,熵也就越大,要把它搞清楚所需要的信息量也就越大。

条件熵

对于一个随机事件,知道的信息越多,它的不确定性就越小。这些信息,可以是我们直接要了解的随机事件,也可以是和我们关系的随机事件相关的其他事件的信息。比如在自然语言统计模型中,一元模型就是通过某个词本身的分布来消除不确定性,而二元模型还使用了上下文信息,就能更准确的预测一个句子中大当前的词汇了。在数学上,用条件熵来证明这些相关信心也能够消除不确定性。
假定X和Y是两个随机变量,X是我们需要了解的。假设已知X的随机分布P(X),也就知道了X的熵:
H ( X ) = − ∑ x ∈ X P ( x ) log ⁡ P ( x ) H(X)=-\sum_{x\in{X}}{P(x)\log{P(x)}} H(X)=xXP(x)logP(x)
也就是说X的不确定性就是这么大。假定我们还知道Y的一些情况,包括他跟X一起出现的概率,即已知联合概率分布P(X,Y)。定义在Y条件下的条件熵为:
H ( X ∣ Y ) = − ∑ x ∈ X y ∈ Y P ( x , y ) log ⁡ P ( x ∣ y ) H(X|Y)=-\sum_{x\in{X}{y\in{Y}}}{P(x,y)\log{P(x|y)}} H(XY)=xXyYP(x,y)logP(xy)
也就是说在Y的条件下X的不确定下就是这么大。KaTeX parse error: Expected 'EOF', got '\geqH' at position 5: H(X)\̲g̲e̲q̲H̲(X|Y),也就是说得知Y的信息会使X的不确定性减小,但是当Y与X无关时,知道再多关于Y的信息也不会使X的不确定性降低,这就是等号成立的原因。

互信息

由上文可知,只有当Y与X“有关系”时,获取Y的信息才会使X的不确定性减小。但是这个“有关系”是有过大关系?该怎么度量呢?香农在心里论中提出了”互信息“的概念作为两个随机事件”相关性“的量化度量。
假定X和Y是两个随机变量,他们互信息定义如下:
I ( X ; Y ) = ∑ x ∈ X y ∈ Y P ( x , y ) log ⁡ P ( x , y ) P ( x ) P ( y ) = H ( X ) − H ( X ∣ Y ) I(X;Y)=\sum_{x\in{X}{y\in{Y}}}{P(x,y)\log{\frac{P(x,y)}{P(x)P(y)}}}=H(X)-H(X|Y) I(X;Y)=xXyYP(x,y)logP(x)P(y)P(x,y)=H(X)H(XY)
所谓两个事件相关性的量化度量就是在了解其中一个Y的前提下,对消除另一个X的不确定性所提供的信息量。也可以说是得知Y使得X的不确定性减少的程度。值越大代表相关性越强

相对熵(交叉熵)

相对熵也可以用来衡量相关性,和变量的互信息不同的是,它用来衡量两个取值为正数的函数的相似性。定义如下:
K L ( f ( x ) ∣ ∣ g ( x ) ) = ∑ x ∈ X f ( x ) log ⁡ f ( x ) g ( x KL(f(x)||g(x))=\sum_{x\in{X}}{f(x)\log{\frac{f(x)}{g({x}}}} KL(f(x)g(x))=xXf(x)logg(xf(x)
对于该公式有以下三条结论:
1.对于两个完全相同的函数,他们的相对熵为零。
2.相对熵越大,两个函数的差异越大;反之,相对上越小,差异性越小。
3.对于概率分布或者给吕密度函数,如果均值均大于零,相对熵可以度量两个随机分布的差异。(交叉熵损失函数的原理)

TF-IDF

TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术。TF意思是词频(Term Frequency),IDF意思是逆文本频率指数(Inverse Document Frequency)。

TF(Term Frequency)

TF称为”关键词频率“或者”单文本词频“。比如某个文本中一共有1000个词,其中”原子能“出现了6次,”应用“出现了15次,”的“出现了80次,那么他们的词频分别是6/1000、15/1000、80/1000。
是不是某个词在文本中出现的频率越高,这个词就越重要(重要就是跟文本主题的相关性)呢?不一定。有很多词像”的“、”和“只是为了连接句子使其连贯却没什么实际意义的,称之为”停止词“。他们出现频率很高但是却没什么用。
还有个问题就是,在汉语中,”应用“是个很通用的词,而”原子能“是个很专业的词,显然后者与文本的相关性排名中应该更高。因此需要给每个词设个权重,权重的设置需要满足下列条件:
1.一个词预测主题能力越强,权重越大,反之,权重越小。
2停止词权重为零。
显然一个词如果只在少数几个文本中出现,我们就很同容易锁定目标,它的权重就越大;相反,如果一个词在大量文本中都有,对于我们检索似乎没什么用处,它的权重应该小。

IDF(Inverse Term Frequency)

IDF称为”逆文本频率指数“,用来量化上文说的权重。定义为:
I D F ( x ) = log ⁡ N N ( x ) IDF(x)=\log\frac{N}{N(x)} IDF(x)=logN(x)N
其中,N代表语料库中文本的总数,而N(x)代表语料库中包含词x的文本总数。所谓IDF的概念就是一个特定条件下关键词的概率分布的交叉熵。
基于上述定义,某个词x的TF-IDF就可以计算了。
T F − I D F ( x ) = T F ( x ) ⋅ I D F ( x ) TF-IDF(x)=TF(x)\cdot{IDF(x)} TFIDF(x)=TF(x)IDF(x)

from sklearn.feature_extraction.text import TfidfVectorizer
corpus = [
    'this is the first document',
    'this is the second second document',
    'and the third one',
    'is this the first document'
]
tfidf_vec = TfidfVectorizer()
tfidf_matrix = tfidf_vec.fit_transform(corpus)
# 得到语料库所有不重复的词
print(tfidf_vec.get_feature_names())
# 得到每个单词对应的id值
print(tfidf_vec.vocabulary_)
# 得到每个句子所对应的向量
# 向量里数字的顺序是按照词语的id顺序来的
print(tfidf_matrix.toarray())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值