Analyzing Text with Amazon Elasticsearch Service and Amazon Comprehend
(使用Amazon Elasticsearch及Comprehend分析文字意涵)
- 作者 -
Shanna Chang, Solutions Architect, AWS
Sam Tu, Business Development Manager, AWS
[Challenge]評論分析可以幫助電商等客戶分析消費者對於產品的評價以及建議,AWS 利用 Amazon Comprehend 以及 Amazon Elasticsearch 作為分析分析語句的解決方案.透過 Amazon Comprehend 可以依據分類,分析一段文字中的關鍵字例如:名稱,地名... 等,或是一段文字屬於正,負面意義.此架構可以透過呼叫 API 的方式與現有的架構整合.並且透過 dashboard 更加方便觀看分析結果。[SOP]此解決方案架構將會透過 CloudFormation 部署以下架構,包含一個 Amazon API Gateway 以及 lambda 作為 user 輸入的端點.AWS Lambda 利用 Amazon Comprehend 作為文字處理分析工具, 在輸出到 Amazon Elasticsearch Service 進行分析. 最後利用kibana dashboard顯示結果.步驟概覽
步驟一、利用 CloudFormation 部署架構1.1點選下方連結:https://aws.amazon.com/solutions/implementations/analyzing-text-with-amazon-elasticsearch-service-and-amazon-comprehend/ 進入到主要畫面後,選擇右側的 [launch in the AWS Console] 選項. 1.2登入 Console 以後,畫面會進入到 CloudFormation 的創建Stack畫面.點選右下角的[Next] 1.3進入到下一頁 Specify Stack details 的畫面,在 stack name 以及 Domain name 輸入一個名稱, 將頁面滑動至底部點選[Next] 1.4進入到Review 頁面,滑動至頁面底部,勾選 “I acknowledge that AWS ... ”.點選 [Create Stack] 1.5在 CloudFormation 主要畫面中,會顯示我們創建的 Stack 狀態為 “CREATE_IN_PROGRESS” .等待大約 5~10 分鐘的時間後,CloudFormation 創建完成,並且 Status 的狀態會顯示 “CREATE_COMPLETE”. 1.6在創建完成的 CloudFormation 畫面上方,點選 [Resources] 這個分頁.在這個頁面中,我們可以看到利用 CloudFormation 創建出的資源. 1.7在創建完成的 CloudFormation 畫面上方,點選 [Outputs] 這個分頁.在這個頁面中的最下方 ProxyEndpoint 連結,等等會利用這個 endpoint 作為文字分析的端點 步驟二、利用Elasticsearch API endpoint 將資料索引在接下來的步驟中,會透過終端熙來輸入指令,本次流程會以Aamazon Cloud9 作為終端機,您也可以透過習慣的 terminal 來操作接下來的步驟在前面的部署中,我們透過預先放在 S3 的 HLS 作為輸入來源,我們也可以將輸入來源改由透過 OBS 服務,觀看即時的影像,接下來的步驟會展示如何設定OBS 2.1打開終端機,並將以下指令貼入到終端機內.在底下 <proxy_endpoint> 字樣處請填寫剛剛 CloudFormation output 頁面底下的 proxyendpoint. curl -XPUT <proxy_endpoint>/preprocessing_configurations -d '{到 MediaLive 頁面,點選 [Create Input] ,創建一個新的直播 Input 2.2在終端機,並將以下指令貼入到終端機內.透過以下指令會輸入一段將會被分析的文字內容. 輸入完會回傳一段成功地返回信息. curl -XPUT <proxy_endpoint>/news/_doc/1 -H 'Content-Type: application/json' -d ' 2.3接下來會利用新增一個檔案,進行檔案內的文字分析. 新增一個檔案並且命名為“ bulk_news.json ”,將以下文字貼到檔案內,並且儲存檔案.{ "index" : { "_index": "news", "_type" : "_doc", "_id" : "2" } } 2.4利用新增一個檔案,進行檔案內的文字分析. curl -XPOST <proxy_endpoint>/_bulk --data-binary @bulk_news.json -H 'Content-Type: application/json'
2.4透過以下幾個指令搜尋我們剛剛輸入的文字在不同目錄下的分析結果.第一段指令會查找正面意義的字眼. curl -XGET <proxy_endpoint>/news/_search?pretty -H 'Content-Type: application/json' -d ' 2.5輸入完指令以後,我們可以看到查詢到的字眼包括 “living”, “love” 在正面意義的比重分數都超過 0.9. 2.4我們可以再利用以下幾個指令,來查詢不同項目的字眼 curl -XGET <proxy_endpoint>/news/_search?pretty -H 'Content-Type: application/json' -d ' curl -XGET <proxy_endpoint>/news/_search -H 'Content-Type: application/json' -d ' 步驟三、加入自己的 IP 在 Elasticsearch3.1點選 AWS Console 搜尋 Elasticseach,點選我們創建的 Domian 3.2在左上方 Action 點選 “Modify Access Policy” 3.3在 IpAddress 底下加入自己的 IP 步驟四、設定 Kibana Dashboard4.1點選 AWS Console CloudFormation,在output 底下點選 kibanaDashboardURL 4.2在Kibana Dashboard 左側點選 Management,並點選 index pattern.確認 index pattern 已經創建成功. 4.3在 Kibana Dashboard 左側點選 Dashboard,觀看文字分析結果.
圖一,顯示動詞與名詞分析結果
圖二,顯示人名與地名分析結果 步驟五、中文句子分析測試5.1打開“ bulk_news.json ”,將以下文字貼到檔案內,並且儲存檔案.{ "index" : { "_index": "news", "_type" : "_doc", "_id" : "1" } } 5.2打開終端機,並將以下指令貼入到終端機內.在底下 <proxy_endpoint> 字樣處請填寫剛剛 CloudFormation output 頁面底下的 proxyendpoint. curl -XPOST <proxy_endpoint>/_bulk --data-binary @bulk_news.json -H 'Content-Type: application/json'
5.3打開Kibana dashboard 查看句子分析結果,在positive 的句子可以看到 “我愛雅馬遜” 的句子正向分數是1,”我討厭下雨天“的負面分數是0.997 [FAQ]Q1: 當我開啟 kibana dashboard 為什麼會顯示 “User: anonymous is not authorized to perform”? A1: 如果在第一次點開 Kibana dashboard 無法成功顯示畫面,請先到 Amazon elasticsearch 畫面檢查 access policy,確認已經將自己的 ip 加入到 access policy 列表 (參考資料: https://aws.amazon.com/blogs/database/set-access-control-for-amazon-elasticsearch-service/) Q2: 目前Comprehend有支援中文嗎? A2: AWS Comprehend 目前有支援中文,包含繁中,簡中以及其他語言,詳細支援語言可以參考:https://docs.aws.amazon.com/comprehend/latest/dg/supported-languages.html Q3: 可以根據自己的應用場景設計自己的分類類別嗎? A3: 透過 comprehend 可以上傳自己的分類方式, 例如產品名稱或是不當用詞 Q4: 可以分析中英夾雜的語句嗎? A4: 目前只針對中文或英文的語句做分析 Q5: 如何將此解決方案與目前的應用結合? A5: 您可以利用 Call API 的方式與目前的應用結合 [References]想要了解更多此架構用到的服務,點選下方連結:Amazon API Gateway AWS Lambda Amazon Comprehend Amazon Elasticsearch Service |