
通過 Python 使用 當當開放平臺 API 實現書籍推薦系統
情感人工智能計劃:情感分析與狀態轉換
[User Query] -> [Sentiment Analysis] -> [Software Response Array] -> [Neutral Response] [Positive Response] -> [Automatic Query for Additional Data] [Locate Positive Data] [Activate or Skip Response] [Negative Response] -> [Automatic Query for Additional Data] [Locate Tempering Data] [Activate or Skip Response] |
對用戶查詢的每個回復都由一系列句子甚至操作組成。這些額外的操作會根據情感狀態觸發,代表用戶獲取額外的數據,只有在認為有利的情況下才返回給用戶。 當然,用戶仍然可以明確要求獲得這些數據,但關鍵在于讓軟件與用戶產生共鳴,通過積極的數據點為對話 “加油打氣”。
讓我們舉一個例子,用戶要求查看當天的股票圖表。數據看起來令人失望。 用戶可能會說 “我對這些財務數據很不滿意 “或 “哦,太好了”。對于當前狀態,軟件可以包含三種可能的回復,如下圖所示:
用戶詢問:”我對這些財務數據真的很不滿意”。 情感情緒:消極 軟件狀態:已向用戶提供股票價格。 可提供的答復: “請說出股票代碼” “雖然數字有所下降,但 30 天移動平均線仍處于正值范圍內”。 “數字確實是積極的,我們是否也應該審查一下數量?”
在上面的例子中,由于用戶在購買股票時出現了虧損,軟件判斷出了用戶的負面情緒。對話式用戶界面的典型反應可能是簡單地提示用戶詢問另一個股票代碼。 不過,一旦確定了情緒,軟件就可以主動獲取股票的 30 天移動平均線,如果是正面的,就會讓用戶知道這一利好消息。 如果附加指標是負值,軟件可以搜索另一個指標(60 天移動平均線、成交量、YTD 漲幅等),直到找到正值指標或搜索完畢。 同樣,如果用戶對股價表達了明顯的積極情緒,軟件或許也會主動要求查看股票成交量。
綜上所述,情感顯然在形成情緒反應方面發揮著重要作用。讓我們來詳細了解一下。
在對話式用戶界面中測量情緒的首要條件是檢測特定對話中的積極或消極情緒。具體來說,我們要檢測的是人與計算機之間的對話。 在這種情況下,簡短的鍵入命令已被流暢的句子所取代。因此,用戶在與軟件對話的同時,也在為某個目標執行任務。
如果用戶說了一個聽不清或無效的短語,計算機通常會用一個 “包羅萬象 “的短語來回應,要求用戶重復問題或提供一個選項列表。這可能是不必要的,甚至會引起用戶的不滿。 提前發現用戶的挫敗感,并為用戶提供完成任務的替代方案,可能會更有優勢。
要檢測用戶的挫敗感,我們可以利用情感分析。具體來說,我們可以嘗試測量句子中的積極程度,并在整個對話過程中跟蹤這種情緒水平。 如果水平低于某個閾值,軟件就會采取糾正措施,以友好的方式為用戶提供幫助,或者至少表示出同情。
下面是一個比較傳統的軟件交互示例。請注意用戶是如何在電腦播放了錯誤的歌曲后表示沮喪的。然而,電腦并沒有識別出用戶的命令,只是沒有回復。
Hello, what song would you like to play? > Play a random song from Britney Spears. Playing music from Green Day. > No, I said Britney Spears. … [unrecognized phrase, no response from computer] … > Play Britney Spears. Please state the name of a song. > Play Toxic from Britney Spears. Ok, playing Toxic from Britney Spears. |
在上述對話中,計算機不再回復帶負電荷的口語短語,原因很簡單,沒有一個詞與程序的任何關鍵短語相匹配。我們很幸運,在這種情況下,用戶會再次嘗試,并以不同的形式重新發出新的詢問。 對于某些用戶來說,我們可能就沒那么幸運了,在這種情況下,用戶會直接退出軟件并放棄。計算機會識別新的短語,推進其內部狀態(以確定一首特定的歌曲),并要求用戶說出要播放的歌曲。
試想一下,如果把對話改成這樣
Hello, what song would you like to play? > Play a random song from Britney Spears. Playing music from Green Day. > No, I said Britney Spears. I’m sorry, could you repeat the name of the song? > Toxic. Ok, playing Toxic from Britney Spears. |
在上面的對話中,我們可以看到更加流暢的交互。事實上,當用戶第一次表示沮喪時,電腦甚至表現出了同理心。 通過更像人類的方式做出反應,用戶會感到安心,甚至會覺得使用軟件更愉快。
此外,請注意計算機是如何跟蹤對話上下文的。在用戶發出播放歌曲的請求后,對話用戶界面將其上下文設置為 “播放歌曲”。 雖然播放的是錯誤的歌曲(來自 Green Day 而不是 Britney Spears),但 “播放歌曲 “的語境仍然有效。 當用戶做出 “不,我說的是布蘭妮-斯皮爾斯 “的否定回答時,軟件就會理解用戶想要播放一首歌(這就是我們當前的狀態),并將上下文主題從 “綠日 “更新為 “布蘭妮-斯皮爾斯”。 現在,計算機可以詢問是哪首歌曲,因為它已經知道歌手和任務,用戶只需說出歌名即可。
我們可以深入研究上述示例場景的狀態機轉換。軟件狀態可能如下所示:
{ sentiment: neutral, action: null, subject: null, song: null } Hello, what song would you like to play? > Play a random song from Britney Spears. { sentiment: neutral, action: playing_a_song, subject: “Green Day”, song: “random” } Playing music from Green Day. > No, I said Britney Spears. { sentiment: negative, action: playing_a_song, subject: “Britney Spears”, song: null } I am sorry, could you repeat the name of the song? > Toxic. { sentiment: neutral, action: playing_a_song, subject: “Britney Spears”, song: “Toxic” } Ok, playing Toxic from Britney Spears. |
在上述狀態流程中,請注意軟件的內部變量是如何根據情感觸發進行轉換的。 最初,內部狀態被設置為播放某位藝術家的歌曲。當用戶表示對歌手的理解有誤時(通過語音識別失敗),負面情緒就會被檢測到,并導致主題的轉換。 此外,歌曲值被設置為空。現在軟件會要求用戶提供歌曲值,此時狀態轉換就可以完成了。
既然我們已經了解了情感分析對于確定人與計算機之間對話的狀態有多么重要,那么讓我們來深入了解一下計算情感的細節。
很明顯,有些關鍵詞和短語會讓人產生消極或沮喪的情緒。如果我們能從這些短語中找到關鍵字,就能檢測到用戶的情緒變化,并做出更恰當的回應,幫助引導用戶完成任務。
測量對話情感的一種方法是通過人工智能和自然語言處理,以及機器學習和情感分析。
情感分析有多種不同的方法,每種方法的準確度各不相同。基本技術包括簡單的關鍵詞搜索,如使用 AFINN 詞表或其他基于詞典的算法。基于人工智能的技術包括訓練有素的情感分析,其準確度往往高于非人工智能技術。
? 請注意,我們即將進入一些細枝末節的數據科學內容!如果你愿意,可以 直接跳到 演示!
舉例說明基于關鍵詞的情感分析與人工智能機器學習模型之間的區別,我們可以在一個大型 Twitter 數據集上 進行一些簡單的準確性測試。
該數據集包含特定時間內記錄的 160 萬條推文。通過檢測推文正文中的快樂 ?? 或悲傷 ?? 表情符號,每條推文都會被自動 評分 為具有積極或消極情緒。
下表顯示了使用不同算法進行的情感分析準確性測量結果。
情感分析的準確性很難做到恰到好處。 標準的基于關鍵字的方法由于只考慮了一系列情感化的術語,因此準確率較低。此外,基于非機器學習的算法無法通過從訓練集中學習更多特征來提高準確率。 相比之下,機器學習算法能夠在更大的數據集中識別更多的特征,從而在更大的數據量中提高 準確性 。
讓我們來看看 AFINN 詞表在情感分析方面的準確性如何。AFINN 是一個英文單詞列表,它為不同的情感詞匯設定了 -5 到 +5 之間的分數。這些詞語都是人工標注的。
我們可以使用 R 來加載 Twitter 數據集,并處理一小部分數據子集,以進行情感分析的準確性評分。
首先,我們將使用以下 R 軟件包:
packages <- c(‘syuzhet’, ‘data.table’, ‘caTools’, ‘slam’, ‘tm’, ‘SnowballC’, ‘randomForest’, ‘xgboost’) if (length(setdiff(packages, rownames(installed.packages()))) > 0) { install.packages(setdiff(packages, rownames(installed.packages())), dependencies=T) } library(syuzhet) library(data.table) library(caTools) library(tm) library(randomForest) library(xgboost) |
接下來,我們可以使用以下代碼讀取 Twitter 數據集,進行情感分析和準確性測量。
data <- fread(‘training.csv’, header=F) names(data) <- c(‘sentiment’, ‘id’, ‘date’, ‘query’, ‘user’, ‘text’) data$sentiment <- as.factor(data$sentiment) set.seed(777) spl <- sample.split(data$sentiment, 0.05) mdata <- subset(data, spl == TRUE) spl <- sample.split(mdata$sentiment, 0.7) train <- subset(mdata, spl == TRUE) test <- subset(mdata, spl == FALSE) train$sentimentp <- train$sentiment == 4 test$sentimentp <- test$sentiment == 4 train$afinn <- apply(train, 1, function(row) { get_sentiment(row[“text”], method=’afinn’) }) train$positive <- train$afinn >= 0 table(train$sentimentp, train$positive) (10952 + 25244) / nrow(train) |
運行上述代碼后,我們發現 AFINN 對 Twitter 數據集進行情感分析的準確率為 64.64%。這當然比隨機概率要好,但還有待提高。
我們還可以使用機器學習人工智能方法檢查 Twitter 數據集的情感分析準確性。為此,我們首先要為數據集中的術語建立一個語料庫。 這實際上就是我們的術語詞典。然后,我們刪除標點符號、停止詞和數字,并使用詞干法使同一詞的變體變得常見。 最后,我們使用稀疏術語縮小字典范圍,只保留在所有文檔中出現頻率較高的術語。這有助于加快機器學習算法的訓練時間。
我們的最終結果是一個文檔術語矩陣,由語料庫中每個術語的列和每個文檔的行組成。每個單元格中的值與該術語在文檔中出現的頻率相對應。 文檔術語矩陣是一種有用的文本編碼方式,可用于各種自然語言處理任務,如 流行話題 、 文檔分類 、 關鍵詞搜索 ,甚至 檢測黑客推文 。
下面是一個建立語料庫的例子。
corpus <- Corpus(VectorSource(train$text)) tdm <- DocumentTermMatrix(corpus, list(removePunctuation = TRUE, stopwords = TRUE, stemming = TRUE, removeNumbers = TRUE)) sparse <- removeSparseTerms(tdm, 0.9997) tdmtrain <- as.matrix(sparse) tdmtrain <- as.data.frame(tdmtrain) tdmtrain$y <- as.numeric(train$sentimentp) corpusTest <- Corpus(VectorSource(test$text)) tdmtest <- DocumentTermMatrix(corpusTest, control = list(dictionary = Terms(sparse))) tdmtest <- as.matrix(tdmtest) tdmtest <- as.data.frame(tdmtest) tdmtest$y <- as.numeric(test$sentimentp) |
在上面的代碼中,你可以看到我們是如何從 Twitter 數據集創建文檔術語矩陣的,這實際上是將推文編碼為每個術語的數字數組。 由于每個文檔現在都是一行,列數相同(每個術語一列),因此我們的數組可以很好地用于機器學習算法的處理。
我們還設置了一個測試文檔術語矩陣,它使用與訓練集相同的單詞字典。這意味著測試數組將包含與訓練數組相同的列數,因此可用于我們創建的任何訓練有素的機器學習模型。
讓我們從邏輯回歸模型開始。
對于我們首次嘗試的情感傾向分析準確性,我們可以嘗試一個簡單的邏輯回歸模型。我們將把文檔術語矩陣的所有列(所有術語)傳入該算法,并根據 “y “值(表示正面情感)進行訓練。代碼如下所示。
sentimentLog <- glm(y ~ ., data=tdmtrain, family=’binomial’) predictLog <- predict(sentimentLog, type=’response’) c <- table(train$sentimentp, predictLog >= 0.5) (c[1,1] + c[2,2]) / nrow(train) predictLog <- predict(sentimentLog, type=’response’, newdata=tdmtest) c <- table(test$sentimentp, predictLog >= 0.5) (c[1,1] + c[2,2]) / nrow(test) |
在訓練邏輯回歸模型后,我們發現訓練集的準確率為 76%,測試集的準確率為 67%。這與 AFINN 相比,雖然進步很小,但也是一種進步。
對于下一步的情感分析準確性測量,我們可以嘗試使用 XGBoost 算法。下面是代碼示例。
n <- ncol(tdmtrain) set.seed(777) t <- as.matrix(tdmtrain) t2 <- as.matrix(tdmtest) sentimentXG <- xgboost(data = t[,-n], label = t[,n], eta=0.2, nround = 5000, subsample = 0.5, colsample_bytree = 0.5, objective = “binary:logistic”) results <- predict(sentimentXG, t) c <- table(t[,n], results >= 0.5) (c[1,1] + c[2,2]) / nrow(train) results <- predict(sentimentXG, t2) c <- table(t2[,n], results >= 0.5) (c[1,1] + c[2,2]) / nrow(test) |
在對模型進行訓練后,我們發現訓練集的準確率為 84%,測試集的準確率為 67%。這略高于邏輯回歸模型
利用支持向量機(SVM)模型,我們可以進一步提高情感分析的準確率。使用更大的訓練數據集,在交叉驗證集上可以達到約 82% 的準確率。
通過更大的數據集和更長時間的訓練,可以進一步提高準確率。其他技術還包括使用 遞歸神經網絡 來考慮情感重要術語在句子中的位置。
既然我們已經解決了如何檢測對話情緒的問題,那么我們就可以開始討論幫助用戶的解決方案了。 情緒分析為我們提供了中性、積極或消極情緒的指標,可用作觸發機制,推進對話式用戶界面或人工智能例程的內部狀態。
我們在上面已經看到了一些例子,說明這樣的狀態機可能是什么樣子的。讓我們試著實現一個!
作為書評應用程序簡單對話式用戶界面的首次嘗試,我們將實現一個基本的聊天機器人界面。 為了保持代碼簡潔易懂,我們將只使用少量硬編碼的關鍵字和回復,聊天機器人對話式用戶界面將識別并作出回應。
以下主題將引起回應:
hello Alice in wonderland Pemberley Bye Help |
我們將在一個鍵/值對中存儲關鍵詞及其相關回復,我們稱之為 “大腦”。我們只需比較用戶的文本(或語音,如果使用語音識別),即可在機器人大腦中找到任何匹配的關鍵詞。 如果發現匹配,機器人只需回復結果值即可。
下面是使用書評對話式用戶界面 1.0 版聊天的示例會話。
> hello Hello, please say the name of a book to get a review. > how about Alice in Wonderland? The book Alice in Wonderland has a rating of 4 stars. > I love Alice in Wonderland! The book Alice in Wonderland has a rating of 4 stars. > What about Pemberley? The book Pemberley has a rating of 2 stars. > Hm, Pemberley sounds like a book I would dislike. The book Pemberley has a rating of 2 stars. > You’re not much help, pretty sad! Please say the name of a book to get a review. |
請注意,在上述與聊天機器人的對話中,用戶一開始只是說 “你好 “來問候機器人。機器人會識別這個關鍵詞,因為它與大腦中的一個硬編碼術語相匹配,并輸出相關的回復。 指導用戶如何與機器人互動以獲取書評。
接下來,用戶詢問《愛麗絲夢游仙境》這本書的內容,聊天機器人會簡單明了地回答這本書的評分。接下來是最重要的部分!
當用戶發出 “我喜歡《愛麗絲夢游仙境》!”的感嘆時,聊天機器人只是簡單地回復了這本書的評分。這是意料之中的,因為軟件的運行完全符合預期。 它只是簡單地匹配一個關鍵詞并給出一個值,并沒有進一步確定用戶的情感傾向特征。
同樣,第二個書評請求包含一個負面評價。同樣,聊天機器人沒有任何明顯的表情,只是簡單地回復了書的評分。毫無疑問,用戶對軟件感到不滿,于是說出了自己的感受并終止了應用。
稍后,我們將把 “書評 “應用程序升級到 2.0 版本。在那里,我們將添加情感!不過,首先讓我們快速瀏覽一下原始版本的代碼。
如果你好奇,第一個書評應用程序的代碼如下所示。你可以看到大腦的請求和響應模型是多么簡單。 我們只需存儲鍵/值對,并使用簡單的 indexOf()
命令與用戶輸入進行匹配。雖然這款軟件可能不會贏得任何獎項,但它卻能讓人明白,我們要實現的是一款簡單的對話式用戶界面應用程序。
var brain = [ { key: “hello”, value: “Hello, please say the name of a book to get a review.” }, { key: “alice in wonderland”, value: “The book Alice in Wonderland has a rating of 4 stars.” }, { key: “pemberley”, value: “The book Pemberley has a rating of 2 stars.” }, { key: “bye”, value: “Goodbye.” }, { key: “help”, value: “Please say the name of a book to get a review.” } ]; function respond(input) { var result = “Sorry, I don’t understand.”; input = input.toLowerCase().replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g, ”); for (var i in brain) { var response = brain[i]; if (input.indexOf(response.key.toLowerCase()) != -1) { result = response.value; break; } } return result; } |
您可以在 https://jsfiddle.net/dbyzztxp/1/ 上找到該聊天機器人的完整代碼和演示。
我們剛剛看到的書評應用程序就是一個簡單的例子,它利用對話式用戶界面與用戶聊天。機器人沒有任何情緒表達,只是以簡單的方式回答用戶的詢問。 由于軟件只需匹配關鍵字并做出響應,因此沒有對用戶的輸入特征或情緒傾向進行測量。
現在,我們要給機器人升級,讓它擁有一些內在情感!
下面是使用書評會話用戶界面 2.0 版聊天的示例會話,其中使用了情感反應。請注意,對話變得多么不同,甚至可以說是親密無間。
> hello Hello, please say the name of a book to get a review. > Hello, the other version of you was quite bad. Perhaps, a good book would cheer you up. Please say the name of a book to get a review. > Ok, how about Alice in Wonderland? The book Alice in Wonderland has a rating of 4 stars. > I love Alice in Wonderland! That’s great to hear that you enjoy the book. You might also like “The Annotated Alice: The Definitive Edition” by the same author, with a rating of 4.5. Would you like to hear about it? > No thanks. What about Pemberley? The book Pemberley has a rating of 2 stars. > That’s too bad. Pemberley doesn’t sound too good. Although this book has quite a low rating, you might enjoy “Mrs Darcy’s Dilemma”, by Diana Birchall, with a rating of 3.4. Would you like to hear about it? > I dislike that book too. Can you help? Retrieving book reviews can actually be quite easy! Just say the name of a book to get a review. > This is great! But, time to go. Bye. I’m glad to have helped! Please come back soon. Goodbye. |
和以前一樣,用戶以 “你好 “的問候語開始與聊天機器人對話。聊天機器人檢測不到用戶的任何情緒,只是簡單地回復了一句標準問候語。到目前為止,這與我們的第一個版本沒有什么不同。
接下來,用戶對上一版本軟件的不良功能提出了意見。 具體來說,用戶在信息中再次使用了 “hello”(發起另一次問候),但同時也使用了 “bad”(這恰好是我們的機器人大腦中用于衡量情感的一個關鍵詞短語),表達了明顯的負面情緒。
聊天機器人匹配了 “hello “一詞,但它并沒有簡單地回復默認值,而是對句子進行了情感測量。檢測到情緒是負面的,機器人就會做出回應,提供一篇書評來幫助用戶振作起來。酷斃了
接下來,用戶要求對 “愛麗絲夢游仙境 “進行評論。聊天機器人會再次進行情感測量,檢測出中性回復,并回復該情感的相關值。 這恰好是一個標準的中性回復,與第一版應用程序相同。不過,在聽到 4 星好評后,用戶會感嘆道:”我喜歡《愛麗絲夢游仙境》!” (就像上一個例子中的用戶一樣)。(就像上一個例子一樣)。 這就是情感真正發揮作用的地方!
對話式用戶界面中的人工智能會對用戶輸入的句子進行情感測量。由于 “愛 “這個詞對應的是積極情緒,因此聊天機器人會做出積極的回應。 在這種情況下,回復是推薦同一作者的類似書籍。讓我們考慮一下這樣做的后果。
聊天機器人剛剛成功測量了用戶回復的情緒,并將其確定為積極的。這與剛剛檢索到的某本書的評論相關聯。 軟件可以推斷出用戶可能喜歡這本書(也喜歡作者),從而推薦同一作者的類似書籍。
用戶并沒有明確要求提供類似書籍。我們也沒有在網頁用戶界面上添加可能會分散注意力的信息,如相關書籍、類似書籍和他人已購買書籍的列表。 相反,我們專門針對用戶表達的積極情感情緒,并根據這一指標推薦同一作者的另一本書。
通過調整用戶的情感傾向,我們可能剛剛提高了軟件的使用價值(更不用說圖書銷售了!)。
您可以跟進聊天機器人會話對話的其余部分。用戶詢問另一篇書評,這次是關于 “彭伯里 “的(就像第一個版本的例子一樣)。聊天機器人會檢測到中性情緒,并回復該書的普通評分。 不過,這次當用戶對評論表達負面情緒時(因為這本書只有 2 星評論),聊天機器人就能根據檢測到的負面情緒做出相應的回應。
在檢測到負面情緒后,對話式用戶界面會檢索與該主題相關的負面反應,即向用戶提供由不同作者撰寫的評分較高但類似的書籍。
我們再次挖掘用戶情感的隱藏價值,利用潛在機會。 此時,用戶可能會直接退出應用程序(負面情緒有可能會導致這種情況!),而機器人則試圖通過提供另一本書來重新確定對話的語境。 這可以提高應用程序的用戶留存率,并通過推薦相關(和情感主題)書籍促進圖書銷售!
在結束對話時,用戶表示他們也不喜歡推薦的書(這讓我們很失望),并向應用程序尋求幫助。聊天機器人再次檢測到了用戶求助中的負面情緒。 機器人與用戶產生共鳴,試圖讓用戶的情緒變得更積極,提醒用戶檢索其他書評很容易。隨后,機器人還提供了檢索另一篇書評的說明。
在我們的書評對話式用戶界面聊天機器人中加入情感元素后,我們剛剛看到了一些非常有趣的結果。讓我們看看這一切是如何實現的。
與第一個版本一樣,我們也有一個包含鍵/值對響應的大腦數據庫。但這次不同的是,對于每個匹配的關鍵詞,我們都提供了三個不同的對應值。每個值之間用情感分隔。
下面是這種簡單數據結構的示例。
var brain = [ { key: “hello”, value: { neutral: “Hello, please say the name of a book to get a review.”, positive: “Hello, please say the name of a book to get a review.”, negative: “Perhaps, a good book would cheer you up. Please say the name of a book to get a review.” } }, { key: “alice in wonderland”, value: { neutral: “The book Alice in Wonderland has a rating of 4 stars.”, positive: “That’s great to hear that you enjoy the book. You might also like \”The Annotated Alice: The Definitive Edition\” by the same author, with a rating of 4.5. Would you like to hear about it?”, negative: “Although this book might be disappointing, you might enjoy \”The House at Pooh Corner\”, by A.A. Milne, with a rating of 4.3. Would you like to hear about it?” } } … ]; |
請注意,每個術語都有多個回復,并根據檢測到的情緒加以區分。 雖然此示例中的響應是針對特定書籍硬編碼的,但我們可以很容易地看到如何動態查詢 API,并將這些結果納入針對特定情感的響應中。
主要的 respond()
方法與第一個版本幾乎完全相同,但包括了情感測量。
function respond(input) { var result = “Sorry, I don’t understand.”; input = input.toLowerCase().replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g, ”); for (var i in brain) { var response = brain[i]; if (input.indexOf(response.key.toLowerCase()) != -1) { var sentiment = getSentiment(input); result = response.value[sentiment]; break; } } return result; } |
上述方法雖然與原始版本相似,但現在增加了一行來確定情感。它使用得出的情感值來檢索與匹配關鍵詞相關的回復。 這樣,任何一個主題都可以找到多個潛在的答案。
計算 情感的代碼只是一個硬編碼的關鍵詞列表,其中包含了一些帶有情感色彩的術語(與前面討論過的 AFINN 情感測量模型不太一樣)。這樣做是為了保持演示的簡單性。 不過,正如我們前面所展示的,使用人工智能機器學習模型可以進行更精確的情感計算。
您可以在 https://jsfiddle.net/z0rkyq4L/2/ 上找到該聊天機器人的完整代碼和演示。
很顯然,除了簡單的關鍵詞和短語匹配之外,對話式用戶界面還有更多需要識別的地方。畢竟,在考慮用戶與軟件對話時的情感傾向時,我們剛剛看到了情感的強大作用。
傳統的對話式用戶界面會忽略情感等上下文屬性,并傾向于通過簡單的語句匹配對用戶的詢問做出簡單的回復,而情感則能將聊天機器人的對話提升到一個全新的水平。
通過添加情感檢測功能,我們能夠增強對話式用戶界面,與用戶更緊密地結合在一起,對他們的情緒狀態感同身受,并做出相應的反應。 通過使用情感識別回復,對話式用戶界面能夠根據用戶對主題的情感推斷推薦產品,從而挖掘潛在的錯失機會。
當檢測到積極情緒時,聊天機器人會選擇特定的回復類型和產品推薦。同樣,負面情緒會幫助聊天機器人將對話引向其他方向,為用戶提供其他產品推薦和幫助。
考慮到情感分析在對話式用戶界面中的效果,我們或許可以進一步考慮傳統上隱藏的屬性。 通過認識到更多語音特征(包括情感、情緒、語調、響度、性別和其他各種指標)的重要性和機遇,我們有望在計算機與人類交互之間建立更緊密的聯系。
該項目的 源代碼 可在 GitHub 上獲取。
原文鏈接: https://www.primaryobjects.com/2016/10/24/emotional-artificial-intelligence/