【机器学习】 python 多种方法实验比较 文本情感二分类

这篇博客介绍了参与2019年大数据挑战赛的文本情感二分类任务,探讨了One-Hot编码、word2vec、doc2vec和tf-idf等特征表示方法,以及朴素贝叶斯、逻辑回归、K近邻等模型的训练。实验结果显示,tf-idf在特征表示方面表现出色,传统机器学习模型在小数据集上优于神经网络方法。
摘要由CSDN通过智能技术生成

实验目的及要求

实验源于“2019大数据挑战赛-预选赛”。

  本预选赛要求选手建立文本情感分类模型,选手用训练好的模型对测试集中的文本情感进行预测,判断其情感为「Negative」或者「Positive」。所提交的结果按照指定的评价指标使用在线评测数据进行评测,达到或超过规定的分数线即通过预选赛。
  数据样本格式:
在这里插入图片描述
  其中,训练集的样本规模为6328,测试集的样本规模为2712。为保证比赛结果的真实性。每周一中午12点,将替换为新的测试集数据,供队伍答题使用。选手提交结果的评估指标是AUC(Area Under Curve)

实验仪器设备

  硬件配置:CORE i5 7thGen处理器,8G内存,1050显卡
  软件配置:Anaconda python3 Spyder
  数据集:train.csv、20190506_test.csv

实验内容

  本实验是一个典型的二分类问题,所有用于解决分类问题的模型如罗吉斯特回归、支持向量机、神经网络、朴素贝叶斯等都能适用。
  其次,本实验还属于NLP中情感分析问题,处理的数据是印度尼西亚语的评论。情感分析一般有两种方法,一种是带词典的,一种是不带词典的。由于印尼语是小语种,词典难以寻找,所以采用不带词典的方法。

(一) 特征表示

我们需要分类的目标是句子,换句话说,句子是模型的输入。如何表示句子是解决该问题的关键。

1.One-Hot编码

  one-hot向量将类别变量转换为机器学习算法易于利用的一种形式的过程,这个向量的表示为一项属性的特征向量,也就是同一时间只有一个激活点(不为0),这个向量只有一个特征是不为0的,其他都是0,特别稀疏。
句子可由每个词的one-hot向量相加得到。

2.word2vec

  Word2vec 可以根据给定的语料库,通过优化后的训练模型快速有效地将一个词语表达成向量形式,为自然语言处理领域的应用研究提供了新的工具。Word2vec依赖skip-grams或连续词袋(CBOW)来建立神经词嵌入。
句子可由每个词的词向量直接相加或拼接成大的矩阵来表示。

3.doc2vec

  Doc2Vec 或者叫做 paragraph2vec, sentence embeddings,是一种非监督式算法,可以获得 sentences/paragraphs/documents 的向量表达,是 word2vec 的拓展。
该方法可以直接得到句子的表示,表示形式为向量。

4.tf-idf

  TF-IDF(term frequency–inverse document frequency,词频-逆向文件频率)是一种用于信息检索(information retrieval)与文本挖掘(text mining)的常用加权技术。
  TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
   TF-IDF的主要思想是:如果某个单词在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
句子可由One-Hot思想,用每个单词的tf-idf值代替“1”来表示。

(二) 模型训练

1. 朴素贝叶斯

  朴素贝叶斯分类是一种十分简单的分类算法,叫它朴素贝叶斯分类是因为这种方法的思想真的很朴素,朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。

2. 罗吉斯特回归

  Logistic Regression是目前应用比较广泛的一种优化算法,利用logistic regression进行分类的只要思想是:根据现有数据对分类边界线建立回归公式,以此进行分类。“回归”一词源于最佳拟合,表示要找到最佳拟合参数集。
Logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释。所以实际中最常用的就是二分类的Logistic回归。

3. K近邻

  K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

4. 支持向量机

支持向量机(support vector machines)是一种二分类模型,它的目的是寻找一个超平面来对样本进行分割,分割的原则是间隔最大化,最终转化为一个凸二次规划问题来求解。

5. 随机森林

  随机森林,指的是利用多棵树对样本进行训练并预测的一种分类器。该分类器最早由Leo Breiman和Adele Cutler提出,并被注册成了商标。简单来说,随机森林就是由多棵CART(Classification And Regression Tree)构成的。对于每棵树,它们使用的训练集是从总的训练集中有放回采样出来的,这意味着,总的训练集中的有些样本可能多次出现在一棵树的训练集中,也可能从未出现在一棵树的训练集中。

6. 前馈神经网络

  前馈神经网络(Feedforward Neural Network),简称前馈网络,是人工神经网络的一种。在此种神经网络中,各神经元从输入层开始,接收前一级输入,并输出到下一级,直至输出层。整个网络中无反馈,可用一个有向无环图表示。

(三) 模型自评

  官网给的标准是计算AUC,由于我们只有训练集的Label数据,而官网提交次数有限,因此可计算训练集的AUC作为参考再进行提交。
  AUC(Area Under Curve)被定义为ROC曲线下与坐标轴围成的面积,显然这个面积的数值不会大于1。又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围在0.5和1之间。使用AUC值作为评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好,而作为一个数值,对应AUC更大的分类器效果更好。

实验实施步骤

(一)特征提取

1.分词

  句子由词组成,不管是为了得到one-hot、词向量、还是其他,处理的基本单元都是单词。而因为是外文单词,采用NLTK的分词可以帮助我们有效分词。
  NLTK是一个高效的Python构建的平台,用来处理人类自然语言数据。它提供了易于使用的接口,通过这些接口可以访问超过50个语料库和词汇资源(如WordNet),还有一套用于分类、标记化、词干标记、解析和语义推理的文本处理库,以及工业级NLP库的封装器和一个活跃的讨论论坛。
  rev_cut():对评论进行分词,分好的词放在“rev_cut.txt”中。

def rev_cut(review):
    cut_file = './rev_cut.txt'
    with open(cut_file, 'w', encoding='utf-8') as f:
        for rev in review:
            rev_cut = " ".join(nltk.word_tokenize(rev))#对句子进行分词
            f.writelines(rev_cut +'\n')
    return cut_file

2.word2vec得到句向量

  Gensim是一款开源的第三方Python工具包,用于从原始的非结构化的文本中,无监督地学习到文本隐层的主题向量表达。 它支持包括TF-IDF,LSA,LDA,和word2vec在内的多种主题模型算法。
  word_vec(cut_file,model_name,dimension):由分好的词训练得到每个单词的词向量,并保存。
  get_sents_word_vec (review,dimension,model_name):载入训练好得模型,由词向量的平均值得到句向量。

def word_vec(cut_file,model_name,dimension):
    logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
    sentences = gensim.models.word2vec.LineSentence(cut_file) #单词隔开,换行符换行
    model = gensim.models.word2vec.Word2Vec(sentences, hs=1,min_count=1,window=3,size=dimension) 
    model.save(model_name)
    
def get_sents_word_vec(review,dimension,model_name):
    model = gensim.models.word2vec.Word2Vec.load(model_name)
    sent_vec = np.array(
  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lechuan_dafo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值