文本挖掘: 词语关联挖掘之平行关系发现

一. 概率知识回顾

  • 联合概率
    表示两个事件共同发生的概率
    如果两个事件相互独立, 则P(x, y) = P(x) · P(y) , 比如 P(第一次正面, 第二次正面) = 0.5 x 0.5 = 0.25

  • 条件概率
    表示已知事件b (base)发生的情况下, 事件a (action)发生的概率P(a|b) = P(a, b) / P(b)
    解释: 已知b发生, a的发生概率 = a, b联合发生概率 / base发生的概率

那么, 怎么如果有条件概率了, 我们怎么算联合概率呢? 可以倒腾一下条件概率公式, 得到 P(a, b) = P(b) · P(a|b), 也就是说两个事件ab共同发生的概率 = a发生的概率 x 已知a发生条件下b发生的概率;
于是, 我们得到了

  • 链式规则
    P(x1, x2, ..., xn ) = P(x1) · P(x2|x1) · P(x3|x1,x2) ·... · P(xn | x1, ..., xn-1)
    其中, P(x3|x1,x2) = P(x3, x1, x2) / P(x1, x2)
    解释: action x3的条件概率 = x3与base(x1, x2)的联合发生概率与base(x1, x2)的发生概率

  • 在文本挖掘中的例子:
    P(今天, 天气, 不错) = P(今天) · P(天气|今天) · P(不错|今天, 天气)

二. 引入: 信息熵概念

信息熵 = 不确定性


信息熵定义

note: 此处p(x)是x发生的概率.

注意观察这个定义函数, 就可以发现, 因为p(x)<1, 所以如果p(x)值越小且x数目越多的话, 这个H(X)将增大.

这里其实是用简单的导数计算, 假设p(x) = u, 则(ulogu)' = logu + 1, 单调递增, 再引入前面的负号, 则看出随着u增大, H是递减的; 换句话说, u变小, H就增大.

因此, 很容易知道, 汉语的信息熵是比英语大不少的, 因为汉语文字数目大于英语文字数目, 且汉语长尾词语非常多, 他们相对来说概率都比较小, 很容易拉高H的值.

联合熵: H(X, Y) = - Σp(x, y) log(p(x, y)), 其实就是把p(x)替换成了p(x,y)代表联合概率.

条件熵: 在一个随机变量已知的时候, 另外一个变量的不确定性
H(Y|X) = - Σp(x, y) log(p(y|x))
链式规则: H(X, Y) = H(X) + H(Y|X)

互信息: I(X; Y) = Σp(x, y) log p(x, y)/p(x)p(y)
互信息的性质: I(X; Y) = H(X) - H(X|Y)
I指标其实就是表现的两个实体之间的相关程度. 如果X和Y完全独立, 那么I(X; Y) = H(X)- H(X) = 0
举例子: I(计算机软件, 软件) > I(计算机, 汽车)

之间的关系

三. 词语关系的发现

1. what, why, how

what:
两种关系,
聚合关系/平行关系: paradigmatic
组合关系/共同关系: syntagmatic

上下文中A能被B替换, 那这是聚合关系. //平行关系, 比如cat , dog
A和B能放在一起做搭配, 那么这是组合关系 //共同关系, 互补 比如cat, eat

why?
应用: 信息检索中的search suggestion, 主题图谱entity map.

How?
词语关联, 对于平行关系词语来说,他们往往有十分相似的context.

2. 如何发现这两种关系? 直觉解释

my cat eats fish on Saturday.
my dog eats meat on Monday.
平行关系: 按照常识, 上下文context相似度高的词是平行关系.
组合关系: 组合关系是一种词语的搭配关系. 按照常识, 这两个词会一起搭配使用. 如果共同出现的概率高, 而独自出现的概率低, 那么就是组合关系.

所以我们由此得出的初步结论:
对于平行关系的, 我们获取每个词语的context, 然后计算词语间context的相似度, 相似度高的就是平行关系.
对于组合关系的, 同时出现在某个语段context(比如一句话或者一段话)中的概率高, 而两个词语独自出现的概率比较低, 那么这两者就是组合关系.

有意思的是, 如果两个词语是平行关系的话, 那么他们往往有着相同的组合关系词语来搭配使用. 比如dog eats meat. cat eats meat.

那么接下去, 我们首先注意到一个问题, 如何获取每个词语的context?

3. context to doc

我们可以把context转化为一个我们熟悉的概念 -- document, 这样我们就可以利用以前学过的文档相似度计算的很多方法了.
这里, 我们约定Context = pseudo doc = bag of words词袋
这里词袋的大小选择起来有很多种方法
比如下面这个公式
Sim("cat","dog") = Sim(Left1("cat"),Left1("dog")) + Sim(Right1("cat"), Right1("dog")) + ... + Sim(Win8("cat"), Win8("dog"))
其中, Window8("cat") = {"my","his","big", "eats", "fish"}

4. doc to vector

我们将使用Vector Space Model. 非常常见, 往往用在文本分类, 情感分类上.
当我们定好了词袋, 也就是我们的doc以后, 我们将会把它转化为多维度空间中的一个向量.
这个空间有n个维度, 这个维度大小取决于文本库corpus的总体独特单词数, 因此维度数目非常地大.
假设表示一个doc("cat") = {"eats": 5, "ate":3, "is":10 , ...}

doc("cat")可能被表示为如下:


doc("cat")的向量

表示成向量后, 我们的下一个问题是: 怎么计算相似度?

5. 相似度计算

求相似度往往使用余弦定理: cos(a, b) = a · b / |a||b| ,

但是, 在我们真正开始算之前, 我们得先进行标准化(正规化), 否则各个维度上的向量长度不一, 会出现大数吃小数的现象. 要深刻理解余弦定理是为了求解向量之间夹角的大小, 或者说a向量在b向量单位化后方向上投影的长度(值是0~1)
因此,
d1 = (x1, x2, ... xn), 其中xi = c(wi, d1)/|d1|, c = count, 换句话说, xi是x在d1中出现的概率

Sim(d1, d2) = d1 · d2 = x1y1 + ... + xnyn = Σ(1~n) xiyi 求解向量内积
如果Sim = cos = 1, 夹角为0°, 那么就是完全的平行关系, 即同义词

这个模型还存在的问题:
某些频繁出现的词仍然存在压制其他词影响力的可能.
存在大量的废词, 比如and, or, the 等等...
对空间的浪费, 这个维度数过高了(n如果在这里可能>=10k, 毕竟英语还是汉语的词语都是非常多的)

6. TF-IDF权重的引入

为了解决上述简单模型条件下存在的问题, 我们引入TF-IDF term weighting.

1) TF值

我们首先重新定义怎么计算TermFrequency. 过去是出现一次我就+1, 所以在词袋中出现10次, TF=10
现在, 我们决定压制那些出现次数过多的词, 因此考虑引入两种朴素办法, 0/1 bit法, 或者对数函数法.

此处, 请务必记得我们约定y: 处理后的TF变形值, x : C(wi, d1) 词语出现频次

TF transformation method:

  1. 0/1 bit hot method (not good enough)
    一个词没出现标记为0, 出现了就标记成1.

  2. from y = x to y=log(1+x) (good)
    这里对数函数里头+1, 是为了保证x=0, y=0, 而不至于出现异常.

2) 第三种TF值计算方法: BM25 transformation

第二种对数函数的方法已经比较好用了, 但是我们追求完美! 于是乎我们又整出了第三种更牛逼一点的TF计算方法, 它是BM25算法的中对于TF部分的计算方法.

y = BM25(x) = (k+1)·x / (x+k), k是认为调整的参数, k是容忍参数. k越大, 对freq words越没有任何调整. 求导后, 可以看到当k->∞, y->x.
k=0, 其实就是bit hot.
所以, BM25的TF计算完美实现了可以自由设定对高频词语维度容忍参数k.

3) IDF algorithm: count adjusting weight

IDF: IDF(word) = log[(M+1)/m] ,
其中m = total number of docs containing word, 是一个变量, 可以看到, m越大, IDF会相应变得越小.
M: total number of docs in collection, 是一个常数

造成效果是: 文档出现频率m越高的词语word, 会相应有一个较低的IDF weight. 当一个词语几乎每篇文档都出现的时候, 那么 IDFweight会很接近 log(1) = 0. 而一个词语出现得非常罕见, 比如unicorn, 那么它的IDFweight会被对数函数限制增长速度, 而不至于变得过大.

7. 最后总模型

我们约定word[i] = wi, document[1] = d1, i指的是第i个元素.
那么, 现在我们整篇文章的对于平行关系发现的论述就归于如下两步:

第一步:

TFi= BM25(wi, d1) = (k+1)c(wi, d1) / k+c(wi, d1)
xi = BM25(wi, d1) / Σ j:1~N { BM25(wj, d1) } //把TFi转化成xi, 即标准化

第二步:

sim(d1, d2) = Σ i:1~N { IDF(wi)·xi·yi } //模型变化体现在TF算法改变, 以及加上权重值IDF(wi).

再次强调, 现在 xi, yi来自BM25(wi, d1) / ΣBM25(wj, d1) , 即BM25's TF of wi / BM25's TF sum of all, 是∈[0, 1]的标准化量.

相似度的计算例子

Sim(d('dog'), d('cat')) = IDF('and') x('and')y('and') + IDF('eats') x('eats')y('eats') + ...

其中x('and', d('cat')) = TF('and', d('cat')) = BM25('and') = { (k+1)·count('and', d('cat')) }/ {k+count('and', d('cat'))}
此处, d('cat') 已经代表的是是我们约定的一个pseudo document of 'cat' --> context of 'cat' 所转化的vector.

End.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容