自然语言处理——用逻辑回归来实现情绪识别

tech2022-07-09  136

引言

情绪识别原本是指个体对于他人情绪的识别,现多指AI通过获取个体的生理或非生理信号对个体的情绪状态进行自动辨别,是情感计算的一个重要组成部分。

本文主要针对英文句子来识别对应的情绪。

情绪识别

我们看一下训练数据:

第1列是一个代表情绪的单词,第2列是句子。

从数据可以看出,这个任务可以看成是一个多分类问题,有很多模型处理处理这个问题。这里我们看一下逻辑回归。

下面贴出代码实现:

import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.model_selection import GridSearchCV from sklearn.feature_extraction.text import TfidfVectorizer data = pd.read_csv('./data/ISEAR.csv',header=None) labels = data[0].values.tolist()#第1列是标签 sents = data[1].values.tolist()#第2列是句子 # 进数据拆分 X_train,X_test,y_train,y_test = train_test_split(sents,labels,test_size=0.2) # 使用TF-IDF来提取特征 vectorizer = TfidfVectorizer() # 对训练数据转换 X_train = vectorizer.fit_transform(X_train) # 对测试数据转换,要使用训练数据相同的模型进行转换 X_test = vectorizer.transform(X_test) lr = LogisticRegression() lr.fit(X_train, y_train).score(X_test, y_test)

使用TF-IDF来提取特征,提取特征之后就丢给逻辑回顾模型去训练。上面输出得分。 如果看sklearn的相关文档,可以看到逻辑回归默认使用了L2正则,并且有一个参数C可以调整惩罚系数,下面我们用网格搜索的方式来找到较好的C。

# C是正则项的强弱参数 相当于 λ的倒数 parameters = {'C':[0.00001, 0.0001, 0.001, 0.005,0.01,0.05, 0.1, 0.5,1,2,5,10]} # 网格搜索 clf = GridSearchCV(lr, parameters, cv=10) clf.fit(X_train, y_train) print(clf.score(X_test, y_test)) print (clf.best_params_)

从输出可以看到,最好的C=5,最好的分数。

最新回复(0)