一篇文章的输入表示是加入对应的词嵌入 E t o k e n E_{token} Etoken,段嵌入(segment) E s e g m e n t E_{segment} Esegment和位置嵌入 E p o s i t i o n E_{position} Eposition。为了完全开发prompt的信息,我们把prompt连接在文章的前面。
每个输入的第一个token是特殊的分类token [ C L S ] [CLS] [CLS],并且prompt和文章被 [ ] S E P []SEP []SEP分隔开。在第 i i i个prompt的第 j j j篇文章的token嵌入是: E t o k e n ( i ) ( j ) = { E p r o m p t ( i ) , E e s s a y ( i ) ( j ) } E_{token}^{(i)(j)}=\left\{E_{prompt}^{(i)},E_{essay}^{(i)(j)}\right\} Etoken(i)(j)={Eprompt(i),Eessay(i)(j)}
E s e g m e n t E_{segment} Esegment和 E p o s i t i o n E_{position} Eposition被从预训练编码器的标注器中获取。
我们使用BERT和NEZHA作为特征提取层。最终的隐藏层对应于 [ C L S ] [CLS] [CLS]token,也就是文章的表示 r e r_e re,这个文章的表示会被用于文章评分和子任务。
文章评分层
我们将文章评分看作一个回归任务。为了使得数据映射到回归任务,真实的分数被变换范围到区间 [ 0 , 1 ] [0,1] [0,1]来训练,然后重新变换为之前的区间范围在验证的时候。变换的方式: s ( i ) ( j ) = s c o r e ( i ) ( j ) − m i n ( s c o r e ( i ) ) m a x ( s c o r e ( i ) ) − m i n ( s c o r e ( i ) ) s^{(i)(j)}=\frac{score^{(i)(j)}-min(score^{(i)})}{max(score^{(i)})-min(score^{(i)})} s(i)(j)=max(score(i))−min(score(i))score(i)(j)−min(score(i)) 在该公式中, s ( i ) ( j ) s^{(i)(j)} s(i)(j)是规约后的第i个prompt和第j篇文章。
来自预训练编码层的文章的表示 r c r_c rc,被馈入一个线性层,采用sigmoid激活函数: s ^ = σ ( W e s ⋅ r e + b e s ) \hat{s}=\sigma(W_{es}\cdot{r_e}+b_{es} ) s^=σ(Wes⋅re+bes) 在该公式中, s ^ \hat{s} s^是AES系统的预测分数, σ \sigma σ是激活函数。
作文评分系统的训练目标是 l o s s e s ( s , s ^ ) = 1 N ∑ k = 1 N ( s k − s k ^ ) 2 loss_{es}(s,\hat{s})=\frac{1}{N}\sum_{k=1}^{N}(s^k-\hat{s^k})^2 losses(s,s^)=N1k=1∑N(sk−sk^)2
子任务1:Prompt预测
prompt预测的定义是:给定一篇文章,决定它属于哪个prompt。
我们将prompt预测视为一个分类任务。输入是文章的表示 r e r_e re,它被馈入一个线性层,采用softmax函数。公式是: u ^ = s o f t m a x ( W p p ⋅ r e + b p p ) \hat{u}=softmax(W_{pp} \cdot r_e+b_{pp}) u^=softmax(Wpp⋅re+bpp) 在该公式中, u ^ \hat{u} u^是分类结果的概率分布, W p p W_{pp} Wpp是参数矩阵。
损失函数是: l o s s p p ( u , u ^ ) = − 1 N ∑ k = 1 N ∑ c = 1 C f ( u ( k ) , c ) l o g ( p p p ( k ) ( c ) ) loss_{pp}(u,\hat{u})=-\frac{1}{N}\sum_{k=1}^{N}\sum_{c=1}^{C}f(u^{(k)},c)log(p_{pp}^{(k)(c)}) losspp(u,u^)=−N1k=1∑Nc=1∑Cf(u(k),c)log(ppp(k)(c)) f ( x , y ) = { 1 , i f x = y 0 , e l s e x ≠ y f(x,y)= \begin{cases} 1,&if&x=y\\ 0,&else&x\neq y \end{cases} f(x,y)={1,0,ifelsex=yx=y 在该公式中, u ( k ) u^{(k)} u(k)是第k个样本的真实的prompt标签, p p p ( k ) ( c ) p_{pp}^{(k)(c)} ppp(k)(c)是第k个样本属于类别 c c c的概率。
子任务2:Prompt匹配
prompt匹配的定义是给出一个prompt和一篇文章,判断这篇文章和这个prompt是否兼容。我们将prompt匹配问题看作是一个分类任务。 v ^ = s o f t m a x ( W p m ⋅ r e + b p m ) \hat{v}=softmax(W_{pm} \cdot r_e+b_{pm}) v^=softmax(Wpm⋅re+bpm)
目标函数是: l o s s p m ( v , v ^ ) = − 1 N ∑ k = 1 N ∑ m = 0 M f ( v ( k ) , c ) l o g ( p p m ( k ) ( m ) ) loss_{pm}(v,\hat{v}) = -\frac{1}{N}\sum_{k = 1}^{N}\sum_{m = 0}^{M}f(v^{(k)},c)log(p_{pm}^{(k)(m)}) losspm(v,v^)=−N1k=1∑Nm=0∑Mf(v(k),c)log(ppm(k)(m)) v ( k ) v^{(k)} v(k)表明了输入的prompt和文章是否匹配。 m m m指明了匹配的程度,0表示匹配,1表示不匹配。
多任务的损失函数
最终对每个输入的损失函数是文章评分和两个子任务的加权和: l o s s M T L = α ⋅ l o s s e s + β ⋅ l o s s p p + γ ⋅ l o s s p m loss_{MTL}=\alpha \cdot loss_{es}+\beta \cdot loss_{pp} + \gamma \cdot loss_{pm} lossMTL=α⋅losses+β⋅losspp+γ⋅losspm
对于主任务,我们使用QWK,来分析预测分数于真实之间的同意度。 W i , j = ( i − j ) 2 ( N − 1 ) 2 W_{i,j}=\frac{(i-j)^2}{(N-1)^2} Wi,j=(N−1)2(i−j)2 i i i和 j j j是人评估的黄金分数和AES系统分数,并且每篇文章由 N N N个可能的等级。 Q W K = 1 − W i , j O i , j W i , j Z i , j QWK=1-\frac{W_{i,j}O_{i,j}}{W_{i,j}Z_{i,j}} QWK=1−Wi,jZi,jWi,jOi,j 在该公式中, O i , j O_{i,j} Oi,j表明人类评估等级为 i i i,并且AES系统评估等级为 j j j的文章个数。
【问题需求】 用友U8中,客户希望调拨单、组装拆卸单、盘点单审核后,自动审核对应的其他出入库单。
【解决方法】 针对账套库执行,查询语句:
select * from AccInformation
where cSysID ST and ccaption like %自动审核%查询后…