繁体   English   中英

在python中使用sklearn进行情感分析

[英]sentiment analysis using sklearn in python

我对python和机器学习非常陌生。 我正在尝试对Twitter数据进行情感分析,因此在工作时我直接使用sklearn,而没有在nltk中进行任何预处理。

#reading data from csv having 1 column with text and other with sentiment as pos and neg
for index, row in val.iterrows():
   statement = row['tweets'].strip() #get the tweet from csv
   tweets.append((statement, row['emo'])) #append the tweet and emotion(pos,neg)

然后我用这个班级

classifier = Pipeline([
    ('vectorizer', CountVectorizer()),
    ('tfidf', TfidfTransformer()),
    ('classifier', OneVsRestClassifier(LinearSVC())
    )])

#Dividing data into training and Testing
np.random.shuffle(tweets)
for key, value in tweets:
    keys.append(key)
    values.append(value)

size = len(keys) * 1 / 2

X_train = np.array(keys[0:size])
y_train = np.array(values[0:size])

X_test = np.array(keys[size + 1: len(keys)])
y_test = np.array(values[size + 1: len(keys)])

分类

classifier = classifier.fit(X_train, y_train)

K折精度测试

X_folds = np.array_split(X_test, 3)
y_folds = np.array_split(y_test, 3)

scores = list()
for k in range(3):
    X_train = list(X_folds)
    X_test = X_train.pop(k)
    X_train = np.concatenate(X_train)
    y_train = list(y_folds)
    y_test = y_train.pop(k)
    y_train = np.concatenate(y_train)
    clsf = classifier.fit(X_train, y_train)

    scores.append(clsf.score(X_test, y_test))

通过上述方法,使用k = 3的k倍,得到的精度为[0.92494226327944944573,0.91974595842956119,0.93360277136258663]

正如我在TfidfTransformer的代码中看到的那样,我发现它仅是一种数据预处理。 这是否意味着如果我使用sklearn,就不需要像nltk中给出的那样进行预处理。

我的问题是-

如果我可以直接在scikit库上运行数据集而不进行任何预处理并获得很好的结果,那么什么情况下才需要在skicit上运行数据之前使用预处理(nltk)?

您可能会发现主题与情感之间存在协变量(即,关于特蕾莎修女的大多数文章在情感上都是正面的,而关于谋杀的大多数文章都是负面的)。 您的单词分类器可能是在学习主题类别,而不是情感类别。 您可以通过检查分类器中术语的权重来验证这一点:我猜是加权最高的术语是特定于主题的。

为什么这是个问题? 因为您所学的内容不会推广到您的培训集中没有涉及的主题。 例如,在话题迅速变化的Twitter上,这将是一个大问题。 尝试在M个月学习类似的模型,并在M个月+ 6预测推文中的情绪。我想它不会很好地工作!

Tfidf是一种找出单词在文档中的重要性的方法。 为了从tfidf中获得有意义的结果,就词干,语法等而言,必须进行良好的预处理。NLTK库对此提供了良好的支持。

TFidf的结果与您的预处理效果一样好,否则将成为GIGO(垃圾进垃圾出)。 由于您正在进行情绪分析,因此有时最好在预处理步骤中将否定之类的否定替换为“没有”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM