1. 项目概述:当Transformer遇见亚马逊评论
在电商领域,每天都有数以亿计的用户评论产生,这些文字背后蕴藏着消费者最真实的情感与需求。作为一名长期与数据打交道的从业者,我深知,从这些海量、非结构化的文本中精准地“读懂”用户情绪,早已不是锦上添花,而是企业精细化运营的刚需。传统的情感分析方法,无论是基于词典规则还是早期的机器学习模型,在面对如今复杂、多样且常伴有讽刺、缩写和网络新词的评论时,往往显得力不从心,尤其是在处理数据类别严重不平衡(比如好评远多于差评)的场景下,模型性能会大打折扣。
最近,我和团队深入研究了如何利用前沿的深度学习技术来攻克这一难题。我们聚焦于一个具体的工程问题:如何构建一个模型,使其不仅能捕捉评论中词与词之间的局部依赖关系(比如“电池续航”和“太短了”的紧密联系),还能理解整个评论句子的全局语义和情感走向(比如先扬后抑的转折结构)。最终,我们提出并实现了一个名为“双路径Transformer网络”的架构,并引入了一种名为“获取-分享知识”的优化算法进行超参数调优。简单来说,这就像为模型配备了两个“大脑”:一个擅长关注局部细节(卷积路径),另一个擅长把握整体脉络(注意力路径),并通过一种高效的机制让这两个大脑协同工作、互相学习。在亚马逊多个产品类别的评论数据集上测试,我们的模型在情感分类准确率上达到了95%,显著优于一些主流基线模型。接下来,我将从设计思路、实现细节到调优避坑,完整拆解这个项目的实战过程。
2. 核心思路:为什么是“双路径”与“GSK”?
在动手写代码之前,想清楚“为什么”比“怎么做”更重要。我们的核心思路源于对现有模型局限性的观察和对任务本质的思考。
2.1 单一路径的局限性:CNN与Transformer的“偏科”
在自然语言处理中,卷积神经网络和Transformer是两大主流架构。CNN通过卷积核在文本序列上滑动,能高效地提取局部特征,比如“not good”这样的否定短语。它的优势在于平移不变性和对局部模式的强大捕捉能力,计算效率也相对较高。但CNN的“视野”受限于卷积核的大小,难以建模长距离的依赖关系。例如,在一段长篇评论中,用户可能开头夸赞了产品外观,结尾却抱怨了售后服务,CNN可能难以将首尾的情感关联起来。
Transformer则凭借其自注意力机制,能够为序列中的任意两个词建立连接,无论它们相隔多远。这使其天生擅长理解全局上下文和复杂的语义关系。然而,纯粹的Transformer模型对于局部细节的捕捉可能不如CNN直接和高效,且其计算复杂度随着序列长度呈平方级增长,在处理长文本时资源消耗巨大。
这就好比让一个擅长微观分析的专家(CNN)和一个擅长宏观战略的专家(Transformer)单独去分析一份市场报告,都可能失之偏颇。我们的想法很直接:能不能让他们俩合作?
2.2 双路径Transformer网络的设计哲学
我们提出的双路径Transformer网络,其核心思想是并行融合,而非简单的串行堆叠。我们不是先做CNN再做Transformer,或者反过来,而是让两个路径同时处理输入特征,并在网络的每一层进行深度的交互。
- 并行而非串行:串行结构(如CNN后接Transformer)存在信息传递的瓶颈和梯度消失的风险,且后一模块严重依赖前一模块的输出质量。并行结构允许两个路径独立提取特征,保留了各自架构的优势,为后续的特征融合提供了更丰富、更原始的“原料”。
- 双向特征交互模块:这是DPTN的“灵魂”。我们设计了一个轻量级的交互模块,让卷积路径提取的局部特征可以去“修正”或“增强”注意力路径中对应位置的权重分布;同时,注意力路径学到的全局上下文信息也可以去“指导”卷积路径关注哪些更重要的局部模式。这种实时的、双向的信息交换,使得模型能够同时具备“明察秋毫”和“高瞻远瞩”的能力。
- 处理类别不平衡的隐含能力:电商评论数据天然不平衡,正面评论通常远多于负面。复杂的模型容易在多数类上过拟合。DPTN的双路径结构本身提供了一种正则化效果。两个路径从不同视角学习特征,相当于进行了多视角的数据增强,增强了模型的泛化能力。此外,注意力机制可以动态地为不同样本分配合适的“关注度”,在一定程度上缓解了对多数类的偏向。
2.3 为什么选择GSK进行超参数优化?
模型结构设计好了,但里面有一大堆超参数:学习率、批大小、Transformer头数、交互模块的权重等等。手动调参如同大海捞针。我们选择了“获取-分享知识”优化算法,原因有三:
- 模仿人类学习过程:GSK算法模拟了人在不同人生阶段(初级和高级)获取和分享知识的方式。在优化初期(“初级阶段”),算法像年轻人一样广泛探索(在超参数空间内随机尝试);在优化后期(“高级阶段”),算法则像经验丰富者,基于已知的“好”和“坏”经验进行更有针对性的精细调整。这种机制平衡了探索与利用,避免陷入局部最优。
- 无需梯度信息:GSK是一种基于种群的元启发式算法,它不依赖于损失函数的梯度。这对于调参来说是个巨大优势,因为超参数优化本身的目标函数(如验证集准确率)往往是不可微、噪声大的,GSK可以很好地处理这类问题。
- 收敛速度快:相较于一些传统的优化算法如网格搜索或随机搜索,GSK通过种群个体间的知识共享,能更快地收敛到较优的超参数组合,节省了大量的计算时间和资源。
实操心得:在项目初期,我们尝试过使用贝叶斯优化,但它对初始点比较敏感,且在高维空间(超参数多)时效果会下降。GSK的群体智能特性使其在高维优化中表现出更强的鲁棒性。我们的经验是,将GSK的种群大小设置为超参数数量的5-10倍,迭代50-100代,通常能找到一个非常不错的配置。
3. 从数据到向量:预处理与特征工程的实战细节
模型再强大,如果喂给它的是“垃圾”数据,输出的也只能是“垃圾”结果。对于文本情感分析,数据预处理和特征提取是决定模型性能下限的关键步骤。
3.1 数据预处理:给评论文本“洗个澡”
我们从公开的亚马逊评论数据集中选取了12个不同产品类别的5-core数据集(确保每个用户或商品至少有5条评论)。原始文本充满了噪声,我们的预处理流水线包含以下步骤,每一步都有其明确目的:
- 去除标点符号:标点本身不携带情感信息,但会增加词汇表的冗余。例如,“好!”和“好”在情感上是一致的,但会被模型视为两个不同的词。直接删除所有标点能简化数据。
- 统一为小写:英文中,“Good”和“good”含义相同。不统一大小写会使模型浪费容量去学习同一个词的不同形式。使用
str.lower()即可轻松实现。 - 分词:将句子拆分成单词或子词单元。我们使用空格分词结合简单的规则处理缩写(如将“don't”处理为“do n't”)。这是将非结构化文本转化为模型可处理序列的第一步。
- 去除停用词:这是一个需要谨慎对待的步骤。虽然“the”,“is”,“and”等词频繁出现但信息量低,但在情感分析中,某些停用词可能是关键,如否定词“not”。我们的实验发现,盲目去除所有停用词会导致准确率下降约2%。因此,我们采用了一个自定义的停用词表,保留了所有的否定词和程度副词(如“very”,“extremely”)。
- 处理特殊符号:删除URL链接、
@提及和#话题标签。这些在社交媒体文本中常见,但在商品评论中多为噪声,与情感表达无关。 - 填充与截断:评论长度不一。我们将所有评论处理成固定长度(如256个词)。短于该长度的在末尾补零(填充),长于该长度的进行截断。这保证了批量训练时张量形状的统一。
- 词性标注:我们额外使用了词性标注,目的是为了后续可能进行的基于规则的增强或分析。例如,可以重点关注形容词和副词,因为它们更可能直接表达情感。
注意:预处理步骤的顺序很重要。通常应先去除特殊符号和标点,再统一大小写,最后进行分词。如果先分词,一个带标点的词(如“great!”)会被整体保留,增加噪声。
3.2 特征提取:从词到向量的“魔法”
计算机无法直接理解单词,需要将词转化为数值向量(词嵌入)。我们对比了几种主流方法:
- Word2Vec:通过预测上下文词(CBOW)或由中心词预测上下文(Skip-gram)来学习词向量。它能很好地捕捉“国王-男人+女人≈女王”这样的语义关系,但它是“静态”的,即一个词在任何上下文中的向量表示是固定的。
- GloVe:基于全局词-词共现矩阵进行分解。它同时利用了语料的全局统计信息和局部上下文窗口,在词类比任务上常优于Word2Vec。
- FastText:Word2Vec的扩展,将词表示为字符n-gram的集合。这对于处理稀有词、拼写错误和形态学丰富的语言非常有效,因为即使单词未在训练语料中出现,其子词单元也可能出现过。
- BERT:革命性的上下文相关词向量模型。同一个词在不同句子中会有不同的向量表示。例如,“这个苹果很甜”和“我买了一个苹果手机”中的“苹果”,BERT会给出不同的嵌入。
我们的选择与理由:对于本项目,我们没有将Word2Vec/GloVe/FastText作为最终的嵌入层直接使用,而是采用了基于Transformer的架构。DPTN模型本身的第一层就是一个可学习的嵌入层,它会在训练过程中从海量评论数据中自适应地学习最适合当前任务的词向量。这种动态的、任务特定的嵌入方式,通常比使用预训练的静态嵌入(如Word2Vec)效果更好。我们对比了使用预训练BERT嵌入初始化和随机初始化,发现在大规模领域特定的评论数据上,从零开始训练嵌入层,配合我们的双路径结构,能取得最佳效果。预训练BERT更适合通用领域或小数据场景。
参数设置参考:我们设置的词表大小为50000,嵌入维度为300。对于长度不足256的评论,使用<PAD>符号填充;对于未登录词(OOV),使用<UNK>符号表示。
4. 双路径Transformer网络架构深度解析
这是整个项目的核心。我们将DPTN拆解为几个关键组件,并附上核心的设计逻辑和伪代码说明。
4.1 整体架构与并行设计
DPTN的输入是经过预处理和嵌入层转换后的词向量序列X ∈ R^(B×L×D),其中B是批大小,L是序列长度,D是嵌入维度。
模型主体由多个堆叠的“混合Transformer块”组成。每个块内部,数据并行流入两个路径:
- 卷积路径:使用深度可分离卷积(例如4x1的卷积核)来高效提取局部n-gram特征。深度可分离卷积能大幅减少参数量,同时保持捕捉局部模式的能力。
- 注意力路径:使用多头自注意力机制,计算序列中所有词对之间的关联权重,捕获全局依赖关系。
两个路径的输出会通过一个“特征交互模块”进行信息交换,然后再合并,送入一个前馈网络进行非线性变换和特征整合。
# 伪代码示意 HybridTransformerBlock class HybridTransformerBlock(nn.Module): def __init__(self, dim, num_heads, conv_kernel_size=3): super().__init__() self.attn_path = MultiHeadAttention(dim, num_heads) # 注意力路径 self.conv_path = DepthwiseSeparableConv(dim, conv_kernel_size) # 卷积路径 self.interaction = BidirectionalInteractionModule(dim) # 双向交互模块 self.norm1 = nn.LayerNorm(dim) self.norm2 = nn.LayerNorm(dim) self.ffn = FeedForwardNetwork(dim) # 前馈网络 def forward(self, x): # 路径并行处理 attn_feat = self.attn_path(x) conv_feat = self.conv_path(x) # 双向特征交互 attn_feat, conv_feat = self.interaction(attn_feat, conv_feat) # 特征合并与归一化 (公式2简化表示) combined = self.norm1(torch.cat([x, attn_feat, conv_feat], dim=-1)) # 前馈网络与残差连接 (公式3简化表示) output = self.ffn(combined) + combined return output4.2 双向特征交互模块的精妙之处
这是让两个路径“对话”的关键。该模块包含通道交互和空间交互两部分。
- 通道交互:受SENet启发,我们使用全局平均池化将卷积路径输出的特征图
C_conv在空间维度上压缩,得到一个通道描述向量。这个向量经过两个全连接层和非线性激活(如GELU),生成一个通道权重向量,然后通过Sigmoid函数归一化到[0,1]。这个权重向量会与注意力路径的特征C_attn进行逐通道乘法,从而让注意力路径知道“应该更关注哪些特征通道是从卷积路径看来重要的”。 - 空间交互:类似地,我们也从注意力路径生成一个空间权重图,用于调制卷积路径的特征。这相当于告诉卷积网络:“在空间的这些位置上,全局上下文信息认为应该给予更多关注”。
这种设计使得局部特征和全局特征不再是简单的拼接或相加,而是进行了自适应地、有选择性地增强与融合。
4.3 多尺度特征融合与解码
经过多个混合Transformer块后,我们得到了不同深度的特征图(通常有4个尺度,下采样率分别为4, 8, 16, 32倍)。为了进行最终的情感分类(正面/负面),我们需要融合这些多尺度特征。
我们设计了一个多头注意力解码器来进行融合。具体步骤:
- 将不同尺度的特征图上采样到相同的分辨率(例如,与最精细的特征图大小一致)。
- 将这些特征沿通道维度拼接。
- 使用一个轻量的卷积层初步融合。
- 关键步骤:将融合后的特征沿通道维度均匀分成N组(N等于尺度数,例如4)。对每一组特征,我们将其视为一个“头”,并在这个头上应用自注意力机制。这样,每个“头”可以专注于学习如何从某个特定尺度特征中提取最有用的信息,并与其他“头”进行交互。
- 最后,将所有“头”的输出再次融合,并通过一个全连接层映射到分类标签(如正面/负面概率)。
这种基于注意力的融合方式,比简单的求和或拼接更能动态地权衡不同尺度特征的重要性。
4.4 损失函数设计:应对不平衡数据的技巧
我们使用二元交叉熵损失作为主要损失函数。但直接使用标准的BCE在严重不平衡的数据上会导致模型偏向多数类。为此,我们引入了“在线难例挖掘”策略。
具体做法是:在计算损失时,我们不是对所有样本一视同仁,而是只对一部分“难”的样本(即模型当前预测错误的样本)和一部分“易”的样本(预测正确的样本)计算损失,并且保持难例和易例的比例(例如1:3)。这迫使模型在训练过程中持续关注那些它还没学会的“难点”样本,而不是一直“刷”已经会了的简单样本。这对于提升模型在少数类(如负面评论)上的识别能力至关重要。
我们的总损失函数由三部分加权组成:L_total = L_prob + α * L_binary + β * L_threshold其中,L_prob是概率图损失,L_binary是二值化图损失(用于辅助训练,使边界更清晰),L_threshold是阈值图损失。在我们的设置中,α=1.0, β=10.0,给予阈值图更大的权重,以学习更精确的文本区域边界(虽然本项目是分类任务,但此设计灵感来源于更复杂的文本检测任务,增强了特征的判别性)。
5. GSK超参数优化实战与模型训练
有了好的架构,还需要好的“调校”。我们使用GSK算法来优化一组关键超参数。
5.1 定义超参数搜索空间
我们选取了以下对模型性能影响最大的超参数进行优化:
learning_rate: 学习率,范围[1e-5, 1e-3](对数尺度)。batch_size: 批大小,在[16, 32, 64]中离散选择。transformer_layers: Transformer块层数,在[2, 4, 6]中选择。num_heads: 注意力头数,在[4, 8]中选择。interaction_ratio: 交互模块中通道压缩的比例,范围[0.1, 0.5]。ffn_expansion: 前馈网络中间层的扩展倍数,范围[2, 4]。
5.2 GSK优化过程实现
GSK算法模拟了人群的知识获取与分享。我们将每个超参数组合视为一个“个体”,其“适应度”是在验证集上的准确率。
- 初始化:随机生成一个包含N个个体的种群(例如N=50)。每个个体就是一个超参数组合。
- 划分阶段:根据公式
d_junior = D * (1 - G/Gen)^k动态划分每个个体的“知识维度”为初级和高级两部分。其中D是总超参数维度,G是当前迭代数,Gen是总迭代数,k是知识率(我们设为2)。在迭代初期,个体更多维度处于“初级”探索阶段;随着迭代进行,更多维度转向“高级”利用阶段。 - 初级获取-分享阶段:对于个体的“初级”维度,它向种群中邻近的个体(如前一个和后一个)以及一个随机个体学习。如果自身适应度差,就向好的个体靠近;如果自身适应度好,就尝试去“教导”随机个体。这个过程增加了探索的随机性。
- 高级获取-分享阶段:对于个体的“高级”维度,学习对象变成了整个种群中划分出的“最优”、“中等”和“最差”群体。个体会向“最优-最差”的差异方向学习,并结合“中等”群体的信息进行调整。这个过程侧重于利用已知的优秀经验进行精细开发。
- 迭代与选择:每一代结束后,评估新生成个体的适应度,并与父代个体进行比较,保留优秀的个体进入下一代。重复步骤2-5,直到达到最大迭代次数(如100代)。
实操心得:GSK中的知识比率kr是一个关键参数,控制了个体有多大比例的知识维度会参与更新。我们将其设置为一个较高的值(如0.8),以保证充分的搜索。同时,为了避免早熟收敛,我们引入了小概率的变异操作,即对新一代个体中的某些维度进行微小随机扰动。
5.3 训练流程与关键技巧
在GSK找到一组较优超参数后,我们使用该配置进行最终模型的训练。
- 数据划分:将每个数据集按7:1:2的比例划分为训练集、验证集和测试集。确保划分时进行分层抽样,以保持各类别比例一致。
- 优化器与调度器:使用AdamW优化器(比Adam权重衰减更稳定),并配合带热重启的余弦退火学习率调度器。这能让学习率在训练中周期性下降和重启,有助于跳出局部最优。
- 早停策略:监控验证集损失,如果连续10个epoch没有下降,则停止训练,并恢复验证损失最低的模型参数。
- 梯度裁剪:为了防止训练RNN/Transformer类模型时常见的梯度爆炸问题,设置梯度裁剪阈值为1.0。
踩坑记录:最初我们使用了过大的批大小(如128),虽然加快了训练速度,但模型泛化能力下降,在测试集上的准确率波动很大。将批大小降至32后,模型收敛更稳定,最终性能也更好。这符合深度学习中的一个经验:较小的批大小有时能带来更好的泛化性能,因为它引入了更多的梯度噪声,起到了正则化的作用。
6. 实验结果分析与模型对比
我们在12个亚马逊产品类别的评论数据集上进行了全面的实验。评价指标包括准确率、精确率、召回率和F1分数。为了公平对比,所有基线模型(MLP, SVM, CNN, LSTM等)都在相同的数据集和相同的训练/测试划分下进行复现和评估。
6.1 性能对比一览
下表展示了我们的DPTN+GSK模型与多个基线模型在“电子产品”类别数据集上的综合性能对比(数值为百分比):
| 模型 | 准确率 | 精确率 | 召回率 | F1分数 |
|---|---|---|---|---|
| MLP | 82.1 | 84.3 | 84.0 | 84.2 |
| SVM | 81.5 | 84.0 | 84.5 | 84.0 |
| CNN | 82.0 | 86.2 | 86.0 | 84.0 |
| LSTM | 85.8 | 84.1 | 86.3 | 85.1 |
| DPTN (Ours) | 96.2 | 95.1 | 95.8 | 94.4 |
结果分析:
- 全面领先:我们的模型在四项核心指标上均显著优于所有基线模型,尤其是在准确率上提升了超过10个百分点,这证明了双路径架构和GSK优化的有效性。
- 处理不平衡数据的能力:召回率和F1分数的提升尤为关键。在数据不平衡的场景下,单纯的高准确率可能意味着模型只是学会了预测多数类。我们的模型在召回率(识别出所有正例的能力)和F1分数(精确率与召回率的调和平均)上的优异表现,说明它较好地缓解了类别不平衡问题,对少数类(负面评论)也有了更强的识别能力。
- 与传统深度学习模型对比:相比单一的CNN或LSTM,DPTN融合了二者的优势。CNN的局部特征提取能力与LSTM(或Transformer)的序列建模能力相结合,产生了“1+1>2”的效果。
6.2 消融实验:每个组件贡献了多少?
为了验证DPTN中各个组件的必要性,我们进行了消融实验:
- 仅卷积路径:模型退化为一个深层的CNN。准确率下降至约88%,召回率下降明显,说明模型难以把握长距离情感依赖。
- 仅注意力路径:模型退化为标准Transformer。准确率约为90%,但对一些依赖局部固定表达的讽刺句识别不佳(如“真是个好‘惊喜’啊”,模型可能更关注“好”而忽略引号的讽刺意味)。
- 双路径无交互:将CNN和Transformer的输出简单拼接后分类。准确率提升至92%,但F1分数提升有限,说明简单的特征堆叠未能实现深度互补。
- 双路径有交互,但使用随机搜索调参:准确率约为93.5%,低于GSK优化后的结果,证明了自动化超参数优化的重要性。
- 完整DPTN+GSK:达到最佳性能95%+。这证实了并行双路径设计、双向特征交互和GSK超参数优化三者缺一不可。
6.3 错误分析与案例研究
即使达到了95%的准确率,仍有5%的错误分类。我们人工分析了这些错误样本,主要分为以下几类:
- 高度依赖领域知识的评论:例如,“这个电源适配器的纹波系数有点高,导致我的音频设备有底噪”。这类评论包含专业术语,模型缺乏相应的背景知识,难以判断其情感倾向(实际上是负面)。
- 复杂讽刺与反语:例如,“等了三个月才发货,这效率真是没谁了,给个赞吧”。模型虽然能捕捉到“等三个月”的负面性和“给个赞”的正面性,但难以准确推断出整体的讽刺性负面情感。
- 对比型评论:例如,“相比我之前用的XX品牌,这个便宜是便宜,但做工差太多了”。评论中同时包含正面(便宜)和负面(做工差)信息,且通过对比强调负面,模型有时会错误地将其归为中性或轻微正面。
- 极端简短的模糊评论:例如,“还行。”、“就那样。”。这类评论缺乏足够的信息量,人类判断也有歧义,模型预测具有随机性。
应对策略:对于第1类,可以考虑引入领域知识图谱或产品属性词典。对于第2、3类,可以尝试引入更强大的预训练语言模型(如更大规模的BERT变体)作为基础,或者构建针对讽刺和对比句式的专项训练数据。对于第4类,在实际应用中,可以设置一个置信度阈值,对于模型预测置信度低的样本,交由人工审核。
7. 部署考量与未来优化方向
将研究模型转化为实际可用的服务,还需要考虑工程实践中的问题。
7.1 模型轻量化与加速
完整的DPTN模型参数量较大,推理速度可能无法满足实时分析的需求(如每秒处理上千条评论)。可以考虑以下优化:
- 知识蒸馏:训练一个轻量化的学生模型(如小型TextCNN或LSTM),用训练好的DPTN模型作为教师,去“教导”学生模型,使其在损失少量精度的情况下大幅提升速度。
- 模型剪枝与量化:剪枝去除网络中不重要的连接,量化将模型权重从FP32转换为INT8,可以显著减少模型体积和提升推理速度。许多推理框架(如TensorRT, ONNX Runtime)对此有良好支持。
- 使用更高效的注意力机制:可以尝试替换标准的多头自注意力为线性注意力、稀疏注意力等变体,以降低计算复杂度。
7.2 持续学习与领域适配
一个在“电子产品”评论上训练好的模型,直接用于“美妆”或“食品”评论,性能可能会下降。这就需要模型具备一定的持续学习或快速领域适配能力。
- Adapter模块:在预训练的DPTN主干网络中加入轻量化的Adapter层。当迁移到新领域时,只训练这些Adapter层,冻结主干网络参数。这样既能快速适配,又不会遗忘旧知识。
- 提示学习:在输入评论前添加可学习的“提示词”向量,通过微调这些提示向量来引导模型适应新领域的语言风格和情感表达方式。
7.3 可解释性增强
对于商业应用,仅仅给出“正面”或“负面”的标签是不够的,还需要知道“为什么”。未来可以集成可解释性AI技术:
- 注意力可视化:展示模型在做出判断时,最关注评论中的哪些词或短语。这能直观地检验模型是否抓住了关键情感词。
- LIME或SHAP:使用局部可解释模型,为每个输入特征(词)生成一个重要性分数,解释该词对最终预测结果的贡献度。
这个项目从构思到实现,最大的体会是,在深度学习时代,架构的创新与精心的优化同等重要。双路径设计提供了一个强大的特征提取框架,而GSK优化则像一位经验丰富的“老师傅”,帮我们把这个框架的潜力充分挖掘出来。在实际业务中落地这样一个模型,还需要在性能、速度和可解释性之间做出权衡。目前,我们正在尝试将知识蒸馏技术应用到该模型上,目标是得到一个精度损失在1%以内,但推理速度提升5倍以上的轻量版本,以期能部署到资源更受限的边缘设备上,实现更实时的情感分析服务。