基於IBM AI平台,引入語音識別和自然語言理解服務。
人工智慧是當下的熱門話題。 無論採用何種系統,與人工智慧相關的都是最先進的生產力。 筆者主要在協作領域工作,協作領域有很多AI應用場景,比如可以自動製作會議紀要的智慧型會議系統(不僅僅是語音識別)。 在本文中,筆者考慮將AI整合到郵件系統中,以製作智慧型語音郵件查詢功能。 主要應用場景是在使用者不方便輸入文字時快速查詢郵件。
免費試用 IBM Cloud
使用 IBM Cloud Lite 快速輕鬆地構建您的下乙個應用程式。 您的免費帳戶永不過期,您將獲得 256 MB 的 Cloud Foundry 執行時記憶體和 2 GB 的 Kubernetes 集群儲存空間。 了解所有詳細資訊並決定如何開始。 要實現語音查詢,我們需要執行以下操作:
錄音和上傳。 作者使用 H5 的語音功能進行錄音和語音上傳。 語音識別。 無論是小冰、智慧型音箱,還是IBM的辯論機械人,它們都與語音互動。 自然語言理解。 光有語音識別是不夠的,人類的語言是非常隨意的,當使用者說不同的話時,人工智慧也應該理解使用者在說什麼。 自然語言理解的難度其實是相當大的,這個服務的能力強不強,直接影響到系統對人類思想的理解。 人工智慧平台如何處理這項服務以及他們如何做到這一點存在很多差異。 電子郵件查詢和顯示。 這些是更基本的能力。 作者使用了 Domino 伺服器的郵件和 REST 服務的整體流程圖
圖1整體流程圖。
Domino V10 現在支援 nodeJS 開發,作者也使用 nodeJS 來開發這個系統。
為了方便將本系統整合到其他應用程式中,筆者使用了 H5 的多**處理能力。
這似乎應該很簡單,畢竟太多的移動應用程式使用語音。 但是當我真的想找到乙個現成的 nodejs 示例時,確實花了一些時間。 最後,github 更強大。 請參考以它為起點,可以節省大量時間。 此示例同時支援 Windows 和 Linux。 但是這個例子是上傳的,我們需要把它的一部分改成音訊。 例如:控制項它應該更改為音訊控制項
。還有:
清單 1修改檔案。
var filename = generaterandomstring() '.w**';var file = new file([blob], filename, ) 錄製引數是根據語音識別平台的要求而定的,通常為單聲道,16000取樣率:captureUserMedia(function(stream) )
通過這個修改後的示例,使用者可以記錄和上傳瀏覽器,以在伺服器端生成乙個 w** 檔案。
語音識別相對簡單,可以使用 IBM 的 Speech to Text 語音識別服務。
首先,您需要註冊乙個 IBM ID,以便在 IBM Cloud 站點上免費使用 IBM Cloud 服務。 在 IBM Cloud Services 中,在 AI 類別下找到 Speech to Text 服務,您很快就能設定語音識別服務了。 圖2語音對語音服務。
Watson 的語音識別服務提供 NodeJS API。 安裝 watson-developer-cloud 軟體包允許我們使用 NodeJS程式設計:
npm install --s**e watson-developer-cloud
有關更多資訊,請參閱文件,如下所示: 清單 2呼叫語音翻譯服務。
var params = ;// create the stream.var recognizestream = speechtotext.recognizeusingwebsocket(params);.
將我們上傳的錄音傳送到 Watson 服務以獲取識別文字:
// pipe in the audio.fs.createreadstream(filename).pipe(recognizestream);
自然語言理解是本文的重點。 IBM大名鼎鼎的沃森能參加辯論賽,他的自然語言理解能力應該相當不錯。
登入到 IBM Cloud 控制台,首先在 AI Services 類別中找到 Natural Language Understanding (NLU)。
圖3自然語言理解服務。
進入 NLU 服務後,可以建立新服務。 為了便於理解,請為您的服務想出乙個合適的名稱。 作者姓名為:Natural Language Understanding-mailquery。
圖4建立服務。
在以下各節中,預設值為“免費”。 請注意,最後乙個粗體文字顯示:輕量級服務將在 30 天不活動後刪除。 為了防止刪除,您必須不時使用積分。 吐出來,30天就短了一點。
圖5*選擇。
最後,單擊下方的“建立”按鈕。
建立後,您看到的不是服務,而是入門文件。
圖6入門文件。
我們都已經完成了入門文件中的步驟,不要混淆,只需單擊入門上方的“管理”鏈結即可。
在管理頁面上,您可以首先看到用於訪問服務的憑據和 URL
圖7憑據和 URL
使用 curl 呼叫服務也是為你寫的,服務中的憑證是根據當前服務自定義的,值得稱讚。
圖8 curl **
筆者習慣了使用Firefox的restclient,所以順便介紹一下如何使用restclient呼叫服務。 呼叫介面如下:
圖9 restclient
有兩點需要注意:
新增基本認證。 使用者名稱是固定的 apikey; 密碼是 API 金鑰值。 需要新增 HTTP 頭 content-type:Application JSON,HTTP 響應與 demo 相同。
圖10HTTP 響應。
其中包括情感分析和關鍵字分析。
然後呢? 在 NLU 中,沒有 then。 在其他平台上使用過自然語言分析的同學一定很困惑,為什麼沒有其他定製方法? IBM 就是 IBM,我們需要為此構建乙個 Knowledge Studio 服務,然後將其部署到我們剛剛建立的 NLU 中。
點選上面的目錄,然後在 AI 類別中找到 Knowledge Studio。
圖11 knowledge studio
轉到 Knowledge Studio。
圖12建立 Knowledge Studio 服務。
單擊下面的“建立”按鈕以建立服務。
建立後,單擊啟動工具。
圖13啟動該工具。
單擊上方的建立工作區。
圖14建立工作區
每個工作區都相當於乙個語言分析環境配置。
圖15工作區引數。
注意:如果語言選擇為中文,則某些功能不可用,因此我們使用英語。
工作空間建立完成後,將自動進入其配置介面。 現在,我終於感覺到了一點,對吧?
圖16工作區介面。
讓我們從一些概念開始:
documents:用於訓練服務的文件,其中應包含許多典型的例句。 實體型別:實體型別。 例如,如果我們的語言與電子郵件相關,那麼實體類別應該有發件人、傳送時間、關鍵字等。 在這種情況下,實體型別是最重要的。 關係型別:關係的類別。 定義實體類別之間的關係。 在這種情況下,關係類別並不重要,所以再舉乙個例子,我喜歡踢足球。 在我和踢球之間,在踢球和足球之間,有一種關係型別。 我們可以隨心所欲地命名這些關係,經過訓練後,服務應該知道使用者的語言中是否存在這樣的關係並識別它們。 例如,訓練後,使用者說“我喜歡打排球”,服務也應該明白語句中存在相同的理性型別。 dictionary:詞典。 我們分析的語句中的一些實體型別可能是詳盡無遺的,最典型的例子是在預訂服務中,其中的起點和終點是一些城市的名稱。 讓我們從定義實體型別開始。
圖17 entity type
單擊“新增實體型別”。 新增同義詞傳送方實體型別。 救。
圖18新增實體型別
接下來,再新增 2 個:
圖19新增更多實體型別
顧名思義,這 3 種實體型別分別代表發件人、傳送時間和關鍵字。 關鍵字用於全文搜尋。
我們知道關係型別是實體型別之間的關係,為了測試關係型別,我們定義了乙個mailkeyword實體型別,它要麼是郵件詞,要麼是郵件詞。 郵件或郵件應出現在問題中。
圖20定義 MailWord
接下來,讓我們定義字典。
圖21建立詞典。
單擊建立詞典。 取名 maildic。 我們想給 mailkeyword 乙個字典值。 所以實體型別是 mailkeyword。
圖22新增 mailkeyword 字典值。
單擊新增條目。 為表面形式寫郵件,為詞性選擇名詞。
圖23將 mailkeyword 字典值設定為 1
再新增乙個值 mails。
圖24將 mailkeyword 字典值設定為 2
當查詢語句為 mail 或 mail 時,服務會將其標識為 mailkeyword。
接下來,是時候提供樣本進行分析了。 您可以使用 Excel 編輯 CSV 檔案。 示例如下:
圖25示例列表。
第一列是示例語句編號(任意編號,不一定是數字)。 第二列是示例語句。
在“文件”頁上,單擊“上載文件集”。
圖26上傳檔案。
選擇 CSV 檔案並上傳。
圖27開始上傳。
上傳後,我們會發現有2個文件集,其實我們只上傳了1個檔案,另外乙個都是來自系統。 您會注意到有乙個“建立注釋集”。
註解是標記的意思,機器還是個白痴,你要告訴它如何分析這些例子中的句子,然後讓它學習。
那麼為什麼要建立標註集,因為在實際製作中,乙個檔案中可能有很多示例,可以將它們分給很多人來完成標記任務。
圖28文件集和批註集
單擊“建立注釋集”(Create Annotation Sets)。
圖29建立注釋集
如果沒有人幫忙或樣品很少,可以選擇100%的樣品作為1套。 如果需要選擇注釋者,可以選擇自己。 也給這個集合起個名字,我們稱它為郵件。 將來訓練時需要此名稱。
單擊生成按鈕。 注釋集已構建。
圖30 annotation sets
現在我們已經構建了集合,讓我們在標記之前構建關係型別。
轉到“關係型別”頁面。
圖31建立關係型別
單擊“新增關係型別”按鈕。
我們將第乙個關係型別稱為 rsender。 這種關係被定義為 mailkeyword 和發件人之間的關係。
圖32定義 rsender 關係型別
同樣,我們總共定義了 3 個關係:
圖33定義其他關係型別
下一步是開始標記。
轉到“注釋任務”(Annotation Tasks) 頁面。
圖34注釋任務。
單擊“新增任務”按鈕。 進入以下介面。 系統會告訴您任務已構建,但註解集尚未放入。
圖35向任務新增批註。
檢查郵件。 單擊“建立任務”按鈕(此按鈕變慢,您需要變慢)。
圖36建立注釋任務。
現在,任務已設定:
圖37新增了注釋任務。
剛開始不熟悉的時候,我等了一會兒這個進度,但進度總是0%。 最後,我發現我應該做我自己的事情。 哈哈。
點選此任務:
圖38任務列表。
點選“注釋”按鈕。
圖39需要標記的列表。
對於每個示例語句,請單擊語句末尾的開啟鏈結。
在語句中選擇乙個或幾個單詞,然後選擇右側的“實體型別”。 例如:
圖40標記實體 1
直到完全標記:
圖41標記實體 2
注意:如果語句中的詞語有誤,可以點選上面的小眼睛進行消除,重複的詞語無法消除,IBM需要改進嗎?
選中“關係”選項卡。
圖42標記關係 1
選擇“郵件”(黃色)和“發件人”(綠色)。
圖43標記關係 2
在右側,選擇 rsender 關係。
圖44標記關係 3
同樣,定義其他關係。
圖45標記關係 4
實體型別和關係型別標記完成後,單擊“S**e”按鈕。
圖46儲存標記工作。
此按鈕更謹慎。
儲存後,單擊“開啟文件列表”按鈕返回樣本列表並繼續標記,直到標記完成。
標記完所有語句後,介面如下:
圖47所有標記都是完整的。
單擊“提交所有文件”以提交到“服務培訓”。
圖48提交標記文件 1
實際上,它還沒有提交。 您需要返回“注釋任務”介面。
圖49提交標記文件 2
選擇您剛剛標記的郵件,然後單擊“接受”按鈕。 我真的提交了。 完成的提交螢幕如下所示:
圖50馬克完成 1
返回 Annotation Task 介面:
圖51馬克·多恩 2
這需要大量的體力勞動,而機器做了一些事情。
轉到效能頁面。
圖52培訓介面。
單擊訓練結束評估按鈕。
圖53選擇培訓文件。
選擇“郵件”,然後單擊“訓練”按鈕。
圖54開始訓練。
接下來,泡一杯茶,休息 20 分鐘,直到訓練結束。 它似乎慢了一點,但與嬰兒學習說話相比,它仍然相當快。
當它結束時,它將顯示:
圖55培訓完成。
事實上,系統選擇大部分資料進行訓練,少量資料進行自檢。
圖56訓練結果。
因為它是樣本,所以通常是準確的。 如果實際收集的生產資料,則不一定。
接下來,我們轉到版本頁面。
圖57建立訓練結果的版本 1
執行此模型可以使用訓練結果對新樣本進行機器識別標註,然後在機器識別標註後手動標註。 現在沒有新示例,我們不單擊“執行此模型”。
匯出當前模型可以匯出,但在免費版本中不允許匯出。
建立版本是現在最重要的事情。 我點選這個按鈕。 生成版本。
圖58建立訓練結果的版本 2
新生成的版本如下:
圖59版本已生成。
接下來,敲黑板。 我們將把這個訓練有素的服務部署到 NLU。
單擊“部署”按鈕
圖60部署到 NLU 1
檢查自然語言理解。 點選下一步。
圖61部署到 NLU 2
選擇我們建立的 NLU,然後單擊部署。 出現乙個介面,告訴您它已經在部署中。 記錄此型號 ID。 我需要型號 ID 做什麼? 這樣做的原因是單個 NLU 可以使用多個模型。 使用 NLU 時,需要告訴 NLU 使用哪個模型來分析語言。
圖62部署到 NLU 3
好吧。 讓我們回到 NLU。
讓我們將 restclient 中的請求更改為:
清單 3為分析模型新增引數。
請注意模型引數。 NLU 分析的結果將具有我們的實體型別:
清單 4實體的分析結果。
, "disambiguation": ,"count": 1 },"disambiguation": ,"count": 1 },"disambiguation": ,"count": 1 }
我們可以將請求中的實體替換為關係,得到句子成分的關係分析,例如:
清單 5分析關係的結果。
讓我們將分析的陳述更改為我需要上週約翰·史密斯(John Smith)關於貓的郵件,分析結果也是一樣的。
回到 nodejs 程式設計。 Watson 為我們準備了乙個 nodejs 開發包(watson-developer-cloud)。 您可以單擊此處檢視開發套件的文件。 根據需要,我們專注於分析的實體部分。 根據文件,呼叫 NLU 的 **:
清單 6呼叫 NLU 服務。
var naturallanguageunderstandin**1 = require('watson-developer-cloud/natural-language-understanding/v1.js');var natural_language_understanding = new naturallanguageunderstandin**1();var parameters = , 'keywords': }
其中 querystring 是我們要分析的語句; 模型是我們訓練的分析模型。 正如我們在Firefox中看到的那樣,NLU服務以JSON形式返回分析結果。 由此,我們提取查詢的關鍵資訊:發件人、交貨時間和關鍵字。 請注意,可能有 1 個以上的關鍵字。
最初筆者希望使用多公尺諾的DQL查詢郵件,但DQL支援中文大約需要2-3個月的時間,於是筆者開發了多公尺諾REST服務來實現郵件查詢。
Domino 支援 REST 服務已經有很長一段時間了,無需程式設計即可預設使用。 但是我們希望這個REST服務是自定義的,這樣我們就可以使用Xpages的REST控制。
讓我們為查詢建立乙個新的 Xpages,並在 Xpages 上新增乙個 REST 控制項:
圖63REST 服務。
其中 mailq 是 rest 服務的名稱,nodejs 程式需要呼叫 ....nsf/….xsp mailq 查詢郵件。
在 REST 控制項的 Service 屬性中,新增 CustomRESTservice。 並在 DoPost 中編寫程式碼,分析查詢引數並構造 Domino 查詢語句來查詢郵件。
圖64REST 服務設定。
最後,將查詢結果返回給 nodejs。
清單 7郵件搜尋。
var dc = db.ftsearch(ftsearchstr);.while (doc != null) return list
效果測試,筆者沒有花心思在UI設計上,只是試試功能。
作者說,給我看上週約翰·史密斯的郵件,搜尋約翰·史密斯上週的電子郵件。
圖65測試效果 1
新增限定符,它就變成了上週約翰·史密斯(John Smith)關於貓的郵件這就是留給貓的全部。
圖66測試效果 2
關於UI操作,這個版本的方式是使用者點選藍色按鈕,然後開始說話,完成後再按綠色按鈕。 也可以只用1個按鈕製作,按下即可說話,抬起即可識別。
人工智慧將在各個專業領域蓬勃發展,不同領域的人工智慧技術也將有很大差異。 在筆者看來,在協作領域,人工智慧需要以人性化的方式理解人類的自然語言; 另一方面,需要整合專業系統,為使用者提供業務協助。 希望這篇文章能起到扔磚石的作用,激發讀者更深入的思考。
IBM Cloud Docs,了解 IBM Cloud 的功能以及如何開始使用。 IBM AI Services 檢視 IBM AI 服務的列表。 IBM 語音翻譯服務文件。 IBM Natural Language Understanding Services 文件。