1. 程式人生 > >學習工作記錄七

學習工作記錄七

學習工作記錄

這是第十四周。考完試了,開始認真做專案、刷程式碼、學建站了。

一 、 文獻閱讀

《Almond: The Architecture of an Open, Crowdsourced,Privacy-Preserving, Programmable Virtual Assistant》

www的文章,寫的很好,學到了很多

Abstract

本文介紹了Almond的架構,這是一個開放的,眾包的,隱私保護和可程式設計的虛擬助手,用於線上服務和物聯網。Thingpedia是一個開源API及其自然語言介面的眾包公共知識庫。我們的提案解決了虛擬助理技術面臨的四大挑戰:通用性,互操作性,隱私性和可用性。通用性由Thingpedia眾包解決,而互操作性由ThingTalk提供,ThingTalk是一種高階特定語言,通過開放API連線多個裝置或服務。為了保護隱私,使用者憑據和使用者資料,由我們的開源軟體ThingSystem管理,可以在個人手機或家庭伺服器上執行。Almond是第一個允許使用者以自然語言指定觸發操作任務的虛擬助手。儘管缺乏真實的使用資料,但我們的實驗表明,當熟悉其功能的使用者可以正確說出指令時,Almond可以理解大約40%的複雜任務。

I. INTRODUCTION
1.1 簡介

虛擬助手可以極大地簡化和改善我們的生活。今天,一個兩歲大的孩子可以通過簡單地說“Alexa,播放一首我最喜歡的歌曲”來播放她喜歡的歌曲。我們可以簡單地使用自然語言讓我們的虛擬助手與社交媒體互動,購買電影票,甚至管理我們的財務和醫療記錄。

虛擬助手最終可能是我們所有數字服務的介面。作為中介,虛擬助手將檢視我們的所有個人資料。 因此,從亞馬遜,蘋果,Facebook,谷歌到微軟等所有主要公司都在競爭創造最好的虛擬助手。就像今天有一個占主導地位的搜尋引擎一樣,是否會有一家專門的公司提供世界上占主導地位的虛擬助手?

1.2 Almond架構

Almond的架構
  • Thingpedia:是一個眾包儲存庫,包含用於任何裝置或服務的自然語言介面和開放API

  • ThingSystem:為了保護隱私,所有個人資料和憑證都儲存在ThingSystem中,ThingSystem的程式碼是開源的,可以在個人電話或家庭伺服器上執行

  • ThinkTalk:是我們開發的一種高階語言,用於將來自不同服務的開放API連線在一起

1.3 IFTTT(If This Than That)

Almond是唯一允許使用者以自然語言指定觸發器-動作命令的虛擬助手。例如,使用者可以指示Almond“在警報開啟時安全攝像頭檢測到動作時通知他”。Almond是可程式設計的:它可以將這樣的句子翻譯成ThingTalk程式碼,只要功能“通知”,“檢測安全攝像頭上的動作”和“警報開啟”都可以在Thingpedia中找到。

最接近的可用系統是If This Than That(IFTTT),它為使用者提供了將兩個API連線在一起的Web介面。然而,IFTTT沒有自然的語言介面,也沒有像ThingTalk這樣的正式語言,它無法處理“警報開啟時”等條件。

IFTTT 可以代替你執行各種強大的任務。在其中關聯多個賬戶,如Facebook、Twitter、Google日曆、印象筆記等,便可呼叫無數的觸發方案。當符合設定的條件時,便觸發相應的動作。如圖,當uber司機到來的時候,開啟飛利浦電燈;將做好的印象筆記傳送到slack群聊天中;讓亞馬遜Alexa與谷歌各App相連從而執行更多的功能。遺憾的是它們並不是靠自然語言來設定的。

II. ALMOND VIRTUAL ASSISTANT
2.1 通用性

本節介紹了Almond可以做什麼以及使用者如何與Almond互動。Almond的獨特之處在於它可以根據自然語言命令執行觸發操作任務。此外,它是完全可擴充套件的:它的功能隨著Thingpedia的增長而增長。

Almond從Thingpedia中獲得了它的通用性。Thingpedia是一個儲存庫,旨在捕獲所有不同Web服務和IoT裝置的介面。 雖然Almond可以訪問公共服務,如天氣頻道或優步,但它的優勢在於管理個人網路帳戶和具有隱私的裝置並與之介面。

2.2表達形式

我們將Almond接受的命令分類為原始操作和複合操作。最基本的原始命令是對裝置的直接操作或查詢。Almond還支援常設查詢或監視器,以在觸發感興趣的事件時通知使用者。

圖2所示,可以通過電子郵件向每日天氣更新發送電子郵件,說“每天早上6點獲取最新天氣並通過電子郵件傳送給bob”,其中“每天早上6點”是觸發器,“獲取最新天氣 “是一個查詢,”向bob傳送電子郵件“是一個動作。

2.3 UI

為了向新手使用者展示Almond的功能範圍,我們開發了一個Almond命令的“備忘單”。 備忘單按介面列出條目以及一個小圖示,以便使用者可以一目瞭然地直觀地掃描整個文件。 在每個介面下面是按觸發器,查詢,以自然形式通過關鍵字when,get,do分別列出的操作排序的命令列表。以便使用者迅速掌握

  • 使用者還可以通過單擊上方的Help按鈕來瀏覽應用程式,然後Almond以選單的形式按類別列出支援的裝置與服務。 然後,選擇社交網路,再選擇推特,這時候會給出一些選項,讓使用者自己填寫,完成命令。

  • 為了幫助高階使用者最大化Almond的功能,我們提供了一種基於選單的簡單方法來建立複合命令。 使用者可以通過單擊相應的when,get,do按鈕來選擇構成複合命令的基本命令。 然後Almond提示使用者輸入,並詢問後續問題以填補剩下的空白。

  • 設定複合命令:當我在instagram上上傳一張照片的時候,almond會問該選擇什麼操作,選擇do,然後almond會問要do 什麼東西,這時候回答在推特上推一張圖片,almond會問什麼圖片。這時候可以選擇來自instagram的圖片,也就是你上傳到instagram上的那張。然後你以後每次在instagram上傳照片的時候,almond會幫你將這張照片發到推特上。

2.4 使用者例項
  • 1.簡單,通用的介面:Alice喜歡Almond,因為它為許多裝置提供了統一的介面。 當她醒來時,她告訴Almond“開啟燈”並詢問“天氣怎麼樣?”,“優步的價格是多少?”。 一旦她到達工作崗位,她就要求Almond“在我日曆上的活動開始時將手機設定為靜音”。
  • 2.量化自我:Bob使用Almond來監控他的習慣,他完全清楚他可以在保持通用介面的同時切換裝置。 他目前使用Almond作為他的Jawbone UP的介面,找到“我昨晚睡了多少?”,“我今天採取了多少步驟?”。由於健康資料是敏感的,因此Bob關注隱私,並希望資料僅儲存在此手機上。 此外,通過使用Almond,Bob可以隨時切換到Fitbit而無需學習新介面。
  • 3.媒體過濾:Carol是一名軟體開發人員,通過使用Almond根據自己的喜好自定義所有社交帳戶來節省時間。例如,她告訴Almond“在Twitter上關注@justinbieber”,這樣她會在@justinbieber發推文時得到通知。在所有社交媒體上,Almond讓Carol專注於她感興趣的內容。她還通過設定“Monitor pushes to Github”和“Monitor Slack在頻道#urgent上更新”來使用Almond進行工作。
  • 4.家庭自動化:Dan喜歡使用Almond輕鬆連線他的小工具。為了節省能源,他要求Almond“如果溫度低於70華氏度,請關掉我的暖通空調。”他的妻子夏娃是一個鳥類愛好者。所以,他設定了一個蜂鳥餵食器並指向它的相機,並要求Almond“如果我的相機上有動靜,通過Omlet聊天將視訊傳送給愛娃”。
III. SYSTEM ARCHITECTURE
3.1 Thingpedia
  • Thingpedia是物聯網應用程式的百科全書。 就像維基百科儲存有關世界的知識一樣,Thingpedia儲存有關世界各地裝置的知識。 (本文中裝置既可以指物理裝置如燈泡,也可以指軟體如推特)維基百科是圍繞文章組織的; Thingpedia圍繞裝置進行組織,例如Twitter,燈泡或恆溫器。 每個裝置都有Thingpedia上的條目。 Thingpedia條目儲存表示人類如何引用裝置並與裝置互動的自然語言介面,以及與裝置API相對應的可執行規範。

  • 該條目的完整屬性列表如圖5所示。每個條目包括諸如版本號,包名,通訊協議和發現資訊之類的資訊。 此外,它還有一個或多個功能,可以是觸發器(即監聽事件),查詢(即檢索資料)和動作(即改變狀態)。 這些函式是通過將低階裝置API包裝在JavaScript包中實現的,可以根據需要由ThingSystem下載。 對於每個函式,製造商還提供引數規範,一些自然語言註釋,我們在圖6中描述,以及一些用於啟用它的示例句子。

  • 1.不帶引數的句子,開啟LG 網路電視
  • 2.解釋這個引數,Power引數是列舉型別,為on或者off
  • 3.跟進詢問:對於帶引數的power來說,需要指明狀態是on或者off
  • 4.模板例句:對於帶power引數的例句來講,power的值可以是使用者填寫或者由自然語言處理演算法得出。
  • 5.使用者可以在命令執行前確認該命令,使用者可以清楚地知道這條命令是控制LG網路電視開關的。

3.2ThingTalk

ThingTalk是我們為連線物聯網而開發的高階語言。 它將裝置的API連線在一起,同時隱藏裝置的配置和通訊的細節。
例如,這是一個ThingTalk程式,它使用包含“cat”作為圖片的標籤在Facebook上釋出Instagram照片:
上面的程式碼讀作“如果我在Instagram上上傳一張帶有某圖片網址,標題和主題標籤的圖片,而hashtags包含值‘cat’,則將圖片釋出到Facebook,其中文字與url均來自於instagram中的資訊 “。 ThingTalk程式是有以下形式的規則:

觸發條件(過濾條件)執行詢問(過濾條件)執行操作
對於上面的例子,是沒有執行詢問的。直接是觸發器 –動作

原始Almond命令在ThingTalk中使用簡併規則表示,現在使用內建觸發器,表示現在要執行規則,內建動作notify,表示將結果報告給使用者。 圖7總結了Almond命令和ThingTalk表單之間的對應關係。

action用thingtalk表示 即now指向action,query也是如此,但是多一個內建動作notify表示將結果報告給使用者,而監測到某種狀態將引發一個trigger變化,進而觸發notify將結果報告給使用者。下面的操作即上面原始操作的組合。

3.3 ThingSystem

ThingSystem維護屬於該使用者的所有裝置的列表。對於每個裝置,ThingSystem儲存例項識別符號,IP或藍芽地址以及訪問它的憑據。 裝置列表上形成使用者的名稱空間,其中裝置可以按型別呼叫。然後,名稱空間用於將抽象名稱“twitter”對映到使用者擁有的特定Twitter帳戶,或“tv”對映到特定電視及其網路地址。

雖然Thingpedia包含所有公共資訊,但每個使用者都有自己的ThingSystem來儲存有關其配置的裝置和命令的資訊。ThingSystem是可移植的,可以在手機或雲端執行。

使用者配置裝置時添會將裝置加到列表中。配置包括4個步驟:對映,載入,驗證和儲存。 例如,要配置“twitter”,將執行以下操作:

  • 1.對映:“twitter”被對映到其Thingpedia條目(“com.twitter”,版本:22,配置型別:OAuth)

  • 2.載入:從Thingpedia伺服器下載程式碼包“com.twitter-v22.zip”並載入

  • 3.身份驗證:使用者被定向到Twitter的OAuth登入頁面並要求提供憑據

  • 4.儲存:將使用者ID和訪問令牌新增到名稱空間,並儲存條目

IV. LANGUAGE TO CODE
4.1資料訓練

在此使用Amazon Mechanical Turk worker(亞馬遜人工智慧勞工),要求其建立正確的培訓樣本是不合理的,因為它需要建立

  • (1)ThingTalk程式,其中包含引數
  • (2)其自然語言的完整規範。

我們的方法是使用每個Thingpedia條目中的資訊來創ThingTalk程式的樣本及其相應的自然語言描述; 然後,我們眾包釋義,以達到更自然的句子。

首先,我們使用ThingTalk語法生成一組隨機候選程式,均勻地取樣支援的函式對並隨機分配引數。Thingpedia中的每個條目都包含一個確認字串,虛擬助手會在執行任何操作之前詢問使用者。 我們將與生成的程式中的每個函式相關聯的確認字串組合在一起以建立合成句子。請注意,這些句子通常非常笨拙且難以理解; 我們使用一組啟發式方法使它們更容易理解。

接下來,我們要求勞工為每個合成句提供三個釋義。使用3種不同的釋義確保了訓練集的可變性,並擴充套件了機器學習在訓練期間可以觀察到的詞彙量。 另外,因為這些程式是隨機生成的,所以它們可能沒有意義。 因此,當句子難以理解時,我們允許勞工回答“不知道”,並且我們從訓練集中刪除這些程式。

圖8顯示了3個ThingTalk程式,它們相應的合成句子以及可能的釋義。如第一個thingtalk程式,時間間隔為1天,獲得某張照片,然後觸發通知操作。可以人工合成一句,每一天取得一張關於貓的照片,它的釋義是每天給我傳送一張關於貓的圖片

V. CROWDSOURCING THINGPEDIA

開發者可以為Thingpedia做出貢獻嗎? 我們讓一個班級的60名學生向Thingpedia提交參賽作品。 這些大多是電腦科學研究生水平的學生,有一些本科生。 我們提供了一個建議裝置列表供學生選擇,但學生們也自己想出了一些裝置。 他們共寫了57個條目,其中45個有效。 這些裝置涵蓋各種領域,包括媒體,社交網路,家庭自動化,通訊,資料管理,健康和其他各種服務。 圖9顯示了提交的裝置類別,以及每個類別中的裝置,功能和句子數量。

寫一條Thingpedia條目有多難? 大多數工作在於查詢文件,選擇正確的API並將它們對映到有用的句子。 通過眾包,不同人的不同專業知識可以極大地幫助這一過程。

VI. VIRTUAL ASSISTANT EXPERIMENT
6.1訓練Almond

為了訓練我們的機器學習演算法,我們使用3個數據集:基本集,釋義集和作者集。

基本集是通過Thingpedia示例句子自動生成的,通過用代表值替換每個引數佔位符(例如,給定Thingpedia示例“turn $power my tv”我們生成“開啟我的電視”和“關閉我的電視”)。基本集為原始命令提供了有效的培訓,並保證了新裝置的基本可擴充套件性。

釋義集由Mechanical Turk勞工生成,如4.1節所述。 釋義集的目標是為過濾器和引數組合提供覆蓋,以及學習複合命令的釋義。

作者集是本文作者編寫的一小組現實命令,用於指導機器學習向有用的程式學習。

每當Almond不確定它是否能理解自然語言輸入時,它會返回多個答案供使用者選擇。因此,為了評估Almond,我們判斷正確的答案在前1個,3個和5個匹配中選擇。

  • 1.如柱形圖,每個測試集的左邊為原始語句,右邊為符合語句,三種顏色從深藍到淺藍代表正確答案的候選個數的準確率,很明顯,給的越多正確的可能性越高。並且通過釋義解析對於原始句子表現良好,因為測試句子與訓練句子具有顯著的詞彙重疊。 複合命令很難解析,因為引數組合和值有更多可能的選擇。

  • 2.解析器獲得了原始句子的前1個準確度為34%,前3個為54%,前5個為65%。 在複合句中,它實現了前1個準確度為22%,前3個為31%,前5個為33%。 與通過釋義測試獲得的基線準確度相比,準確度顯著下降。 我們提供選單驅動介面以及自然語言介面的方法提供了隨著時間的推移獲得更多訓練資料的方法

  • 3.解析器在原始命令前1個獲得80%的準確率,在前3個和5箇中獲得94%,複合命令中在前1個獲得41%,在前3個和5個分別獲得50%和53% 。
    儘管沒有真實的使用者資料,解析器的準確率達到了40%; 我們希望當用戶體驗我們的系統並生成更多真實資料時,可以獲得更好的結果。

  • 虛擬助手。亞馬遜的Alexa是唯一可以通過第三方將自己提供的“技能”與第三方服務互動結合的系統。其他商業系統僅響應由製造它們的公司定義的固定數量的查詢。

  • 物聯網平臺。迪克森等人[8]介紹HomeOS,“家庭作業系統”。該專案的目標已被廢棄,其目的是為家庭自動化智慧裝置構建一系列介面。 與Thingpedia不同,HomeOS不是開源的,不允許公開貢獻,僅限於家庭自動化研究的用例。

  • 在商業方面,有幾家公司試圖建立自己的物聯網堆疊,包括Samsung SmartThings [23],Google Weave [10]和Apple HomeKit [2]。 這些系統是垂直設計的,與虛擬助手和雲堆疊一起,是封閉的,不能相互操作。

  • 觸發動作程式設計。構建觸發器 - 動作程式設計系統的一個值得注意的嘗試是CAMP [25]。它們包括一個有限的“自然語言”系統來描述基於小句子的規則,這些小句子以類似小磁鐵的方式粘在一起。

二 、 專案進展

1.Spring boot連線Neo4j

2.解析XML配置檔案

3.編寫XML配置檔案

三 、工作內容

1.這周任務完成情況

任務 完成情況 備註
好好複習,把演算法考好 完成 考得還可以,筆試題目比平時作業簡單多了。。。
複習數值分析,看看矩陣的ppt 未完成 沒看,光顧著看論文和寫程式碼了
連線Neo4j資料庫 未完成 好氣,連不上
解析XML 檔案構建物件 未完成 完成了解析和生成xml文件,但是還沒生成物件

2.下週(第14周)任務

  • 重溫下Node.js,學習下建站
  • 連上Neo4j資料庫
  • 完成解析XML 部分並編寫裝置對映
  • 複習數值分析的矩陣計算部分

四 、 總結心得

這個禮拜主要是在考演算法和看論文,並且利用Dom4j完成了XML檔案的生成與解析,並編寫了裝置的XML 配置檔案並解析成功,下一步就是完成裝置對映和Neo4j資料庫的連線,將建立的物件對映到資料庫之中。下個學期要工程實踐,需要用到前端後臺,所以我要儘快重溫Node.js,雖然spring也還可以,但是相對起來比較複雜。