轻松搞懂word2vec / FastText + SVM(支持向量机)实现中英文情感分类

本文详细介绍如何通过word2vec获取词向量,然后计算句子特征,利用支持向量机(SVM)进行中英文情感分类。流程包括数据集准备、特征提取、模型训练与评估,适合对传统机器学习在文本分类中的应用感兴趣的读者。
摘要由CSDN通过智能技术生成

代码(包括数据集)链接放在文末。

上一篇博客,我们介绍了如何利用几种深度学习的模型对于中文文本进行情感分类,讲的非常的详细啊,那在这里我也不过多重复与上一篇博客相同的内容,感兴趣的朋友可以自行点击查看。

轻松搞懂word2vec+BiLSTM、TextCNN、CNN+BiLSTM、BiLSTM+Attention实现中英文情感分类
【TF-IDF、word2vec、svm、cnn、textcnn、bilstm、cnn+bilstm、bilstm+attention】英文长文本分类实战

在这篇博客中,我将详细介绍如何利用常见的机器学习模型——支持向量机,进行文本情感分类。

具体流程

前期

从最开始的数据集准备,到训练word2vec模型,全部都跟上一篇博客是一样的流程,这里就不重复了。

提取句特征

到这里之前,我们已经训练好了word2vec模型,也就是可以通过word2vec得到词的对应向量,但是,数据集的标注是针对一整个句子的标注,所以我们需要做的是通过词向量,来得到句向量。

如果想将word2vec换成fastText,只需要将
from gensim.models.word2vec import Word2Vec
换成
from gensim.models.fasttext import FastText
再将对应位置的Word2Vec换成FastText即可。

那在这里,我们用到的是求平均的方法,即通过将句子中出现的词的词向量的相加之后,再除以词的数量,得到句子的特征,这种方法简单,容易实现,但确实不可避免会忽视掉句子的语序信息。(但效果也不见得就比较差)

# 直接词向量相加求平均
def fea_sentence(list_w):
    n0 = np.array([0. for i in range(vocab_dim)], dtype=np.float32)
    for i in list_w:
        n0 += i
    fe = n0 / len(list_w)
    fe = fe.tolist()
    return fe

def parse_dataset(x_data, word2vec):
    xVec = []
    for x in x_data:
        sentence = []
        for word in x:
            if word in word2vec:
                sentence.append(word2vec[word])
            else:  # 词不存在,则补零向量。
                sentence.append([0. for i in range(vocab_dim)])
        xVec.append(fea_sentence(sentence))

    xVec = np.array(xVec)

    return xVec

划分数据集

注意,这里是跟上一篇博客不同的,标签不需要转换成one-hot的格式。

from sklearn.model_selection import train_test_split

def get_data(word2vec, data, y):
    data = parse_dataset(data, word2vec)
    x_train, x_test, y_train, y_test = train_test_split(data, y, test_size=0.2, random_state=5)

    return x_train, y_train, x_test, y_test

训练模型

得到句特征之后,我们就可以开始训练模型啦,那在这里,我们用到了GridSearchCV(网格搜索)的方法,帮助我们进行调参。

由于数据集较大,训练时间可能会非常长,没有时间的朋友可以直接将前六行代码注释掉,将下面注释掉的代码恢复。

def train_svm(x_train, y_train):
    svc = svm.SVC(verbose=True)
    parameters = {'C':[1, 2], 'gamma':[0.5 ,1, 2]}
    clf = GridSearchCV(svc, parameters, scoring='f1')
    clf.fit(x_train, y_train, )
    print('最佳参数: ')
    print(clf.best_params_) 
     
    # clf = svm.SVC(kernel='rbf', C=2, gamma=2, verbose=True)
    # clf.fit(x_train,y_train)

    # 封装模型
    print('保存模型...')
    joblib.dump(clf, 'svm.pkl')

模型评估

import joblib
from sklearn.metrics import classification_report

if __name__ == '__main__':
    svm = joblib.load('svm.pkl')
    y_pred = svm.predict(x_test)
    # target_names = ['负面', '正面']
    print(classification_report(y_test, y_pred))

在这里插入图片描述

“智能”推荐:
轻松搞懂word2vec+BiLSTM、TextCNN、CNN+BiLSTM、BiLSTM+Attention实现中英文情感分类
【TF-IDF、word2vec、svm、cnn、textcnn、bilstm、cnn+bilstm、bilstm+attention】英文长文本分类实战


代码下载链接,有需要的请自行提取,不想hua前的朋友,可评论同我说,我会回复你,但可能会比较慢。祝好!

https://download.csdn.net/download/qq_44186838/60890812

  • 65
    点赞
  • 146
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 97
    评论
评论 97
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

报告,今天也有好好学习

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

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

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

打赏作者

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

抵扣说明:

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

余额充值