一、前言
人工智能是Python语言的一大应用热门,而自然语言处理又是人工智能的一大方向。 自然语言处理( natural language processing )简称NLP,是研究人同计算机之间用自然语言通信的一种方法。我们都知道,计算机本质上只认识0和1,但是通过编程语言我们可以使用编程语言同计算机交流。这实际上就是程序员同计算机之间的通信,而我们日常生活中使用的是自然语言,是一种带有情感的语言。那么要怎么使计算机理解这种带有情感的语言呢?这就是自然语言处理研究的内容了。
语言的情绪识别是自然语言处理的一种操作,如果要我们从0开始实现情绪识别是比较繁琐的。首先我们需要准备好足够的数据,为了让计算机更好的理解,我们还需要对数据进行预处理,之后需要训练数据,有了训练数据我们才能开始情绪识别。识别的准确率在于数据的相关性和数据量,数据相关性越高,数据量越大,识别的准确率就越高。
然而,我们使用paddlehub可以很快的实现情绪识别,我们先看看如何安装。
二、安装paddlehub
paddlehub是百度飞桨PaddlePaddle中的一个模型库,使用paddlepaddle可以很快的实现多种多样的操作,其中就有我们今天要说到的文字情绪识别,而且代码非常简单。首先我们需要安装paddlepaddle,我们进入官网 https://www.paddlepaddle.org.cn/install/quick ,进入官网后可以看到如下界面:
我们可以根据自己Python版本,计算机系统等选择安装方式。关于paddlepaddle支持版本等信息可以在官网中查看,这里就不赘述了。我使用的是Python3.7,这里直接使用pip安装,我们在控制台执行下列语句
python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
然后在控制台查看是否安装成功。先输入Python
,然后执行import paddle.fluid
,再执行 paddle.fluid.install_check.run_check()
如下:
C:\Users\zaxwz>python
Python 3.7.6 (tags/v3.7.6:43364a7ae0, Dec 19 2019, 00:42:30) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import paddle.fluid
>>> paddle.fluid.install_check.run_check()
如果显示Your Paddle is installed successfully! Let's start deep Learning with Paddle now
就表示安装成功了。另外我们还需要安装paddlehub,这里同样是使用pip安装,执行语句如下:
pip install -i https://mirror.baidu.com/pypi/simple paddlehub
把paddlepaddle和paddlehub安装成功后我们就可以开始写代码了。
三、情绪识别
(1)情绪识别
使用paddlehub完成情绪识别的步骤如下:
- 导入模块
- 加载模型
- 准备句子
- 识别情绪
而完成上面的步骤只需要四行代码,另外我们需要输出一下识别的结果,一共就是五行代码,下面让我们看看这五行神奇的代码:
# 导入模块
import paddlehub as hub
# 加载模型
senta = hub.Module(name='senta_lstm')
# 准备句子
sentence = ['你真美']
# 情绪识别
result = senta.sentiment_classify(data={"text":sentence})
# 输出识别结果
print(result)
识别结果如下:
[{'text': '你真美', 'sentiment_label': 1, 'sentiment_key': 'positive', 'positive_probs': 0.9602, 'negative_probs': 0.0398}]
我们可以看到准备的句子是列表类型,识别的结果也是列表类型,结果中列表的元素是一个字典。在这个字典列表中,就包含了我们识别的结果。下面我们来分析一下这个字典。
(2)结果分析
结果字典中包含了4个字段,我们以表格的形式展示一下:
字段名称 | 字段含义 | 解释 |
---|---|---|
text | 识别的源文本 | 识别的源文本 |
sentiment_label | 分类标签 | 1为积极,0为消极 |
sentiment_key | 分类结果 | positive为积极,negative为消极 |
positive_probs | 积极率 | 情绪为积极的可能性 |
negative_probs | 消极率 | 情绪为消极的可能性 |
上面的表格是本人编的,用词不当的地方多见谅。我们对照上述表可以分析一下我们上述程序的结果。其含义就是语句“你真美”中包含了积极的情绪。我们再多看几个例子:
import paddlehub as hub
senta = hub.Module(name='senta_lstm')
sentence = [
'你真美',
'你真丑',
'我好难过',
'我不开心',
'这个游戏好好玩',
'什么垃圾游戏',
]
results = senta.sentiment_classify(data={"text":sentence})
for result in results:
print(result)
识别结果如下:
{'text': '你真美', 'sentiment_label': 1, 'sentiment_key': 'positive', 'positive_probs': 0.9602, 'negative_probs': 0.0398}
{'text': '你真丑', 'sentiment_label': 0, 'sentiment_key': 'negative', 'positive_probs': 0.0033, 'negative_probs': 0.9967}
{'text': '我好难过', 'sentiment_label': 1, 'sentiment_key': 'positive', 'positive_probs': 0.5324, 'negative_probs': 0.4676}
{'text': '我不开心', 'sentiment_label': 0, 'sentiment_key': 'negative', 'positive_probs': 0.1936, 'negative_probs': 0.8064}
{'text': '这个游戏好好玩', 'sentiment_label': 1, 'sentiment_key': 'positive', 'positive_probs': 0.9933, 'negative_probs': 0.0067}
{'text': '什么垃圾游戏', 'sentiment_label': 0, 'sentiment_key': 'negative', 'positive_probs': 0.0108, 'negative_probs': 0.9892}
上面有6个句子,大多数都成功识别了情绪,但是我好难过
识别的结果为积极,很明显是错误的。总体来说,对于简单语句的识别还是比较准的。另外,如果对识别的准确率不满的话,我们还可以训练自己的数据集,详细操作可以参考项目地址 https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/sentiment_classification 。