Page 457 - 《软件学报》2026年第3期
P. 457

1420                                                       软件学报  2026  年第  37  卷第  3  期



                 20. END FOR
                 21. END
                  3.3   文本卷积神经网络

                    TextCNN [36] 是一种基于卷积神经网络的文本分类模型, 其架构如图              4  所示, 在这个架构中, 输入的文本首先被
                 表示为一个词向量矩阵, 其中每一行代表一个词向量. 卷积层中将该词向量矩阵作为输入, 并使用不同大小的卷积
                 核对文本进行卷积操作, 并利用          ReLU  激活函数进行非线性变换, 得到多个特征图. 卷积操作可以捕获不同长度的
                 局部特征, 从而在不同的层次上提取文本的语义信息. 池化层对每个特征图进行最大池化操作, 从每个特征图中提
                 取出最重要的特征向量. 将池化层输出的特征向量拼接起来形成一个全面的特征向量, 并使用全连接层对其进行
                 归一化处理, 最终输出预测结果.



                                                                                  Fully
                              SWAP                                              connected
                               DUP                                                layer
                              SWAP
                              JUMP                                                    2 classes
                              PUSH
                                                                           Feature concatenation
                                   Word embedding
                                                                    Max-pooling
                                                 Convolutional layer Feature maps
                                                   图 4 TextCNN  模型架构

                    将第  3.2  节中得到的词向量矩阵       V  adv  作为  TextCNN  卷积层的输入. TextCNN  使用的卷积是一维卷积, 卷积核
                                               1:n
                 的宽度与词嵌入的维度        k (其中,   k = 300) 一致; 高度  h 为每个窗口中词的数量, 受文献     [12] 与实验结果的启发, 最
                 终将卷积核的高度设置为         h ={2,3,4}, 所以卷积核  ω ∈ R k×h  具体可表示为:

                                                       {             }
                                                    ω ∈ R 300×2 ,R 300×3 ,R 300×4                     (1)
                      V  adv   是输入矩阵的第   i 行到第   i+h−1 行所组成的一个大小为    k×h 的窗口, 每个滑动窗口的卷积结果         C m  如下:
                      i:i+h−1                                                                      i

                                                          (         )
                                                      m
                                                     C = f ω·V adv  +b                                (2)
                                                      i       i:i+h−1
                 其中,  b ∈ R  是偏置项,   f  是非线性函数. 对  n−h+1  个滑动窗口同时进行卷积操作, 最终生成一个特征映射                  C m =
                 [  m  m   m  ]
                 C ,C ,...,C   . 池化操作是为了提取特征映射中的最大值. 于是将               C m  传入池化层, 并使用最大池化法提取重
                   1  2    n−h+1
                      C max , 如公式  (3) 所示:
                 要特征

                                                       C max = max(C m )                              (3)
                    卷积核的数量决定输出的特征映射矩阵的维度. 假设卷积核的数量设置为                          j 个, 再分别计算每个卷积核的最
                 大值, 最后将其叠加成一个完整的特征映射矩阵               M ∈ R m×j  作为输出向量. 此外, 可在全连接层之前添加         Dropout 操
                 作来防止模型过拟合. 最后, 在全连接层中使用             Softmax  函数对池化层的输出向量进行归一化处理, 将其转换为我
                 们想要的预测结果.
                  4   实验评估

                  4.1   数据集与评价指标
                    本文从   XBlock  中获得了已经标注的数据集, 其中包括           3 607  个非庞氏骗局智能合约和      296  个庞氏骗局, 两者
                 的比例大概为     10:1. 此数据集中提供了智能合约的字节码文件, 因此我们通过搭建                   Go-Ethereum  客户端将字节码
   452   453   454   455   456   457   458   459   460   461   462