- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564647 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174617
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
【文本匹配】交互型模型
' B- b4 K) I3 N' f1 J
6 i& V0 ]: E! o6 f# c- }. P表示型的文本匹配模型存在两大问题:(1)对各文本抽取的仅仅是最后的语义向量,其中的信息损失难以衡量;(2)缺乏对文本pair间词法、句法信息的比较
% g) L3 _" Z$ l: r. L
. {" E/ F' R- y k4 x! g6 L* s' ~而交互型的文本匹配模型通过尽早在文本pair间进行信息交互,能够改善上述问题。$ V! a1 ^: f" f% I0 w! u
: S7 n0 }1 N+ C0 |+ u3 c6 P* A基于交互的匹配模型的基本结构包括:
9 G4 T# Q8 N& x3 G7 w6 a
5 h P. G0 i& O' ^) ]8 ~(1)嵌入层,即文本细粒度的嵌入表示;
. k! ]2 o; J7 T2 w* y- X
& n' D, p# _& g- K(2)编码层,在嵌入表示的基础上进一步编码;: Y* f u2 Z8 V3 z3 {5 G
+ p# b/ h1 U( H+ _. y(3)匹配层:将文本对的编码层输出进行交互、对比,得到各文本强化后的向量表征,或者直接得到统一的向量表征;* a; I. Z8 |9 W$ v( ~2 | B. m
* p3 e P. H2 x' [+ K1 W, k/ q' }
(4)融合层:对匹配层输出向量进一步压缩、融合; J' o$ L/ W# m* _6 Q& K
2 `' T, c4 t1 c9 o* q8 z(5)预测层:基于文本对融合后的向量进行文本关系的预测。
d+ f3 Q( S. `1 q! I! @/ V1 ~0 `0 P6 S6 Q9 U
9 {$ i( B$ ~0 \
! Q; \; S$ l! }/ w
1. ARC-II
) V; G X6 i, l ?4 A8 xARC-II模型是和表示型模型ARC-I模型在同一篇论文中提出的姊妹模型,采用pair-wise ranking loss的目标函数。+ w3 K% l0 G$ d3 b1 \( ?" F
' Z* p+ Q) I! {4 L/ e( I
其核心结构为匹配层的设计:
7 s9 \# s- D" I. A) B. H3 P, d* u1 s' Q& S6 P
(1)对文本pair的n-gram Embedding结果进行拼接,然后利用1-D CNN得到文本S_X中任一token i和文本S_Y中任一token j的交互张量元素M_{ij}。该操作既然考虑了n-gram滑动窗口对于local信息的捕捉,也通过拼接实现了文本pair间低层级的交互。( W& y% E% x5 i8 e
; v. N7 L8 y; s& _$ g. F(2)对交互张量进行堆叠的global max-pooling和2D-CNN操作,从而扩大感受野。
0 D1 H2 {- ^0 I+ a) D2 j" ^" k& A& f8 A$ i' V
2. PairCNN
' B. Z. y$ _4 S3 {' ~PairCNN并没有选择在Embedding后直接进行query-doc间的交互,而是首先通过TextCNN的方式分别得到query和doc的向量表征,然后通过一个中间Matrix对query和doc向量进行交互得到pair的相似度向量,然后将query的向量表征、doc的向量表征、相似度向量以及其它的特征向量进行拼接,最后经过两层的MPL得到最后的二分类向量。. F/ L$ J1 ]' y" }( @0 z! c4 ^, u* \
! ?. Y( o: D; Q: J: O5 GPairCNN的模型架构中的亮点在于各View向量的拼接,既能利用原始的语义向量,还能够很便捷的融入外部特征。" m4 [0 Y n5 e+ B* i9 W& Q4 n
! L7 G9 l; o; h, ^- ^
3. MatchPyramid' r7 u- | u" N$ E% v
无论是ARC-II中的n-gram拼接+1D conv还是Pair-CNN中的中间Matrix虽然均通过运算最终达到了信息交互的作用,但其定义还不够显式和明确,MatchPyramid借鉴图像卷积网络的思想,更加显式的定义了细粒度交互的过程。* O7 C% C* _# O- T* ~/ v! Y4 y
MatchPyramid通过两文本各token embedding间的直接交互构造出匹配矩阵,然后将其视为图片进行2D卷积和2D池化,最后Flatten接MLP计算得匹配分数。本文共提出了三种匹配矩阵的构造方式:
* h0 z E9 J7 V/ H- u7 g
& K r# V/ D+ y4 |(1)Indicator:0-1型,即一样的token取1,否则取0;这种做法无法涵盖同义多词的情况;
2 j5 H/ m5 V+ Q1 M* C- r R, L' P4 e1 g
(2)Cosine:即词向量的夹角余弦;
" m, d: C0 t) C* K2 ~. n2 u8 |, d( }9 M9 j5 P+ P
(3)Dot Product:即词向量的内积
# l/ t; g* q4 j) z, U! I
, e/ F6 j L$ ?' ^) y& C此外值得注意的是因为各个文本pair中句子长度的不一致,本文并没有采用padding到max-lenght的惯用做法,而是采用了更灵活的动态池化层,以保证MPL层参数个数的固定。. Z! k9 [" z) I4 a( p5 R
3 J5 P5 W! o+ A! ]/ z8 Y( S; b& {4. DecAtt% T H/ }6 d9 N. C/ h
DecAtt将注意力机制引入到交互型文本匹配模型中,从而得到各token信息交互后增强后的向量表征。5 I, \* W7 F0 z' q$ G8 A
1 |! o& U# s7 j- U模型被概括为如下层级模块:
8 v, Z" f k7 R+ ]
, T2 O" H' v0 c& ~: }4 n3 X(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。
# x" B/ c* _. J) _3 K7 u& S) p: F \4 T9 c' w' [& T
(2)Compare层:将前序Attend层计算得到的最终embedding,喂入一个全连接层进行向量维度的压缩。: d0 r+ j8 i% @0 G8 Q+ {
* ]0 e/ O6 }' B7 U! E
(3)Aggregate层:将每个文本各token处压缩后的向量进行简单的求和,再拼接起来通过MPL得到最后的匹配得分。2 h4 `0 j$ X4 Y+ L4 c% T5 a
' m4 H. p8 ]" u N' r: w5. CompAgg8 o; F6 Y$ o9 g7 A( F: k
CompAgg详细对比了在文本间cross-attention得到的各token向量表征与原始token向量进行compare的各种方案。2 N+ Y5 F% o5 e$ @. W* L! p7 w
+ J( ?/ r4 G K6 z" q; ?" x$ P* I该模型的主要结构包括:
: ?- L6 b0 q" a, N8 i% {3 s% x; [$ p, {7 U |+ D4 l- {2 L+ l
(1)reprocessing层:采用类似于LSTM/GRU的神经网络得到token的深层表示(图中的\bar a_i);5 i3 M. R$ X" Y0 m* a% D' q) G- [# E
- e) G" E# x1 y& R# \(2)Attention层:利用软注意力机制计算文本间的cross-attention(与DecAtt相同),从而得到各token处交互后的向量表示(图中的h_i);4 [3 e8 A' n1 D. |& ^/ z
/ c# n1 m9 E* K/ s r
(3)Comparison层:通过各种网络结构或计算将\bar a_i和h_i计算求得各token的最终表征。2 [' v+ n2 w: T8 m z% A" m7 z% ]) a
; g6 Q8 d! W) L" m
(4)Aggregation层:利用CNN网络对Comparison层的输出进行计算,得到最后的匹配得分。. q# ?+ O, V; [- U
2 e: y3 s% F1 c: ^# U. d# W其中Comparison层的构造方式包括:
! P% l6 O6 V4 ?' O. W& Z7 I0 i% u# E4 L% D8 o
(1)矩阵乘法,类似于Pair-CNN中的中间Matrix: j( e% j! L4 K# W% t
" m! p- p" T5 L# K/ h* u; ^& Y9 g(2)前向神经网络,即将\bar a_i和h_i进行拼接,然后利用输入FFN;
$ u6 [ _9 b6 I6 o; [4 f g6 ?- P' \1 e. s& m( Z$ z/ m
(3)分别计算cosine和欧式距离,然后拼接;* c4 z; e+ b: B/ P9 w: x
6 {: n; U0 P" ], q) i. ?0 ?) H4 q(4)各维度进行减法;
^3 @; ]. Y8 h& A
3 P2 J* K! C7 e* b2 E8 {(5)各维度进行乘法;3 w+ G7 v7 m$ U+ ], L9 }
- c6 [/ R6 n4 @, w p
(6)各维度进行减法和乘法,然后再接一个前向网络。. L% G w* v& y: n! y
" B" E- [, f2 P( }6 y0 w
6. ABCNN
9 R7 ^/ X# h$ j6 } N# C2 K8 jABCNN是将Attention机制作用于BCNN架构的文本匹配模型。8 h) [# W: w+ c8 M6 ]4 `) F% }8 x
0 z9 a$ q1 s4 K M9 e6.1 BCNN
7 @1 F( E$ h3 @) w" u9 S首先简单介绍下BCNN架构:
8 X k6 d* _* \0 N. W
% T7 n0 m* z( X, XBCNN的整体结构比较简单:(1)输入层;(2)卷积层,因为采用了反卷积的形式,所以在size上会增加;
. |; H8 i& Y& `8 @$ ]8 ]+ {1 A5 s5 t' @- S1 a. Z+ \2 [' x
(3)池化层,采用了两种池化模式,在模型开始阶段采用的是local平均池化,在最后句子向量的抽取时采用了global平均池化;(4)预测层,句子向量拼接后采用LR得到最后的匹配得分。
0 C9 u, x( f: P+ r8 Q! y
1 I4 O' k! B; X, x% J+ pABCNN共包括三种变形,下面依次介绍。
' z# w2 e' ~0 d6 ^. T
" Q% d9 y) w: j9 W" M2 [6.2 ABCNN; d7 b! r/ Q2 l' h [. [
7 x# w# X* b5 }+ J- G0 T; rABCNN-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
( J; e. o2 Q. U4 ` F+ Hij/ i j) J" a8 j% ^6 D# U
& ^+ s' ~. J' T, O1 Q* w
=
' a# t/ \4 Q; }1+∣x
1 d1 M5 Y5 Q4 R3 p' Bi
! ~( W0 j; w( K, f+ ]. R, r 3 @9 ~% V" C3 B
−y
9 T$ T2 e) c$ U9 G' \j
7 l6 n/ f9 _) \$ I1 D' e; d C5 Q ( O! l9 ~) W5 U
∣
! d* P u* D0 a! T9 j/ W& j5 {1
; U+ P& j7 A# ~( C
5 a {) z+ K; b, A0 `. q+ J" U- k ,然后分别乘以可学习的权重矩阵 W 0 W_0 W
$ A- B; N! n5 H/ D$ y( E00 c6 r9 |) z- D# N: D; _
+ g* a$ ^- r& @' T) Y 和 W 1 W_1 W - q* H( K V W) \- F# a$ N7 a
11 g( P! ?: t4 u2 p6 A
) i$ e0 [# P# ]9 v) ` 得到attetion feature map。
5 X' K' c: f8 ^4 r' l; d: C0 `$ Y' ?6 j6 l h7 _
6.3 ABCNN-2
* W' e5 x8 b. s6 ]. A0 f
+ W+ h5 Z: d% K& C/ z! y/ kABCNN-2将Attention机制作用于word embedding层后的反卷积层的输出结果,其中注意力矩阵的计算原理与ABCNN-1一致。然后将注意力矩阵沿着row和col的方向分别求和,分别代表着各文本token的attention socre;接着将反卷积层的输出结果与attention socre进行加权平均池化,得到与输入层相同shape的特征图。
# @0 w. |' f( A' ?$ q7 @0 W
( b+ I, T! H7 T2 i! j* N6.4 ABCNN-3; Z/ U3 I! Z8 y" p0 t2 s/ J6 i# s' z
- M Z3 h: ?; T5 V- ~8 FABCNN-3的基本模块可视为ABCNN-1和ABCNN-2的堆叠,即在嵌入层和卷积层上面都引入了attention的机制用来增强对token向量的表示。
# G) J* f! u* W) }& I0 I" v% ^6 |% f) v4 e6 }
7. ESIM
) w% x( `; Y$ ~4 P5 J* H& `2 |ESIM模型基于NLI任务给出了一种强有力的交互型匹配方法。其采用了BiLSTM和Tree-LSTM分别对文本序列和文本解析树进行编码,其亮点在于:6 I, S( [! u' p5 z7 n
; k) `+ l, ^6 J' \. k% W(1)匹配层定义了cross-attention得到各token的向量表示与原token向量间的详细交互关系,即采用 [ a ˉ , a ^ , a ˉ − a ^ , a ˉ ∗ a ^ ] [\bar a, \hat a,\bar a-\hat a,\bar a* \hat a] [
+ f% g) [2 m. A7 d" X- Ua, W- x i' |; Q/ [8 z' l
ˉ. E% T2 _ }9 P
,
' Q3 [8 M7 X2 K, {- K4 V2 Da2 J7 c6 O- G0 Y7 X$ c
^
, i% `2 l& v3 u3 t) V5 c , * c8 ^, I5 s- z8 k
a
5 s7 F9 Q& j, p2 u" \ˉ
1 k$ c0 o4 y+ J- \$ b3 l − ! q) y! T" d1 S9 N" e
a8 p: [' b- \7 L9 W, a
^
1 H- ~7 n& L1 X$ S/ o; W- h ,
+ `; U* _2 t, x" ^a) e6 K& r/ `8 ?! |) L* p4 q; ~! h6 _. m
ˉ ~7 Q; x& n1 e6 g$ k" \
∗
+ S+ o: G( ]1 z, F0 b) @, p* va
6 E/ }: Q, G( J7 g/ V" X6 H+ {^/ P1 ` V* A5 X# K6 k
]作为最终文本token的向量表示,这也成为后续文本匹配模型的惯用做法。
, I0 T! _9 e1 N# }" ^" S. d0 U
5 Y8 j( r# \- X; R(2)聚合层通过BiLSTM得到各文本token的编码,从而进一步增强了文本序列的信息传递;
) x" f! ^3 @2 m& S$ ^! P4 c
" X! q2 S/ K; B/ \) Y6 z/ T(3)预测层通过拼接各文本token编码的max-pooling和mean-pooling结果,再经过MPL进行匹配预测。3 k) h4 ~3 t1 J \ o
; H$ r4 k y9 g! t# `* e+ T1 r- h. K8 m' D9 h7 C! p
* q6 _8 u1 a6 x/ t! W( n8. Bimpm
- d8 V5 k6 n: E+ U5 P- W2 L, |) fBimpm可视为对之前各类交互型文本匹配模型的一次总结。
1 W$ N: y* `; \5 }- ^4 ]" b8 T% t; r
$ t" \( B4 R! b" ^8 N该模型在各层的具体做法总结如下:! T" I* M6 c9 P$ }0 t- D
: j3 m* ?+ C3 e0 k+ ]5 H8 A
(1)编码层采用BiLSTM得到每个token隐层的向量表示;
2 s! _7 D( S2 c! k/ _+ u% i2 I: y, t8 s4 X5 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
% O* ?7 Y& N2 M1 L" ^! t# J2 Y: g% Jk
( K1 }, R( j& i8 F0 N , n" f; _, _, f
=cosine(W ; {, a9 u# W; J3 I. i
k
) v! m. u" `5 a4 | d1 g
$ n1 @& I2 z/ T, K ∗v 4 l; M% p6 K3 m
1
3 \7 f. S3 m5 [: a# a% L% O
( W" p" v3 N) }9 d$ B6 k ,W
" d- B% M9 o0 g& J; ak1 g, {; b$ u; \; j! K5 w
v N8 A) E! I, c0 R! h( t- f ∗v # j. X s) m F
2. J9 t0 {) _( c) d! S
$ S. i& s; {1 A )的方式可以得到两个文本的任意token pair之间在第k个view下的匹配关系,至于 v 1 v_1 v ) |6 [6 ^: Q) ?- G8 I' h
1
# N5 Q, f* R& u' s* o
0 M% r8 e$ r! X8 [& \0 M 和 v 2 v_2 v
5 b* \- g: q7 @2
! v+ L/ o$ P; A. m' S$ G 3 ]+ n# U7 }: A) p z+ v
如何取,文章提供了4种策略:& h2 T* V' e/ f3 A/ Q9 w
. a z5 N! {; q
策略一:其中一个句子取各token隐层的向量表示,另一个句子采用隐层最后时间步处的输出;
; G) t4 H9 x4 k) j6 \ h" H9 Z策略二:其中一个句子取各token隐层的向量表示,另一个句子采用隐层各时间步输出与之匹配后取再取Max-Pooling值;# z3 c. J# j" }1 H3 o# h$ d
策略三:其中一个句子取各token隐层的向量表示,另一个句子采用cross-attentive后得到的加权句子向量;
* Q1 E* H6 B, u! q) I4 r策略四:其中一个句子取各token隐层的向量表示,另一个句子采用cross-attentive后attention score最高处token的向量作为句子向量。
0 \9 @; I; z& u: P9 ]这四种策略的区别在于对句子向量的计算不同。5 ?( z: x, }4 |* b8 Z
5 r8 _* H; u) r* E- f9 \( h# M4 P
(3)聚合层,首先对上面各种策略得到的输出层再通过一层BiLSTM层,然后将各策略下最后时间步的输出进行拼接,得到最后的聚合向量;
4 J V: ?- w; U9 [- j) X8 i p h2 U! g# R: @6 p9 M" M* y
(4)预测层:两层MPL+softmax% w/ Q& a( d4 e2 U2 U/ i0 u
5 ? t& l8 Q9 Y' U$ {: Z9. HCAN
9 ]$ K1 X9 f* V$ D3 v7 y" RHCAN是除Bert类模型外在文本匹配领域表现最为优异的深度模型之一,其采用了较为复杂的模型结构。
, e/ A. C2 l+ x7 f, X$ z/ N. ?
; b$ m9 n9 ?$ @5 |针对于信息抽取问题,文章首先分析了相关性匹配和语义匹配的差异:7 B, t1 {9 s7 U* i: W$ T0 g: s' ^6 k
. h+ J6 v6 @- L( o& G" R1 V(1)相关性匹配主要关注于关键词的对比,因此更关注低层级词法、语法结构层面的匹配性;
$ U) j( B g& N2 w# K0 v# r7 `, F! z* k5 w0 I3 v( r
(2)语义匹配代表着文本的平均意义,因此其关注更高、更丑想的语义层面的匹配性。' }$ E5 M' z" l. Y5 d
T0 z6 L* \; S/ S1 W
该模型首先采用三类混合的编码器对query和context进行编码:
/ \; z3 w6 s- z3 h3 p n5 S( G+ p6 o' ~6 j, u! T
(1)深层相同卷积核大小的CNN编码器;3 k1 u* f- M6 P- Y) _) Z; E1 p% D
0 z3 \: I3 y4 v% V: N/ v1 i
(2)不同卷积核大小的CNN编码器的并行编码;
9 j1 {- C8 H/ y Z) M- U0 e( r0 q
" K$ P, n8 l* l(3)沿着时序方向的stacked BiLSTM编码;
2 z5 x/ }5 T/ T9 P1 v u( m% t! y0 i5 l
对于前两者,通过控制卷积核的大小可以更好的捕捉词法和句法特征,即符合相关性匹配的目的;而对于后者,其能表征更长距离的文本意义,满足语义匹配的目的。" V/ ^8 S% u( h
3 M( o6 k4 S) f v在这三类编码器的编码结果基础上,模型分别进行了相关性匹配和语义匹配操作。其中相关性匹配主要采用各phrase间内积+max pooling/mean pooling的方式获取相关性特征,并通过IDF指进行各phrase的权重调整。而在语义匹配中,模型采用了精心设计的co-attention机制,并最终通过BiLSTM层输出结果。- ? c- a0 e6 [$ B
( i3 j3 Y w# n& Y6 a' c0 H
最后的预测层仍采用MPL+softmax进行预测。
8 D7 n- c" ?2 i2 T" J# F, @
2 W/ Z1 o! }- O. v% e, M- ]10. 小结
# F. B2 W. k1 s; J; d, t* B交互型语言匹配模型由于引入各种花式attention,其模型的精细度和复杂度普遍强于表示型语言模型。交互型语言匹配模型通过尽早让文本进行交互(可以发生在Embedding和/或Encoding之后)实现了词法、句法层面信息的匹配,因此其效果也普遍较表示型语言模型更好。: `) n2 V. \8 O$ V' c
; p6 n; Y- b* w
【Reference】" d% w( J) F+ F9 j: s
. t$ q% N7 T1 x
ARC-II: Convolutional Neural Network Architectures for Matching Natural Language Sentences: H% ?$ [7 ~" ~# [; b# i
4 _# s0 V/ e: X: PPairCNN: Learning to Rank Short Text Pairs with Convolutional Deep Neural Networks5 g1 O' D: K, U3 E
9 H" l) s+ p$ u- p% K) KMatchPyramid: Text Matching as Image Recognition& B# X( K: Q& D6 G
/ z/ |' p& \/ J9 Z/ o7 i+ l+ X) V+ yDecAtt: A Decomposable Attention Model for Natural Language Inference
0 b2 D0 b& g1 }" B3 R, E* A
- n8 C5 P/ y8 Z8 CCompAgg: A Compare-Aggregate Model for Matching Text Sequences [2 B. C* S: h m( ~2 C- b8 D" b
% U; |4 ]( H8 Q! n
ABCNN: ABCNN: Attention-Based Convolutional Neural Network
4 x: [) @( B& A7 pfor Modeling Sentence Pairs' L( Z0 M( H, Z
) H- A: [! B& y- y
ESIM: Enhanced LSTM for Natural Language Inference
! ~8 c; r' {- N& |- o3 l- h/ J: U
& q+ [1 J- Q3 n; sBimpm: Bilateral Multi-Perspective Matching for Natural Language Sentences
x" h5 S* i* q$ s& z$ b
! Y& @5 e% v5 W3 g5 }& NHCAN: Bridging the Gap Between Relevance Matching and Semantic Matching
1 `/ X$ \+ T2 y1 Afor Short Text Similarity Modeling
7 G! w4 `& e& X5 b3 n1 A. t% @# l; {+ }0 p' @6 O C
文本匹配相关方向打卡点总结(数据,场景,论文,开源工具)
; H- ]# ^$ i! w5 [; g8 m# ]( t: y- I/ o/ F8 Y
谈谈文本匹配和多轮检索
- v$ q- e1 w7 T- F1 u5 o7 i x" _4 {" z
贝壳找房【深度语义匹配模型 】原理篇一:表示型2 X& [/ Y6 e' l: l) u2 E' P' E
————————————————1 [8 s3 {7 S2 t/ ~8 x
版权声明:本文为CSDN博主「guofei_fly」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
4 t/ p# G8 [9 f4 M$ m原文链接:https://blog.csdn.net/guofei_fly/article/details/107501276
2 k4 {& X9 F, r6 q2 ^
) f' H) O1 U8 |# f4 O* U# t# v( K4 J+ v$ Z7 R' z0 r
|
zan
|