從NLP到聊天機器人

一、說明

????????今天,當打電話給銀行或其他公司時,聽到電話另一端的機器人向你打招呼是很常見的:“你好,我是你的數字助理。請問你的問題。是的,機器人現在不僅可以說人類語言,還可以用人類語言與用戶互動。這是由于自然語言處理(NLP)——任何數字助理的核心技術,允許它以編程方式理解和生成自然語言。

????????本文介紹了一個示例,說明如何使用 spaCy(用于 NLP 的領先開源 Python 庫)從用戶輸入中提取含義。

二、如何從用戶輸入中提取含義

????????以編程方式從用戶輸入中提取含義可能非常具有挑戰性,但并非不可能。很明顯,你不能依賴句子中單個單詞的含義——同一個單詞可能會表達不同的含義,這取決于它在特定句子中的句法功能。這可以通過示例來最好地理解。請看以下兩句話:

I’d like to order a cake.
I want to cancel my order. 

????????在這兩個話語中,你可以看到“順序”一詞。然而,在每種情況下,它都有不同的句法功能并具有不同的含義。在第一種情況下,“order”是一個動作(傳遞)動詞,作用于名詞“蛋糕”——句子的直接賓語。相比之下,第二個話語中的“order”是接收句子動作的名詞——也就是說,它充當句子的直接賓語,其中“取消”是傳遞動詞。

????????句子中單詞的語言特征(如上例中的及物動詞或直接賓語)也稱為語言特征。spaCy 會自動為應用了 spaCy 文本處理管道的句子中的每個標記分配語言特征。然后,分析語言特征可以幫助識別這個特定句子中單詞的含義。我們將在本文后面的 在 NLP 中使用語言特征 部分中討論如何使用語言特征來完成意義提取任務。

三、準備您的工作環境

????????若要按照本文中提供的代碼進行操作,需要在計算機上安裝以下軟件組件:

python 2.7+∕3.4+

spaCy v2.0+

預先訓練的spaCy英語模型

????????您可以在相應的站點上找到安裝說明。確保環境準備就緒的最快方法是,可以在 Python 會話中輸入以下代碼行:

import spacy
nlp = spacy.load('en') 

????????如果一切正常,您應該沒有錯誤消息。

四、在 NLP 中使用語言特征

????????功能(如詞性標記和句法依賴關系標簽)專門設計用于支持開發能夠智能處理原始文本的應用程序。以下腳本說明了如何使用 spaCy 提取句子中每個單詞的語言特征:

import spacy
nlp = spacy.load('en')
doc = nlp(u'I have to send them a notification.')
for token in doc:print(token.text, token.pos_, token.tag_, token.dep_)

????????在上面的腳本中,您提取并輸出所提交句子中每個標記的粗粒度詞性標簽 (pos_)、細粒度詞性標簽 (tag_) 和語法依賴關系標簽 (dep_)。因此,腳本應提供以下輸出(為便于閱讀而列出):

I            PRON   PRP  nsubj
have         VERB   VBP  ROOT
to           PART   TO   aux
send         VERB   VB   xcomp
them         PRON   PRP  dative
a            DET    DT   det
notification NOUN   NN   dobj
.            PUNCT  .    Punct 

????????如果你不熟悉 spaCy,上面分別在第三列和第四列中輸出的細粒度詞性標簽和語法依賴關系標簽可能看起來有點混亂。要了解這些列中的值的含義,您可以在?Data formats · spaCy API Documentation?或使用 spacy.explain() 函數查看 spacy 的文檔,該函數返回給定語言特征的描述。在下面的循環中,您將輸出示例句子中每個標記的細粒度詞性標記的描述:

for token in doc:print(token.text, spacy.explain(token.tag_)) 

????????這應該會給你以下輸出:

I            pronoun, personal
have         verb, non-3rd person singular present
to           infinitival to
send         verb, base form
them         pronoun, personal
a            determiner
notification noun, singular or mass
.            punctuation mark, sentence closer 

????????同樣,您可以使用 spacy.explain() 函數獲取粗粒度詞性標記和語法依賴關系標簽的說明。

五、從話語中提取意向

????????現在讓我們看一個示例,說明如何利用語言功能從用戶輸入中提取含義。假設需要從提交的語句中提取意向。例如,點餐聊天機器人的用戶提交以下語句:

I want to order a photo cake. 

????????顯然,“訂單”和“蛋糕”這兩個詞最能描述這句話所表達的意圖。在這種特殊情況下,這些詞分別表示及物動詞和直接賓語。實際上,在大多數情況下,在確定請求話語中表達的意圖時,傳遞謂詞/直接賓語對是最具描述性的。從圖表上看,這可能如下所示:

????????在許多請求話語中,及物謂詞及其直接賓語最能描述短語的意圖。

上圖中描述的操作可以在使用 spaCy 的 Python 腳本中輕松執行,如下所示:

import spacy
nlp = spacy.load('en')
doc = nlp(u'I want to order a photo cake.')
for token in doc:if token.dep_ == 'dobj':print(token.head.text + token.text.capitalize()) 

????????在此腳本中,將文本處理管道應用于示例句子,然后循環訪問標記,查找依賴項標簽為?dobj?的令牌。找到它后,您可以通過獲取直接對象的句法頭來確定相應的傳遞動詞。最后,連接及物動詞及其直接賓語,以單個單詞的形式表達意圖(這通常是處理腳本的要求)。

????????因此,腳本應生成:

orderCake 

????????在實際應用程序中,用戶可能會對每個意向使用一組廣泛的短語。這意味著實際應用程序必須識別用戶輸入中的同義短語。有關這些細節,您可以查看我的新書《使用Python的自然語言處理》,其中包括許多關于使用spaCy執行不同NLP任務的示例。

????????此外,在我最近為 Oracle 雜志撰寫的?Oracle 數字助理技能的生成意圖和實體文章中可以找到意圖提取技術在實踐中可能使用的真實示例。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40085.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40085.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40085.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

windows權限維持—黃金白銀票據隱藏用戶遠控RustDeskGotoHttp

windows權限維持—黃金白銀票據&隱藏用戶&遠控&RustDesk&GotoHttp 1. 前置1.1. 初始問題1.1.1. 解決辦法 2. 隱藏用戶2.1. 工具原理2.2. 案例操作2.2.1. 單機添加用戶2.2.1.1. 工具添加用戶2.2.1.2. 工具查看隱藏用戶2.2.1.3. 本地查看隱藏用戶 2.2.2. 域內添加…

CentOS系統環境搭建(二)——Centos7設置時間為網絡時間

centos系統環境搭建專欄🔗點擊跳轉 Centos7設置時間為網絡時間 安裝ntpdate工具 yum -y install ntp ntpdate關閉ntpd service ntpd stop設置系統時間與網絡時間同步 ntpdate 0.asia.pool.ntp.org將系統時間寫入硬件時間 hwclock --systohc查看和設置時區 使…

NeuralNLP-NeuralClassifier的使用記錄(二),訓練預測自己的【中文文本多分類】

NeuralNLP-NeuralClassifier的使用記錄,訓練預測自己的【中文文本多分類】 數據準備: ? 與英文的訓練預測一致,都使用相同的數據格式,將數據通過代碼處理為JSON格式,以下是我使用的一種,不同的原數據情況…

java+springboot+mysql理發會員管理系統

項目介紹: 使用javaspringbootmysql開發的理發會員管理系統,系統包含超級管理員,系統管理員、客戶、發型師角色,功能如下: 超級管理員:管理員管理;會員管理;發型師管理&#xff1b…

如何保證數據庫的數據和Redis的數據一致性

實際項目中有可能會使用Redis緩存數據,那么在更新數據的時候如何保證數據庫中的數據和Redis緩存的數據一致,緩存同步策略的選擇是一個很重要的問題。網上有各種說法,大概總結有以下幾種,看看每種方案是否可行以及存在的問題和適用…

安裝軟件包

安裝軟件包 創建一個名為 /home/curtis/ansible/packages.yml 的 playbook : 將 php 和 mariadb 軟件包安裝到 dev、test 和 prod 主機組中的主機上 將 RPM Development Tools 軟件包組安裝到 dev 主機組中的主機上 將 dev 主機組中主機上的所有軟件包更新為最新版本 vim packa…

關于Firmae缺失binwalk模塊

問題 david707:~/FirmAE$ sudo ./run.sh -c weyow ./WAM_9900-20.06.03V.trx [*] ./WAM_9900-20.06.03V.trx emulation start!!! Traceback (most recent call last):File "./sources/extractor/extractor.py", line 19, in <module>import binwalk ModuleNot…

Android Studio調試的時候Logcat不顯示日志了

文章目錄 問題描述解決方案 問題描述 使用Log輸出日志的時候&#xff0c;Logcat窗口并沒有顯示日志。 去除所有的過濾條件之后&#xff0c;Logcat窗口仍然沒有一條消息。 解決方案 關閉Android Studio&#xff0c;重啟Android Studio即可。

Docker容器:docker基礎概述、安裝、網絡及資源控制

文章目錄 一.docker容器概述1.什么是容器2. docker與虛擬機的區別2.1 docker虛擬化產品有哪些及其對比2.2 Docker與虛擬機的區別 3.Docker容器的使用場景4.Docker容器的優點5.Docker 的底層運行原理6.namespace的六項隔離7.Docker核心概念 二.Docker安裝 及管理1.安裝 Docker1.…

【k8s】基于Prometheus監控Kubernetes集群安裝部署

目錄 基于Prometheus監控Kubernetes集群安裝部署 一、環境準備 二、部署kubernetes集群 三、部署Prometheus監控平臺 四、部署Grafana服務 五、grafana web操作 基于Prometheus監控Kubernetes集群安裝部署 一、環境準備 IP地址 主機名 組件 192.168.100.131 k8s-ma…

時序預測 | MATLAB實現WOA-CNN-GRU鯨魚算法優化卷積門控循環單元時間序列預測

時序預測 | MATLAB實現WOA-CNN-GRU鯨魚算法優化卷積門控循環單元時間序列預測 目錄 時序預測 | MATLAB實現WOA-CNN-GRU鯨魚算法優化卷積門控循環單元時間序列預測預測效果基本介紹模型描述程序設計參考資料 預測效果 基本介紹 時序預測 | MATLAB實現WOA-CNN-GRU鯨魚算法優化卷積…

PrefetchParameters

Windows XP重新設置預讀對象是允許的。具體方法是&#xff1a;打開注冊表編輯器&#xff0c;依次展開 HKEY_LOCAL_MACHINE&#xff3c;SYSTEM&#xff3c;CurrentControlSet&#xff3c;Control&#xff3c;Session Manager&#xff3c;Memory Management&#xff3c;PrefetchP…

基于LVQ神經網絡的人臉朝向識別

1案例背景 1.1人臉識別概述 人臉識別作為一個復雜的模式識別問題,近年來受到了廣泛的關注,識別領域的各種方法在這個問題上各顯所長,而且發展出了許多新方法,大大豐富和拓寬了模式識別的方向。人臉識別、檢測,跟蹤、特征定位等技術近年來一直是研究的熱點。人臉識別是人臉應用…

【制作npm包1】申請npm賬號、認識個人包和組織包

概述 在開發當中經常有一種現象&#xff0c;重復代碼寫了N多遍&#xff0c;再次寫同樣的邏輯就再次翻查以前的代碼邏輯。效率低下且容易出錯&#xff0c;封裝一個npm包的價值也不僅僅是給別人用&#xff0c;封裝一套屬于自己或者本部門的npm包也是相當有必要。 也許經常看到一…

RabbitMQ的5種消息隊列

RabbitMQ的5種消息隊列 1、七種模式介紹與應用場景 1.1 簡單模式(Hello World) 一個生產者對應一個消費者&#xff0c;RabbitMQ 相當于一個消息代理&#xff0c;負責將 A 的消息轉發給 B。 應用場景&#xff1a;將發送的電子郵件放到消息隊列&#xff0c;然后郵件服務在隊列…

【JS學習】Object.assign 用法介紹

Object.assign 是ES6中的一個方法。該方法能夠實現對象的淺復制以及對象合并。Object.assign 并不會修改目標對象本身&#xff0c;而是返回一個新的對象&#xff0c;其中包含了所有源對象的屬性。 例1 2個對象合并 const target { a: 1, b: 2 }; const source { b: 3, c: 4…

【git】初次使用git上傳代碼到github遠程倉庫

目錄 0.前言1.新建代碼庫2.添加SSH公鑰2.1 前置準備2.2 Git 基本信息設置2.3 添加SSH Key 3.本地倉庫上傳到github3.1 建立本地倉庫并初始化3.2 初始化倉庫3.3 建立本地與github上新建項目鏈接3.4 同步github新建項目到本地3.5 添加本地文件到緩存區3.6 為上傳文件添加注釋3.7 …

注冊中心Eureka和Nacos,以及負載均衡Ribbon

1.初識微服務 1.1.什么是微服務 微服務&#xff0c;就是把服務拆分成為若干個服務&#xff0c;降低服務之間的耦合度&#xff0c;提供服務的獨立性和靈活性。做到高內聚&#xff0c;低耦合。 1.2.單體架構和微服務架構的區別&#xff1a; 單體架構&#xff1a;簡單方便&#…

TS基本語法

一、安裝 npm install -g typescript 或者 cnpm install -g typescript 或者 yarnlobal add typescript二、運行 tsc xxxx.ts注意&#xff1a;如果電腦上面沒有安裝過cnpm&#xff0c;請先安裝cnpm npm install -g cnpm --registryhttps://registry.npm.taobao.org注意&…

數字圖像處理-AWB跳變

1、自動白平衡&#xff08;AWB&#xff09;算法是相機中常用的圖像處理技術&#xff0c;它能夠自動調整圖像中的白平衡&#xff0c;使得圖像中的顏色更加真實、自然。然而&#xff0c;在實際應用中&#xff0c;AWB算法也存在著一些問題&#xff0c;例如AWB跳變&#xff08;Whit…