目录
- 1 无监督 (unsupervised) 方法
- 1.1 统计方法(TF, TF-IDF, YAKE)
- 1.2 图方法 (TextRank, SingleRank, TopicRank, PositionRank)
- 2 有监督 (supervised ) 统计方法
- 2.1 Delta TF-IDF
- 2.2 TF-IDF-ICF
- 2.3 TF-RF
- 2.4 TF-IGM
- 2.5 CTF-ICF
- 3 有监督 (supervised ) 语义学习方法
- 3.1 基于关键词学习
- 3.2 基于文本分类
- 3.3 基于检索语义向量匹配
- 3.3.1 TF-IDF的相关性分值计算
- 3.3.2 基于BM25的相关性分值计算
- 3.3.3 基于浅层神经网络的term TDV分值计算
- 3.3.4 Training
- 3.3.5 试验效果
1 无监督 (unsupervised) 方法
1.1 统计方法(TF, TF-IDF, YAKE)
详情可以参考我之前的博文:TF, TFIDF, YAKE
1.2 图方法 (TextRank, SingleRank, TopicRank, PositionRank)
详情可以参考我之前的博文:TextRank, SingleRank, TopicRank, PositionRank
2 有监督 (supervised ) 统计方法
2.1 Delta TF-IDF
Delta TF-IDF针对文本分类,通过计算单词在正负语料的TF-IDF得分差异来衡量一个词的重要性,核心思想是提高在正负样本之间分布不均匀的词的重要性,分布不均匀的词具有更高的区分度,term
t
t
t在文本
d
d
d的分值计算如下:
V
t
,
d
=
T
F
(
t
,
d
)
×
l
o
g
2
(
∣
P
∣
P
t
)
−
T
F
(
t
,
d
)
×
l
o
g
2
(
∣
N
∣
N
t
)
V_{t,d} = TF(t, d) \times log_2(\frac{|P|}{P_t}) - TF(t, d) \times log_2(\frac{|N|}{N_t})
Vt,d=TF(t,d)×log2(Pt∣P∣)−TF(t,d)×log2(Nt∣N∣)
=
T
F
(
t
,
d
)
×
l
o
g
2
(
∣
P
∣
P
t
N
t
∣
N
∣
)
=TF(t, d) \times log_2(\frac{|P|}{P_t}\frac{N_t}{|N|})
=TF(t,d)×log2(Pt∣P∣∣N∣Nt)
其中
T
F
(
t
,
d
)
TF(t,d)
TF(t,d)表示的是 term
t
t
t在文本
d
d
d的词频率,一般计算公式是用文本包含term
t
t
t的词频除以文本的总词频,得到该词的频率分值,
∣
P
∣
|P|
∣P∣表示的是正样本文档数量,
P
t
P_t
Pt表示的在正样本文档中包含 term
t
t
t的文档数,而
∣
N
∣
|N|
∣N∣表示的是负样本文档数量,
N
t
N_t
Nt表示的是在负样本文档中包含 term
t
t
t的文档数。
2.2 TF-IDF-ICF
TF-IDF-ICF是在TF-IDF基础上,利用label信息进行有监督的对term进行权重学习,通过增加Inverse Class Frequency (ICF)因子,让那些在少量文本( IDF) 出现以及少量类别 (ICF)出现的term给与更高的权重分值。其中term
t
t
t在文本
d
d
d中的权重计算公式如下:
V
t
,
d
=
T
F
(
t
,
d
)
×
I
D
F
(
t
)
×
(
1
+
l
o
g
(
M
C
F
(
t
)
)
)
V_{t,d} = TF(t,d) \times IDF(t) \times (1 + log ( \frac{M}{CF(t)}))
Vt,d=TF(t,d)×IDF(t)×(1+log(CF(t)M))
T
F
(
t
,
d
)
TF(t,d)
TF(t,d)表示term
t
t
t在文本
d
d
d中的词频,
I
D
F
(
t
)
=
l
o
g
2
(
D
D
t
)
IDF(t)=log_2(\frac{D}{D_t})
IDF(t)=log2(DtD)表示倒文本频率。
M
M
M表示的是类别的数量,
C
F
(
t
)
CF(t)
CF(t)表示的是term
t
t
t在所有类别
M
M
M个中出现的次数。从上面公式可以看出,相比TF-IDF,TF-IDF-ICF对那些在类别中出现较少的词提高了权重,因为该词在所有类别中出现频率较少,则相对更有区分度。
2.3 TF-RF
TF-RF (Term Frequency-Relevance Frequency) 和 Delta TF-IDF思想类似,将term在正样本和负样本的分布考虑进去,但是仅仅考虑包含该term的文本,分值计算如下:
V
t
,
d
=
T
F
(
t
,
d
)
×
l
o
g
2
(
2
+
P
t
m
a
x
(
1
,
N
t
)
)
V_{t,d} = TF(t, d) \times log_2(2 + \frac{P_t}{max(1, N_t)} )
Vt,d=TF(t,d)×log2(2+max(1,Nt)Pt)
其中
P
t
P_t
Pt表示的是包含term
t
t
t的正样本数量,
N
t
N_t
Nt表示的是包含term
t
t
t的负样本数量。论文指出,不包含term
t
t
t的文本特别多,将这些文本考虑进来,会影响term
t
t
t在正负样本中的分布情况,所以只用了相对的频率分布,其中公式中常数值起到平滑作用。
2.4 TF-IGM
TF-IGM ( Term Frequency-Inverse Gravity Moment) 用来衡量term在类别之间的不均匀度,进而可以反映term在类别的区分度。首先我们来看下IGM的公式:
I
G
M
(
t
)
=
(
f
t
1
∑
r
=
1
M
f
t
r
×
r
)
IGM(t) = (\frac{f_{t1}}{\sum_{r=1}^Mf_{tr} \times r})
IGM(t)=(∑r=1Mftr×rft1)
其中
f
t
r
(
r
=
1
,
2
,
.
.
.
,
M
)
f_{tr} (r=1,2,...,M)
ftr(r=1,2,...,M)表示的是term
t
t
t在第
r
r
r个类别的文本频率,
f
t
r
f_{tr}
ftr是降序排列好的,也就是说
f
t
1
f_{t1}
ft1代表term
t
t
t在该类别中出现的文本频率最高。从IGM的公式可以看出,当term
t
t
t在类别分布越均匀,分母分值越大,则IGM分值越小;而分布越不均匀,则相反,分布越不均匀,说明该term在类别区分度越大。TF-IGM权重分值计算如下:
V
t
,
d
=
T
F
(
t
,
d
)
×
(
1
+
λ
×
I
G
M
(
t
)
)
V_{t,d} = TF(t,d) \times (1+ \lambda \times IGM(t))
Vt,d=TF(t,d)×(1+λ×IGM(t))
其中
λ
\lambda
λ是一个可以调整的系数,用来平衡term在全局或者局部分值权重,通常设置值为5到9之间。
2.5 CTF-ICF
CTF-ICF ( Class Term Frequency-Inverse Class Frequency) 主要解决文本较短 (比如在电商场景下的sku title),重要的term有可能在一个文本 (sku) 中出现的词频并不高,用TF不能够很好的衡量term的重要度,所以需要对相同类别的文本聚合为一个大的文本,再计算term的频率,在这里称为CTF,若该term在该类别的所有文本中出现的频率越高,该term对于该类别越重要,CTF分值越大,同时为了衡量term在不同的类别上的区分度,用ICF倒类别频率分值来衡量,具体计算如下:
V
t
,
d
i
c
=
C
T
F
(
t
)
×
I
C
F
(
t
)
=
∑
i
=
1
k
N
d
i
c
(
t
)
∑
i
=
1
k
N
d
i
c
×
log
(
M
C
F
(
t
)
)
V_{t,d_{i}^c} = CTF(t) \times ICF(t) = \frac{\sum_{i=1}^{k} N_{d_i^c}(t) } {\sum_{i=1}^{k} N_{d_i^c}} \times \log(\frac{M}{CF(t)})
Vt,dic=CTF(t)×ICF(t)=∑i=1kNdic∑i=1kNdic(t)×log(CF(t)M)
N
d
i
c
N_{d_i^c}
Ndic表示的是类别为
c
c
c的第
i
i
i个文本的所有词频,
N
d
i
c
(
t
)
N_{d_i^c}(t)
Ndic(t)表示的是包含term
t
t
t的词频,而
∑
i
=
1
k
N
d
i
c
(
t
)
∑
i
=
1
k
N
d
i
c
\frac{\sum_{i=1}^{k} N_{d_i^c}(t) } {\sum_{i=1}^{k} N_{d_i^c}}
∑i=1kNdic∑i=1kNdic(t)表示的是term
t
t
t在类别为
c
c
c的词频率。
M
M
M表示的总类别数,
C
F
(
t
)
CF(t)
CF(t)表示包含term
t
t
t的类别数量。(实际应用场景效果还可以,该算法是通过实践过程中改进的)
3 有监督 (supervised ) 语义学习方法
此类方法主要基于语义模型,通过对应的学习任务,让模型学习出每个term的分值。
3.1 基于关键词学习
Keyphrase Extraction Using Deep Recurrent Neural Networks on Twitter,该论文发表在2016年 EMNLP上,本文基于一个2层的RNN模型将关键词和关键短语提取当做一个标注分类任务,判断每个词是否是关键词或者关键短语,对每个term进行一个二分类任务,模型预测的分值可以当做该term的权重。论文中模型的第一层用来做关键词识别任务,第二层用来做关键短语识别任务,最后将两个任务损失函数进行权重融合,作为最终的损失函数:
J
(
θ
)
=
a
J
1
(
θ
)
+
(
1
−
a
)
J
2
(
θ
)
J(\theta) = aJ_1(\theta) + (1-a)J_2(\theta)
J(θ)=aJ1(θ)+(1−a)J2(θ)
3.2 基于文本分类
Progress Notes Classification and Keyword Extraction using Attention based Deep Learning Models with BERT, 本论文基于BERT+attention Layer通过对文本进行分类,利用attention层自动学习文本中的每个词的权重,根据词的权重,可以获取与文本主题相关的关键词,下图是截取论文中提供的高attention权重的关键词效果:
3.3 基于检索语义向量匹配
Learning Term Discrimination,发表在2020 SIGIR会议的short paper上。论文用一个浅层的神经网络去学习term的TDV (term discrimination values)分值,同时基于学到的termTDV分值,在建立倒排索引的时候,除了对一些停用词进行过滤,进一步对TDV分值为0的进行过滤,在没有降低检索质量的同时,检索速度提升了几倍。
3.3.1 TF-IDF的相关性分值计算
首先我们来看下query
q
q
q和文本
d
d
d基于TF-IDF相关性分值计算如下:
T
F
-
I
D
F
(
q
,
d
)
=
∑
t
∈
q
t
f
t
d
⋅
i
d
f
t
=
Q
T
⋅
(
S
:
,
d
⊙
I
D
F
)
TF\text{-}IDF(q,d) = \sum_{t \in q}tf_{td} \cdot idf_t = Q^T \cdot (S_{:,d} \odot IDF)
TF-IDF(q,d)=t∈q∑tftd⋅idft=QT⋅(S:,d⊙IDF)
其中
S
∈
R
∣
V
∣
×
∣
C
∣
S \in R^{|V| \times |C|}
S∈R∣V∣×∣C∣,里面的每个元素
S
t
,
d
S_{t,d}
St,d表示的是term
t
∈
V
t \in V
t∈V在文本
d
d
d的词频
t
f
t
d
tf_{td}
tftd,
S
S
S的每一列
S
:
,
d
S_{:,d}
S:,d表示文本
d
d
d的BoW表征,而每一行
S
t
,
:
S_{t,:}
St,:表示的是term
t
t
t的倒排列表,
Q
∈
N
∣
V
∣
Q \in N^{|V|}
Q∈N∣V∣表示的是query
q
q
q的BoW表征。
⊙
\odot
⊙表示的是点元素相乘,
I
D
F
∈
R
∣
V
∣
IDF \in R^{|V|}
IDF∈R∣V∣表示的是所有terms 的一个倒文本频率。而idf可以用
L
0
L_0
L0范数从
S
S
S矩阵求解得到:
i
d
f
t
=
log
∣
C
∣
+
1
d
f
t
=
log
∣
C
∣
+
1
L
0
(
S
t
,
:
)
idf_t = \log \frac{|C|+1}{df_t} = \log\frac{|C|+1}{L_0(S_t,:)}
idft=logdft∣C∣+1=logL0(St,:)∣C∣+1
d
f
t
df_t
dft表示包含term
t
t
t的文本频率,但因为
L
0
L_0
L0范数不可导,所以用
L
1
L_1
L1范数替代
L
0
L_0
L0范数( L0范数是指向量中非0的元素的个数),使得可以用梯度下降方法求解,由于
L
1
(
S
t
,
:
)
L_1(S_{t,:})
L1(St,:)有可能大于
∣
C
∣
+
1
|C|+1
∣C∣+1,导致IDF分值为负数,所以论文用最大归一化操作,则最终的idf求解得:
i
d
f
t
‾
=
log
m
a
x
{
t
′
∈
V
}
L
1
(
S
t
′
,
:
)
+
1
L
1
(
S
t
,
:
)
\overline{idf_t} = \log \frac{max_{\{t^{'}\in V\}} L_1(S_{t^{'}},:)+1}{{L_1(S_t,:)}}
idft=logL1(St,:)max{t′∈V}L1(St′,:)+1
所以调整后的TF-IDF计算公式如下:
T
F
-
I
D
F
(
q
,
d
)
‾
=
∑
t
∈
q
t
f
t
d
⋅
i
d
f
t
=
Q
T
⋅
(
S
:
,
d
⊙
I
D
F
‾
)
\overline{TF\text{-}IDF(q,d)} = \sum_{t \in q}tf_{td} \cdot idf_t = Q^T \cdot (S_{:,d} \odot \overline{IDF})
TF-IDF(q,d)=t∈q∑tftd⋅idft=QT⋅(S:,d⊙IDF)
其中
I
D
F
‾
∈
R
∣
V
∣
\overline{IDF} \in R^{|V|}
IDF∈R∣V∣是一个向量,包含了所有term的
i
d
f
t
‾
\overline{idf_t}
idft的值。
3.3.2 基于BM25的相关性分值计算
BM25算法是计算相关性评分的常用一种算法,核心原理是对query Q进行单元解析(一般是分词)得到term,然后计算每个term与文本d的相关性得分,最后将相关性得分进行加权求和,得到query Q与文本d的相关性得分,相关性得分计算如下:
s
c
o
r
e
(
Q
,
d
)
=
∑
i
n
w
i
⋅
R
(
t
i
,
d
)
score(Q, d) = \sum_{i}^n w_i \cdot R(t_i, d)
score(Q,d)=i∑nwi⋅R(ti,d)
其中
t
i
t_i
ti表示的是query
Q
Q
Q分解后的第
i
i
i个term,
w
i
w_i
wi是对应的权重,
R
(
t
i
,
d
)
R(t_i,d)
R(ti,d)表示的是
t
i
t_i
ti与文本
d
d
d的相关性。一般情况
w
i
w_i
wi分值根据IDF计算,而
t
i
t_i
ti与文本d的相关性得分
R
(
t
i
,
d
)
R(t_i, d)
R(ti,d)计算公式如下:
R
(
t
i
,
d
)
=
d
f
i
⋅
(
k
1
+
1
)
d
f
i
+
K
⋅
q
f
i
⋅
(
k
2
+
1
)
q
f
i
+
k
2
R(t_i, d) = \frac{df_i \cdot (k_1 + 1)}{df_i + K} \cdot \frac{qf_i \cdot (k_2 + 1)}{qf_i + k_2}
R(ti,d)=dfi+Kdfi⋅(k1+1)⋅qfi+k2qfi⋅(k2+1)
K
=
k
1
⋅
(
1
−
b
+
b
⋅
d
l
a
v
g
d
l
)
K = k_1 \cdot (1-b+b \cdot \frac{dl}{avgdl})
K=k1⋅(1−b+b⋅avgdldl)
其中
k
1
,
k
2
,
b
k_1, k_2, b
k1,k2,b为调节因子,
q
f
i
qf_i
qfi,
d
f
i
df_i
dfi分别表示term
t
i
t_i
ti在query中的词频和在文本中的词频,
d
l
dl
dl表示文本d的长度,
a
v
g
d
l
avgdl
avgdl表示所有文档的平均长度。由于多数情况下,一个term在query中只出现一次,所以
q
f
i
=
1
qf_i=1
qfi=1,则上述公式可以化简为:
R
(
t
i
,
d
)
=
d
f
i
⋅
(
k
1
+
1
)
d
f
i
+
K
R(t_i, d) = \frac{df_i \cdot (k_1 + 1)}{df_i + K}
R(ti,d)=dfi+Kdfi⋅(k1+1)
K
=
k
1
⋅
(
1
−
b
+
b
⋅
d
l
a
v
g
d
l
)
K = k_1 \cdot (1-b+b \cdot \frac{dl}{avgdl})
K=k1⋅(1−b+b⋅avgdldl)
从上面的公式可以看出,若文本越长,则相关性分值越低,因为文本越长,越可能命中term,而参数
b
b
b越大,文本长度对相关性影响越大。BM25相关性得分整体公式如下:
s
c
o
r
e
(
Q
,
d
)
=
∑
i
n
I
D
F
(
t
i
)
⋅
d
f
i
⋅
(
k
1
+
1
)
d
f
i
+
k
1
⋅
(
1
−
b
+
b
⋅
d
l
a
v
g
d
l
)
score(Q,d) = \sum_{i}^n IDF(t_i)\cdot \frac{df_i \cdot (k_1 + 1)}{df_i + k_1 \cdot (1-b+b \cdot \frac{dl}{avgdl})}
score(Q,d)=i∑nIDF(ti)⋅dfi+k1⋅(1−b+b⋅avgdldl)dfi⋅(k1+1)
3.3.3 基于浅层神经网络的term TDV分值计算
论文中用一个浅层的神经网络学习term的区分度分值TDV,再对倒排索引矩阵
S
S
S元素值进行调整,计算公式如下:
S
t
,
d
′
=
t
f
t
d
⋅
t
d
v
t
=
t
f
t
d
⋅
R
e
L
U
(
w
t
T
⋅
w
+
b
)
S_{t,d}^{'} = tf_{td} \cdot tdv_t = tf_{td} \cdot ReLU(w_t^T \cdot w + b)
St,d′=tftd⋅tdvt=tftd⋅ReLU(wtT⋅w+b)
我们基于新的
S
t
,
d
′
S^{'}_{t,d}
St,d′,可以得到新的
I
D
F
′
‾
\overline{IDF^{'}}
IDF′分值,则最终TDV-TF-IDF(q,d)的计算公式表达如下:
T
D
V
-
T
F
-
I
D
F
(
q
,
d
)
=
Q
T
⋅
(
S
:
,
d
′
⋅
I
D
F
′
)
‾
TDV\text{-}TF\text{-}IDF(q,d) = Q^T \cdot (S^{'}_{:,d} \cdot \overline{IDF^{'})}
TDV-TF-IDF(q,d)=QT⋅(S:,d′⋅IDF′)
而融入TDV分值的BM25算法调整如下:
B
M
25
(
q
,
d
)
‾
=
Q
T
⋅
I
D
F
′
‾
⊙
(
S
:
,
d
(
k
1
+
1
)
)
(
S
:
,
d
+
k
1
(
1
−
b
+
b
∣
d
∣
a
v
g
d
l
)
\overline{BM25(q,d)} = Q^T \cdot \overline{IDF{'}} \odot \frac{(S_{:,d} (k_1 + 1))}{(S_{:,d} + k_1(1-b + b\frac{|d|}{avgdl})}
BM25(q,d)=QT⋅IDF′⊙(S:,d+k1(1−b+bavgdl∣d∣)(S:,d(k1+1))
其中
∣
d
∣
=
L
1
(
S
:
,
d
)
|d| = L_1(S:,d)
∣d∣=L1(S:,d),
a
v
g
d
l
=
∑
d
∈
C
L
1
(
S
:
,
d
)
/
∣
C
∣
avgdl = \sum_{d \in C} L_1(S:,d)/ |C|
avgdl=∑d∈CL1(S:,d)/∣C∣
3.3.4 Training
整体模型结构图如下:
考虑到由于有限的训练样本,其中词向量基于Wikipedia语料进行pre-train学习得到,在fine tune阶段并不进行更新。模型需要学习的参数为神经网络层的权重参数
w
w
w和偏移项
b
b
b。论文用pairwise hinge loss作为损失函数:
L
H
i
n
g
e
(
f
,
q
,
d
+
,
d
−
)
=
m
a
x
(
0
,
1
−
f
(
q
,
d
+
)
+
f
(
q
,
d
−
)
)
L_{Hinge}(f, q, d^+, d^-) = max(0, 1-f(q,d^+) + f(q, d^-))
LHinge(f,q,d+,d−)=max(0,1−f(q,d+)+f(q,d−))
其中
f
f
f是一个可微的排序函数(在本论文中比如为TDV-TF-IDF),
d
+
d^+
d+表示与query
q
q
q相关的文本,而
d
−
d^-
d−表示不相关的文本。为了获得稀疏解,对TVD分值为0的进行过滤掉,对文本的BoW表征增加了
L
1
L_1
L1范数约束,所以最终的loss表示如下:
(
1
−
λ
)
L
H
i
n
g
e
(
f
,
q
,
d
+
,
d
−
)
+
λ
(
L
1
(
S
f
:
,
d
+
′
)
+
L
1
(
S
f
:
,
d
−
′
)
)
(1-\lambda)L_{Hinge}(f, q, d^+, d^-) + \lambda(L_1(Sf^{'}_{:,d^+})+L_1(Sf^{'}_{:,d^-}))
(1−λ)LHinge(f,q,d+,d−)+λ(L1(Sf:,d+′)+L1(Sf:,d−′))
其中
λ
\lambda
λ为权重参数,用来平衡hinge loss和L1归一化loss。
3.3.5 试验效果
通过加入TDV分值,不管是TF-IDF还是BM25,整体效果都有较大幅度的提高:
论文通过对TVD分值为0的进行过滤,所以倒排索引量减少较大:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)