第二周作业文本分析,文本分类算法( 五 )


这类似于我们在大数据分析Python中spaCy文本分类使用教程前面的示例中所做的操作,但是现在我们将所有内容放到一个函数中,以预处理要分析的每个用户评论 。定义自定义变压器为了进一步清除文本数据,我们还需要创建一个自定义转换器,以删除开头和结尾的空格并将文本转换为小写形式 。在这里,我们将创建一个predictors继承TransformerMixin类的自定义类 。
该类重写transform,fit和get_parrams方法 。我们还将创建一个clean_text()删除空格并将文本转换为小写字母的函数 。矢量化特征工程(TF-IDF)在对文本进行分类时,最终得到的是与相应标签匹配的文本片段 。但是我们不能在我们的机器学习模型中简单地使用文本字符串 。我们需要一种将文本转换为可以用数字表示的内容的方法,就像标签(正数为1,负数为0)一样 。
在正面和负面标签中对文本进行分类称为情感分析 。因此,我们需要一种数字表示文本的方法 。我们可以用来执行此操作的一种工具称为Word of Words 。BoW将文本转换为给定文档中单词出现的矩阵 。它着眼于给定单词在文档中是否出现,并生成一个矩阵,我们可以将其称为BoW矩阵或文档术语矩阵 。我们可以通过为我们的文本数据弓矩阵scikit-learn的CountVectorizer 。
在下面的代码中,我们告诉CountVectorizer使用spacy_tokenizer构建的自定义函数作为其标记生成器,并定义所需的ngram范围 。N-gram是给定文本中相邻单词的组合,其中n是插入标记中的单词数 。例如,句子“谁将在2022年赢得世界杯足球赛?” 字母组合是一个单词序列,例如“ who”,“ will”,“ win”等 。
二元组将是两个连续单词的序列,例如“谁将”,“将获胜”,等等 。大数据分析Python中spaCy文本分类使用教程https://www.aaa-cg.com.cn/xmt/2338.html因此,ngram_range我们将在下面的代码中使用的参数设置ngram的上下限(我们将使用unigram) 。然后,我们将ngram分配给bow_vector 。
我们还希望查看术语的TF-IDF(术语频率-反文档频率) 。这听起来很复杂,但这只是通过查看每个单词的频率与文档频率的比较来规范我们的单词袋(BoW)的一种方式 。换句话说,这是一种表示特定术语在给定文档中的重要性的方法,它基于该术语出现了多少次以及该术语出现在其他文档中的数量 。TF-IDF越高,这个词对那个文件更重要 。
我们可以用以下数学方程式表示:当然,我们不必手工计算!我们可以使用scikit-learn的TfidfVectorizer 自动生成TF-IDF。再次,我们将告诉它使用与我们一起构建的自定义标记生成器,spaCy然后将结果分配给变量tfidf_vector 。将数据分为训练集和测试集我们正在尝试建立分类模型,但是我们需要一种方法来了解其实际表现 。
将数据集分为训练集和测试集的方法是经过实践检验的 。我们将一半的数据集用作训练集,其中将包含正确的答案 。然后,我们将使用数据集的另一半测试模型,而无需给出答案,以查看其执行的准确性 。便利,scikit-learn为我们提供了一个内置的这样做的功能:train_test_split() 。我们只需要告诉它要分割的功能集(X),要对其进行测试的标签(ylabels)以及要用于测试集的大小(以十进制形式的百分比表示) 。
创建管道并生成模型现在我们已经完成了所有的设置,现在是时候实际构建模型了!我们将从导入LogisticRegression模块并创建LogisticRegression分类器对象开始 。然后,我们将创建一个包含三个组件的管道:清理器,向量器和分类器 。清洁器使用我们的predictors类对象来清洁和预处理文本 。
向量器使用countvector对象为文本创建词袋矩阵 。分类器是执行逻辑回归以对情感进行分类的对象 。建立此管道后,我们将使用来装配管道组件fit() 。评估模型让我们看一下我们的模型实际表现如何!我们可以使用中的metrics模块执行此操作scikit-learn 。现在我们已经训练了模型,我们将把测试数据通过管道进行预测 。

推荐阅读