2017 年 11 月

第 33 卷,第 11 期

本文章是由機器翻譯。

辨識服務 - 運用辨識服務從文字轉換為目標式情感分析

愛希斯記錄 Sahu

人類語言已經歷經多世紀,如此一來,通常具有複雜的規則,以管理情感的運算式。做為人類語言的考量,我們通常依賴學習和各種不同的社交慣例主要一或多個語言,並用來表達自己在不同情況下。品質和 datacenter 的知識會反映在我們將保留在各種設定,包括產品評論、 線上和離線格式的問卷調查回應等等的回應中。它們遵循相同的語言規則,並提供測試,並前進人類語言的運算式運作的機器學習模型的有趣的機會。

現在,社交網路播放中成形熱門意見的絕佳的角色。我們會參與我們的想法幾乎所有項目,快速的討論和同意或彼此的世界,若要查看所有同意。這些經驗也會落入我們購物習慣,我們通常保留我們的檢視,我們所購買的項目和服務上我們再試一次檢閱表單中。

因為我們實際無法查看及評估我們想要線上購買的項目,我們通常留到其他人的意見來評估如何永久性或可靠可能。這些檢視都有提供最少的方便起見,逐一排序的星級評等。不過,星級評等不會真的提供某人的經驗與產品或產品的品質的精確概況,有時候它們只是項目隨附更新比預期的版本。

剩下一個選項,來讀取透過現有的檢閱和合理推測有關什麼是良好和不良產品的相關問題。雖然幫助,但卻相當耗時而且需要效率不佳。現在,不過,文字分析與語言分析 Api,屬於 Microsoft 認知的服務,可以幫助。

就像其他認知的服務,語言分析的應用程式開發介面與文字分析是託管的服務。沒有任何您需要下載、 設定或訓練您開始使用這些人工地智慧 (AI) 之前的軟體-基礎 Api 來執行美好的事物。

文字分析 API 可推斷深入資訊,例如文字、 討論的關鍵片語以及以文字表示的人氣的語言。語言分析 API,相較之下,可讓了解語言概念和自由形式文字中的動作。它會執行一部分的語音 (POS) 標記、 token 化,句子分隔,以及其他項目。您可以使用此 API 對客戶的意見反應資訊,以及了解使用者的目的和文字的結構。

在本文中,我將示範如何使用這些 Api 工作和從各種形式的文字發生每天產生 insights 可使用的案例。

文字分析有何作用?

文字分析 API 是一套與 Azure Machine Learning 建置服務。在撰寫本文時,您可以使用下列 API 作業來執行先前所述的動作:

  • 偵測語言決定文字傳送至 API 從 120 的支援語言的語言。
  • 主要片語輸入的文字中尋找主要片語。
  • 人氣偵測到的文字,傳回數值分數介於 0 和 1,此處的分數愈高代表正面的人氣程度人氣。
  • 偵測主題探索主題或從某個語料的批次作業中文字的片語。這項作業會標示為已被取代,並不涵蓋在本文中。

文字分析 API 預先定型,可執行這些作業,並不需要任何定型資料。它可以處理大部分的最購物入口網站上檢閱。為了協助您深入了解的文字分析 API 功能,看看下列的範例檢閱:

「 此電話有很棒的電池。尖而亮顯示。但在存放區並沒有需要的應用程式 」。

這段摘錄會反映與電話是購物者的體驗。讓我們來執行此範例中,透過不同的應用程式開發介面作業,並查看會有什麼。

過程中,您可以使用您選擇 (例如 Fiddler、 郵差或 Curl) 的任何公用這些測試,查看您自己的結果。您也可以使用 API 測試主控台,可用的應用程式開發介面參考文件中。但您需要知道您可以測試執行這些應用程式開發介面之前的幾件事:

  1. 您需要訂用帳戶金鑰。如果您沒有 Azure 訂用帳戶,您可以取得的試用版金鑰bit.ly/2eLG8OT
  2. API 預期會收到下列格式的文字記錄:
{
  "documents": [
    {
      "language": "string",
      "id": "string",
      "text": "string"
    }
  ]
}

此格式適用於主要片語和人氣作業。不過,您必須移除對偵測語言作業呼叫的"language"欄位。

我從簡單的測試,判斷文字語言的範例,並將格式化的要求主體就像這樣:

{
  "documents": [
    {
      "id": "1",
      "text": "This phone has a great battery. The display is sharp and bright. 
        But the store does not have the apps I need."
    }
  ]
}

我使用 Curl 公用程式,以下是 [我的要求看起來像:

curl -v -X POST "https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/languages"
-H "Content-Type: application/json"
-H "Ocp-Apim-Subscription-Key: my-trial-key"

--data-ascii "{
  "documents": [
    {
      "id": "1",
      "text": "This phone has a great battery. The display is sharp and bright. 
        But the store does not have the apps I need."
    }
  ]
}"

中已顯示 [取得我將此要求之後的結果和圖 1

圖 1 語言產生

{
  "documents": [
    {
      "id": "1",
      "detectedLanguages": [
        {
          "name": "English",
          "iso6391Name": "en",
          "score": 1
        }
      ]
    }
  ],
  "errors": []
}

如您所見,結果是評分的回應和英文已被偵測為送出的文字記錄的語言。您可以隨意地試用不同的語言,以查看其運作方式。

接下來,我將透過關鍵片語端點執行相同的記錄。我需要變更與更新的端點的要求主體我 Curl 命令,如下所示:

curl -v --silent -X POST "https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/keyPhrases"
-H "Content-Type: application/json" 
-H "Ocp-Apim-Subscription-Key: my-trial-key"
--data-ascii '{ 
  "documents": [
  { "language": "en",
    "id": "1",
    "text": "This phone has a great battery. The display is sharp and bright. 
      But the store does not have the apps I need."
  } 
  ] 
}'

回應如下所示圖 2

圖 2 金鑰片語結果

{
  "documents": [
    {
      "keyPhrases": [
        "phone",
        "great battery",
        "display",
        "store",
        "apps"
      ],
      "id": "1"
    }
  ],
  "errors": []
}

如您所見,主要片語端點已偵測到從範例檢閱適當的片語。

現在讓我們來看看這個檢閱代表 positivity 的標尺上。我透過人氣端點執行相同的文字,請參閱什麼恢復。以下是我 Curl 命令:

curl -v --silent -X POST "https://westus.api.cognitive.microsoft.com/text/
  analytics/v2.0/sentiment"
-H "Content-Type: application/json" 
-H "Ocp-Apim-Subscription-Key: my-trial-key"
--data-ascii '{ 
  "documents": [
  { "language": "en",
    "id": "1",
    "text": "This phone has a great battery. The display is sharp and bright. 
      But the store does not have the apps I need."
  } 
  ] 
}'

而且這次是下列結果:

{
  "documents": [
    {
      "score": 0.770478801630976,
      "id": "1"
    }
  ],
  "errors": []
}

結果較簡單這次,而且您可以看到,檢閱的人氣分數是.77,,標尺為 0 到 1 77 百分比。這表示主要是正面的人氣文字,其中您可以從文字推斷。

既然我已經執行這個文字檢閱使用所有可用的作業時,我會結合它們以查看整體結果:

  • Text:此電話有很棒的電池。尖而亮顯示。但在存放區並沒有需要的應用程式。
  • 語言:英文
  • 主要片語: 電話、 絕佳的電池、 顯示、 存放區、 應用程式
  • 人氣:77 百分比

此實驗示範文字分析認知服務可以文字評論、 問卷調查回應和輸入的客戶。不過,語言分析服務與結合,我就可以 distil 甚至更深入的見解。

語言分析看:相差多久?

文字分析 API 會使用預先定型的模型來分析偵測資訊,例如語言、 關鍵片語和 sentiments 的文字。相反地,語言分析 API 會使用進階的語言分析工具來處理文字輸入,並可讓您了解的句子結構。此了解可用來對從文字記錄的資訊、 解譯使用者命令和處理從任何來源的自由形式文字。

我 linguist,因此我會保留作業的人是說明這項服務的好處。在本文中,我只涵蓋這項服務的基本概念,然後回到原本的目的,這篇文章是從文字輸入產生更深層和有意義的深入資訊。

語言分析 API 會使用 analysers 的概念,若要了解的文字記錄的結構。目前支援三種類型:

  • 語彙基元
  • POS 標記
  • 組成單位樹狀結構

這些分析器來自世明 Treebank 中,這是要了解給定的字詞輸入的文字是否為名詞和動詞命令的語言分析 API 可讓已標註為已剖析文字主體。比方說,「 我喜歡 Bing ! 」 和 「 讓我 bing 這讓您"word Bing 用於不同的容量。

讓我們使用本範例來了解語言分析工作的運作方式。就像與文字分析,您將需要試用版金鑰如果您沒有 Azure 訂用帳戶。

一旦您擁有此金鑰,只要啟動您要用來將要求傳送至語言分析 API 的工具。有可透過此 API 的兩項作業:

  • 列出分析器傳回 analysers 剖析文字語彙基元、 POS 標記和組成單位樹狀目錄的清單。
  • 分析文字會剖析您提供使用您在要求中提供的分析器的文字輸入。

圖 3顯示清單分析器端點的簡單 GET 要求的傳回。

圖 3 清單分析器端點的簡單的 GET 要求的結果

[
  {
    "id": "4fa79af1-f22c-408d-98bb-b7d7aeef7f04",
    "languages": [
      "en"
    ],
    "kind": "POS_Tags",
    "specification": "PennTreebank3",
    "implementation": "cmm"
  },
  {
    "id": "22a6b758-420f-4745-8a3c-46835a67c0d2",
    "languages": [
      "en"
    ],
    "kind": "Constituency_Tree",
    "specification": "PennTreebank3",
    "implementation": "SplitMerge"
  },
  {
    "id": "08ea174b-bfdb-4e64-987e-602f85da7f72",
    "languages": [
      "en"
    ],
    "kind": "Tokens",
    "specification": "PennTreebank3",
    "implementation": "regexes"
  }
]

我將使用先前所述的分析器剖析這段文字:「 我喜歡 Bing !讓我 Bing 這,"格式的要求主體,如下所示:

{
  "language" : "en",
  "analyzerIds" : ["4fa79af1-f22c-408d-98bb-b7d7aeef7f04", 
    "22a6b758-420f-4745-8a3c-46835a67c0d2", 
    "08ea174b-bfdb-4e64-987e-602f85da7f72"],
  "text" : "I love Bing! Let me bing this for you" 
}

以下是我 Curl 命令:

curl -v --silent -X POST https://westus.api.cognitive.microsoft.com/ 
  linguistics/v1.0/analyze
-H "Content-Type: application/json" 
-H "Ocp-Apim-Subscription-Key: my-trial-key" 
--data-ascii ' {
  "language" : "en",
  "analyzerIds" : ["4fa79af1-f22c-408d-98bb-b7d7aeef7f04", 
    "22a6b758-420f-4745-8a3c-46835a67c0d2", 
    "08ea174b-bfdb-4e64-987e-602f85da7f72"],
  "text" : "I love Bing! Let me bing this for you" 
}'

此要求的回應會顯示在圖 4

圖 4 剖析範例文字

[
  {
    "analyzerId":"4fa79af1-f22c-408d-98bb-b7d7aeef7f04",
    "result":[
      [
        "PRP",
        "VBP",
        "VBG",
        "."
      ],
      [
        "VB",
        "PRP",
        "JJ",
        "DT",
        "IN",
        "PRP"
      ]
    ]
  },
  {
    "analyzerId":"22a6b758-420f-4745-8a3c-46835a67c0d2",
    "result":[
      "(TOP (S (NP (PRP I)) (VP (VBP love) (NNP Bing)) (. !)))",
      "(VP (VBD Let) (S (NP (PRP me)) (VP (VBG bing) (NP (DT this)) 
      (PP (IN for) (NP (PRP you))))))"
    ]
  },
  {
    "analyzerId":"08ea174b-bfdb-4e64-987e-602f85da7f72",
    "result":[
        {
          "Len":12,
          "Offset":0,
          "Tokens":[
            {
              "Len":1,
              "NormalizedToken":"I",
              "Offset":0,
              "RawToken":"I"
            },
            {
              "Len":4,
              "NormalizedToken":"love",
              "Offset":2,
              "RawToken":"love"
            },
            {
              "Len":4,
              "NormalizedToken":"Bing",
              "Offset":7,
              "RawToken":"Bing"
            },
            {
              "Len":1,
              "NormalizedToken":"!",
              "Offset":11,
              "RawToken":"!"
            }
          ]
        },
      {
        "Len":24,
        "Offset":13,
        "Tokens":[
          {
            "Len":3,
            "NormalizedToken":"Let",
            "Offset":13,
            "RawToken":"Let"
          },
          {
            "Len":2,
            "NormalizedToken":"me",
            "Offset":17,
            "RawToken":"me"
          },
          {
            "Len":4,
            "NormalizedToken":"bing",
            "Offset":20,
            "RawToken":"bing"
          },
          {
            "Len":4,
            "NormalizedToken":"this",
            "Offset":25,
            "RawToken":"this"
          },
          {
            "Len":3,
            "NormalizedToken":"for",
            "Offset":30,
            "RawToken":"for"
          },
          {
            "Len":3,
            "NormalizedToken":"you",
            "Offset":34,
            "RawToken":"you"
          }
        ]
      }
    ]
  }
]

結果可以根據每個分析器要求-POS 標記組成單位樹狀目錄中,在此範例中的語彙基元中傳送。

如您所見,POS 標籤是文字的只是文字的針對每個輸入,而組成單位樹狀分析器傳回加上標記和文字輸入的樹狀結構的文字中的文字。語彙基元解析程式會傳回最可讀取的結果,以及它們的位置記錄中的文字輸入中包含每個字的詳細資訊。

本文中,我將使用組成單位樹狀結構和語彙基元分析器文字檢閱中斷根據句子分隔資訊和搭配單字的不同記錄。

如果您想要閱讀更多有關語言分析 API 和相關的概念,建議您將讀取完整的 API 文件位於bit.ly/2eTc2Nj

現在讓我們移回原始用於文字分析 API 的範例:「 此電話有很棒的電池。顯示為尖和亮但存放區沒有需要的應用程式 」。

沒有在範例細微變更這個時間,因為我移除原始範例的第二個句子的結尾期間並使用搭配單字"但 「 若要將其與第三個句子。您會看到我有這樣的用途。

我現在會呼叫語言分析 API 包含下列要求主體分析的文字的操作:

{
  "language" : "en",
  "analyzerIds" : ["22a6b758-420f-4745-8a3c-46835a67c0d2", "08ea174b-bfdb-4e64-987e-602f85da7f72"],
  "text" : "This phone has a great battery. 
    The display is sharp and bright but the store does not have the apps I need." 
}

在傳送權杖分析器只組成單位樹狀目錄中與此要求。圖 5顯示的結果。

圖 5 使用分析 API 的語言分析的文字作業

[
  {
    "analyzerId": "22a6b758-420f-4745-8a3c-46835a67c0d2",
    "result": [
      "(TOP (S (NP (DT This) (NN phone)) (VP (VBZ has) 
        (NP (DT a) (JJ great) (NN battery))) (. .)))",
      "(TOP (S (S (NP (DT The) (NN display)) (VP (VBZ is) (ADJP 
        (JJ sharp) (CC and) (JJ bright)))) (CC but) (S 
        (NP (DT the) (NN store)) (VP (VBZ does) (RB not) 
        (VP (VB have) (NP (NP (DT the) (NNS apps)) (SBAR (S 
        (NP (PRP I)) (VP (VBP need)))))))) (. .)))"
    ]
  },
  {
    "analyzerId": "08ea174b-bfdb-4e64-987e-602f85da7f72",
    "result": [
      {
        "Len": 31,
        "Offset": 0,
        "Tokens": [
          {
            "Len": 4,
            "NormalizedToken": "This",
            "Offset": 0,
            "RawToken": "This"
          },
          {
            "Len": 5,
            "NormalizedToken": "phone",
            "Offset": 5,
            "RawToken": "phone"
          },
          {
            "Len": 3,
            "NormalizedToken": "has",
            "Offset": 11,
            "RawToken": "has"
          },
          {
            "Len": 1,
            "NormalizedToken": "a",
            "Offset": 15,
            "RawToken": "a"
          },
          {
            "Len": 5,
            "NormalizedToken": "great",
            "Offset": 17,
            "RawToken": "great"
          },
          {
            "Len": 7,
            "NormalizedToken": "battery",
            "Offset": 23,
            "RawToken": "battery"
          },
          {
            "Len": 1,
            "NormalizedToken": ".",
            "Offset": 30,
            "RawToken": "."
          }
        ]
      },
      {
        "Len": 76,
        "Offset": 32,
        "Tokens": [
          {
            "Len": 3,
            "NormalizedToken": "The",
            "Offset": 32,
            "RawToken": "The"
          },
          {
            "Len": 7,
            "NormalizedToken": "display",
            "Offset": 36,
            "RawToken": "display"
          },
          {
            "Len": 2,
            "NormalizedToken": "is",
            "Offset": 44,
            "RawToken": "is"
          },
          {
            "Len": 5,
            "NormalizedToken": "sharp",
            "Offset": 47,
            "RawToken": "sharp"
          },
          {
            "Len": 3,
            "NormalizedToken": "and",
            "Offset": 53,
            "RawToken": "and"
          },
          {
            "Len": 6,
            "NormalizedToken": "bright",
            "Offset": 57,
            "RawToken": "bright"
          },
          {
            "Len": 3,
            "NormalizedToken": "but",
            "Offset": 64,
            "RawToken": "but"
          },
          {
            "Len": 3,
            "NormalizedToken": "the",
            "Offset": 68,
            "RawToken": "the"
          },
          {
            "Len": 5,
            "NormalizedToken": "store",
            "Offset": 72,
            "RawToken": "store"
          },
          {
            "Len": 4,
            "NormalizedToken": "does",
            "Offset": 78,
            "RawToken": "does"
          },
          {
            "Len": 3,
            "NormalizedToken": "not",
            "Offset": 83,
            "RawToken": "not"
          },
          {
            "Len": 4,
            "NormalizedToken": "have",
            "Offset": 87,
            "RawToken": "have"
          },
          {
            "Len": 3,
            "NormalizedToken": "the",
            "Offset": 92,
            "RawToken": "the"
          },
          {
            "Len": 4,
            "NormalizedToken": "apps",
            "Offset": 96,
            "RawToken": "apps"
          },
          {
            "Len": 1,
            "NormalizedToken": "I",
            "Offset": 101,
            "RawToken": "I"
          },
          {
            "Len": 4,
            "NormalizedToken": "need",
            "Offset": 103,
            "RawToken": "need"
          },
          {
            "Len": 1,
            "NormalizedToken": ".",
            "Offset": 107,
            "RawToken": "."
          }
        ]
      }
    ]
  }

如您所見,組成單位樹狀分析器突破文字記錄最後一個兩個句子,且指示搭配 word"但 」 標記 [副本] 結果中。如前所述,我刻意移除句號字元結尾的第二句的原始文字以反白顯示的語言分析 API 這項功能。

天作之合

這個小實驗會示範原始範例分成三個不同的句子,可以立即使用處理文字分析 API 來取得深入探索與客戶有關的輸入非常可靠的方式。您可能會認為字串剖析和分割提供類似的結果離線,但,更容易即完成-需要 my word,比簡單。

現在,相同的方式,我可以接受語言分析 API 的輸出並在使用簡單的字串操作常式,在任何程式設計語言中,會分隔成個別的部分檢視。原始範例可以分為下列三個部分:

  • 此電話已絕佳的電池
  • 顯示為尖和亮
  • 沒有需要的應用程式存放區。

讓我們來執行這三個部件使用個別的文字分析 API,並查看什麼恢復,以及這如何可讓您檢閱的更有意義。我現在要使用關鍵片語和文字分析 API 的人氣作業,並顯示轉換成輸入文字中反映人氣的強大目標分析此 API 的輸出。

我還需要移除標點符號和任何連接,以取得最佳的分析。我已變更我的 Curl 指令碼,將關鍵片語端點和人氣端點第一次傳遞一個語彙基元。圖 6顯示我的結果。

圖 6 使用文字分析應用程式開發介面的輸出上的應用程式開發介面的語言分析

{
  "documents": [
    {
      "keyPhrases": [
        "great battery"
      ],
      "id": "1"
    }
  ],
  "errors": []
}
{
  "documents": [
    {
      "score": 0.814330127882407,
      "id": "1"
    }
  ],
  "errors": []
}
{
  "documents": [
    {
      "keyPhrases": [
        "display"
      ],
      "id": "1"
    }
  ],
  "errors": []
}
{
  "documents": [
    {
      "score": 0.94089591967051,
      "id": "1"
    }
  ],
  "errors": []
}
{
  "documents": [
    {
      "keyPhrases": [
        "store",
        "apps"
      ],
      "id": "1"
    }
  ],
  "errors": []
}
{
  "documents": [
    {
      "score": 0.255424793209646,
      "id": "1"
    }
  ],
  "errors": []
}

如果編譯這些結果來人類看得方便的格式時,以下是什麼樣子:

  • 此電話已絕佳 batteryKey 片語: 絕佳 batterySentiment:81 百分比
  • 顯示為清晰] 與 [brightKey 片語: displaySentiment:94%
  • 存放區與應用程式沒有我 needKey 片語: 存放區、 appsSentiment:25%

當討論稍早在本文章中的文字分析應用程式開發介面,我透過 API 執行完整檢閱,並看到檢閱具有 77 百分比正面的人氣。不過,使用語言的 API 執行檢閱、 重大向其個別的語彙基元和再處理這些文字分析 API 讓有問題的電話和目標的情緒分析的個別層面 truer 評估每個這些項目。

它也會清除此電話更好的應用程式選取項目會回到整體 positivity 比初始 77 百分比高出許多這個檢閱的項目。

總結

最近透過標語來源、 「 資料 」 新電力。 就如同電力變成命脈的第二個工業 revolution,資料是就在前面 AI revolution 的命脈。身為開發人員,您收集資料所有的時間,以各種形式。一種日漸重要資料是客戶輸入-檢閱上購物,而且移動入口網站、 問卷調查回應、 意見反應和建議的同時關閉-且在線上,以及其他更多。也變得越來越普遍的貢獻所公開提供這類意見反應,讓您更重要的這項資訊非常重視的客戶。組織會想要確定聆聽他們的客戶,並採取適當的動作來補救遇到與產品和服務的任何問題。文字分析和語言認知 Analysis Services。 您要做為您的客戶萬歲工具


愛希斯記錄 Sahu* 資深技術推廣人員使用開發人員的體驗,在 Microsoft 印度、 協助 Isv 而且啟動克服技術上的挑戰,採用最新的技術,及發展到下一個解決方案層級。他可以連絡ashish.sahu@microsoft.com。*

非常感謝下列 Microsoft 技術專家檢閱這篇文章:做為 Sandeep Alur


MSDN Magazine 論壇中的這篇文章的討論