【Paper Reading】Text Classification Using Label Names Only: A Language Model Self-Training Approach
@author: Heisenberg
1.Intuition
针对无标签的场景下,无监督训练。只利用标签名字进行分类。
paper的出发点也即在人工打标时,也是参考使用了已有的先验知识。
比如在新闻类比的分类中,我们提到“运动类”,可能会想到“篮球”,“足球”,“体育场”等相关词。
如何只利用label-name从word level再到sentence level。
LOTClass:Label-Names-Only-Text-Classification
思路:
- 句中单词和标签名称语义相关的的类别词汇表;
- 找出哪些词可以作为类别指示词并进行分类任务训练;
- 结合自训练self-training对模型进行泛化。
2.Methods
2.1 Category Understanding via Label Name Replacement
通过标签名称masking找出语义最相关的词汇构建类别词汇表。类似于前面例子中根据“运动类”去找“篮球”,“足球”,“体育场”等语义相关词。即是在确定的某位置上找出可替换的概率较大的同义词。
具体做法:
-
类别标签名在文中出现原词时,每出现一次,用BERT的Masking Language Model(MLM) masking掉
p ( w ∣ h ) = Softmax ( W 2 σ ( W 1 h + b ) ) p(w \mid \boldsymbol{h})=\operatorname{Softmax}\left(W_{2} \sigma\left(W_{1} h+\boldsymbol{b}\right)\right) p(w∣h)=Softmax(W2σ(W1h+b))
h h h为masking label name之后上下文语境的向量,为Bert预训练好的权重。 W 1 ∈ R h × h W_1\in \mathbb{R}^{h\times h} W1∈Rh×h 。
W 2 ∈ R ∣ V ∣ × h W_2\in \mathbb{R}^{|V| \times h} W2∈R∣V∣×h, V V V针对全部30522个词(bert/vocab.txt的词表大小),受上下文影响的动态权重。
从出现label-name的该位置的上下文语境替换词表中的所有词。根据Softmax之后的概率值从30522个词中选出概率Top50(按照 p ( w ∣ h ) p(w|\boldsymbol{h}) p(w∣h)排序)的词。
将样本中所有该label-name的每一次出现的50个替换同义词累加按照词频排序。比如sports共出现了1000次,则把1000x50个词按照词频排序。
-
去除掉停用词以及在多个类别出现过的词,筛选出Top100作为该label-name的Category Vocabulary。
2.2 Masked Category Prediction
如果只用这些词去作为识别匹配的硬规则做分类的话会出现下列问题:
- 出现了也不一定对。如Table 1中sports的第二种语义是”有“、”承载“。(多意)
- 只选取100个可能会不全,比如没出现sports及其Category Vocabulary的词其实也是在说运动。(漏选)
一言以蔽之,这两者都是因为只看有无词本身的意思是不够的,依次判断太武断。
因此在sentence level上我们想让此表中的词结合上下文语境综合判断。如何能结合上下文语境呢?再次借助masking完形填空的思想。
具体做法:
-
筛选出category-indicative words集合 ( w , c w ) ∈ S i n d (w,c_w) \in S_{ind} (w,cw)∈Sind
对文本中的除停用词外的每一个词都按照2.1中第一步的选择每个词的Top50个语义相似词。若该50个词中超过20个词同label-name对应的Top100词表重叠的话,即将这个词选为类别指示词, c w c_w cw作为其伪标签。比如图例中的{sporting,[0,1,0]}。
-
Masking & Fine-tuning
把每个类别指示词w遮掩掉,将指向的类作为pseudo label对bert进行优化微调。
p ( c ∣ h ) = Softmax ( W c h + b c ) p(c \mid \boldsymbol{h})=\operatorname{Softmax}\left(W_{c} \boldsymbol{h}+\boldsymbol{b}_{c}\right) p(c∣h)=Softmax(Wch+bc)
W c ∈ R K × h W_c\in\mathbb{R}^{K\times h} Wc∈RK×h,K为标签种类,是通过finetune学习得到的, h h h为masking category-indicative words之后上下文语境的向量, b c ∈ R K b_c\in \mathbb{R}^{K} bc∈RK。
L M C P = − ∑ ( w , c w ) ∈ S ind log p ( c w ∣ h w ) \mathcal{L}_{M C P}=-\sum_{\left(w, c_{w}\right) \in \mathcal{S}_{\text {ind }}} \log p\left(c_{w} \mid \boldsymbol{h}_{w}\right) LMCP=−∑(w,cw)∈Sind logp(cw∣hw)
MCP任务的loss选择了线性分类器的交叉熵CE loss。
做masking和finetune的原因?
- masking:不能简单地记忆住这个category-indicative words本身。
- finetune:在这个语境的位置上融合上下文语义信息。
2.3 Self-Training
Why Self-Training?
- 有的文本一个类别指示词都没有
- Bert分类最终是要在看到全文的基础上用[CLS]这个token进行预测
自训练的思想是迭代地使用模型当前预测P来计算目标分布Q,从而指导模型训练。当前预测P即为伪标签,pseudo label。ST的Loss通常用KL散度刻画:
L S T = K L ( Q ∥ P ) = ∑ i = 1 N ∑ j = 1 K q i j log q i j p i j \mathcal{L}_{S T}=\mathrm{KL}(Q \| P)=\sum_{i=1}^{N} \sum_{j=1}^{K} q_{i j} \log \frac{q_{i j}}{p_{i j}} LST=KL(Q∥P)=∑i=1N∑j=1Kqijlogpijqij
N N N为样本数,在一次迭代中为batch数。 K K K为标签数。
其中如何根据伪标签P来计算target distribution就很重要。通常有两种方法:
-
Hard Labeling
q i j = 1 ( p i j > τ ) q_{ij}=\mathbb{1}(p_{ij}>\tau) qij=1(pij>τ)。
τ \tau τ是一个先验阈值, 1 ( ⋅ ) \mathbb{1}(\cdot) 1(⋅)是示性函数。
即将q表示为p的one-hot编码向量。
-
Soft Labeling
q i j = p i j 2 / f j ∑ j ′ ( p i j ′ 2 / f j ′ ) , f j = ∑ i p i j q_{i j}=\frac{p_{i j}^{2} / f_{j}}{\sum_{j^{\prime}}\left(p_{i j^{\prime}}^{2} / f_{j^{\prime}}\right)}, f_{j}=\sum_{i} p_{i j} qij=∑j′(pij′2/fj′)pij2/fj,fj=∑ipij
软标签就是使“大的更大,小的更小”但不会降低到0。
f在这里类似于一个温度,温度上升,软目标分布更为均匀。
举个栗子:
batch=3预测了三个样本p 0 = [ 0.5 , 0.3 , 0.2 ] p_0=[0.5,0.3,0.2] p0=[0.5,0.3,0.2]
p 1 = [ 0.4 , 0.2 , 0.4 ] p_1=[0.4,0.2,0.4] p1=[0.4,0.2,0.4]
p 2 = [ 0.1 , 0.8 , 0.1 ] p_2=[0.1,0.8,0.1] p2=[0.1,0.8,0.1];
(1) Hard Labeling
K L h a r d = log ( 1 0.5 ) + log ( 1 0.4 ) + log ( 1 0.8 ) = 1.8326 KL_{hard}=\log(\frac{1}{0.5})+\log(\frac{1}{0.4})+\log(\frac{1}{0.8})=1.8326 KLhard=log(0.51)+log(0.41)+log(0.81)=1.8326
(2) Soft Labeling
f 0 = 0.5 + 0.4 + 0.1 = 1 , f 1 = 1.3 , f 2 = 0.7 f_0=0.5+0.4+0.1=1, f_1=1.3,f_2=0.7 f0=0.5+0.4+0.1=1,f1=1.3,f2=0.7
q 00 = 0.25 1 0.25 1 + 0.09 1.3 + 0.04 0.7 = 0.6644 q_{00}=\frac{\frac{0.25}{1}}{\frac{0.25}{1}+\frac{0.09}{1.3}+\frac{0.04}{0.7}}=0.6644 q00=10.25+1.30.09+0.70.0410.25=0.6644
q 01 = 0.09 1.3 0.25 1 + 0.09 1.3 + 0.04 0.7 = 0.1839 q_{01}=\frac{\frac{0.09}{1.3}}{\frac{0.25}{1}+\frac{0.09}{1.3}+\frac{0.04}{0.7}}=0.1839 q01=10.25+1.30.09+0.70.041.30.09=0.1839
q 02 = 0.04 0.7 0.25 1 + 0.09 1.3 + 0.04 0.7 = 0.1517 q_{02}=\frac{\frac{0.04}{0.7}}{\frac{0.25}{1}+\frac{0.09}{1.3}+\frac{0.04}{0.7}}=0.1517 q02=10.25+1.30.09+0.70.040.70.04=0.1517
q 0 = [ 0.6644 , 0.1839 , 0.1517 ] q_0=[0.6644,0.1839,0.1517] q0=[0.6644,0.1839,0.1517]
同理可得
q 1 = [ 0.3815 , 0.0734 , 0.5448 ] q_1=[0.3815,0.0734,0.5448] q1=[0.3815,0.0734,0.5448]
q 2 = [ 0.0678 , 0.8351 , 0.0971 ] q_2=[0.0678,0.8351,0.0971] q2=[0.0678,0.8351,0.0971]
计算可得
K L s o f t = ∑ i = 0 2 ∑ j = 0 2 q i j log q i j p i j = 0.1403 KL_{soft}=\sum_{i=0}^{2} \sum_{j=0}^{2} q_{i j} \log \frac{q_{i j}}{p_{i j}}=0.1403 KLsoft=∑i=02∑j=02qijlogpijqij=0.1403
可见Soft做了类平滑处理之后KL散度会大福降低。
最后再用之前说到的softmax层分类:
p i j = p ( c j ∣ h d i : [ CLS ] ) p_{ij}=p(c_j|\boldsymbol{h}_{d_i:[\text{CLS}]}) pij=p(cj∣hdi:[CLS])
paper最终选取了软标签进行实验。
3. Experiments
3.1 实验结果
最终LOTClass在无监督实验中均取得了SOTA结果,并且与半监督、无监督方法也可相媲美。
w/o. ST作为自身的消融实验本身较其他方法也好了不少。
3.2 讨论
-
以AGNews数据集为例,从效果上看,相当于给有监督的Bert的每个类别48个样本进行训练取得的效果。AGnews一共4个类别,相当于有监督只用了192个的样本的效果。
-
Word2vec效果则较差
混淆严重。主要由于其窗口的限制不能动态变化词语义在不同语境中的变化。
证明该方法是具有鲁棒性的,不会因为label-name的改变使结果发生大的改变。
3.3 作者的讨论及future works
- 无监督的潜力还未前完全开发。比如只用了Bert没试其他的PTM;每个类别Category Vocabulary中最多用了3个词etc.
- 太过泛化的标签。例如“person”,“time”这种,将其用2-3个关键词实例化。例如用“school”和“university”代替了“educational institution”
- 通篇反语,实则正向情感的表达还是不能识别。作者提到了"active learning" maybe works
- 与半监督、无监督模型相互融合、协作。
4. 对本文的思考
4.1 对于中文的适用性
Chinese Word Segmentation如何应用。
RoBERTa基于中文分词的,效果一般。
4.2 category vocabulary是否完整
不常用的语义下会不会排不进top。
e.g. fish除了有鱼的意思,也会有“上学”的意思。
这样的话不常用的语义可能会存在累积之后不能进入Top100的category vocabulary,这样在少的语义上masking和finetuning也没用了。
4.3 category words运算效率
直接对30522个词进行softmax是否运算效率较低,有无更好的方法。