Python自然語言處理只需要5行代碼

Python自然語言處理只需要5行代碼

一、前言

人工智能是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

另外在這裏順便給大家免費發點福利:

在這裏插入圖片描述

哈哈,你沒有聽錯苦逼的我也有助理了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章