情感分析方法之nltk情感分析器和SVM分类器(二)

您所在的位置:网站首页 情感分析svm 情感分析方法之nltk情感分析器和SVM分类器(二)

情感分析方法之nltk情感分析器和SVM分类器(二)

2023-08-11 07:24| 来源: 网络整理| 查看: 265

一、使用NLTK Vader SentimentAnalyser分析

NLTK附带了一个内置的情感分析器模块——nltk.sentiment.vader,参考1,参考2。它可以分析一段文字或句子下情绪的正面、负面和中性极性分类。其中,compound表示复杂程度,neu表示中性,neg表示负面情绪,pos表示正面情绪。

import nltk from nltk.sentiment.vader import SentimentIntensityAnalyzer # nltk.download('vader_lexicon') view = ["Great place to be when you are in Bangalore", "The place was being renovated when I visited so the seating was limited", "Loved the ambience, loved the food", "The place is not easy to locate"] sid = SentimentIntensityAnalyzer() for sen in view: print(sen) ss = sid.polarity_scores(sen) for k in ss: print('{0}:{1},'.format(k, ss[k]), end='') print()

对于日常的普通句子,nltk的情感强度分析器已经可以很准确地分类。

“情感分析模型的准确程度,往往取决于数据量。如果一种表达情感的语言方式被普遍应用,那么在极大的数据库中,一些基本的统计规律(即使是最基础的n-gram之类)也会有意想不到的精确度。比如,“呵呵”一词原本是中性,但是作为贬义被用得多了,统计模型也会自动发现它的负面含义。

讽刺和反语的难点在于,它们是更高层次的语意抽象。同时,识别出讽刺还需要现实世界的常识,毕竟讽刺的核心在于“预期”与“现实”的不符合”。

二、使用分类器进行分类分析

目前实现的例子是中文酒店评论的情感分析,参考1。

数据处理部分略~(工作量占绝大多数时间)分类器的部分使用SVM,准确率有0.86。

# -*- coding: utf-8 -*- # 对数据进行降维:PCA,文本分类:SVM import sys import numpy as np import pandas as pd from sklearn.decomposition import pca from sklearn import svm from sklearn import metrics # 数据准备 datapath = r'D:\file_download\BaiduNetdiskDownload\PyCharm_File\senti_analysis\data\ChnSentiCorp_htl_ba_2000\2000_data.csv' df = pd.read_csv(datapath) x = df.iloc[:, 2:] y = df.iloc[:, 1] # PCA降维。计算全部贡献率 n_components = 400 pca_model = pca.PCA(n_components) pca_model.fit(x) # pca作图 # 取100维作为分类器输入 x_pca = pca.PCA(n_components=100).fit_transform(x) # 先拟合数据再标准化 # SVM分类 clf = svm.SVC(C=2.0, probability=True) clf.fit(x_pca, y) print('Test Accuracy is: %.2f' % clf.score(x_pca, y))

附带sklearn.svm.SVC参数说明

sklearn.svm.SVC(C=1.0, kernel='rbf', degree=3, gamma='auto', coef0=0.0, shrinking=True, probability=False,

tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape=None,random_state=None)

参数:

l  C:C-SVC的惩罚参数C,默认值是1.0

C越大,相当于惩罚松弛变量,希望松弛变量接近0,即对误分类的惩罚增大,趋向于对训练集全分对的情况,这样对训练集测试时准确率很高,但泛化能力弱。C值小,对误分类的惩罚减小,允许容错,将他们当成噪声点,泛化能力较强。

kernel :核函数,默认是rbf,可以是‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’ 

    0 – 线性:u'v

    1 – 多项式:(gamma*u'*v + coef0)^degree

    2 – RBF函数:exp(-gamma|u-v|^2)

    3 –sigmoid:tanh(gamma*u'*v + coef0)

degree :多项式poly函数的维度,默认是3,选择其他核函数时会被忽略。

gamma : ‘rbf’,‘poly’ 和‘sigmoid’的核函数参数。默认是’auto’,则会选择1/n_features

coef0 :核函数的常数项。对于‘poly’和 ‘sigmoid’有用。

probability :是否采用概率估计?.默认为False

shrinking :是否采用shrinking heuristic方法,默认为true

tol :停止训练的误差值大小,默认为1e-3

cache_size :核函数cache缓存大小,默认为200

class_weight :类别的权重,字典形式传递。设置第几类的参数C为weight*C(C-SVC中的C)

verbose :允许冗余输出?

max_iter :最大迭代次数。-1为无限制。

decision_function_shape :‘ovo’, ‘ovr’ or None, default=None3

random_state :数据洗牌时的种子值,int值

主要调节的参数有:C、kernel、degree、gamma、coef0



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3