Review Naibe Bayes
P ( c ∣ d ) = P ( c ) ∗ ∏ x ∈ c P ( w ∣ c ) l o g P ( c ∣ d ) = l o g P ( c ) + ∑ w ∈ c l o g P ( w ∣ c ) \begin{aligned}P(c|d)&=P(c)*\prod_{x\in c}P(w|c)\\logP(c|d)&=logP(c)+\sum_{w\in c}logP(w|c)\end{aligned} P(c∣d)logP(c∣d)=P(c)∗x∈c∏P(w∣c)=logP(c)+w∈c∑logP(w∣c)
文档分类模型,给定文档d,朴素贝叶斯计算各个类别c的条件概率,参数化过程是公式一,那么取对数就是公式二。
l o g P ( c ) logP(c) logP(c)是指类别本身出现的概率,比如说每一个词对于类别的影响,如果我见到更多的关于财经类的词,那我判断为财经类,如果我见到更多关于运动类的词那我确定是运动类。
Feature vectors
换一个角度理解 l o g P ( w ∣ c ) logP(w|c) logP(w∣c)
∑ w ∈ c l o g P ( w ∣ c ) \sum_{w\in c}logP(w|c) ∑w∈clogP(w∣c)可以看成是两个因素决定的:
- 每一个词出现在文档里的个数
- 每一个词和类别标签的概率关系
我们把第一个因素用一个向量 Φ \Phi Φ来表示,这个向量有词汇表V这么长,其中向量中的f_i代表词汇表第i个词出现的次数。
假定第一个元素f_1代表goal在文档d出现的次数
第二个因素我们定义为
θ
\theta
θ,对于每一个类别都有一个特定的值。比如,拿sports这个类别来讲,我可以给一个
θ
⃗
s
p
o
r
t
s
\vec\theta_{sports}
θsports这个向量同样有词汇表V那么长,每一个元素对应
Φ
\Phi
Φ里面的一个元素,比如第一个元素我存的是
l
o
g
P
(
g
o
a
l
∣
s
p
o
r
t
s
)
logP(goal|sports)
logP(goal∣sports)
Φ
⃗
=
[
f
1
f
2
.
.
.
f
∣
v
∣
]
θ
⃗
s
p
o
r
t
s
=
[
l
o
g
P
(
g
o
a
l
∣
s
p
o
r
t
s
)
l
o
g
P
(
f
a
n
s
∣
s
p
o
r
t
s
)
.
.
.
l
o
g
P
(
s
t
o
c
k
∣
s
p
o
r
t
s
)
l
o
g
P
(
l
o
a
n
∣
s
p
o
r
t
s
)
l
o
g
P
(
C
E
O
∣
s
p
o
r
t
s
)
]
\vec\Phi= \begin{bmatrix} f_1\\f_2\\...\\f_{|v|} \end{bmatrix} \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \vec\theta_{sports}= \begin{bmatrix} logP(goal|sports)\\ logP(fans|sports)\\ ...\\ logP(stock|sports)\\ logP(loan|sports)\\ logP(CEO|sports) \end{bmatrix}
Φ=⎣⎢⎢⎡f1f2...f∣v∣⎦⎥⎥⎤ θsports=⎣⎢⎢⎢⎢⎢⎢⎡logP(goal∣sports)logP(fans∣sports)...logP(stock∣sports)logP(loan∣sports)logP(CEO∣sports)⎦⎥⎥⎥⎥⎥⎥⎤
f
1
=
#
g
o
a
l
∈
d
f_1=\#goal\in d
f1=#goal∈d
当我们用这个向量来表示,文档和概率之间关系的时候,就会发现,
l
o
g
P
(
c
=
s
p
o
r
t
s
∣
d
)
=
θ
⃗
s
p
o
r
t
s
⋅
Φ
⃗
+
l
o
g
P
(
c
=
s
p
o
r
t
s
)
logP(c=sports|d)=\vec\theta_{sports}\cdot\vec{\Phi}+logP(c=sports)
logP(c=sports∣d)=θsports⋅Φ+logP(c=sports)
Vector Space Model
mapping documents to vectors
朴素贝叶斯模型和向量空间有一定的内在联系,我们把一个文档映射到一个向量空间里,空间的每一维代表词汇表的某一个词的语义信息,d这个文档向量,在这个空间里每一个维度的大小,就代表d里面含有相关信息的大小。
Vector representation of documents
对于这四个文档我可以计算四个不同的向量,每一个向量就代表这个文档不同的词出现的频率,那么抽象起来就是如下:
Sparse vectors document representation
-
词汇表用w来表示 ,Vocabulary: V = w 1 , w 2 , … , w n V = {w_1,w_2,…,w_n} V=w1,w2,…,wn
-
将文档映射为向量,Vector representation for document d:
- v ⃗ ( d ) = ⟨ f 1 , f 2 , … , f ∣ v ∣ ⟩ \vec v(d)=\big \langle f_1,f_2,…,f_{|v|}\big \rangle v(d)=⟨f1,f2,…,f∣v∣⟩
-
上面基于词数量的向量表示,每一个f就是一个词w在文档里出现的个数。
- f i = # w i a n d v ⃗ ( d ) = ⟨ # w 1 , w 2 , … , # w ∣ v ∣ ⟩ f_i=\#w_i and \vec v(d)=\big \langle \#w_1,w_2,…,\#w_{|v|}\big \rangle fi=#wiandv(d)=⟨#w1,w2,…,#w∣v∣⟩
这种向量表示非常的直观,但是在整个词汇表里,不是所有的词都能区分不同文档的属性,
比如说:
- ∣ ∣ a ∣ ∣ t h e ∣ ∣ o n ∣ ∣ o f ∣ ∣ w i t h ∣ ∣ a b o u t ∣ ∣ a n d ∣ ∣ i n ∣ ∣ a t ∣ ∣ t o ∣ ∣ " ∣ ∣ , ∣ ∣ ? ∣ ∣ o h ∣ ∣ . ∣ ∣ ||a| |the| |on| |of | |with| |about| |and| |in| |at| |to| |"| |,| |?| |oh| |.|| ∣∣a∣∣the∣∣on∣∣of∣∣with∣∣about∣∣and∣∣in∣∣at∣∣to∣∣"∣∣,∣∣?∣∣oh∣∣.∣∣
几乎在所有的文档里都会出现多次,并不能区分文档的类别,STOP WORD
可以把停止词从向量的定义中去掉,可以增加文档向量表示的有效性,但是停止词需要人工定义,选择起来缺乏系统性,有一种方法,可以把停止词这样的硬约束(Hard constraints)变成一种软约束(soft constraint),基本的思想就是我去数一数哪些词出现在所有的文档里,哪些词只出现在特定的文档里,我们把出现在所有文档中的词权重稍微降低,这个思想就叫TF-IDF向量
TF-IDF vectors document representation
-
soft version of stop words in selecting useful words
-
intuition - the more documents in which of words exists, the less informative the word is .
-
reduce the importance values of uninformative words
tf就是一个词在文档中数量,df就是每一个词出现在不同文档中的数量,df分之一就是idf,直观上认为,这个词出现的次数越多,那么这个词的重要性就越低。
v ⃗ t f − i d f ( d j ) = ⟨ T F ( w i , d i ) D F ( w 1 ) , T F ( w 2 , d j ) D F ( w 2 ) , . . . , T F ( w n , d j ) D F ( w n ) = ⟨ T F ( w 1 , d i ) I D F ( w 1 ) , T F ( w 2 , d i ) I D F ( w 2 ) , . . . , T F ( w n , d i ) I D F ( w n ) \begin{aligned} \vec v_{tf-idf}(d_j)& = \big \langle \frac{TF(w_i, d_i)}{DF(w_1)},\frac{TF(w_2,d_j)}{DF(w_2)},...,\frac{TF(w_n,d_j)}{DF(w_n)}\\ &=\big \langle TF(w_1,d_i)IDF(w_1),TF(w_2,d_i)IDF(w_2),...,TF(w_n,d_i)IDF(w_n) \end{aligned} vtf−idf(dj)=⟨DF(w1)TF(wi,di),DF(w2)TF(w2,dj),...,DF(wn)TF(wn,dj)=⟨TF(w1,di)IDF(w1),TF(w2,di)IDF(w2),...,TF(wn,di)IDF(wn)
那一个形式定义就是:-
tf 定义为:w出现在文档里的次数,除以 所有文档里词的总数
T F ( w i , d j ) = # w i ∣ w i ∈ d j # w ∣ w ∈ d j , w ∈ V TF(w_i,d_j)=\frac {\#{w_i|w_i\in d_j}}{\#{w|w\in d_j,w\in V}} TF(wi,dj)=#w∣w∈dj,w∈V#wi∣wi∈dj
-
df定义为一套数据集里出现w所有的文档的个数:
D F ( w i ) = # d ∣ d ∈ D , w i ∈ d ∣ D ∣ DF(w_i)=\frac{\#{d|d\in D, w_i\in d}}{|D|} DF(wi)=∣D∣#d∣d∈D,wi∈d -
那么idf就是定义为:
I D F ( w i ) = l o g ∣ D ∣ # d ∣ d ∈ D , w i ∈ D IDF(w_i)=log \frac{|D|}{\#{d|d\in D,w_i\in D}} IDF(wi)=log#d∣d∈D,wi∈D∣D∣
或者呢,有些方法里面也不取log。
-
vector representation of documents
那么,假如我们用tf-idf来表示,同样这四个文档,向量就如下表右边所示,们可以看到,出现在很多文档里面的词,a他的权重其实是降低了
summary:
- 学到了把一个文档d映射到向量空间的方法
- 直接按照词的频率来数数,这种叫count based vector
- 我们区分高频词和低频次叫,TF-IDF vectors
- 把一个文档映射到一个向量的过程理解为特征抽取的过程,重要性在于他把一个语言学层面的问题,文档理解,映射成了一个数学领域的对象,向量,这样的话我们之后的建模就可以在向量空间里面进行了。