赞
踩
近年来,随着互联网和社交媒体的快速发展,人们在网络上表达情感的方式变得更加多样和频繁。在这样的背景下,情感分析成为一项重要的研究领域,旨在通过分析文本、语音和图像等数据来判断人们的情感状态。情感分析在众多领域中具有广泛的应用,包括市场营销、舆情监测、产品评价、心理健康等。
传统的情感分析方法主要基于规则和词典,通过人工定义的规则和情感词汇来判断文本的情感倾向。然而,这种方法往往面临词汇覆盖不全、主观性强和适应性差等问题。为了解决这些挑战,机器学习技术成为情感分析研究中的重要手段。
机器学习是一种从数据中自动学习模式和规律的方法。在情感分析中,机器学习算法可以通过训练数据来学习情感表达的特征,并构建模型来对新的文本进行情感分类。
在机器学习情感分析中,关键的一步是特征提取。特征提取是将原始文本数据转化为机器学习算法能够理解和处理的数值表示。常用的特征提取方法包括词袋模型(Bag-of-Words)、TF-IDF(Term Frequency-Inverse Document Frequency)和词嵌入(Word Embedding)等。这些方法可以将文本转化为向量形式,保留了词汇的语义信息。
一旦特征提取完成,机器学习模型可以通过训练数据进行训练和优化。在训练过程中,模型学习从输入文本中学习情感特征,并尝试准确地预测情感类别。通过不断调整模型参数和优化算法,可以提高模型的性能和泛化能力。
然而,机器学习情感分析也存在一些挑战和限制。首先,训练数据的质量和规模对模型的性能有重要影响。缺乏标注的大规模训练数据可能导致模型的泛化能力不足。其次,情感分析在不同的语境和领域中具有很大的变化性,模型的泛化能力需要通过合适的特征选择和模型设计来提高。此外,情感分析还需要解决多语言、多模态和主观性判断等问题。
总的来说,机器学习在情感分析中具有重要的应用价值。通过利用机器学习算法和技术,可以实现对大规模文本数据的情感倾向分析,从而为各种实际应用提供决策依据和洞察力。
首先,我们构建模型需要数据集,我们使用一个互联网电影数据库中的大量电影评论数据。下载链接:https://ai.stanford.edu/~amaas/data/sentiment/
观察我们下载的数据集,test和train目录下都有25000个数据集,分别在neg 与 pos文件夹下,代表消极(6分以下)和积极(6分以上)的评论。
为了更好的对数据集进行处理,得到方便我们进行机器学习的CSV文件。所以需要构建一个CSV文档,我觉得每一个样例应该有一个特征(比如说评论),还有一个标签,我用1代表积极,用0代表消极。
首先我读取aclImdb文件夹中的文本文件,并将它们的内容和对应的情感标签存储到一个DataFrame中,并将数据保存为CSV文件:
这里是使用pyprind.ProgBar创建了一个进度条对象,总共有50000个进度。出现的进度条,用于显示处理进度。
最后打乱顺序,以防影响学习效果。然后输出到我们想要的位置,然后读取CSV文件并打印前三行的数据,检查是否正常运行:
我们有了原始的数据集了,可以开始构建模型了,但是在构建模型的时候我们遇到了几个问题:
正则表达式就是利用特殊符号构建的一种规则,将文本中符合这种规则的字符串提取或者消除的一种方式,在这里我们构建了符合HTML符号的一种规则,将HTML符号在我们的文本数据中进行剔除。
模型简单来说就是将一个大整体数据(在本项目中是50000条评论)中出现过的所有词汇进行逐一编号,比如一个数据集中一共出现了10个词,第一条中出现了其中的5个,它的矩阵可能就是[0 0 0 0 1 1 0 1 1 1] ,第i个位置表示第i号单词出现的次数。通过这一模型,一篇文档可以通过统计所有单词的数目来表示,这种方法不考虑语法和单词出现的先后顺序。
但是这样会衍生出一个问题,我们日常用语中会出现大量的“无意义”词汇,比如英文中的 is he she are am等等,这样的词汇在我们的向量中会多次出现,对我们的学习过程会产生不确定的影响。为此可以提前准备好一个集合,里面是所有我们预先规定的停用词,也就是在句子中一般无意义的词汇,将他们在我们的数据集中进行剔除。
构思完后,我们使用pandas库中的read_csv函数从名为’movie_data.csv’的CSV文件中读取数据,并将读取的数据存储在名为df的DataFrame对象中。
定义了一个名为delete_html的函数,作用是使用正则表达式删除文本中的HTML标签和表情符号,同时将文本转换为小写,最后返回处理后的文本。
将其应用于数据集的’review’列,文本数据中的HTML标签和表情符号被删除,并且文本被转换为小写形式,方便后续的文本处理和分析。
导入了相关的库和定义了几个函数,用于进行文本分词、词干提取和停用词处理,以准备文本数据进行进一步的特征提取和建模。
导入PorterStemmer类,用于词干提取。
导入了nltk库,用于自然语言处理任务。
从nltk.corpus模块中导入stopwords类,用于获取停用词列表。
tokenizer函数:将文本按空格分割成单词列表。
stem_tokenizer函数:对列表中的每个单词进行词干提取,返回词干化后的单词列表。
从DataFrame中提取训练集和测试集的特征和标签数据。
我们一开始对训练集和测试集进行了1:1的划分。
但是在后面我们发现划分训练集和测试集的比例为1:1可能会导致一些问题:
训练集和测试集的比例选择通常取决于具体的应用场景和数据集大小。将数据集划分为训练集和测试集的目的是评估模型在未见过的数据上的性能表现,并检验模型的泛化能力。
常见的划分比例包括 7:3、8:2 或者 9:1 等。选择适当的比例可以在一定程度上平衡训练集和测试集之间的数据量,确保有足够的数据用于模型的训练和评估。所以我们后面将训练集和测试集比例修改为了7:3。
数据集被分为训练集和测试集,其中训练集包含索引0到索引17500的数据,而测试集包含索引17500到索引25000之间的数据。这样可以将数据用于模型的训练和评估,其中训练集用于训练模型,而测试集用于评估模型在未见过的数据上的性能。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。