使用AI服務擷取文章重點

在Azure Cognitive Services 服務當中,文字分析(Text Analysis)服務可以針對用戶上傳的文字進行剖析,例如『文字情緒分析』、『關鍵字詞擷取』、『文字摘要』…等。這些服務都以rest api的形式出現,你只需要先取得呼叫API所需的金鑰與端點即可。

底下影片展示如何從 Azure Portal 建立『文字分析服務』,並且找到金鑰與端點:

有了金鑰與端點後,就可以透過程式碼來呼叫其功能。

例如其中的『擷取文章摘要』,是文字分析服務中剛推出沒多久的新功能,可以針對一篇文章、一段文字,抓取其中的重點。

呼叫的endpoint如下:

POST {Endpoint}/language/:analyze-text?api-version=2022-10-01-preview

除了header要傳遞key(金鑰)之外,body要符合底下json格式:

{
  "displayName": "Document ext Summarization Task Example",
  "analysisInput": {
    "documents": [
      {
        "id": "1",
        "language": "zh",
        "text": "(要分析的文章)"
      }
    ]
  },
  "tasks": [
    {
      "kind": "ExtractiveSummarization",
      "taskName": "Document Extractive Summarization Task 1",
      "parameters": {
        "sentenceCount": 3
      }
    }
  ]
}

其中的 text 參數是要分析的文章內容,而 sentenceCount參數則可填入數字,是你想要摘要出的重點個數。

例如,假設我們要針對底下這篇文章,進行摘要:

LUIS全名是Language Understanding Intelligent Services,顧名思義,是一個提供語句理解能力的雲端服務。請留意,LUIS並非去分析語句含意(這是Text Analytics的功能),而是去拆解並嘗試依照句型來判斷一個句子,進而歸納出用戶的意圖(intents),並抓取出句子當中的關鍵entities。而這個功能,對於我們的Caht bot而言,非常的重要。

由於Bot的文字輸入介面很自由,用戶往往可以很隨興的打字輸入,你根本無法限制用戶輸入什麼,以什麼句型方式輸入。而且人很有趣,只要沒有限制,就會竭盡所能地嘗試。此外,也非常有可能因為typo之類的輸入錯誤,導致一個句子在輸入上就有錯別字或是不完整。這些因素,使得Chat Bot開發人員無法只是抓一句話中的特定關鍵字來識別用戶的企圖與目的,而必須進一步使用語意分析與斷字處理。

凡此種種,都讓NLP(自然語言處理)的難度比想像中來的高。你只要開放一個文字聊天機器人,就會有人亂打一些有的沒的,然後Bot沒理解出他的意思,他就笑這個Bot很笨。(這樣很有成就感?)因此,就有對談需求的Bot來說,首要目標之一就是理解用戶輸入的內容,而LUIS則是我們實現這個功能的重點工具。

我們可以修改上面的 text 屬性,把文章置入,成為底下這樣的 JSON, 作為 rest api呼叫的body:

{
  "displayName": "Document 1",
  "analysisInput": {
    "documents": [
      {
        "id": "1",
        "language": "zh",
        "text": " LUIS全名是Language Understanding Intelligent Services,顧名思義,是一個提供語句理解能力的雲端服務。請留意,LUIS並非去分析語句含意(這是Text Analytics的功能),而是去拆解並嘗試依照句型來判斷一個句子,進而歸納出用戶的意圖(intents),並抓取出句子當中的關鍵entities。而這個功能,對於我們的Caht bot而言,非常的重要。
            
 由於Bot的文字輸入介面很自由,用戶往往可以很隨興的打字輸入,你根本無法限制用戶輸入什麼,以什麼句型方式輸入。而且人很有趣,只要沒有限制,就會竭盡所能地嘗試。此外,也非常有可能因為typo之類的輸入錯誤,導致一個句子在輸入上就有錯別字或是不完整。這些因素,使得Chat Bot開發人員無法只是抓一句話中的特定關鍵字來識別用戶的企圖與目的,而必須進一步使用語意分析與斷字處理。

  凡此種種,都讓NLP(自然語言處理)的難度比想像中來的高。你只要開放一個文字聊天機器人,就會有人亂打一些有的沒的,然後Bot沒理解出他的意思,他就笑這個Bot很笨。(這樣很有成就感?)因此,就有對談需求的Bot來說,首要目標之一就是理解用戶輸入的內容,而LUIS則是我們實現這個功能的重點工具。

 "
      }
    ]
  },
  "tasks": [
    {
      "kind": "ExtractiveSummarization",
      "taskName": "Task 1",
      "parameters": {
        "sentenceCount": 3
      }
    }
  ]
}

不過,當我們這麼呼叫時,你會發現,postman回傳的並非分析結果,而是回傳一個類似底下這樣的URL:

https://testanaeastus2023.cognitiveservices.azure.com/language/analyze-text/jobs/654d01f6-4920-4b9e-86ef-bd84520b065e?api-version=2022-10-01-preview

因為,這個『文章摘要』的AI服務,是採用非同步的方式運行:
圖片

上面的這個回傳網址,會以非同步方式,回傳分析好的結果。因此,我們可以透過 postman, 再次以http get方式呼叫,結果如下:
圖片

你會發現,果然擷取出三個重點:

  • LUIS全名是Language Understanding Intelligent Services,顧名思義,是一個提供語句理解能力的雲端服務。
  • 由於Bot的文字輸入介面很自由,用戶往往可以很隨興的打字輸入,你根本無法限制用戶輸入什麼,以什麼句型方式輸入。
  • 因此,就有對談需求的Bot來說,首要目標之一就是理解用戶輸入的內容,而LUIS則是我們實現這個功能的重點工具。

整個操作的影片如下:

透過這個功能,未來閱讀大量文章,就可以讓AI幫你自動歸納重點了。

留言

這個網誌中的熱門文章

使用 Airtable 在小型需求上取代傳統資料庫

在POC或迷你專案中使用 LiteDB

專業的價值...

精彩(且驚人)的Semantic Kernel入門範例

周末讀書會 - 一如既往