多分类文本处理与特征工程
1语言模型
语言模型:用来判断一句话从句法上是否通顺。
计算单词在句子或序列中的可能性:
p
(
s
)
=
p
(
w
1
,
w
2
,
w
3
,
…
w
n
)
p(s)=p(w_1,w_2,w_3,\dots w_n)
p(s)=p(w1,w2,w3,…wn)
Chain Rule:
P
(
A
,
B
,
C
,
D
)
=
P
(
A
)
P
(
B
∣
A
)
P
(
C
∣
A
,
B
)
P
(
D
∣
A
,
B
,
C
)
P(A,B,C,D)=P(A)P(B|A)P(C|A,B)P(D|A,B,C)
P(A,B,C,D)=P(A)P(B∣A)P(C∣A,B)P(D∣A,B,C)
p ( w 1 , w 2 , w 3 , … w n ) = p ( w 1 ) p ( w 2 ∣ w 1 ) … p ( w n ∣ w 1 w 2 … w n − 1 ) p(w_1,w_2,w_3,\dots w_n)=p(w_1)p(w_2|w_1)\dots p(w_n|w_1w_2\dots w_{n-1}) p(w1,w2,w3,…wn)=p(w1)p(w2∣w1)…p(wn∣w1w2…wn−1)
首先进行分词,然后进行链式法则的概率计算
神经网络语言模型(NNLM)
条件很长的时候,就会有sparsity(稀疏性)问题。
Markov Assumption马尔科夫假设 N-gram model
- p ( 地 位 ∣ 京 东 A I 技 术 处 于 领 先 ) p(地位|京东\ AI\ 技术 \ 处于\ 领先) p(地位∣京东 AI 技术 处于 领先)= p ( 地 位 ) p(地位) p(地位),Unigram Model
- p ( 地 位 ∣ 京 东 A I 技 术 处 于 领 先 ) p(地位|京东\ AI\ 技术 \ 处于\ 领先) p(地位∣京东 AI 技术 处于 领先)= p ( 地 位 ∣ 领 先 ) p(地位|领先) p(地位∣领先),一阶假设Bigram Model
- p ( 地 位 ∣ 京 东 A I 技 术 处 于 领 先 ) p(地位|京东\ AI\ 技术 \ 处于\ 领先) p(地位∣京东 AI 技术 处于 领先)= p ( 地 位 ∣ 处 于 领 先 ) p(地位|处于\ 领先) p(地位∣处于 领先),二阶假设Trigram Model
应用到语言模型中:
-
p ( w 1 , w 2 , w 3 , … w n ) = p ( w 1 ) … p ( w n ) = ∏ i = 1 w p ( w i ) p(w_1,w_2,w_3,\dots w_n) = p(w_1)\dots p(w_n) = \prod_{i = 1}^{w} p(w_i) p(w1,w2,w3,…wn)=p(w1)…p(wn)=∏i=1wp(wi),Unigram Model
-
p ( w 1 , w 2 , w 3 , … w n ) = p ( w 1 ) p ( w 2 ∣ w 1 ) … p ( w n ∣ w n − 1 ) = p ( w 1 ) ∏ i = 2 w p ( w i ) p(w_1,w_2,w_3,\dots w_n) = p(w_1)p(w_2|w_1)\dots p(w_n|w_{n-1}) = p(w_1)\prod_{i = 2}^{w} p(w_i) p(w1,w2,w3,…wn)=p(w1)p(w2∣w1)…p(wn∣wn−1)=p(w1)∏i=2wp(wi),Bigram Model
-
p ( w 1 , w 2 , w 3 , … w n ) = p ( w 1 ) p ( w 2 ∣ w 1 ) p ( w 3 ∣ w 1 w 2 ) … p ( w n ∣ w 1 … w n − 1 ) p(w_1,w_2,w_3,\dots w_n) = p(w_1)p(w_2|w_1)p(w_3|w_1w_2)\dots p(w_n|w_1\dots w_{n-1}) p(w1,w2,w3,…wn)=p(w1)p(w2∣w1)p(w3∣w1w2)…p(wn∣w1…wn−1)
= p ( w 1 ) p ( w 2 ∣ w 1 ) ∏ i = 3 w p ( w i ) = p(w_1)p(w_2|w_1)\prod_{i = 3}^{w} p(w_i) =p(w1)p(w2∣w1)i=3∏wp(wi),Trigram Model
是一个数据平滑的过程
Evaluation of Language Model
Q:训练出来的语言模型效果是好还是坏?
理想情况下:
- 假设有两个语言模型A,B(is better?)
- 选定一个特定的任务比如拼写纠错(MT:machine translation)
- 把两个模型A,B都运用到此任务中
- 最后比较准确率,从而判断A,B的表现
Perplexity(困惑度)
Perplexity越小,模型的效果越好。
Perplexity= 2 − x 2^{-x} 2−x, x x x:avergae log likelihood(平均对数相似度)
如:对于 p ( w 1 , w 2 , w 3 , … w n ) p(w_1,w_2,w_3,\dots w_n) p(w1,w2,w3,…wn)使用Bigram Model:
x = ( log ( P L M ( w 1 ) ) + log ( P L M ( w 2 ∣ w 1 ) ) + log ( P L M ( w 3 ∣ w 2 ) ) + log ( P L M ( w 4 ∣ w 3 ) ) + log ( P L M ( w 5 ∣ w 4 ) ) ) / 5 x=(\log(P_{LM}(w_1))+\log(P_{LM}(w_2|w_1))+\log(P_{LM}(w_3|w_2))+\log(P_{LM}(w_4|w_3))+\log(P_{LM}(w_5|w_4)))/5 x=(log(PLM(w1))+log(PLM(w2∣w1))+log(PLM(w3∣w2))+log(PLM(w4∣w3))+log(PLM(w5∣w4)))/5
计算Perplexity= 2 − x 2^{-x} 2−x
Add-one Smoothing(Laplace Smoothing)
极大似然估计(MLE) or 拉普拉斯平滑
P
M
L
E
(
w
i
∣
w
i
−
1
)
=
c
(
w
i
−
1
,
w
i
)
c
(
w
i
−
1
)
P
A
d
d
−
1
(
w
i
∣
w
i
−
1
)
=
c
(
w
i
−
1
,
w
i
)
+
1
c
(
w
i
−
1
)
+
V
P_{\mathrm{MLE}}\left(w_{\mathrm{i}} \mid \mathrm{w}_{\mathrm{i}-1}\right)=\frac{\mathrm{c}\left(\mathrm{w}_{\mathrm{i}-1}, \mathrm{w}_{\mathrm{i}}\right)}{\mathrm{c}\left(\mathrm{w}_{\mathrm{i}-1}\right)} \\ \mathrm{P}_{\mathrm{Add}-1}\left(\mathrm{w}_{\mathrm{i}} \mid \mathrm{w}_{\mathrm{i}-1}\right)=\frac{\mathrm{c}\left(\mathrm{w}_{\mathrm{i}-1}, \mathrm{w}_{\mathrm{i}}\right)+1}{\mathrm{c}\left(\mathrm{w}_{\mathrm{i}-1}\right)+\mathrm{V}}
PMLE(wi∣wi−1)=c(wi−1)c(wi−1,wi)PAdd−1(wi∣wi−1)=c(wi−1)+Vc(wi−1,wi)+1
V为词库的大小
Add-k Smoothing(Laplace Smoothing)
P
A
d
d
−
1
(
w
i
∣
w
i
−
1
)
=
c
(
w
i
−
1
,
w
i
)
+
k
c
(
w
i
−
1
)
+
k
V
\mathrm{P}_{\mathrm{Add}-1}\left(\mathrm{w}_{\mathrm{i}} \mid \mathrm{w}_{\mathrm{i}-1}\right)=\frac{\mathrm{c}\left(\mathrm{w}_{\mathrm{i}-1}, \mathrm{w}_{\mathrm{i}}\right)+k}{\mathrm{c}\left(\mathrm{w}_{\mathrm{i}-1}\right)+\mathrm{kV}}
PAdd−1(wi∣wi−1)=c(wi−1)+kVc(wi−1,wi)+k
语言模型在拼写纠错中的应用spell correction
Find the words with smallest edit distance(计算最小的编辑距离)根据编辑距离进行改造
How to select?
假设:
w
w
w是拼写错误的单词,希望更改成正确的形式(设为
c
c
c),如何得到
c
c
c?
c
∗
=
a
r
g
m
a
x
C
∈
C
a
n
d
i
d
a
t
e
s
P
(
c
∣
w
)
=
a
r
g
m
a
x
C
∈
C
a
n
d
i
d
a
t
e
s
P
(
w
∣
c
)
P
(
c
)
p
(
w
)
c^*=\mathrm{argmax} _{\mathrm{C\in Candidates} }\mathrm{P} (c|w)\\ =\mathrm{argmax} _{\mathrm{C\in Candidates} }\frac{\mathrm{P} (w|c)\mathrm{P} (c)}{\mathrm{p} (w)}\\
c∗=argmaxC∈CandidatesP(c∣w)=argmaxC∈Candidatesp(w)P(w∣c)P(c)
P
(
w
∣
c
)
\mathrm{P} (w|c)
P(w∣c):
- method1:Edit Distance: i f d = 1 , s c o r e = 0.8 ; i f d = 2 , s c o r e = 0.2 ; o t h e r w i s e s c o r e = 0 \mathrm{if} \ d=1,\mathrm{score} =0.8;\mathrm{if} \ d=2,\mathrm{score} =0.2;\mathrm{otherwise} \mathrm{score} =0 if d=1,score=0.8;if d=2,score=0.2;otherwisescore=0
- method2:collected data:当用户拼错 c c c的时候,有多少概率把他拼错为 w w w?
P ( c ) \mathrm{P} (c) P(c):比较类似于语言模型
2预处理
- 过滤词:对于NLP的应用,我们通常先把停用词,出现频率很低的词汇过滤掉。
- normalize(同义词映射标准化)normalize参考资料
- 词干提取(stemming):由规则构成,不能保证标准化后的词语一定在词库中
- 词形还原(lemmatization)
3独热编码 tf-idf
word representation:boolen vector
词典:[我们,去,爬山,今天,你们,昨天,跑步]
词语的表示:我们:[1,0,0,0,0,0,0];爬山:[0,1,0,0,0,0,0];跑步:[0,0,0,0,0,0,1]
句子的表示:我们今天去爬山:[1,1,1,1,0,0,0]
word representation:count vector 除了表示存在还可以表示次数
Sentence Similarity:
计算距离(欧氏距离or曼哈顿距离)
d
=
∣
s
1
−
s
2
∣
d=|s_1-s_2|
d=∣s1−s2∣
计算相似度(余弦相似度):
d
=
s
1
s
2
∣
s
1
∣
∣
s
2
∣
d=\frac{s_1s_2}{|s_1||s_2|}
d=∣s1∣∣s2∣s1s2
tf-idf
一个单词出现了很多次,不代表影响重要;一个单词出现的次数很少,有可能很重要。
因此既要考虑出现次数,也要考虑权重。:
t
f
i
d
f
(
w
)
=
t
f
(
d
,
w
)
×
i
d
f
(
w
)
\mathrm{tfidf} (w)=\mathrm{tf} (d,w)\times \mathrm{idf} (w)
tfidf(w)=tf(d,w)×idf(w)
t
f
i
d
f
(
w
)
\mathrm{tfidf} (w)
tfidf(w):文档
d
d
d中
w
w
w的词频
i d f ( w ) \mathrm{idf} (w) idf(w): i d f ( w ) = log ( N / N ( w ) ) \mathrm{idf} (w)=\log(N/N(w)) idf(w)=log(N/N(w)), N N N表示语料库中的文档总数, N ( w ) N(w) N(w)表示词语 w w w出现在多少个文档
为了准确也可以加入平滑
独热编码的问题:
- 不能表示相关性
- 稀疏性:矩阵过大
4Word2Vec
- 有一个很大的词表库
- 在词表中的每一个词都可以用词向量表征
- 有一个中心词c,有一个输出词o
- 用词c和o的相似度
- 调整这个词向量来获得最大的输出概率
How To calculate P?
损失函数:
L
(
θ
)
=
∏
t
=
1
T
∏
−
m
⩽
j
⩽
m
j
≠
0
p
(
w
t
+
j
∣
w
t
;
θ
)
L(\theta)=\prod_{t=1}^{T} \prod_{-m \leqslant j \leqslant m \atop j \neq 0} p\left(w_{t+j} \mid w_{t} ; \theta\right)
L(θ)=t=1∏Tj=0−m⩽j⩽m∏p(wt+j∣wt;θ)
在skip-gram模型中把one-hot作为模型的输入
核心:通过中心词预测周围的单词
语料库:AI 的 发展 很 快
M
a
x
m
i
n
z
e
P
(
的
∣
A
I
)
P
(
A
I
∣
的
)
P
(
发
展
∣
的
)
P
(
的
∣
发
展
)
P
(
发
展
∣
很
)
P
(
快
∣
很
)
P
(
很
∣
快
)
\mathrm{Maxminze} \ \mathrm{P} (的|AI)\mathrm{P} (AI|的)\mathrm{P} (发展|的)\mathrm{P} (的|发展)\mathrm{P} (发展|很)\mathrm{P} (快|很)\mathrm{P} (很|快)
Maxminze P(的∣AI)P(AI∣的)P(发展∣的)P(的∣发展)P(发展∣很)P(快∣很)P(很∣快)
M a x m i n z e ∏ w ∈ T e x t ( 中 心 词 ) ∏ c ∈ c o n t e x t ( w ) ( w 的 上 下 文 词 ) P ( c ∣ w ; θ ) \mathrm{Maxminze} \prod_{w\in \mathrm{Text}(中心词) }^{} \prod_{c\in \mathrm{context(w)}(w的上下文词) }^{} \mathrm{P} (c|w;\theta) Maxminzew∈Text(中心词)∏c∈context(w)(w的上下文词)∏P(c∣w;θ)
最优化目标:
θ
∗
=
a
r
g
m
a
x
θ
∏
w
∈
T
e
x
t
(
中
心
词
)
∏
c
∈
c
o
n
t
e
x
t
(
w
)
(
w
的
上
下
文
词
)
P
(
c
∣
w
;
θ
)
\theta^*=\mathrm{argmax} _{\theta} \prod_{w\in \mathrm{Text}(中心词) }^{} \prod_{c\in \mathrm{context(w)}(w的上下文词) }^{} \mathrm{P} (c|w;\theta)
θ∗=argmaxθw∈Text(中心词)∏c∈context(w)(w的上下文词)∏P(c∣w;θ)
θ ∗ = a r g m a x θ ∑ w ∈ T e x t ( 中 心 词 ) ∑ c ∈ c o n t e x t ( w ) ( w 的 上 下 文 词 ) log P ( c ∣ w ; θ ) \theta^*=\mathrm{argmax} _{\theta} \sum_{w\in \mathrm{Text}(中心词) }^{} \sum_{c\in \mathrm{context(w)}(w的上下文词) }^{} \log \mathrm{P} (c|w;\theta) θ∗=argmaxθw∈Text(中心词)∑c∈context(w)(w的上下文词)∑logP(c∣w;θ)
概率分布求法:
P
(
c
∣
w
;
θ
)
=
e
u
c
v
w
∑
c
∈
V
e
u
c
v
w
\mathrm{P} (c|w;\theta)=\frac{e^{u_cv_w}}{\sum _{c\in V}e^{u_cv_w}}
P(c∣w;θ)=∑c∈Veucvweucvw
θ ∗ = a r g m a x θ ∑ w ∈ T e x t ( 中 心 词 ) ∑ c ∈ c o n t e x t ( w ) ( w 的 上 下 文 词 ) log e u c v w ∑ c ∈ V e u c v w a r g m a x θ ∑ w ∈ T e x t ( 中 心 词 ) ∑ c ∈ c o n t e x t ( w ) ( w 的 上 下 文 词 ) [ u c v w − log ∑ C ′ e u c v w ] \theta^*=\mathrm{argmax} _{\theta} \sum_{w\in \mathrm{Text}(中心词) }^{} \sum_{c\in \mathrm{context(w)}(w的上下文词) }^{} \log\frac{e^{u_cv_w}}{\sum _{c\in V}e^{u_cv_w}}\\ \mathrm{argmax} _{\theta} \sum_{w\in \mathrm{Text}(中心词) }^{} \sum_{c\in \mathrm{context(w)}(w的上下文词) }^{} [u_cv_w-\log \sum_{C'}e^{u_cv_w}] θ∗=argmaxθw∈Text(中心词)∑c∈context(w)(w的上下文词)∑log∑c∈Veucvweucvwargmaxθw∈Text(中心词)∑c∈context(w)(w的上下文词)∑[ucvw−logC′∑eucvw]
这种算法,如果使用梯度下降法进行参数的更新:
θ
t
+
1
=
θ
t
−
η
+
▽
θ
f
(
θ
)
\theta^{t+1}=\theta^{t}-\eta_+ \bigtriangledown _{\theta}f(\theta)
θt+1=θt−η+▽θf(θ)
此时的时间复杂度为
O
(
∣
V
∣
)
O(|V|)
O(∣V∣),从时间复杂度的角度来看效率不高
CBOW操作起来运行的更快
Word2Vec的优化方法
- hierarchical softmax(分层softmax) log 2 ( v ) \log _2(v) log2(v)
- negative sampling(负采样)
缺点:解决不了一词多义
目标:学习一个向量来代表每一个单词 w w w
分布式假设:是可以根据周围的单词来确定某一个单词的
OOV问题:out-of-vocablary
经典的学习词向量和句子向量的方法:fasttext方法——fasttext官网
5文本特征工程
构建文本特征的向量组合:
- tf-idf( ∣ V ∣ |V| ∣V∣)
- word2vec or sentence2vec( k k k)
- n-gram( s > > ∣ V ∣ s>>|V| s>>∣V∣)
- POS(词性)
- 主题特征(LDA)
- Task Specific features(wordcounts,大写字母数目,是否有人名,整个字符的长度)