在线时间 1630 小时 最后登录 2024-1-29 注册时间 2017-5-16 听众数 82 收听数 1 能力 120 分 体力 570817 点 威望 12 点 阅读权限 255 积分 176468 相册 1 日志 0 记录 0 帖子 5313 主题 5273 精华 3 分享 0 好友 163
TA的每日心情 开心 2021-8-11 17:59
签到天数: 17 天
[LV.4]偶尔看看III
网络挑战赛参赛者
网络挑战赛参赛者
自我介绍 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
群组 : 2018美赛大象算法课程
群组 : 2018美赛护航培训课程
群组 : 2019年 数学中国站长建
群组 : 2019年数据分析师课程
群组 : 2018年大象老师国赛优
【文本匹配】交互型模型 + e1 ~" I: \2 p2 n! f
# v# T0 J4 b _$ h8 O* R
表示型的文本匹配模型存在两大问题:(1)对各文本抽取的仅仅是最后的语义向量,其中的信息损失难以衡量;(2)缺乏对文本pair间词法、句法信息的比较+ H+ d" \, s4 z& r: m3 k
H, o! [8 ]/ r
而交互型的文本匹配模型通过尽早在文本pair间进行信息交互,能够改善上述问题。
& |' t7 ?0 H) \; f# z$ x, o! p( n+ x - K& r0 ^. L4 r7 O
基于交互的匹配模型的基本结构包括:
: I9 W, N4 T& f; ], |8 u0 Q5 B) l
7 \ A3 G$ F% C5 \1 N" O) A (1)嵌入层,即文本细粒度的嵌入表示;
) M! _0 J. k: z8 }! O
' r7 g# }6 Z- i: {% t$ C (2)编码层,在嵌入表示的基础上进一步编码;2 v1 ~# n. A( E1 V' j3 Y& C
. |+ |# y0 O6 x) L1 D% Z8 P
(3)匹配层:将文本对的编码层输出进行交互、对比,得到各文本强化后的向量表征,或者直接得到统一的向量表征;
& _" k" r0 d* J0 c$ f, c ! j" q% \4 ~, Q& s7 A' B
(4)融合层:对匹配层输出向量进一步压缩、融合;" n+ T7 n, c0 L* t9 f+ u& k9 c
8 Q" ~* o+ J+ V( M& d7 O
(5)预测层:基于文本对融合后的向量进行文本关系的预测。
/ I2 G" v& r6 w ( M0 y9 Z8 ~3 ?/ h
) Z& S' G# \5 u5 O K X
2 X+ [6 @# I, e8 N
1. ARC-II
! @& p! D& _; D7 w ARC-II模型是和表示型模型ARC-I模型在同一篇论文中提出的姊妹模型,采用pair-wise ranking loss的目标函数。
8 m4 f: J# g5 R 6 y; G) E. |; @, \. l2 L2 _
其核心结构为匹配层的设计:
: z" R! o/ g( w# p2 n
" t. g8 }! o0 U4 Q) l+ j1 ` (1)对文本pair的n-gram Embedding结果进行拼接,然后利用1-D CNN得到文本S_X中任一token i和文本S_Y中任一token j的交互张量元素M_{ij}。该操作既然考虑了n-gram滑动窗口对于local信息的捕捉,也通过拼接实现了文本pair间低层级的交互。
. p) B5 L7 S& H0 g& C. D% T
" _" c* v1 R% A& u$ K (2)对交互张量进行堆叠的global max-pooling和2D-CNN操作,从而扩大感受野。$ k" H7 V& w: g* Q+ [
1 Y: ~. E2 J$ M* ?6 v" F! P) H 2. PairCNN
/ c9 v+ O# u/ K. {7 Z0 i! S PairCNN并没有选择在Embedding后直接进行query-doc间的交互,而是首先通过TextCNN的方式分别得到query和doc的向量表征,然后通过一个中间Matrix对query和doc向量进行交互得到pair的相似度向量,然后将query的向量表征、doc的向量表征、相似度向量以及其它的特征向量进行拼接,最后经过两层的MPL得到最后的二分类向量。7 q4 x' G( K" A9 ]5 C; J. s0 w
. e$ O. r( ^: B; a PairCNN的模型架构中的亮点在于各View向量的拼接,既能利用原始的语义向量,还能够很便捷的融入外部特征。
* @' n- B; c4 ~0 E! [
) [% S) `% ^, x8 { 3. MatchPyramid$ ?2 N4 B8 @3 f9 {$ k$ R8 V
无论是ARC-II中的n-gram拼接+1D conv还是Pair-CNN中的中间Matrix虽然均通过运算最终达到了信息交互的作用,但其定义还不够显式和明确,MatchPyramid借鉴图像卷积网络的思想,更加显式的定义了细粒度交互的过程。
! M! U2 `3 W/ k$ U/ s+ W5 z4 M MatchPyramid通过两文本各token embedding间的直接交互构造出匹配矩阵,然后将其视为图片进行2D卷积和2D池化,最后Flatten接MLP计算得匹配分数。本文共提出了三种匹配矩阵的构造方式:
5 p' M- C; o- h8 ] 1 z7 [& g/ r" \' p
(1)Indicator:0-1型,即一样的token取1,否则取0;这种做法无法涵盖同义多词的情况;
+ s1 ]. T, W, [& p7 w( i4 y( t 3 S, x0 A! l$ Z' D0 R7 v
(2)Cosine:即词向量的夹角余弦;
0 y- {/ v! K+ f, [2 W% v4 d% g . F+ h, X( J: [: C# ?' x) y, j
(3)Dot Product:即词向量的内积+ ^7 ^) m& G0 r- u* Z4 z
; F- E" h8 J3 [% Q" v3 Y, e3 R! ` 此外值得注意的是因为各个文本pair中句子长度的不一致,本文并没有采用padding到max-lenght的惯用做法,而是采用了更灵活的动态池化层,以保证MPL层参数个数的固定。
x0 ^6 O7 y, m& G & g# Q. @/ ~% h6 ~
4. DecAtt1 t5 t; E+ n, q! v" p6 P8 G
DecAtt将注意力机制引入到交互型文本匹配模型中,从而得到各token信息交互后增强后的向量表征。8 K) _& _9 |+ M3 Q+ U3 B
5 o) l9 l- G- M9 g9 B q 模型被概括为如下层级模块:
. L( K! M& G/ h ?* P3 m
" j0 N7 N7 e; x" n5 Y; X y+ z (1)Attend层:文章提供了两种注意力方案,分别为文本间的cross-attention,以及各文本内的intra-attention。具体而言,分别采用前向网络F和F_{intra}对文本token embedding进行编码,然后通过F(x)F(y)计算cross-attention的score,以及F_{intra}(x)F_{intra}(y)计算self-attention的score。然后利用softmax将attention score进行归一化,再对各token embedding进行加权平均,得到当前query token处的增强表征,最后与原始token embedding进行拼接计为attend后的最终embedding。
$ J" m2 _8 R T" ^3 I& r8 d7 @
C; L) B9 ? L( H% {& U! j' ]7 M (2)Compare层:将前序Attend层计算得到的最终embedding,喂入一个全连接层进行向量维度的压缩。
( g) m+ x; x6 [ ~ X3 K# S8 F3 C4 u6 O$ P4 [6 ]
(3)Aggregate层:将每个文本各token处压缩后的向量进行简单的求和,再拼接起来通过MPL得到最后的匹配得分。) H* e0 H! f) a- c
; @: I; l9 q! M 5. CompAgg
1 q5 \( E7 ]( a/ [ CompAgg详细对比了在文本间cross-attention得到的各token向量表征与原始token向量进行compare的各种方案。
h! @9 x+ Z# Q- [* x3 R8 M) g . y3 t3 y! k. C0 A8 m
该模型的主要结构包括:
- U$ z& ^' f% B
4 T8 Q6 v3 m! J% c (1)reprocessing层:采用类似于LSTM/GRU的神经网络得到token的深层表示(图中的\bar a_i);( x6 D# h% M0 ^; U+ s; p* o
# L, I3 k$ z+ C. n% Y" d$ @$ P6 C) D (2)Attention层:利用软注意力机制计算文本间的cross-attention(与DecAtt相同),从而得到各token处交互后的向量表示(图中的h_i);
}8 N; @& M9 V, |" J 1 y; M0 F* Q9 R0 ~/ f& N- ?
(3)Comparison层:通过各种网络结构或计算将\bar a_i和h_i计算求得各token的最终表征。
# }* j2 J% K; h" N; M
0 A* _! i$ E+ ?. O1 w! y6 k% [ (4)Aggregation层:利用CNN网络对Comparison层的输出进行计算,得到最后的匹配得分。
! R' ^$ n2 F T) l, F
; a& C; s& d" D' Y+ P9 ` 其中Comparison层的构造方式包括:
3 U# A& C% B4 x5 }0 `+ D( H
! ]9 g; ], T% w+ a- ]$ R9 A (1)矩阵乘法,类似于Pair-CNN中的中间Matrix
+ ^6 C o+ a7 i0 D+ w ?! B: }
, Q( Y$ @ @- E! `8 |' h (2)前向神经网络,即将\bar a_i和h_i进行拼接,然后利用输入FFN;$ h P, Y6 b& [( {
" f4 ?5 P, k4 s8 H: R (3)分别计算cosine和欧式距离,然后拼接; i3 x5 F7 v; u; L9 }0 k9 Q" {: @5 Z4 n
$ t8 u% P4 B4 U* B" I (4)各维度进行减法;4 m( ^: |" ?9 c: P7 N
: U6 a5 g [4 n+ H6 D6 P: U/ J
(5)各维度进行乘法;
, R; n5 H- @* o8 M + q3 X N+ G8 D
(6)各维度进行减法和乘法,然后再接一个前向网络。
: T3 y6 d. b) j, n 7 X( M+ ]& N4 U1 R& O& u
6. ABCNN7 ~3 o3 f: v o- {. o
ABCNN是将Attention机制作用于BCNN架构的文本匹配模型。
: `4 i& C# p4 v6 D ( R+ V0 q, i" s
6.1 BCNN
4 t) X' N8 c( F5 d/ ` 首先简单介绍下BCNN架构:
8 d% ^2 q* T$ D8 n# t3 Q2 w: n, p
5 z3 E+ _* I+ k8 o+ b% ^$ i$ j+ k BCNN的整体结构比较简单:(1)输入层;(2)卷积层,因为采用了反卷积的形式,所以在size上会增加;
- z. _' ^7 ?7 O R4 ]
! A5 u3 h& W! E9 e* l0 R) f! w (3)池化层,采用了两种池化模式,在模型开始阶段采用的是local平均池化,在最后句子向量的抽取时采用了global平均池化;(4)预测层,句子向量拼接后采用LR得到最后的匹配得分。3 n9 l; d' j% B/ f7 d* R
) s8 E5 J3 l' M& M+ O ABCNN共包括三种变形,下面依次介绍。
- B; {' n, ~" x) M
5 ]: a' }$ S$ R" P! Y \! _8 l 6.2 ABCNN B; N8 } x6 Z
% q7 ]5 n1 }1 u+ d3 M
ABCNN-1直接将Attention机制作用于word embedding层,得到phrase 级的词向量表示。区别于CompAgg中的软注意力机制,ABCNN-1直接基于下式得到注意力矩阵: A i j = 1 1 + ∣ x i − y j ∣ A_{ij}=\frac{1}{1+|x_i-y_j|} A 1 P0 [$ D; D1 ?/ C0 R8 A
ij. r5 D( _) x+ ?, H- f
- s/ W' W1 g! E8 @/ ~ = : j0 D0 f/ e% O
1+∣x , c1 b3 H1 |; _& o' p, C5 K& S% U
i# t2 |- l8 K: V0 {& u
! G/ Q P; G# r; _
−y 2 p; a/ I- @; z* ]: V$ j
j) j* \8 H1 z! \( m& h/ D& R
6 { ^2 p" W( O) z ∣6 q I( e4 m( I7 y) ~
1( E) q- @/ L6 Y( r2 T5 f
6 n& J5 ^3 ?7 ?3 q7 N7 X ,然后分别乘以可学习的权重矩阵 W 0 W_0 W
2 {, U0 T9 U$ F* D 0. }" Y- t' X: `& a- f1 N
) U m- E; |9 S- Y
和 W 1 W_1 W 9 b+ R2 [" w# a4 h+ n0 ~+ u
1
' p, G. k Y" @. m' U, v6 N 2 x; j4 P) Z) l# F
得到attetion feature map。* c/ j: [* P) ~8 N* l
& z1 k$ k6 Z% d/ S- n 6.3 ABCNN-2' F4 G' y, Q' M+ p7 V5 p' `
, @8 G( P' g5 b/ L& k$ \ ABCNN-2将Attention机制作用于word embedding层后的反卷积层的输出结果,其中注意力矩阵的计算原理与ABCNN-1一致。然后将注意力矩阵沿着row和col的方向分别求和,分别代表着各文本token的attention socre;接着将反卷积层的输出结果与attention socre进行加权平均池化,得到与输入层相同shape的特征图。
/ {& y' j: g M' D" ], ` ' ~2 ?3 r& u* _5 H2 _! M
6.4 ABCNN-3
0 E8 I$ U) ~4 \ R9 r0 h
( f. k% A. b. }( v8 u* o ABCNN-3的基本模块可视为ABCNN-1和ABCNN-2的堆叠,即在嵌入层和卷积层上面都引入了attention的机制用来增强对token向量的表示。
( k9 G" O* ]3 L$ D# R + X4 A; R. T/ w$ D
7. ESIM. Y% i7 D+ k+ o* t4 S: S
ESIM模型基于NLI任务给出了一种强有力的交互型匹配方法。其采用了BiLSTM和Tree-LSTM分别对文本序列和文本解析树进行编码,其亮点在于:1 z' Z& T4 Z9 ~ K9 n( p& E% h
( Q& @% }* y. z1 y0 a* o
(1)匹配层定义了cross-attention得到各token的向量表示与原token向量间的详细交互关系,即采用 [ a ˉ , a ^ , a ˉ − a ^ , a ˉ ∗ a ^ ] [\bar a, \hat a,\bar a-\hat a,\bar a* \hat a] [
3 P7 E. T, z6 x1 i; D# P: k a
3 |: r% X: @: k2 H5 |8 L ˉ
& G& i* K' A& C , 1 z, Z: X; s; z5 c% I: I' [
a6 \8 ]4 R: X: a4 U2 @
^
# ] X9 K7 I$ O: k$ v( I ,
6 C) N2 d& z* V: X a6 K" O' r- B' v4 C
ˉ
6 N( o& z& y# z& m1 Y − 6 h! {2 c* a Z/ \0 j
a
" I5 {+ }4 E; c2 _ ^$ m v9 J" D! N( Z* O
, 1 [- M. X& q$ Q1 ^- P2 P" z4 m
a
# E9 F/ h1 N; I1 N1 s ˉ
* q2 H! R# a. M' q4 y: T' W! h ∗
0 `' d6 Y' N& d! l# N: E a# ]3 [: j( D4 m% p9 ]
^0 v2 s5 I5 F1 [. ^* L8 M& K
]作为最终文本token的向量表示,这也成为后续文本匹配模型的惯用做法。" b* z; ]3 d) A2 J. M& p, `
3 |5 ? F g( Y. r1 c8 ]) {
(2)聚合层通过BiLSTM得到各文本token的编码,从而进一步增强了文本序列的信息传递;
' `1 s4 |+ m7 W7 _8 g % g- R+ B/ ^8 F# I
(3)预测层通过拼接各文本token编码的max-pooling和mean-pooling结果,再经过MPL进行匹配预测。6 j' c8 U+ `6 ?. a: @0 D
2 b' {# o3 @0 W+ _, y+ W6 h8 n% L
5 a1 `9 K; y" z3 _: p9 ~ ]2 u
5 a4 L+ g* ?$ n) V 8. Bimpm
5 D h- I2 p; J' S7 U" f Bimpm可视为对之前各类交互型文本匹配模型的一次总结。
6 p6 q1 D( z! l- A1 Z# r$ \
+ F( S: o; G- v, T } 该模型在各层的具体做法总结如下:
+ I+ H0 j8 a# I6 w1 b% r" ~) _# J% o9 Q 6 A8 W' y9 s% Y, N4 s; N3 _
(1)编码层采用BiLSTM得到每个token隐层的向量表示;- R2 J. [) Q8 c7 {& }% u
* z: Z9 A9 K+ C- t (2)匹配层遵循 m k = c o s i n e ( W k ∗ v 1 , W k ∗ v 2 ) m_k=cosine(W_k*v_1,W_k*v_2) m
$ G- i7 L; x' K8 k4 {7 F2 G k- \# D2 J8 X+ O H0 Y. N6 E
' R. g0 r/ u, q. j! h9 Q =cosine(W
0 E: \" N8 ^$ p5 A k5 |! s, B; m3 i& y
8 j8 s, [2 l7 w: j! m
∗v
( j, X" Z P7 r, D 1+ F! y7 [- z* ~% Z
) |9 b- V, |0 C2 z
,W
+ g! y/ C& K3 a! T5 Q4 ^- v k
6 A, ?& @) u" A& B$ q- [# M" M: o
* t7 j8 D: ~0 H! f# P& d ∗v
' D. R5 U% i0 c: g* G& G3 G# Y% Q1 M 2* s+ Y: A, G; F3 C$ ]8 h' [! J- C
. O* H; m% K/ l! ]+ F )的方式可以得到两个文本的任意token pair之间在第k个view下的匹配关系,至于 v 1 v_1 v ; |, e, w6 e5 [8 s
1: E% m" N0 s: T# F. D. V1 y: s0 I: ~
4 u. v4 I8 }0 c 和 v 2 v_2 v , F( h& Q% Z* o- K: V# [0 T- }
28 o' ~8 E- B! w2 i- J/ |" O
" h( U" J8 f& i+ G3 m9 \$ ^ 如何取,文章提供了4种策略:" J! f" z, v& b* A% [: Y
+ s* s6 N! Q0 c) n# d+ O6 U 策略一:其中一个句子取各token隐层的向量表示,另一个句子采用隐层最后时间步处的输出;
* e3 K* Y4 e/ b) ]- a7 F2 {9 v 策略二:其中一个句子取各token隐层的向量表示,另一个句子采用隐层各时间步输出与之匹配后取再取Max-Pooling值;4 p. \0 M+ d) ?7 B8 D& ?
策略三:其中一个句子取各token隐层的向量表示,另一个句子采用cross-attentive后得到的加权句子向量;
$ b9 _0 a: d% A, H- x/ Z( a 策略四:其中一个句子取各token隐层的向量表示,另一个句子采用cross-attentive后attention score最高处token的向量作为句子向量。" z0 G$ K/ O: T9 u4 e" n$ H' I! _1 q
这四种策略的区别在于对句子向量的计算不同。: x% G. Q- W% E/ t& T' L
- h1 r6 V: E" H$ |0 n
4 w4 ]- o+ {6 A* ^
(3)聚合层,首先对上面各种策略得到的输出层再通过一层BiLSTM层,然后将各策略下最后时间步的输出进行拼接,得到最后的聚合向量;
! c N) p' Z$ ^% O2 V, j * b! T2 o4 @; R: j6 C$ ^5 U
(4)预测层:两层MPL+softmax( D# U9 h E2 R' ^0 L9 ~. S5 E1 }
1 V. K1 V, X' H! q" S; f% I 9. HCAN
% _' h6 B( L6 R. ]6 } HCAN是除Bert类模型外在文本匹配领域表现最为优异的深度模型之一,其采用了较为复杂的模型结构。
/ Z0 ^8 I" P! C( y7 l& f ) g. O" s& i& _# } w
针对于信息抽取问题,文章首先分析了相关性匹配和语义匹配的差异: e1 s6 G- O% O( ~* x1 T5 a
6 R5 t- N+ ~5 Z: {# x; Z1 t2 j (1)相关性匹配主要关注于关键词的对比,因此更关注低层级词法、语法结构层面的匹配性;
8 [) b5 q5 V! A" C9 y R* J1 N4 d% @9 R$ T
(2)语义匹配代表着文本的平均意义,因此其关注更高、更丑想的语义层面的匹配性。
4 S: }. G. `4 a* c. l0 u0 { k$ f! ^6 _6 q
. p# O; M) ]; Y 该模型首先采用三类混合的编码器对query和context进行编码:
# e9 z5 a. h$ F7 r
& p: d2 }3 e; Q (1)深层相同卷积核大小的CNN编码器;
) k% h- }3 x: C. k; i7 J+ Y+ K8 K 8 z8 P$ W4 [$ P
(2)不同卷积核大小的CNN编码器的并行编码;
: Q% Z3 K9 d) H. Y 9 Q' i2 W8 C$ Y5 N2 g1 V
(3)沿着时序方向的stacked BiLSTM编码;
. Q% O: N) q: k; t% T - J( F; F, ^% J7 d1 m
对于前两者,通过控制卷积核的大小可以更好的捕捉词法和句法特征,即符合相关性匹配的目的;而对于后者,其能表征更长距离的文本意义,满足语义匹配的目的。! {& T* _- c$ X) K9 ]
! x) k7 Z+ ?; @5 m+ h% ?$ L( b4 B; ? 在这三类编码器的编码结果基础上,模型分别进行了相关性匹配和语义匹配操作。其中相关性匹配主要采用各phrase间内积+max pooling/mean pooling的方式获取相关性特征,并通过IDF指进行各phrase的权重调整。而在语义匹配中,模型采用了精心设计的co-attention机制,并最终通过BiLSTM层输出结果。" o |; |6 e' [2 j8 R6 ?
* }8 u' |* x* n2 ~: B6 T 最后的预测层仍采用MPL+softmax进行预测。
: V3 c1 n9 K. M: `, I3 U) N% k7 { 6 B7 N# E: U) z& C! h1 D
10. 小结- |4 P3 H. A2 X7 l/ {1 ~
交互型语言匹配模型由于引入各种花式attention,其模型的精细度和复杂度普遍强于表示型语言模型。交互型语言匹配模型通过尽早让文本进行交互(可以发生在Embedding和/或Encoding之后)实现了词法、句法层面信息的匹配,因此其效果也普遍较表示型语言模型更好。
9 y8 m" G3 t* n5 b% _5 V 9 A$ q; }. l% y5 M0 }. y+ ?
【Reference】, X1 Q3 q4 n: ^/ K5 ~
) a( \6 ?( `* Q. O
ARC-II: Convolutional Neural Network Architectures for Matching Natural Language Sentences
+ F$ v7 j( H. X5 t( o
7 a0 N! D$ \5 ?6 y+ x( }# Y PairCNN: Learning to Rank Short Text Pairs with Convolutional Deep Neural Networks6 J1 Q/ Q2 l3 T" v4 ?+ a
! u: A) }% Z1 @8 c) B; ?( V* G MatchPyramid: Text Matching as Image Recognition( S1 l9 p9 u7 o: d @% h# B
$ d$ f1 J o: ^! C
DecAtt: A Decomposable Attention Model for Natural Language Inference
4 p7 M( g; V/ V/ [' A
- {% ?9 a) g+ l8 M. _ CompAgg: A Compare-Aggregate Model for Matching Text Sequences
7 q: H0 }0 S, ], L 1 l: s% b9 s }! }
ABCNN: ABCNN: Attention-Based Convolutional Neural Network- I* J4 {# |( x
for Modeling Sentence Pairs. T) A4 O7 p' Z; H8 z7 u
% Y) Y( w* o! a2 P+ j0 N( k ESIM: Enhanced LSTM for Natural Language Inference6 e- }3 r. v' |6 B8 T ]$ Z
7 t2 g$ ^ x/ ~& H3 u9 t3 ` Bimpm: Bilateral Multi-Perspective Matching for Natural Language Sentences
5 I3 Q4 X! h* h9 e( U2 s" u7 y
$ L/ s( [7 v4 ] HCAN: Bridging the Gap Between Relevance Matching and Semantic Matching, ], Q' J+ r( w9 L% C
for Short Text Similarity Modeling
+ l0 _6 W9 e* A; Y& O 8 b8 {( c* c) k( d9 V* ~+ E
文本匹配相关方向打卡点总结(数据,场景,论文,开源工具)$ h* G; T& C8 v
# o1 B4 U0 ^; d& S+ V2 U3 R7 f& A w2 V/ l
谈谈文本匹配和多轮检索/ ^* V+ t [+ {* s/ }/ u- c
- [/ x1 F5 }2 L1 N( w6 m9 Q1 {1 I1 }
贝壳找房【深度语义匹配模型 】原理篇一:表示型
9 m# B7 b/ ?2 {4 g2 D# s' E, s ————————————————
1 Z3 L& w, w. H% F, N) B 版权声明:本文为CSDN博主「guofei_fly」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
0 L3 I X* N2 l7 \' F M. V9 x% m 原文链接:https://blog.csdn.net/guofei_fly/article/details/1075012767 ^+ Y! L- `6 E7 H
/ j6 C: C- h: o4 r+ y7 X1 ?
% |& K/ e& @3 @+ v
zan