Python自然语言处理只需要5行代码

·  阅读 640

这是我参与8月更文挑战的第18天,活动详情查看:8月更文挑战

一、前言

人工智能是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完成情绪识别的步骤如下:

  1. 导入模块
  2. 加载模型
  3. 准备句子
  4. 识别情绪

而完成上面的步骤只需要四行代码,另外我们需要输出一下识别的结果,一共就是五行代码,下面让我们看看这五行神奇的代码:

# 导入模块
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

分类:
人工智能
标签:
分类:
人工智能
标签:
收藏成功!
已添加到「」, 点击更改