close

繼上一篇介紹如何設計數據精靈及相關理念,這一篇將著重於系統實作這方面

  • ChatBot 平台的選擇 : 雖然聊天平台(chat platform )已經行之有年,各位如果是 6 7 年級生的話,一定從最早的 BBS ICQ Yahoo Messenger MSN Messenger Skype開始用起(覺得自已變老了 Orz ),到這幾年比較紅的有 WhatsApp Line WeChat 及近期 Facebook Messenger 上述這些為一般大眾消費者所熟悉,功能也較偏向於朋友之間交流。但由於數據系統是屬於公司作業流程中的一環,故與一般大眾消費者在聊天交友屬性的平台截然不同。所幸這點 PIXNET 在這點在先前就已經導入 hipchat ,並大量運用內部工作流程之中,而在近一年的時間我們也導入了最近非常的火紅 Slack 。目前在內部工作流程上扮演了很重要的角色,從最開始程式噴 Error Log、線上服務中斷通知、YouTube 點歌、專案設計稿變更通知到甚至提醒訂下午茶。在眾多可選擇的平台底下當然是以 Slack 作為數據精靈(PIXBOT內部版)的平台。
    PS : 而最近數位時代也針對各家聊天工作平台作了很詳細的介紹可以參考此篇文章以聊天為導向的團隊協作工具

 

  • 系統架構 : 上一段說明了我們以 Slack 作為基礎的平台,由於已經相當多的文件介紹如何使用 Slack 作為機器人的平台,故接下來的介紹會著重於,如果要設計數據分析機器人系統架構該如何設計,其系統架構如下圖所示

 

  • 主要分為四大區: 
    • 上方為使用者層及 Slack Service 層 : 使用者可以透過 Mobile Slack App 或者是 PC 版來發出查詢需求,所以今天公司或某個組織去申請一個 Slack Team 馬上就現成的 Client 可以用,這於後端工程師或者是資料科學的相關人員是很有利的工具,你不用會太費心去處理前端介面的相關事宜。
    • 中間層包含 Slack Client 層及 API 層 : 這隻 ChatBot 全部的功能都是採用 Python 所撰寫,所使用的 Slack Client Library 為 slackbot 可以直接使用 Python Dectorator Function 所以相當的方便,相關範例也相當的完整可以參考 GitHub 上的說明,至於如何申請一個 Slack Bot ,可以到此頁面輸入一個Bot Name ,最後取得 Token 並將此 Token 放置於 python slack client 程式碼之中,細節可以參考此頁面。在來針對底下的不同運算模組都可以實作API 接口,故在 Slack Client 只有直接呼叫 Util Functon 來使用即可,由於功能需求沒太多 Scheam Model 的設計,故採用最輕量的 Web Framework Flask 來實作 Rest API。
    • 左下角Ad-Hoc Query : 這部是專門來提供 Ad-Hoc Query ,故通常採用資料庫查詢的方式來滿足需求。由於PIXNET 每日流量相當的大,故使用 MySQL 似乎不是很好的選擇。再來是雖然 Hadoop Community Open Source 已經提供相對應的解決方案,例如知名 Cloudera 所貢獻的 Impala 其效能非常出,底層的計算模組幾乎都用 C++ 所實作,但還是面臨長久下來資料庫維運的問題,畢竟如果要管理一座 20 台以上的伺服器 Cluster 必需要有相對應的專業人力。故轉為尋求Cloud Service 作為解決方案,至少可以降低實體機器的管理成本。而 Data Warehouse Cloud Service Solution 各大廠都有相對應的解決方案例如 Amazon Redshfit 及 Google BigQuery 都相當的出色。目前主要的資料庫是採用 BigQuey 而 它也有相對應的 Python SDK ,但有一點要特別注意的是雖然計算速度非常的快,但計價方式是以資料量來計算。故如果是流量的統計相關查尋,建議可以採用抽樣的方式來作計算可以大幅降低每次運算所需要的成本。上述採用 BigQuery 可以滿足大部份的需求,但是像是統計哪些字一起出現的次數計算必需調用到斷詞系統,這時候得採用 Spark 來作分散處理。以目前取了其中的 6412898 筆近三個月歷史查詢資料來說,使用 32 個Worker的 Spark Cluster  大約只要 10 秒即可完成查尋,這樣的效能是可以滿足即時查詢需求的。
    • 右下角的部份是模型演算部份: 如果要快速了解事物之間的關係可以利用 word2vec 讓人們快速了解。所產生出來的向量之間的特性,會維持合理一致方向性。其中最經典的例子是 king + man - woman = queen 。上述的 word2vec 演算法可以用 gensim 這個套件來產出屬於自已的 model ,細節的部份可以參考這份如何建置關鍵字精靈。再來是我們文章評分演算法,主要是利用 Convolutional Neural Networks for Sentence Classification 來判斷文章的好壞,故在底層有使用到 Tensorflow 作為 Deep Learning Model 的運算平台。

 

  • 資料稽核紀錄: 剛剛上大區塊所沒有提到的是資料使用是需要被記錄及稽核,故在每一位在下達指令都會被紀錄下來到 BigQuery 當中,並且我們利用了 Google DataStudio  來製作分析報表,從當中可以觀察出使用量趨勢,例如放假其間使用量會大幅的下降,但是到了業績結算前使用量會快速的攀升。也可看到我們的業務針對即將到來的中元節,下了相關的關鍵字做查詢。


以下是2017 PIXNET Hackathon 廣告

 

 

 

 

arrow
arrow

    Kent 施晨揚 發表在 痞客邦 留言(0) 人氣()