多分类文本处理与特征工程
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,大写字母数目,是否有人名,整个字符的长度)