- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 81
- 收听数
- 1
- 能力
- 120 分
- 体力
- 554082 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 171597
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 18
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
【文本匹配】交互型模型$ I0 I9 D/ D+ v# `/ l
7 Z# q3 y# W- W; h% S- e) ]6 e8 U
表示型的文本匹配模型存在两大问题:(1)对各文本抽取的仅仅是最后的语义向量,其中的信息损失难以衡量;(2)缺乏对文本pair间词法、句法信息的比较% V/ H; P; W- L+ u9 I, Q1 g
/ w1 G3 S4 t$ B0 l
而交互型的文本匹配模型通过尽早在文本pair间进行信息交互,能够改善上述问题。% k1 ]4 g6 U7 h; Y0 m+ N7 w1 M
! f, L7 |# h1 W! Z, _/ R8 F
基于交互的匹配模型的基本结构包括:5 w3 t( U" b9 _8 ^7 u# g4 F
/ u8 u }* g1 [; I. p! c" g(1)嵌入层,即文本细粒度的嵌入表示;6 N) s( W" ^5 ^! h: J" q# ^
% j0 ~7 Y0 Z' F! R' j: b
(2)编码层,在嵌入表示的基础上进一步编码;
8 h+ Y& n' H2 K$ A
) m9 f0 O! ^8 Z) O+ Z1 A* e* j' D6 N; q(3)匹配层:将文本对的编码层输出进行交互、对比,得到各文本强化后的向量表征,或者直接得到统一的向量表征;
! d6 X" z8 S9 g3 X9 p, @3 o! w
" f5 I+ b0 j! z# ^7 [. J* s% v) t(4)融合层:对匹配层输出向量进一步压缩、融合;
# u/ U/ ?+ {8 \; l
9 O" C, ]) q' P* K% ]" R9 ~: s(5)预测层:基于文本对融合后的向量进行文本关系的预测。, M4 b$ x; }: n7 x& L
7 D" g) k& K' `3 I9 f! h
* l/ z9 U; O. Z7 L+ A: a
7 d+ z, D5 U Y
1. ARC-II
4 S% p4 n/ c! D$ u% z" WARC-II模型是和表示型模型ARC-I模型在同一篇论文中提出的姊妹模型,采用pair-wise ranking loss的目标函数。5 x) e4 M( `' {
% H) {3 H$ l0 W* |其核心结构为匹配层的设计:' T; q' s. ?0 L9 t4 U
7 g- R0 s1 B; B# ]4 S9 `1 _(1)对文本pair的n-gram Embedding结果进行拼接,然后利用1-D CNN得到文本S_X中任一token i和文本S_Y中任一token j的交互张量元素M_{ij}。该操作既然考虑了n-gram滑动窗口对于local信息的捕捉,也通过拼接实现了文本pair间低层级的交互。8 B* `* ?% ?8 \3 X
6 p5 T7 \, J0 {. y6 H(2)对交互张量进行堆叠的global max-pooling和2D-CNN操作,从而扩大感受野。4 r. A0 T- p v/ e K
9 y% r7 y( \" t2 M! {
2. PairCNN% p; R% Q0 Q0 M6 S8 k& A' H
PairCNN并没有选择在Embedding后直接进行query-doc间的交互,而是首先通过TextCNN的方式分别得到query和doc的向量表征,然后通过一个中间Matrix对query和doc向量进行交互得到pair的相似度向量,然后将query的向量表征、doc的向量表征、相似度向量以及其它的特征向量进行拼接,最后经过两层的MPL得到最后的二分类向量。- u7 Q3 a- D9 M+ \
/ G( F: S) l# ]9 R3 Q0 d. t
PairCNN的模型架构中的亮点在于各View向量的拼接,既能利用原始的语义向量,还能够很便捷的融入外部特征。: t4 y! ]8 C7 k" y5 R
& p: D& ~) W7 M2 A9 j
3. MatchPyramid. j6 M1 G1 r" l- ]; i# }6 ]
无论是ARC-II中的n-gram拼接+1D conv还是Pair-CNN中的中间Matrix虽然均通过运算最终达到了信息交互的作用,但其定义还不够显式和明确,MatchPyramid借鉴图像卷积网络的思想,更加显式的定义了细粒度交互的过程。6 w0 t: d+ V4 a8 H. Q+ \
MatchPyramid通过两文本各token embedding间的直接交互构造出匹配矩阵,然后将其视为图片进行2D卷积和2D池化,最后Flatten接MLP计算得匹配分数。本文共提出了三种匹配矩阵的构造方式:# v) V$ L9 `4 W) i. d' \
8 @" \# f, c$ o2 n
(1)Indicator:0-1型,即一样的token取1,否则取0;这种做法无法涵盖同义多词的情况;& e$ O' \3 X8 n5 F$ v# q
! l+ Y1 Z1 b/ Z9 b. y) a* d(2)Cosine:即词向量的夹角余弦;
( _3 Q3 x0 u9 B$ `0 i3 k& i w5 i% x4 G: A I
(3)Dot Product:即词向量的内积
3 B/ S+ J, D8 B& Y& D- W% Z
- V, L. S% V a0 |$ E此外值得注意的是因为各个文本pair中句子长度的不一致,本文并没有采用padding到max-lenght的惯用做法,而是采用了更灵活的动态池化层,以保证MPL层参数个数的固定。
( ?% ^9 _' z6 ~3 M, Y; z1 G* [# b/ p7 \/ t. ^; o/ d o
4. DecAtt; A: ~7 A& @6 f1 H. R, N
DecAtt将注意力机制引入到交互型文本匹配模型中,从而得到各token信息交互后增强后的向量表征。
+ {: q# O. t0 e: Z* M( C: F# w4 y% } b- X
模型被概括为如下层级模块:% @' z: H; n( L4 i' k! A
! p# C' P0 T0 I) B. B6 I+ q(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+ z+ Y0 h9 b+ @0 B6 F
7 o# e; _- J. B(2)Compare层:将前序Attend层计算得到的最终embedding,喂入一个全连接层进行向量维度的压缩。) D) Q* ~ E# C/ J
3 _" `5 S% n. X) [' y% l(3)Aggregate层:将每个文本各token处压缩后的向量进行简单的求和,再拼接起来通过MPL得到最后的匹配得分。
2 l8 f6 }- j' _: G7 c5 O. t$ u$ j. ?4 [6 W4 ?
5. CompAgg# n' Y. ~7 Z0 ]% J$ u8 A+ h( u
CompAgg详细对比了在文本间cross-attention得到的各token向量表征与原始token向量进行compare的各种方案。
* z' n% a5 J* B
, |# q3 W! s# N+ {% f7 L" H该模型的主要结构包括:* v7 G9 [* \4 U( K1 @: Y
! K$ J- q5 U3 f3 e9 f D+ O(1)reprocessing层:采用类似于LSTM/GRU的神经网络得到token的深层表示(图中的\bar a_i);
0 B- p- \; ^2 J* \2 Z {- s3 p6 R: r: x
(2)Attention层:利用软注意力机制计算文本间的cross-attention(与DecAtt相同),从而得到各token处交互后的向量表示(图中的h_i);9 E% f7 u0 u% R' c
0 N$ ]" q7 U" B1 A: u) J$ e(3)Comparison层:通过各种网络结构或计算将\bar a_i和h_i计算求得各token的最终表征。
6 y8 E, F; e6 M: Q$ {" N4 q" R- K
+ f1 l# i* j$ A9 K8 g: ?(4)Aggregation层:利用CNN网络对Comparison层的输出进行计算,得到最后的匹配得分。/ a" U" b" ?. F0 c! k
+ U' s8 f4 @& L2 w. S6 t* x其中Comparison层的构造方式包括:
9 i. L& z: @6 M% {9 b4 `9 W
# r! P8 N" t4 j- K# e(1)矩阵乘法,类似于Pair-CNN中的中间Matrix
. d1 _! b$ y% X+ @) Q% D$ b5 M
$ g/ t. Q* a: @+ u2 d+ A(2)前向神经网络,即将\bar a_i和h_i进行拼接,然后利用输入FFN;, e" Q4 u7 q' X& w! D. n
# f s, E5 b' T(3)分别计算cosine和欧式距离,然后拼接;0 Z$ p9 [3 m4 w7 | M
# W1 K8 s/ p# C4 g- d
(4)各维度进行减法;
! _/ l/ U- G* X3 ?
, x# `. F6 N& R; b7 X" h5 o(5)各维度进行乘法;% x0 Z- q' O, h+ b7 \
" f, p; \: s# K: x
(6)各维度进行减法和乘法,然后再接一个前向网络。
/ x! J" P" P7 s
7 g8 G7 X$ b0 u5 t6. ABCNN
, F } a% C% K) fABCNN是将Attention机制作用于BCNN架构的文本匹配模型。
8 C4 m; |& r% o, x: [; N% s+ `7 j% I. |5 b: ~; m M
6.1 BCNN
$ c# i' E3 ~ ?& F2 Y0 i f7 c2 d首先简单介绍下BCNN架构:
/ h# m3 d6 H' O* o$ H1 `! E
4 D/ o- C- C9 |# f/ I/ h* ZBCNN的整体结构比较简单:(1)输入层;(2)卷积层,因为采用了反卷积的形式,所以在size上会增加;% I; @ V7 y) y9 C. |
% E( K- k& Q/ R% z6 o% K
(3)池化层,采用了两种池化模式,在模型开始阶段采用的是local平均池化,在最后句子向量的抽取时采用了global平均池化;(4)预测层,句子向量拼接后采用LR得到最后的匹配得分。
" {* V9 h d4 E9 n1 |8 S3 D( I1 p F" l. o
ABCNN共包括三种变形,下面依次介绍。 J( b" x- L; ?+ T7 L( f ^
/ n! O& Y, h! B5 r6.2 ABCNN( ^ W3 l9 Y& O' K
: D: g! V: o& D6 ^6 S1 T$ |+ O
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 9 v$ `, }1 c8 e
ij' s% N: a& r' m2 e* C; E5 f
& A1 B# U) W/ d$ x6 I; a% A) i% j( `' j = 2 g0 e- V1 G1 w- j/ P( a6 m
1+∣x * r; a2 t, u8 w' f F9 a% q P2 B
i, Q5 E7 V; @' x* r& ?* [- _7 t/ h
' ~- v! G# S7 }$ Q6 y −y 6 r( [ d" S: j# m# ]
j
- G8 \4 L6 a* f6 A* Y
5 I. D0 u0 j3 h; A0 H# \. `' P8 e ∣
) E. ], X( l) X3 O! [: P) @+ Y$ ~1 C' J5 N" v+ v0 v9 {& ]
3 R% h! T8 B' `$ n' b+ \% @ ,然后分别乘以可学习的权重矩阵 W 0 W_0 W
2 }0 \. P9 I: o0 h0" h1 E- o |, k0 g2 V' o G
: i; C2 e2 w, D) e4 E 和 W 1 W_1 W
1 s n( B9 ]: F9 `. @% V) _' o7 e1
5 r0 i5 ]! v: k& \- {# }* e
3 e' T }0 _4 y3 V' | 得到attetion feature map。
( L( v: v% T4 a% h! e( Q' A4 W' u" x. \) p4 c4 y( K1 \
6.3 ABCNN-24 E6 U" `1 G0 h- f1 _+ E
8 t: ~6 ^: H4 Q! M' G. S1 s- HABCNN-2将Attention机制作用于word embedding层后的反卷积层的输出结果,其中注意力矩阵的计算原理与ABCNN-1一致。然后将注意力矩阵沿着row和col的方向分别求和,分别代表着各文本token的attention socre;接着将反卷积层的输出结果与attention socre进行加权平均池化,得到与输入层相同shape的特征图。
, {! x. Z6 j7 J' i
& x4 Z8 C9 K& ]% `6.4 ABCNN-3% m( X! I9 M1 ]+ @0 E, u
" P. R7 v7 A% i7 E4 R- }, E2 q5 p8 w
ABCNN-3的基本模块可视为ABCNN-1和ABCNN-2的堆叠,即在嵌入层和卷积层上面都引入了attention的机制用来增强对token向量的表示。
- J, u. {- g' Z0 e) j* _4 ]# v$ I; @4 c0 `; p
7. ESIM
{: b+ L) s8 V" b; ^ESIM模型基于NLI任务给出了一种强有力的交互型匹配方法。其采用了BiLSTM和Tree-LSTM分别对文本序列和文本解析树进行编码,其亮点在于:
* K. R; l3 J8 l# h3 `0 d
1 j; L, C" k; b. f" ~! E4 f! X9 X$ |(1)匹配层定义了cross-attention得到各token的向量表示与原token向量间的详细交互关系,即采用 [ a ˉ , a ^ , a ˉ − a ^ , a ˉ ∗ a ^ ] [\bar a, \hat a,\bar a-\hat a,\bar a* \hat a] [
1 _ Q' S$ H% c5 `a. p4 _" @8 s0 {6 ` T
ˉ
/ R4 ?4 E2 ~* o& @0 {9 x , - ~1 e a3 \! S1 G5 `1 T+ {
a
0 I- I" X/ b$ j- M5 W^
6 {% x4 [6 b" d6 {+ D9 Q , 2 Q @* S1 |+ Y1 v
a6 ~/ k! D; Z/ I2 g( C" P
ˉ
+ c. E: a7 x G0 h − 9 k) {- v G$ e
a- Q, o9 c* s. g, g3 w9 @7 r
^7 Z- p A+ Z9 ~9 w5 a# X5 I) G9 ~
,
n: n4 o1 W( [2 p ~! x9 _) Ra- {- B/ w [' Y9 S% V: D
ˉ1 D" `4 k k" H- c' n( Y: V6 t# X
∗
4 M% L2 t- H* I$ Xa
2 k( m; c# `' N3 W1 b^
4 q% Q& O" `6 Y+ ? ]作为最终文本token的向量表示,这也成为后续文本匹配模型的惯用做法。
' r8 h9 u( k8 o
% Q U* j) L2 p& o: l$ @(2)聚合层通过BiLSTM得到各文本token的编码,从而进一步增强了文本序列的信息传递;# R9 S! _: a7 M; D
$ F6 u0 M+ D, f/ U- b
(3)预测层通过拼接各文本token编码的max-pooling和mean-pooling结果,再经过MPL进行匹配预测。7 s7 {3 I3 q. C6 u5 t; G9 y
" O/ T ^# d2 Z7 `
. G0 G% B: O9 N' `* T7 @; m1 X l* g0 [7 z' I7 j0 U
8. Bimpm
d( I; G$ q- i( |$ ZBimpm可视为对之前各类交互型文本匹配模型的一次总结。
" R# G/ T3 L; v. m& E9 g, O3 u
) r) \6 l! ~0 L1 r3 b) Z% V该模型在各层的具体做法总结如下:
. I# C8 S, Q9 K" |' `' X
& O5 A1 q0 {7 d; _- k- [(1)编码层采用BiLSTM得到每个token隐层的向量表示;+ O$ P! K- n' T5 I+ _
9 ?0 P- H- h1 M. c$ l. g(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
) c" m/ x |: R& ]! _9 yk$ n+ ]- i. Y; j$ H+ R
( ?& c$ [$ _# O- }. F
=cosine(W 4 d, n0 k0 D& S' \! E7 K, k
k4 B9 A# l% u4 _
) I$ e. Q+ K6 m/ e
∗v , D5 k, f5 F* ~ S# S
1
/ t3 f% v6 [& w( d/ ? - k0 n3 A* o$ Z* r
,W
, T9 [6 o- M0 jk
8 _& \" ~* i# t3 `
: Z1 |! V+ T4 P* C6 J* ~& ^ ∗v + A" M6 z' d, x" [3 m
2& c& @, y+ n* M
~/ i0 }5 {. T, R( R) _( F7 A/ G )的方式可以得到两个文本的任意token pair之间在第k个view下的匹配关系,至于 v 1 v_1 v 5 D5 P$ x" ?3 z- ^
1! g+ p4 D0 E5 v
& `) d* P2 m4 f1 r- N% _9 ]3 i 和 v 2 v_2 v
7 L5 W" z+ F' ^6 r6 T" a* W5 p2% u- A9 l; G! I) g$ B
% O7 I3 g9 S; e+ G% x" v
如何取,文章提供了4种策略:
! U5 i1 h1 I ]$ [# T! Q% R2 f9 X, r7 W) O* t0 S7 q7 A2 {, P7 b* d7 b
策略一:其中一个句子取各token隐层的向量表示,另一个句子采用隐层最后时间步处的输出;
2 V; B4 ]' k! i策略二:其中一个句子取各token隐层的向量表示,另一个句子采用隐层各时间步输出与之匹配后取再取Max-Pooling值;' I( I2 z, T$ u
策略三:其中一个句子取各token隐层的向量表示,另一个句子采用cross-attentive后得到的加权句子向量;7 Z; z, p6 s4 h9 m; m( G
策略四:其中一个句子取各token隐层的向量表示,另一个句子采用cross-attentive后attention score最高处token的向量作为句子向量。
+ ~& h/ v% ^7 @0 _" V4 c" `这四种策略的区别在于对句子向量的计算不同。
/ X. ?& H! s( y" d# M3 h3 [2 p/ \, ]0 _! E/ ~3 c
* G" w1 j6 q+ o! T( w2 v2 U. ^
(3)聚合层,首先对上面各种策略得到的输出层再通过一层BiLSTM层,然后将各策略下最后时间步的输出进行拼接,得到最后的聚合向量;
0 c, H" p$ p( S) O& ?# h M
- z/ ?/ u7 a0 n) R, K5 Z: n( k3 s(4)预测层:两层MPL+softmax
5 C x4 Y9 [4 P+ l( k- F0 N d: ]' N
9. HCAN
; G5 M: ^2 E& Y2 `* W8 _$ E* eHCAN是除Bert类模型外在文本匹配领域表现最为优异的深度模型之一,其采用了较为复杂的模型结构。
O9 g# E5 |8 {( I9 d" M9 K1 N7 C. ~( n8 G
针对于信息抽取问题,文章首先分析了相关性匹配和语义匹配的差异:
; q9 t3 r5 S' t" D- E1 O& M% g
% z4 z7 l# P! @: Y5 _% J8 P& [(1)相关性匹配主要关注于关键词的对比,因此更关注低层级词法、语法结构层面的匹配性;
& N, k1 y" s. R) _) Y- X
- x' ]/ P) m% X+ f(2)语义匹配代表着文本的平均意义,因此其关注更高、更丑想的语义层面的匹配性。
3 F; {9 j" C5 G M
7 b& q3 L4 ~* Z9 r该模型首先采用三类混合的编码器对query和context进行编码:5 |+ I9 p$ M2 q
; L1 l3 k& E; c& P
(1)深层相同卷积核大小的CNN编码器;0 o1 H& k2 p8 V* }5 L
- K7 }; r& J H+ U% H
(2)不同卷积核大小的CNN编码器的并行编码;5 T* r; Z; s* e" _. z
) t- O3 e; O- J9 ~0 g% F1 d7 V(3)沿着时序方向的stacked BiLSTM编码;
+ i5 G8 p6 m. X0 X g
) T# D/ P3 Z2 H' {& [+ V. s% e对于前两者,通过控制卷积核的大小可以更好的捕捉词法和句法特征,即符合相关性匹配的目的;而对于后者,其能表征更长距离的文本意义,满足语义匹配的目的。
0 f4 J' s) q# k, b* V" |+ ^4 }+ C6 v1 t$ g0 t7 B& p
在这三类编码器的编码结果基础上,模型分别进行了相关性匹配和语义匹配操作。其中相关性匹配主要采用各phrase间内积+max pooling/mean pooling的方式获取相关性特征,并通过IDF指进行各phrase的权重调整。而在语义匹配中,模型采用了精心设计的co-attention机制,并最终通过BiLSTM层输出结果。
7 q" i8 O' a5 I- r& w
8 G# C% o8 f# h+ S最后的预测层仍采用MPL+softmax进行预测。
2 ?1 T1 U+ H) c7 B3 P7 r- m/ W; v
+ `- ~! P, H" @9 `/ M0 K10. 小结
/ D q3 |9 ^4 J. I$ v+ ]1 ?交互型语言匹配模型由于引入各种花式attention,其模型的精细度和复杂度普遍强于表示型语言模型。交互型语言匹配模型通过尽早让文本进行交互(可以发生在Embedding和/或Encoding之后)实现了词法、句法层面信息的匹配,因此其效果也普遍较表示型语言模型更好。; S0 c5 V: \: s
: x8 S, }' ^ N8 U
【Reference】3 ^' l% |. U# G0 N3 L# g
' [' }: T/ u& ]8 z5 _4 V
ARC-II: Convolutional Neural Network Architectures for Matching Natural Language Sentences1 i# E: k7 a1 u. A
0 g M5 k; i. l1 S7 P! Q
PairCNN: Learning to Rank Short Text Pairs with Convolutional Deep Neural Networks
( O, I' G; G R/ i8 I/ ?1 ~
% H, |0 I+ F2 J# ^MatchPyramid: Text Matching as Image Recognition
8 b6 s$ h4 z4 n
, T* B6 l# b. a/ T6 |; DDecAtt: A Decomposable Attention Model for Natural Language Inference* `. m, W+ {; a Z- v1 U. n
+ h$ c0 w% _/ F5 E2 W4 [7 h- K/ f
CompAgg: A Compare-Aggregate Model for Matching Text Sequences
/ p' z `" }- ?9 D! t6 s3 @* ~, k8 e. O
ABCNN: ABCNN: Attention-Based Convolutional Neural Network
* O# f! W6 w3 a9 A3 Wfor Modeling Sentence Pairs
( |1 @" @: c& k& N- O; S- h5 V0 S+ g7 [
ESIM: Enhanced LSTM for Natural Language Inference
% g5 S# g6 ~ r$ t3 ]; ]
$ X; U2 s# t8 z# G" j4 U& @ fBimpm: Bilateral Multi-Perspective Matching for Natural Language Sentences
6 r5 x; Y/ t$ ~7 t0 }/ s
0 c$ Q! D) S: K" V6 zHCAN: Bridging the Gap Between Relevance Matching and Semantic Matching# h: D, k4 o0 v4 b
for Short Text Similarity Modeling
7 W5 Y ?0 T. ~* R' R% ]( h B& |( A# n" o5 s- J
文本匹配相关方向打卡点总结(数据,场景,论文,开源工具)3 V2 Q8 `+ p4 Q. ^& F
( |7 Q) Z1 I& X谈谈文本匹配和多轮检索
5 N8 P! C) E( Q; p4 o% c0 v9 v3 _9 A
贝壳找房【深度语义匹配模型 】原理篇一:表示型
0 ~$ a3 C" W1 ]9 U6 K* |6 V————————————————
7 {2 z7 ?/ Z. a3 h; K: p版权声明:本文为CSDN博主「guofei_fly」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
/ _9 r8 V; Y" I+ Y原文链接:https://blog.csdn.net/guofei_fly/article/details/107501276. L) @! o8 R- o8 A. H
: g$ N. k2 G, N+ `$ A
: m+ h! @0 F! |' u) n |
zan
|