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 部署架構
步驟二
利用Elasticsearch api endpoint 將資料索引
步驟三
加入自己的 IP 在 Elasticsearch
步驟四
設定 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 '{
  "comprehendConfigurations": [
    {
      "indexName": "news",
      "fieldName": "content",
      "comprehendOperations": [
        "DetectSentiment",
        "DetectEntities",
        "DetectKeyPhrases",
        "DetectDominantLanguage",
        "DetectSyntax"
      ],
      "languageCode": "en"
    }
  ]
}
'
到 MediaLive 頁面,點選 [Create Input] ,創建一個新的直播 Input

2.2
在終端機,並將以下指令貼入到終端機內.透過以下指令會輸入一段將會被分析的文字內容. 輸入完會回傳一段成功地返回信息.
curl -XPUT <proxy_endpoint>/news/_doc/1 -H 'Content-Type: application/json' -d '
{
  "content": "Amazon.com, Inc., is an American multinational technology company based in Seattle, Washington that focuses on e-commerce, cloud computing, digital streaming, and artificial intelligence. It is considered one of the Big Four technology companies along with Google, Apple, and Facebook"
}
'
2.3
接下來會利用新增一個檔案,進行檔案內的文字分析.
新增一個檔案並且命名為“bulk_news.json”,將以下文字貼到檔案內,並且儲存檔案.
{ "index" : { "_index": "news", "_type" : "_doc", "_id" : "2" } }
{"content": "Alice does not like the rainy day"}
{ "index" : { "_index": "news", "_type" : "_doc", "_id" : "3" } }
{"content": " I love living in New York City"}
{ "index" : { "_index": "news", "_type" : "_doc", "_id" : "4" } }
{"content": " Bob hates that movie"}

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 '
{
    "query" : {
        "bool" : {
            "must" : [
                { "match" : {"content_DetectSentiment.sentiment" : "POSITIVE"} }
            ]
        }
    }
}
'

2.5
輸入完指令以後,我們可以看到查詢到的字眼包括 “living”, “love” 在正面意義的比重分數都超過 0.9.


2.4
我們可以再利用以下幾個指令,來查詢不同項目的字眼
curl -XGET <proxy_endpoint>/news/_search?pretty -H 'Content-Type: application/json'  -d '
{
    "query" : {
        "bool" : {
            "must" : [
                { "match" : {"content_DetectSentiment.sentiment" : "NEGATIVE"} }
            ]
        }
    }
}
'
curl -XGET <proxy_endpoint>/news/_search -H 'Content-Type: application/json'  -d '
{
    "query": {
        "nested" : {
            "path" : "content_DetectEntities.entities",
            "query" : {
                "bool" : {
                    "must" : [
                    { "match" : {"content_DetectEntities.entities.type" : "LOCATION"} },
                    { "range" : {"content_DetectEntities.entities.score" : {"gt" : 0.9}} }

                    ]
                }
            },
            "score_mode" : "avg"
        }
    }
}           

步驟三、加入自己的 IP 在 Elasticsearch

3.1
點選 AWS Console 搜尋 Elasticseach,點選我們創建的 Domian
3.2
在左上方 Action 點選 “Modify Access Policy”
3.3
在 IpAddress 底下加入自己的 IP 


步驟四、設定 Kibana Dashboard

4.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" } }
{"content": "我愛雅馬遜"}
{ "index" : { "_index": "news", "_type" : "_doc", "_id" : "2" } }
{"content": "我討厭下雨天"}

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

  • 免費註冊AWS帳號

    數百萬名客戶正使用 AWS 雲端解決方案建立提升彈性、可擴展性、安全性和可靠性的應用程式,歡迎探索各類免費方案在 AWS 上進行建置。

    免費註冊>>

  • 與我們聯絡

    遇到問題?不管是架構設計、架構優化、效能提升等等,都竭誠歡迎你/妳聯絡 AWS 的雲端業務!

    留下資料 >>

  • 與專人線上對談

    有任何新專案的想法,想要評估使用 AWS 服務,或目前在使用上需要原廠協助之處,都可以跟我們聊聊!

    開啓對話>>