1.1 复习第一周课程内容
1.1.1 word vector
词向量的表示方法一般有两种,一种是one-hot representation(独热编码,稀疏表达),还有一种是distributed representation(稠密表达),一般用到的都是分布式表达的词向量表示方法。
word2vec是稠密表达的一种算法,是一种自编码的无监督训练算法。word2vec有两种模型,一种是CBOW,一种是Skip-gram。
Word2vec的损失函数可以表示为:
l
o
g
p
(
o
∣
c
)
=
l
o
g
e
x
p
(
u
o
T
v
c
)
∑
w
=
1
V
(
u
w
T
v
c
)
log\space p(o|c)=log\frac{exp(u_o^Tv_c)}{\sum_{w=1}^V(u_w^Tv_c)}
log p(o∣c)=log∑w=1V(uwTvc)exp(uoTvc)
因为原始训练方法训练比较复杂繁琐,因此提出了负采样的方法,负采样方法的损失函数计算公式为:
J
t
(
θ
)
=
l
o
g
σ
(
u
o
T
v
c
)
+
∑
i
=
1
k
E
j
∼
P
(
w
)
[
l
o
g
σ
(
−
u
j
T
v
c
)
]
J_t(\theta)=log \sigma(u_o^Tv_c)+\sum_{i=1}^kE_{j\sim P(w)}[log\space \sigma(-u_j^Tv_c)]
Jt(θ)=logσ(uoTvc)+i=1∑kEj∼P(w)[log σ(−ujTvc)]
该算法使用梯度下降进行参数更新:
θ
n
e
w
=
θ
o
l
d
−
α
▽
θ
J
(
θ
)
\theta^{new}=\theta^{old}-\alpha \triangledown_{\theta}J(\theta)
θnew=θold−α▽θJ(θ)
word2vec模型性能的评价方法分为内部评价和外部评价;glove是全局统计方法+word2vec的方法;
1.2 分类器
1.2.1 决策树
优点:
- 便于理解、展示;
- 特征可以是离散、缺失;
缺点:
- 容易过拟合;
- 数值型特征不好处理;
- 特征多的时候树过大;
1.2.2 熵(Entropy)
H ( X ) = ∑ i = 1 n p ( x i ) l o g 1 p ( x i ) H(X)=\sum_{i=1}^np(x_i)log\frac{1}{p(x_i)} H(X)=i=1∑np(xi)logp(xi)1
1.2.3 交叉熵
交叉熵计算的是两个概率分布的距离,假设现在有两个概率分布,一个是样本分布概率p,一个是模型概率分布q。两个概率之间的交叉熵就是 H ( p , q ) = − ∑ i p ( x i ) l o g q ( x i ) H(p,q)=-\sum_ip(x_i)log\space q(x_i) H(p,q)=−i∑p(xi)log q(xi)交叉熵越小,表示真实概率分布和模型估计概率分布越接近。我们要优化模型,目的就是为了使交叉熵变小。
1.2.4 决策平面
决策平面
p
(
y
=
1
∣
x
)
p
(
y
=
0
∣
x
)
=
1
\frac{p(y=1|x)}{p(y=0|x)}=1
p(y=0∣x)p(y=1∣x)=1
当
p
(
y
=
1
∣
x
)
>
p
(
y
=
0
∣
z
)
p(y=1|x)>p(y=0|z)
p(y=1∣x)>p(y=0∣z),样本被分到
y
=
1
y=1
y=1类;
当
p
(
y
=
1
∣
x
)
<
p
(
y
=
0
∣
x
)
p(y=1|x)<p(y=0|x)
p(y=1∣x)<p(y=0∣x),样本被分到
y
=
0
y=0
y=0类;
1.3 命名实体识别(Named Entity Recognition)
命名实体识别的发展历史
- 早期方法:基于规则、基于字典;应用正则表达式,符合某种结构的认为是某一种词性。
- 传统机器学习:HMM、MEMM、CRF;
- 深度学习:RNN-CRF、CNN-CRF;
- 近期方法:注意力模型、迁移学习、半监督学习;
命名实体识别类别
- 三大类:实体类、时间类、数字类;
- 七小类:人名、地名、组织机构名、时间、日期、货币、百分比;
实际应用中,NER模型通常只要识别出人名、地名、组织结构名,可以定义实际需要的NER类别;
- B-ORG:组织开始名
- I-ORG:组织中间名
- E-ORG:组织结束名
- B-PER:人名
- I-PER
- E-PER
- B-LOC:地名
- I-LOC
- E-LOC
NER当前学术界认为是已经解决的问题,但应用中歧义和错误仍然很多;
因为命名实体识别的训练语料是有限的,主要的训练语料是新闻语料,实体类别也是固定的,一般不会很多。通过训练数据,测试效果可能不错,但是在实际应用中一般应用于比较难的任务,这时效果比较差。NER本身是一个开放性问题,实体是不断增加的,网络词汇会不断增加,NER在没有足够训练语料的情况下很难取得较好的结果,所以NER在实际应用中的效果并没有很好。