摘要:随着全球互联网的迅猛发展,消费者在各类外卖平台上分享外卖商品及服务的体验。他们通过文字评论来表达自身的情感与观点,因次产生的数据量非常庞大,并且其传播速度快。这些外卖评论的情感倾向,对于外卖平台和商家来说,有着重要的应用价值。传统的情感分析方式多依靠词典或者规则来判定文本情感倾向。在 Python 环境下,通过构建复杂的神经网络架构,如使用 TensorFlow、PyTorch 等深度学习框架,深度学习模型能够捕捉文本中的深层情感信息,从而更精准地识别外卖评论中的情感倾向。所以,构建一个基于 Python 的外卖平台评论情感分析模型意义重大。​本文深入研究基于 Python 的外卖平台评论情感分析模型,旨在从海量外卖评论数据中自动识别并分析消费者的情感倾向。在数据处理阶段,运用 Python 的 pandas 库对收集自外卖平台的用户评论、商家回复等数据进行清洗和预处理,确保数据的质量。在分析词语图和进行情感分类统计的可视化分析时,利用 Python 的 Matplotlib、Seaborn 等可视化库,清晰直观地呈现外卖评论数据的特征。在模型搭建方面,采用卷积神经网络(CNN)和长短时记忆网络(LSTM)这类深度学习模型,实现了对外卖评论的有效表征以及情感倾向的精确识别。

实验结果表明,基于 Python 构建的外卖平台评论情感分析模型,在准确率和效率上均优于传统情感分析方法。

关键词外卖评论数据分析;情感分析;CNN;LSTM;Python

研究背景

外卖行业蓬勃发展:在互联网与移动技术日新月异的当下,外卖行业迎来了前所未有的繁荣。智能手机的广泛普及以及便捷的移动支付手段,极大地改变了人们的餐饮消费习惯[1]。​

数据量爆发式增长:随着外卖平台的交易愈发频繁,平台积累了海量的交易数据。每一笔订单都蕴含着丰富的信息,包括用户信息、商家信息、订单详情以及用户评价等。这些数据犹如一座巨大的宝藏,等待深入挖掘。然而,海量数据也带来了挑战,如何从繁杂的数据中提取有价值的信息,成为外卖平台发展面临的关键问题[2]。​

用户需求多样化:消费者对于外卖服务的要求日益多样化,不再仅仅满足于基本的送餐上门。他们对菜品质量、配送速度、商家服务态度以及个性化推荐等方面有了更高期望。同时,不同区域、不同年龄段的用户需求差异显著,这要求外卖平台能够精准洞察用户需求,提供个性化服务[3]。​

课题研究意义

助力平台运营优化:通过对订单数据的深入分析,外卖平台可以精准掌握订单量在不同时段、不同区域的波动规律,合理安排配送人员与资源,提高配送效率,降低运营成本。基于用户行为分析,平台能够将用户细分,为不同用户群体制定个性化营销策略,提升用户粘性与忠诚度[4]。​

提升用户体验:借助情感分析算法对用户评价数据的挖掘,平台可以了解用户对商家菜品、配送服务等方面的满意度,及时发现问题并加以改进。为用户提供更符合其口味与需求的菜品推荐,优化搜索与筛选功能,让用户能够更便捷地找到心仪的外卖,从而显著提升用户体验[5]。​

促进商家发展:对于商家而言,数据分析结果有助于其了解自身在菜品质量、价格定位、服务水平等方面的优势与不足,进而有针对性地进行菜品优化、服务改进,提升竞争力。平台根据数据分析为商家提供精准的营销建议,帮助商家更好地拓展市场。​

本文研究内容

本文利用收集到数据,对数据进行清洗和预处理工作,利用该数据将构建的卷积神经网络(CNN)和长短期记忆网络(LSTM)模型进行了训练。本文具体结构如下。

第一章是前言,介绍外卖平台数据分析和可视化研究的背景、目的、意义,并分析当前国内外外卖平台数据分析和可视化研究的现状,阐述本文的结构。

第二章对外卖评论情感识别模型研究所涉及到到的关键技术进行介绍,介绍了卷积神经网络、长短期记忆网络、TensorFlow。

第三章数据的处理,重点叙述了外卖评论情感数据的收集与预处理。

第四是模型的实现,重点介绍了卷积神经网络模型的和长短期记忆网络模型的构建。

第五章是模型指标的评估对比,对比了卷积神经网络模型的和长短期记忆网络模型的的准确度、召回值和F1值。

第六章是结论,对外卖平台数据分析和可视化研究课题过程进行总结,展望未来的研究方向。

卷积神经网络(CNN)介绍

卷积神经网络(Convolutional Neural Networks,CNN),卷积神经网络(Convolutional Neural Networks,CNN)是一种具备深度结构的前馈神经网络,其核心在于卷积计算,是深度学习领域中的一项重要技术。CNN具有强大的表征学习能力,通过其特有的阶层结构,可以对输入信息进行平移不变分类[14]。CNN的工作原理主要依赖于其卷积层[11-13]。这些卷积层内置了一系列卷积核,每一个卷积核都负责处理输入图像的一部分区域,我们称之为“感受野”。卷积核在图像上滑动,计算感受野内的像素值,并将结果输出到下一层。这样,随着网络层数的加深,每一层都能从图像中提取到不同级别的特征,从而构建出一个能够全面描述图像特征的层次结构[14]

除了卷积层,CNN还包含了池化层。池化层的主要作用是减少计算量,同时保留图像的主要特征。它通过汇总每个感受野中的像素值,使得网络能够更好地捕捉图像的结构信息,进一步提升了特征提取的效果。

最后,CNN通过全连接层将卷积层和池化层提取的特征进行整合。全连接层中的每个神经元都与前一层中的所有神经元相连,从而实现了特征的全局连接。这样,CNN就能够将提取的特征映射到具体的类别中,完成图像的分类或回归任务。

在结构上,CNN通常由输入层、多个卷积层与池化层的组合、以及全连接层和输出层构成。其中,卷积层与池化层之间采用局部连接的方式,有效降低了网络的复杂度;而全连接层则负责将局部特征整合为全局特征,完成最终的分类或回归任务[14-15]。神经网络CNN结构示意图如下2-1所示。

CNN的应用领域极为广泛。最初,它主要用于图像识别领域,如手写数字识别、人脸识别等。随着技术的不断发展,CNN已经扩展到目标检测、图像分割、视频分析等多个领域。在目标检测中,CNN能够准确地识别出图像中的目标对象并标注其位置;在图像分割中,它能够将图像划分为具有相似特征的多个区域;而在视频分析中,CNN则能够实现对视频内容的自动理解和分析。此外,CNN在自然语言处理领域也展现出了强大的潜力,如文本分类、情感分析等问题中都有广泛的应用[16]

外卖评论情感数据的收集

外卖平台如美团等,他们是外卖评论产生的主要阵地。在这些平台上,用户们每天都会分享和创造大量的文字、图片和视频内容,这些内容蕴含着丰富的情感信息,为本次进行情感分析提供了丰富的素材。

在数据收集的过程中,首先需要明确我们的收集目标。这可以是对某个特定事件的舆论反应,也可以是对某个产品或品牌的用户评价。只有明确了目标,我们才能更有针对性地收集数据,提高数据的利用价值。

为了实现这一目标,可以采用多种数据收集方式。其中,爬虫技术是一种常见且有效的方法。通过模拟人类访问网站的行为,爬虫能够自动抓取网页上的信息,包括用户发布的文本、图片和视频等。这种方式可以快速地获取大量的数据,但要确保数据的合法性和合规性。

另一种数据收集方式是使用API接口。许多社交媒体平台都提供了API接口,允许开发者通过编程的方式获取平台上的数据。这种方式相比爬虫技术更为正规和稳定,且通常能够获取到更为详细和全面的数据。

外卖评论情感数据的预处理

以某次话题评论数据收集为例,得到了大量的原始数据,但这些数据往往混杂着噪音、无关信息和格式上的千差万别。为了确保这些数据能够被有效地用于情感分析,必须进行一系列的数据预处理操作。

首先,进行文本清洗。在这一步中,需要专注于去除文本中的无关字符、特殊符号和URL链接等。这些元素在原始数据中可能占据了相当大的比例,但它们对于情感分析来说并没有实际贡献,甚至可能成为干扰因素。通过清洗,才能确保了数据的纯净度,为后续的分析工作打下了坚实的基础。

紧接着,进行了分词处理。由于中文的词语之间没有明确的分隔符,因此分词成为了舆情数据预处理中不可或缺的一步。利用现有的分词工具或算法,将连续的文本切分成独立的词汇单元。这样,每个词汇都能够被模型单独识别和处理,从而提高了情感分析的准确性。

接下来,去除停用词。这些停用词通常是出现频率极高但对情感分析没有实际意义的词汇,如“的”、“了”等。它们的存在会增加数据的稀疏性,降低模型的效率。通过去除这些停用词,就可以进一步精炼了数据,使其更加符合情感分析的需求。

然后,进行了词性标注。这一步是为了给文本中的每个词汇标注其词性,如名词、动词、形容词等。词性标注不仅可以帮助模型更好地理解文本的结构和语义信息,还能够为后续的文本分类和情感分析提供有力的支持。关键代码如下:

 #外卖评论文本数据清洗、中文分词、去掉停用词,结合情感词典提取外卖评论文本关键词

 def Xitxtcon(self):
        #list=self._ShuiSQL.GethQtxtList("and  txtconx=''  and del='0'")
        list = self._ShuiSQL.GethQtxtList("")
        #list = self._ShuiSQL.GethQtxtList(" and  txtconkeys like '%开心%'  and del='0'  ")
        for row in list:
            id = row[0]
            #外卖评论文本
            txtcon= row[1]
            #清洗外卖评论文本
            txtconx = self.GShuiCha(txtcon).replace("","")
            #中文分词
            txtconci = self.GShuiWord(txtconx)
            txtconci_f = txtconci.split()  # 读取分词列
            #提取情感词
            txtstate=row[3]
            _shuikey = ""
            if txtstate=="积极":
                _shuikey = self.GShuiDaLianQGGood()
            if txtstate == "消极":
                _shuikey = self.GShuiDaLianQGBad()
            txtconkeys = ''  # 输出结果为shustr
            for objShuiCi in txtconci_f:  # 读取关键词
                if objShuiCi in _shuikey:
                    if objShuiCi != '\t':
                        txtconkeys += objShuiCi
                        txtconkeys += ""

            ctxtcon = {
"id": id,
"txtconx": txtconx,
"txtconci": txtconci,
"txtconkeys": txtconkeys,
            }
            self._ShuiSQL.UpdatehQtxt(ctxtcon)
            print("外卖评论文本数据内容为:" + txtcon + "的样本数据处理中")

外卖评论文本表示

在外卖评论情感识别中,文本表示是一个至关重要的环节。它涉及到将原始的文本数据转换为模型可以处理的数值形式,从而有效地提取出文本中的情感信息。以下是几种常用的文本表示方法及其在外卖评论情感识别模型中的应用举例:

1. 词袋模型(Bag of Words)

词袋模型是一种简单的文本表示方法,它将文本视为一系列词的集合,而不考虑词序。每个词在模型中都被表示为一个独立的特征,而文本则是由这些特征组成的向量。在外卖评论情感识别中,我们可以使用词袋模型将文本转换为词频向量,然后利用机器学习算法进行分类。例如,对于一条关于某产品的评论,我们可以统计其中正面词汇和负面词汇的出现频率,从而判断评论的情感倾向。

2. TF-IDF 表示

TF-IDF(词频-逆文档频率)是一种基于统计的文本表示方法。它考虑了词在文档中的出现频率(TF)以及词在整个语料库中的分布(IDF)。TF-IDF 值越高,说明该词在文档中越重要。在外卖评论情感识别中,我们可以使用 TF-IDF 表示法来提取文本中的关键信息。例如,通过计算 TF-IDF 值,我们可以确定哪些词或短语在特定话题下具有较高的重要性,从而帮助识别情感倾向。

3. 词嵌入(Word Embeddings)

词嵌入是一种将词转换为连续向量表示的方法,如 Word2Vec、GloVe 和 FastText 等。这些向量能够捕捉词之间的语义和语法关系,使得相似的词在向量空间中具有相近的表示。在外卖评论情感识别中,我们可以利用预训练的词嵌入模型将文本中的每个词转换为向量表示,然后利用深度学习模型进行情感分析。这种方法能够充分利用文本的语义信息,提高情感识别的准确性。

4. 句子嵌入或文档嵌入

除了词级别的嵌入,我们还可以将整个句子或文档转换为向量表示。这通常通过深度学习模型(如 LSTM、GRU 或 Transformer)实现,这些模型能够捕捉文本中的长期依赖关系和上下文信息。在外卖评论情感识别中,我们可以使用这些模型将文本转换为句子或文档嵌入,然后利用这些嵌入进行情感分类。这种方法能够更好地捕捉文本的整体意义,提高情感识别的性能。

外卖评论数据分析及可视化

外卖评论词云图分析

读取收集的外卖评论数据,通过Counter方法统计外卖评论关键词的数量绘制得出外卖评论词云图如下所示。

外卖评论文本按情感分类统计分析

  读取收集的外卖评论文本按情感分类统计数据,绘制柱状图如下所示。

通过外卖评论文本按情感分类统计图可以得出,积极情感分析积极分类占比为 52.32%,超过了一半。这表明在收集的外卖评论文本数据中,大多数消费者对外卖服务、餐品等方面持有较为满意、认可的态度。说明外卖商家在整体上能够满足消费者的需求,在餐品质量、配送服务、包装等方面有较好的表现,从而使得消费者给出积极评价。消极情感分析消极分类占比为 47.68%,虽然略低于积极分类,但占比也相当高。这反映出仍有相当一部分消费者对外卖体验存在不满,可能在餐品口味、配送速度、服务态度等方面存在问题,导致他们给出负面评价。商家和平台需要重视这些消极评价,从中找出问题根源,例如是菜品不合口味、配送延迟,还是服务态度欠佳等,进而有针对性地进行改进。

长短时记忆网络(LSTM)模型的构建

作为循环神经网络(RNN)的一种变体,LSTM通过引入门控机制有效地解决了RNN在处理长序列时面临的梯度消失和梯度爆炸问题。在外卖评论情感识别任务中,LSTM能够捕捉文本中的上下文信息,提高情感识别的准确性。

(1)在构建LSTM模型时,LSTM层是负责捕捉文本序列中长期依赖关系的关键。构建LSTM层有以下几个步骤:

 确定LSTM层的参数:我先确定LSTM层的参数,包括LSTM单元的数量(即隐藏层的维度)、是否使用双向LSTM等。LSTM单元的数量通常根据任务的复杂性和数据规模来确定,更多的单元可能能够捕捉更复杂的文本特征,但也可能增加过拟合的风险。双向LSTM能够同时考虑序列的前后文信息,对于某些任务可能更有效。

输入序列的处理:接下来,我将预处理后的文本数据转换为适合LSTM层处理的序列形式。对于每个文本样本,我都将其转换为一个词嵌入向量的序列,其中每个向量对应文本中的一个词。这些向量将作为LSTM层的输入。

LSTM单元的迭代处理:在LSTM层中,每个LSTM单元都会按照时间步的顺序对输入序列进行迭代处理。在每个时间步,LSTM单元会接收当前的词嵌入向量和上一个时间步的隐藏状态作为输入。它使用这些输入来计算新的隐藏状态和细胞状态,并输出一个当前时间步的隐藏向量。LSTM单元的核心在于其内部状态的更新机制。它使用门控结构(输入门、遗忘门和输出门)来控制信息的流动,使得模型能够选择性地保留或遗忘之前的信息,从而有效地捕捉序列中的长期依赖关系。

多层LSTM的堆叠:为了进一步提高模型的表示能力,我堆叠多个LSTM层来构建更深的网络结构。每个LSTM层都会接收上一层的输出作为输入,并输出自己的隐藏状态。通过堆叠多层LSTM,模型能够学习更复杂的文本特征,并更好地捕捉序列中的信息。

输出序列的处理:经过LSTM层的处理后,我得到了一个隐藏向量序列,其中每个向量对应输入序列中的一个时间步。这些向量包含了文本中的上下文信息和情感特征,是后续情感分类的基础。

(2)在LSTM层处理完输入序列后,我通过全连接层将隐藏向量转换为最终的情感分类结果。全连接层在神经网络中起到了将前一层的输出映射到最终输出空间的作用。在情感分类任务中,全连接层负责将LSTM层的输出转换为情感类别的概率分布。

 隐藏向量的选择:我从LSTM层的输出中选择一个或多个隐藏向量作为情感分类的输入。方法是只使用最后一个时间步的隐藏向量,因为它包含了整个序列的信息,并且对于许多情感分类任务来说已经足够。然而,在某些情况下,我需要利用所有时间步的输出,通过池化或其他方式整合这些信息以得到更全面的文本表示。

全连接层的构建:接下来,我构建一个全连接层来处理选定的隐藏向量。全连接层中的每个神经元都与前一层的所有神经元相连,通过权重矩阵进行线性变换,并加上偏置项。然后,使用激活函数(如ReLU或sigmoid)来增加模型的非线性能力。

情感类别的转换:经过全连接层的处理后,我得到了一个特征向量,它包含了用于情感分类的关键信息。为了将这个特征向量转换为具体的情感类别标签,我在最后一层全连接层之后添加一个softmax激活函数。softmax函数将特征向量的每个元素转换为概率值,这些概率值之和为1,并且每个概率值对应一个情感类别。这样,我就可以根据输出概率的最大值来确定文本所属的情感类别。关键代码如下:

# 训练预测模型(LSTM)
    def getDongModelLSTM(self, train_x, test_x,train_y,  test_y):
        # 创建模型
        model = Sequential()

        # LSTM神经网络
        # 隐藏层100
        model.add(layers.LSTM(units=100, activation='relu', return_sequences=True, input_shape=(1, 100)))
        # 隐藏层100
        model.add(layers.LSTM(units=100, activation='relu'))
        model.add(Dense(1))

        # 编译模型
        # 使用高效的ADAM优化算法以及优化的最小均方误差损失函数
        model.compile(loss='mean_squared_error', optimizer=Adam())
        # 训练模型
        train_y = np.array(train_y)
        test_y = np.array(test_y)
        train_x = np.reshape(train_x, (train_x.shape[0], 1, 100))
        test_x = np.reshape(test_x, (test_x.shape[0], 1, 100))

        history = model.fit(train_x, train_y, epochs=100, batch_size=64,
                            validation_data=(test_x, test_y), verbose=2)
        # 保存模型
        model.save(os.path.join("Data", "DongModelLSTM" + ".h5"))

模型的精确度指标对比

在外卖评论情感识别模型的评估中,准确率(Accuracy)是一个关键指标,用于衡量模型正确分类样本的能力。准确率是正确分类的样本数与总样本数之比。

具体计算步骤如下:

混淆矩阵的构建:首先,我们需要构建一个混淆矩阵(Confusion Matrix),它是一个表格,用于记录模型对各个类别的分类结果。混淆矩阵的行通常代表实际的情感标签(真实值),列代表模型预测的情感标签(预测值)。对于情感识别任务,通常会有三个类别:正面、负面和中性(或者根据具体任务可能有所不同)。其中混淆矩阵截图如下:

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐