python案例:基于python 神经网络cnn和LDA主题分析的旅游景点满意度分析
1.绪论
1.1研究背景与意义
1.1.1研究背景
随着旅游业的快速发展,满意度分析成为评估旅游景点质量和提升游客体验的重要手段。作为中国的旅游城市之一,其旅游景点吸引了大量游客。然而,如何科学评估和提升旅游景点的满意度,成为当前旅游管理和发展中的重要问题。
传统的满意度分析方法主要依赖于人工调查和统计分析,这种方法存在着调查样本有限、统计结果不够客观等问题。因此,基于自然语言处理技术的情感分析成为了一种新的研究方法,能够从大量的网络评论中挖掘出游客的情感倾向,对景点的满意度进行客观评估。同时,利用先进的技术如 CNN 算法、LDA 主题模型和 jieba 分词等,结合数据采集工具 requests 和可视化工具 Matplotlib,可以对旅游景点的满意度进行深入分析,帮助管理者更好地了解游客反馈和情感倾向,进而提升景点服务质量和游客满意度。
因此,结合Python编程技术,利用情感分析和自然语言处理技术对旅游景点的满意度进行研究具有重要的理论和实践意义。这不仅能够为旅游景点的管理和发展提供科学依据,也可以为基于自然语言处理技术的旅游满意度分析提供新的方法和实践案例。
1.2.2研究意义
本研究基于Python的旅游景点满意度分析具有重要的研究意义和实践价值。首先,通过运用Python编程技术,结合 CNN 算法、LDA 主题模型,本研究为旅游景点提供了一种全新的评估方法,使得景点管理者和决策者能够更加客观地了解游客的感受和评价。其次,通过对旅游景点的满意度进行深入分析,可以帮助管理者发现景点的优势和不足之处,有针对性地提出改进措施。此外,本研究还为其他类似旅游目的地的满意度分析提供了借鉴和参考。最重要的是,通过科学地评估景点的满意度,可以为旅游业的可持续发展提供重要支撑,促进旅游业的健康发展。因此,本研究可促进旅游业的发展,提升景点管理水平。
1.2国内外研究现状
1.2.1国内研究现状
国内在旅游满意度分析领域已有多位专家做出了重要贡献。在此背景下,罗俊杰等提出了利用情感分析方法评价旅游者对景点的情感倾向的观点[1]。王国惠指出,情感分析可以帮助理解游客对景点的情感态度,从而为景点管理者提供改进和优化的方向[2]。同时,王雨欣在其研究中强调了情感分析与主题模型的结合应用,以挖掘出游客在旅游评论中所表达的情感倾向和主题特征[3]。此外,HATSADONG等提出自然语言处理技术在景区满意度分析中的重要性,他们提出,通过主题模型分析用户评论的主题分类,从而更加直观的获取评论文本中的有用信息,通过分别分析正面评论与负面评论主题,得到了游客重点关注的事项,对游客出行的旅游景点选择以及出行时间点提出了一些参考性建议[4]。在国内研究中,还有叶海燕等构建了基于卷积神经网络的特定目标文本情感分析模型(文本分析模型).根据情感差异分析特定目标文本序列,在输入层将文本特征矩阵作为卷积神经网络语言模型的输入数据,拼接成词性序列矩阵,加入dropout机制完成特定目标文本情感分类,确定文本中每个词的重要度信息,实现特定目标文本情感分析[5]。刘云霞等对景点满意度进行了深入研究,发现了景点管理中的问题并提出了改进措[6]。此外,徐惠娟,刘生敏等提出了利用Python进行文本挖掘和情感分析的方法[7]。李经龙,王海桃为旅游满意度分析提供了技术支持和实施路径[8]。综上所述,国内专家们在旅游满意度分析领域的研究中不断探索,提出了多种方法和观点,为我国旅游业的发展和景点管理提供了理论和实践指导。
1.2.2国外研究现状
在国外的旅游满意度分析领域,也有多位专家做出了重要贡献。Pizam第一次提出旅游满意度相关的概念开创了游客满意度研究的理论基础,游客对旅游地的期望和实地旅游体验相二者相比较之下的结果就是游客满意度,假如事先的期望值高于实地旅游体验,则游客是不满意的;否则游客是满意的,得出海滩、成本、环境、住宿饮食条件以及景区商业化程度等是影响满意度的主观因素[9]。Kim识别和评估游客在旅游评论中表达的情感倾向,研究强调了情感分析在理解游客满意度和不满意度方面的重要性,并指出了其在旅游管理中的潜在应用[10]。此外,AcharyaS等人探讨了旅游评论中情感词汇和否定词对满意度评价的影响,发现不同情感词汇和否定词的使用对最终评价结果有着显著影响,为深入理解旅游评论提供了新的视角[11]。在情感分析领域,提出了一种基于机器学习的情感分析模型,以提高对游客评论的情感倾向识别准确度和效率。他们的研究为情感分析技术的发展提供了新的方法和思路[12]。此外, Chiang-Ming Chen将情感分析与文本挖掘技术相结合,对旅游评论进行了主题建模和情感倾向分析以揭示游客对不同景点和服务的情感态度和满意度水平[13]。最后,Qingqing Wang提出了一种基于CNN-BGRU的混合神经网络模型来解决精确分类问题。该算法首先利用卷积神经网络提取输入文本向量的局部特征,然后利用BGRU获取该层前后的信息,进而得到全局特征。最后通过Softmax分类器得到情感分类结果[14]。这些国外专家的研究为旅游满意度分析提供了丰富的理论和方法,为我国旅游业的发展和景点管理提供了借鉴和启示。
1.3主要研究内容与技术路线
1.3.1研究内容
基于Python的旅游景点满意度分析的主要研究方法如下:
(1)文本预处理:对旅游景点的评论文本进行清洗和分词处理,去除无关字符和标点符号,利用 jieba 库进行中文分词操作。
(2)构建情感词典:建立旅游景点评论的情感词典,筛选出其中包含有消极情感的词和积极情感词。
(3)情感分析:对表格中评论利用CNN算法分析,找到里面的情感倾向,把词汇分为积极评论与消极评论两种类型来研究。
(4)主题分析:将LDA主题模型运用进评论中,找出其中不容易发现的主题信息,帮助理解评论的关键话题。
(5)可视化展示:利用 Matplotlib 进行可视化展示,绘制情感分析结果图表和主题分布图,直观呈现评论情感和主题分析结果。
(6)词云展示:利用 jieba 分词工具提取评论中的积极和消极关键词,制作词云展示,以直观方式展示评论中的关键词信息。
1.3.2技术路线
本次研究拟采用pycharm开发平台,选择python作为编程语言,旅游景点满意度分析的技术路线如下:使用 requests 库进行数据采集,获取凤凰古城旅游景点的评论。运用python中的jieba库来将评论内容进行分词和去停用词等文本预处理步骤。对评论利用CNN算法分析,找到里面的情感倾向。将LDA主题模型运用进文本中,找出其中不容易发现的主题信息。采用Matplotlib 来进行可视化,得出主题分布表以及情感分析结果。结合 jieba 分词工具,制作消极和积极词云,直观展示评论情感和关键词信息。通过这一技术路线,可以全面分析旅游景点的满意度,为景点管理者提供深入洞察和决策支持。研究拟进行主要步骤如下流程如图 1-1所示:
图 1-1 主要步骤
1.4创新之处
本文创新之处如下所示:
(1)数据处理创新:LDA主题模型揭示了游客关注的焦点,有助于景点管理。同时,jieba分词配合词云技术,直观呈现了评论中情感色彩,助力于优化服务策略。整体设计实现了数据驱动的精细化运营决策。
(2)模型创新:采用Python的强大支持,结合深度学习的CNN(卷积神经网络)算法,对海量游客评论进行情感挖掘,实现了精准的情感分析,提高了评价理解的深度。
2.基本原理
2.1文本处理技术
旅游景点满意度分析是一个复杂的领域,其中文本处理技术可以用来分析游客对景点的评论、评价等文本信息,从而获取对旅游景点的满意度。在Python中,可以使用自然语言处理(NLP)库来进行文本处理和情感分析。
文本处理技术原理:
文本预处理、特征提取与表示、情感分析等是文本处理技术主要步骤。第一步进行文本预处理要经过去除停用词和词干提取以及去除标点符号。而第二步特征提取与表示,是使用词袋模型(Bag of Words)、TF-IDF(Term Frequency-Inverse Document Frequency)等方法转换成特征向量。情感分析是文本处理最后一步,要进行文本情感判断这当中就要运用到机器学习或深度学习技术,以此来推测游客的情绪态度。
词袋模型(Bag of Words):
词袋模型是根据文本中词语出现的频率来表示文本。第一步,创建文本词汇表,然后对每个文档进行词频统计,最终得到一个文档-词频的矩阵。假设有N个文档和M个词汇,则第i个文档中第j个词汇的词频可以表示为矩阵中的元素X[i, j]。词袋模型可用于文本分类、情感分析等任务。
TF-IDF方法(Term Frequency-Inverse Document Frequency):
TF-IDF是一种用于评估单词在文档集合或语料库中重要程度的统计方法。它由两部分组成:词频(TF)和逆文档频率(IDF)。TF表示某个词在文档出现的频率,而IDF表示包含这个词的文档频率的倒数的对数值。
2.2神经网络CNN模型基本原理
CNN(Convolutional Neural Network)是一种深度学习模型,特别适用于处理图像数据,但也可用于文本数据的情感分析等任务。其原理如下:
卷积层(Convolutional Layer):卷积操作通过滑动卷积核(filter)在输入数据上提取特征。
激活函数(Activation Function):通常在卷积层后会加上激活函数,如ReLU(Rectified Linear Unit),用于引入非线性。
池化层(Pooling Layer):池化操作用于降低特征图的维度,减少参数数量并提取主要特征。常用的池化方式为最大池化(Max Pooling).
全连接层(Fully Connected Layer):最终通过全连接层将提取的特征传递给输出层进行分类。
在情感分析任务中,CNN 模型会学习文本中的特征,识别评论中的情感倾向。通过不断调整卷积核参数和权重,最终实现对评论情感的准确预测。
3.景点评论数据处理及LDA主题分析
3.1数据准备
本次研究以凤凰古城景点为例,采集景点的评论信息,分为好评和差评,采集共2714条评论,其中好评2439条,差评275条。通过向指定 URL 发送 POST 请求来获取景点的评论数据,并将评论信息存储到 CSV 文件中。其中先请求头 headers 和 POST 请求的参数 request,包括评论相关的参数如页码、景点ID等。通过循环遍历页数,发送 POST 请求获取每一页的评论数据。每次请求后会暂停3秒以避免请求过于频繁。解析返回的 JSON 数据,提取评论相关信息如内容、地区、时间、用户名等。采集主要代码如图3-1所示:
图3-1 采集主要代码
将解析的评论信息以列表形式写入 CSV 文件中,每行对应一条评论数据。采集存储为csv结果如图3-2所示:
图3-2 采集存储为csv结果
数据采集部分结果如表3-1所示。
表3-1 采集结果
序号 | 评论 |
1 | 游览凤凰古城的时候,天空开始下雨,一开始是毛毛雨,再一会儿就下大了! |
2 | 人文与自然景观都不错,时尚的旅拍也随处可见。 |
3 | 凤凰古城位于湖南省湘西土家族苗族自治州的西南部。 |
4 | 凤凰古城是属于那种苗族少数民族的一种习俗。夜景超美,感觉是在古城一样 |
3.2数据预处理
3.2.1 文本清洗
在文本预处理阶段,通过使用drop_duplicates函数对原始数据进行去重操作。在代码中,根据内容这一列进行去重,并将去重后的结果重新赋值给新的DataFrame。这样可以确保每条内容的唯一性,避免出现重复的数据。积极评论去重前后结果如图3-3所示,去重前有2439条,去重后2371条,共有68条重复数据:
接下来,进行正则清洗的步骤。正则清洗主要是针对内容,去除除了中英文字符和数字以外的其他字符。具体实现通过使用正则表达式的方式,调用re.sub函数进行替换。用[^\u4e00-\u9fa5^a-z^A-Z^0-9^,.,。!:]这条表达式,将文全文中除了中英文字符、数字和部分标点符号(逗号、句号、感叹号、冒号)以外的字符都替换为空格,从而实现清洗效果,最后得到如表3-2的清洗结果。
表3-2 清洗结果(部分)
序号 | 清洗内容 |
1 | 游览, 凤凰古城, 的, 时候, ,, 天空, 开始, 下雨, ,, 一, 开始, 是, |
2 | 人文, 与, 自然景观, 都, 不错, ,, 时尚, 的, 旅拍, 也, 随处可见 |
3 | 凤凰古城, 位于, 湖南省, 湘西土家族苗族自治州, 的, 西南部 |
4 | 凤凰古城, 是, 属于, 那种, 苗族, 少数民族, 的, 一种, 习俗, 。, 夜景, |
3.2.2 文本分词和停用词处理
图3-4 文本分词和停用词处理主要流程
如图3-4文本分词和停用词处理流程,使用 jieba 库对文本内容进行分词处理。将不为空的内容列取出,并转换为列表。对每一行文本进行分词操作,使用 jieba.lcut() 方法将文本分词为单词列表。将分词后的结果添加到 content_S 列表中。分词后结果如图3-5所示:
图3-5 文本分词后结果
将"停用词.txt"列表加载到文本中去除停用词。遍历文本内容列表,判断其中每个词在不在停用词列表里面,不在则保留,否则跳过。去停用词后的文本存储到 contents_clean 列表中,并将所有词存储到 all_words 列表中。将去除停用词后的文本内容存储到 DataFrame df_content 中,并保存为 Excel 文件 去除停用词后内容.xlsx。去停用词后结果如图3-6所示:
图3-6 去停用词后结果
3.2.3 词频统计
每条评论内容则采用jieba库来进行分词,对分词进行遍历并且结果列表,对每个词语进行词频汇总,其中的词汇以及词汇出现次数加到汇总里面,对其进行降序处理。筛选出与该主题相关的词语。对汇总结果可视化,运用词云图等图表进行分析,根据高频词语来了解内容的关键关注点和问题。
通过词频分析,可以了解内容的关注度和热度,找出内容被用最多的关键词,从而揭示出内容的主要关注点和议题。词频统计结果如图3-7所示,生成的积极词云和消极词云如图3-8和图3-9所示:
图3-7 词频统计结果
(1)积极词频分析
图3-8 积极词频结果
由积极词云图3-8所示可知:“夜景”等词频较高,显示了游客对景区和夜间景色的高度关注。许多游客对当地的“风景”、“文化”和“历史”给予了积极评价,表现出其独特的旅游吸引力。同时,“不错”、“值得”、“漂亮”等评价性词语频繁出现,表明游客对整体体验感到满意。然而,也有“商业化”一词出现,提示一些游客对于过度商业化有一定的负面看法。
此外,评论中频繁提到“性价比”、“推荐”、“景区”等,表明游客对旅游性价比和是否值得推荐有较高的关注。评论倾向于正面评价,认为凤凰古城是一个“美丽”、“有趣”的旅游胜地,尤其适合拍照、游玩和体验当地文化的游客。
- 消极词频分析
图3-9 消极词频结果
由消极词云图3-9可知:可以看到一些负面情绪的词汇频繁出现,负面评论也相对较为显著,尤其是“商业化”、“差评”、“不值”、“收费”和“垃圾”等词汇,这些词汇反映出游客对景区商业化和高消费的强烈不满,认为性价比不高。其次,关于服务的负面评价,如“服务态度”、“推销”和“客服”也表明游客对当地服务质量存在不满。此外,游客对“卫生”、“环境”和“管理”等方面也有批评,尤其是“脏乱差”和“污染”等词语的出现,凸显出环境卫生问题。消极词频高的词汇反映了一些游客在游览过程中遇到的问题和不满意,因此,建议凤凰古城在保持其文化魅力的同时,优化商业模式,改善服务质量和环境卫生,以提升游客的整体满意度和体验感。
3.3 LDA主题模型设计
3.3.1 数据预处理与特征提取
第一步:文本内数据经过分词处理与去除停用词两个步骤,得到数据。
第二步:创建词袋模型,将文本转化为词袋形式,为LDA模型准备输入数据。
第三步:对词袋采用TF-IDF模型进行加权处理,得到数据来训练LDA模型。主要代码如下图3-10所示:
图3-10 训练模型
3.3.2 LDA主题建模
第一步:将Gensim库中的LdaModel运用到LDA模型中去,设置主题数等参数。
第二步:计算困惑度和一致性评分,根据主题数的范围迭代训练LDA模型,计算困惑度和一致性评分,选择最佳主题数。
第三步:计算单词的先验分布,获取每个单词在不同主题下的分布概率。主要代码如图3-11所示。
图3-11 LDA模型
3.3.3 模型训练
第一步:使用PyLDAvis进行LDA主题模型的可视化,生成交互式HTML文件,展示主题之间的关联性和单词分布。
第二步:绘制困惑度和一致性曲线,通过曲线观察不同主题数下的模型性能表现,选择最优的主题数。
第三步:输出每个主题下的关键词,帮助理解每个主题所代表的内容和主题之间的区别,主题输出结果如图3-12所示。
图3-12 LDA模型关键词
3.4 LDA主题结果分析
一致性和困惑度分析曲线图是用来评估景点内容主题信度和效度的重要工具。通过一致性分析曲线,可以了解景点评论内部各项问题之间的一致性程度,而困惑度分析曲线则帮助我们评估内容的难度及区分度。一致性分析曲线曲线越接近1,表示评论内容内部各项问题之间的一致性越高说明内容的主题效果较高。由图3-13可知,积极评论最佳主题数是2,积极评论可以划分2个主题。
图3-13 一致性和困惑度曲线
根据最优主题数,使用IDA建模,生成IDA可视化效果,如下图3-14所示:
图3-14 可视化结果
积极评论的主题分析:
主题一关键词权重分布为“古城”(0.021)、“不错”(0.017)、“沱江”(0.014)、“凤凰古城”(0.013)、“夜景”(0.012);主题二突出“凤凰古城”(0.024)、“凤凰”(0.019)、“古城”(0.015)、“值得”(0.015)、“沱江”(0.012)。两大主题均聚焦古城自然景观与夜间体验,“夜景”“沱江”“晚上”高频出现,反映游客对灯光秀、江景游览关注度高;“值得”“不错”体现整体满意度较高。
主题差异显著:主题一强调感官体验,“景色”“特别”指向景观独特性;主题二突出文化价值认同,“古镇”“地方”隐含对历史建筑保护与地域特色的认可。游客评论隐含潜在问题:商业化相关词汇未进入高频词表,可能反映过度开发尚未成为主要负面感知;但“景点”“古镇”等泛化表述暗示文化展示深度不足。
建议:需强化沱江夜景配套服务,延长夜间消费场景;挖掘苗族文化元素,增加非遗互动体验;控制商业设施密度,避免同质化商铺影响古城风貌。
由图3-15可知,消极评论最佳主题数是7,消极评论可以划分7个主题。
图3-15 消极一致性和困惑度曲线
根据最优主题数,使用IDA建模,生成IDA可视化效果,如下图3-16所示:
图3-16 消极可视化结果
消极评论的主题分析:
LDA主题模型提取凤凰古城游客评论形成七类核心主题。主题0(权重前五:“凤凰”0.010、“小时”0.007、“景区”0.007、“携程”0.006、“消费”0.005)反映游客对景区服务时效性与平台消费的敏感;主题1(“携程”0.013、“酒店”0.010、“停车场”0.006)凸显住宿配套与票务管理痛点;主题2(“坐船”0.009、“推销”0.009、“宰客”0.006、“不值”0.006)揭示游船服务强制推销引发的体验争议;主题3(“商业化”0.011、“酒吧”0.007、“夜景”0.007)聚焦古城业态同质化现象;主题4(“演出”0.015、“酒吧”0.016、“没什么”0.006)暴露夜间娱乐内容单薄问题;主题5(“游船”0.011、“建议”0.011、“沱江”0.007)体现游客对沱江游览的优化期待;主题6(“门票”0.015、“沱江”0.012、“商业化”0.010)强调门票经济与景观原真性矛盾。
高频负面词汇集中主题2、3、6,“宰客”“不值”“商业化”重复出现,指向过度商业开发已实质性损害游客体验;“携程”“客服”跨主题分布,显示第三方平台服务质量影响整体满意度。
核心矛盾体现为:沱江游船等特色项目因强制消费降低口碑,夜间经济过度依赖酒吧业态削弱文化特色,门票管理粗放加剧商业化感知。
建议:改进需优先规范游船服务流程,建立商户黑名单制度;差异化开发苗族银饰锻造、巫傩文化展演等非遗体验项目;推行分时段门票与联票系统缓解拥挤压力;建立网络评论实时监测机制,针对“推销”“宰客”等高频负面词实施定向整改。
4.基于神经网络CNN算法的情感分析
4.1模型设计
基于神经网络的情感分析模型想要将文本序列转换为密集向量表示这其中得运用到嵌入层,提取特征是卷积层来负责,分类则是全连接层负责[15]。模型使用 Embedding 层将词汇映射到向量空间,通过 Conv1D 层捕获局部特征,MaxPooling1D 层提取最显著特征,Flatten 层将特征展平,Dense 层实现分类,输出层使用 softmax 激活函数。
模型具体包括一个Embedding层,用于将文本转换为300维的词嵌入向量表示;一个1维卷积层,其中包含128个卷积核,每个卷积核的大小为5,采用ReLU激活函数;一个MaxPooling1D层,用于下采样,降低特征维度;另一个1维卷积层,包含64个卷积核,每个卷积核的大小为5,同样采用ReLU激活函数; Flatten层用于展平输出,一层全连接的Dense层包含64个神经元,再连接到一个输出层,使用softmax激活函数输出分类概率。整个模型使用Adam优化器和交叉熵损失函数进行训练,标签进行了独热编码处理。模型流程图如图4-1所示。
图4-1 模型流程
4.2训练
在训练阶段,将处理后的文本数据转换为序列,使用 Tokenizer 对文本进行编码,通过 pad_sequences 填充序列到相同长度。将标签进行独热编码,定义并编译模型,将 fit方法加入模型中去,设置 epochs、batch_size 和验证集比例。具体为:epochs 设置为100,表示要对整个数据集进行100次迭代训练;batch_size 可以设定为32,表示每次训练传入模型的样本数为32;验证集比例可以设置为0.2,表示将20%的训练数据作为验证集用于验证模型的性能。训练完成后,得到神经网络模型。中间过程如图4-2所示。
图4-2 模型训练
4.3评估
通过模型预测得到分类结果,计算准确率作为性能评估指标。同时,利用 sklearn 提供的函数计算 ROC 曲线和 AUC 值,评估分类器性能则用ROC曲线;计算混淆矩阵并绘制热力图,帮助分析模型在不同类别上的分类效果。这些评估指标和可视化结果能够全面评价神经网络情感分析模型的表现。评估结果如图4-3和4-4所示。
图4-3模型评估
图4-4 模型评估
4.4模型训练结果分析与评估
根据提供的训练结果,模型在最后一个epoch(第5个epoch)结束后的验证集上的准确率为92.92%,这表明模型对于给定的数据集能够正确分类92.92%的样本。观察其中指标变化,训练步数的增加而其中的损失函数和准确率也跟着变化。损失函数(loss)一开始则是为0.0321,训练集准确率为98.44%,而随着训练步数变化,损失函数也开始下降,而准确率逐渐上升。直到第5个epoch结束后,损失函数为0.0286,训练集准确率为99.12%。训练集上模型表现则是在稳稳提升。
训练变化更新过程中验证集的损失函数和准确率(val_loss和val_acc)也在不断变化着。从结果来看,验证集上的损失函数在整个训练过程中一直在上升,而准确率则在逐步下降。由此可见,模型在验证集上存在一定的过拟合现象,即模型在训练集上表现良好,但泛化能力较差。
4.5模型优化与情感分析
根据训练结果,使用GridSearchCV进行超参数调优、训练最佳模型、评估性能、绘制ROC曲线和混淆矩阵、从而实现模型优化:
首先,通过GridSearchCV搜索最佳超参数组合,然后使用最佳超参数重新训练模型。再根据训练结果评估最佳模型的性能,包括在训练集和测试集上的准确率、损失等指标。最后,绘制训练和验证集的损失率变化图,计算并绘制ROC曲线以及绘制混淆矩阵,以更全面地评估模型性能。主要代码如下图4-5所示:
图4-5 模型优化主要代码
最终优化后Roc曲线、混淆矩阵如图4-6和图4-7所示:
图4-6 模型优化后ROC曲线
图4-7 模型优化后混淆矩阵
根据优化后的混淆矩阵和roc曲线以及准确率可以发现训练准确率为93.9%,相比没有优化的模型得到一定提升。最终通过优化后的模型对评论内容进行情感分析,得到如图4-8所示情感分析结果: