2017 年 5 月

第 32 卷,第 5 期

此文章由机器翻译。

辨識服務 - 使用 Microsoft Content Moderator 保護 Web 應用程式

Maarten Van De Bospoort | 2017 年 5 月

每日十億的使用者需要圖片及視訊社交媒體上的共用。為處理與使用者產生的內容,在網際網路上的任何人知道,net 匿名不一定會呈現美麗的人類行為。 

另一個重要近來的趨勢是聊天 bot 越來越多人。不是一天不用的一組新的項目從預約協調您線上銀行會議的差旅 bot 的版本。雖然這些 bot 有用毫無疑問,殺人 chatbot 是仍然難以捉摸︰ 才能破解 1 億個每日作用中使用者的目標想要的所有訊息的平台的一個 bot。

現在假設您建立的︰ 蝴蝶,每個人都覺得 bot 被迫洽詢。使用者可以共用媒體,您的機器人,透過密碼的機器學習演算法,bot 會預測接下來的 24 小時內的未來。一年的努力之後, 您發行您的機器人。整夜蝴蝶爆。不幸的是,啟動夢很快會變成公關夢魘。使用者所提交的成人和賊內容,就會共用並公開可供其他 bot 使用者。和部份內容已損毀。很糟糕。使用者會 suing 資料。電話響掛;而且,您會收到您的 Web 服務將會關閉的威脅。您需要功能強大的解決方案,協助偵測及防止被其他使用者看到錯誤的內容。而且您需要快速。

這時候就需要 Microsoft 內容仲裁者來解圍了 !

在本文中,我們將告訴您如何能夠幫助內容仲裁者。我們將先建立 chatbot,使用 Microsoft Bot 架構,但請記住,資訊同樣適用於任何網頁或用戶端應用程式。蝴蝶會讓使用者共用的文字、 影像和影片,並將使用內容的仲裁者以取得在發佈前,篩選出不適當題材。過程中,您將學習如何設定自訂內容仲裁者可以存取工作流程,以及如何調整內容分類器的閾值。我們也會討論不同連接器可用來在工作流程,例如文字和子入侵。讓我們開始內容仲裁的概觀。

內容仲裁

Microsoft 有 combatting 數位犯罪冗長且經過實證追蹤記錄。Microsoft 數位犯罪單元努力想要關閉使用中清除、 限制技術支援詐騙、 thwart 網路釣魚配置等等。一個較不可見的作用中區域是單位可以透過踏實子入侵的執法機關的協助。Microsoft 已提供免費的服務為 PhotoDNA 自 2009 年,相同的團隊現在也會提供內容仲裁。

內容仲裁是機器學習電腦可以協助大幅人類的區域。使用者所產生的資料量是只要太劇烈,以至於讓人快速檢閱並符合成本效益的方式。更重要的是,內容仲裁不讓人愉悅的活動。了解一些背景,請參閱 tcrn.ch/2n1d9M0

內容仲裁是 Microsoft 認知服務 Api 在 Azure 中執行一組發展中的成員。這些 Api,是機器的所有學習模型,這表示 Microsoft 訓練之後有大量資料,這些模型的特定實作。身為開發人員,您只要呼叫 Api 來取得結果,如電腦願景、 演講者備忘辨識或語言的了解,以名稱,但有少數的其中一個。內容的仲裁者映像 API 所使用的影像辨識 — 的機器學習很多進展,進行近幾年來的區域。

[圖 1顯示設定內容的仲裁者管線的方式。根據您的需求,內容仲裁會提供不同的 Api 呼叫,以遞增的層級的自訂能力,包括仲裁、 檢閱及工作。例如,工作流程 API 可讓您以程式設計方式修改用於作業的工作流程。接下來,您可以看到不同的分類器的影像、 文字和視訊和 CSAM,代表子色情內容粗俗的文章提供資料。PhotoDNA 是技術,可協助組織對抗這些映像的擴散。CSAM 」 分類器 」 的運作方式有點不同從先前所述的項目︰ PhotoDNA 使用雜湊和比對的技術,比較根據已知的映像的資料庫。在內容的仲裁者,您可以設定連接多個篩選器 (例如,第一次檢查 CSAM,然後成人/Racy 映像中) 的工作流程。讓人進行檢閱,也可以呼叫工作流程。最後,仲裁者內容管線具有彈性,在未來的其他 Api 可經由連結,以及。

使用者內容流動透過內容仲裁者,其中機器學習服務模型和人類工作結合在一起以篩選出下流材料
[圖 1 使用者內容流動透過內容仲裁者、 其中機器學習服務模型和人類工作結合在一起以篩選出下流材料

您的使用者內容進行中等程度的

有仲裁技術的了解之後,我們將之插入我們蝴蝶 bot。我們將建置的 bot Microsoft Bot 架構中,使用蝴蝶 Bot 架構的 Node.js 類別。所有這些 Api 都只 REST API 呼叫,因為您無法進行中等程度的輕鬆地從 C# 中,您的內容實際上,這可說甚至可以更容易,因為沒有內容的仲裁者.NET SDK (bit.ly/2mXQqQV)。 

已提供絕佳的 bot 概觀,在這份雜誌幾篇文章。如果您沒有一個尚未,我強烈建議簽出下列︰

此外,快速啟動上 dev.botframework.com可以讓您啟動並執行沒有時間。

在這裡,我們將使用簡單的入門方案 for Node.js。我們使用 Node.js 架構來分隔成個別對話交談提供對話模型。在對話方塊程式碼所示**[圖 2**,bot 會提示使用者輸入第一個函式中的圖片的 URL。然後,控制權會傳遞回使用者。當使用者傳送一些文字時,對話方塊流量通過第二個函式的使用者輸入。Bot 接著將轉送 moderate.js 中評估的輸入。我們第一次的嘗試,我們呼叫簡單的仲裁者可以存取 API (相對於更複雜的檢閱和作業 Api)。

[圖 2] 對話方塊的程式碼

bot.dialog('/moderateImage', [
  function (session, args) {
    builder.Prompts.text(session, 'Give me a picture URL to moderate, please.');
  },
  function (session, results){
    var input = session.message.text;
    var cm = require('./moderate.js');
    cm( 'ImageUrl', input, function(err, body) {
      if (err) {
        session.send('Oops. Something went wrong.');
        return;
      }
      var output = JSON.stringify(body);
      session.endDialog(output);
    });
  }
]);

若要呼叫之內容的仲裁者 API,您需要您可以從內容仲裁者可以存取 Web 站台或從 Azure 取得的認證。在這裡,我們將第二種方法。在 Azure 入口網站 (portal.azure.com),按一下綠色的建立新的認知的服務帳戶加上簽章,指定認知的服務。按一下 [建立] 之後,指定內容的仲裁者為 API 型別 (請參閱**[圖 3**)。使用其中 F0 層,因為它是免費的而且允許每秒一次呼叫這應該足以玩一玩現在。一旦建立帳戶之後,您的帳戶名稱和機碼下的機碼中找到資源管理。請注意,將使用其中一個索引鍵和資源識別碼中的字串 (屬性) 來連結稍後內容仲裁者檢閱網站內容的仲裁者 API。

從認知的服務清單中選取內容仲裁者
[圖 3 從認知的服務清單中選取內容仲裁者

Azure 入口網站也會顯示端點為 https://westus.api.cognitive.microsoft.com/contentmoderator。雖然這是正確的基底位址,但卻有點太短。完整的端點是內容仲裁者可以存取文件中。

中所示**[圖 4**,我們 DataRepresentation 將 URL 傳送至圖片,以指定 「 URL 」,但您可以輕易的映像傳送 blob 中。一旦您呼叫了仲裁者 API,則傳回的結果的主體會包含 JSON 與映像的分數。分數的範圍從 0.0 (無害) 到 1.0 (非常成人/賊)。

[圖 4 傳送圖片的 URL,仲裁者的內容

var unirest = require("unirest");
var url = "https://westus.api.cognitive.microsoft.com/contentmoderator/
  moderate/v1.0/ProcessImage/Evaluate";
module.exports = function(input, cb) {
  unirest.post(url)
    .type("json")
    .headers({
      "content-type": "application/json",
      "Ocp-Apim-Subscription-Key":<Key from the Azure portal>,
    })
    .send({
      "DataRepresentation": "URL",
      "Value": input
    })
    .end(function (res) {
      return cb(res.error, res.body );
    });
};

您可以看到在顯示的結果**[圖 5**,包含成人和賊預測分數以及歸結是否機密旗標中進行的臨界值。高興為蛤蜊,一邊,您在您的機器人時擲回下列幾行程式碼,並封鎖賊或成人的所有內容。您部署的新版本的 bot Azure 和使用者資料流中再次諮詢您的 oracle。呼!對結果感到滿意,您和小組收集您使用全新的飲料慶祝 kegerator 周圍。

[圖 5 成人和賊分類分數的影像

"AdultClassificationScore":0.0324602909386158,
"IsImageAdultClassified":false,
"RacyClassificationScore":0.06506475061178207,
"IsImageRacyClassified":false,
"AdvancedInfo":[],
"Result":false,
"Status":{
  "Code":3000,
  "Description":"OK",
  "Exception":null},
"TrackingId":"WU_ibiza_4470e022-4110-48bb-b4e8-7656b1f6703f_
  ContentModerator.F0_3e598d6c-5678-4e24-b7c6-62c40ef42028"

幾乎沒有兩個 sip 到您的微 brewed IPA,推文會保留您的電話常數震動。還有一大堆生氣的客戶︰ 「 為什麼您阻礙我無辜的圖片? 」「 我的兄弟可以取得更多的面板,透過使用圖片。您必須修正此問題 ! 」

影像分類就好了,但是沒有一體。我們使用的仲裁者 Api 裸機內容清楚能夠協助讓使用者做出好的決策,但它們並不完美。我們無法所做的其中一項改進是使用原始的分數,而不是 true/false 成人-和-賊分類調整仲裁。此外,它會顯示使用者容易重複使用相同的映像。所幸,內容仲裁者提供一個清單 API 來管理一組自訂映像,或您已受檢測的文字。仲裁者 API 會對映像,以防止使用者輕鬆地 fooling 些微的修改,或調整某些模糊比對。這是不錯的增強功能的第一個方法,但它不會排除的誤判必須應付的技術支援人員。如往常,當人類和機器處理團隊更困難的情況下找到最好的解決方案。電腦的願景可協助偵測極端的映像都清楚賊或成人,或不清楚。兩者之間的邊緣案例,我們身為人類可以決定在我們的特定案例落在哪一側圍牆的內容。這是其中的內容仲裁者檢閱工具和 API 顯現其優點。讓我們看看我們可以如何使用它來改善我們的解決方案。

仲裁者檢閱 API 的呼叫

到目前為止的方法已簡單︰ 傳送圖片和區塊,或讓它根據內容仲裁者標籤。現在我們要擴充解決方案。其概念是要設定流程中所示**[圖 6**。

使用內容的仲裁者工作流程的蝴蝶 Bot
圖 6 使用內容的仲裁者工作流程的蝴蝶 Bot

在此案例中,使用者第一次傳送影像至蝴蝶 bot。在步驟 2 中的 bot Web 服務會將圖片內容仲裁者使用檢閱 API 的作業作業會在工作流程 Id 做為參數。我們將會建立此工作流程中檢閱工具。我們的特定工作流程 (步驟 3) 將立即允許的所有圖片低於特定成人/賊分數 (例如 0.7),並設定其他旗標,超過在特定限制 (例如 0.9)。我們的 bot 會允許使用低分數內容,並封鎖的內容時,它顯然太賊或成人。在兩者之間的灰色區域,我們要前往檢查 (步驟 4) 的人為仲裁者的檢閱工具的內容。我們的團隊的檢閱者可以決定如何處理內容。完成時檢閱時,內容仲裁者會回呼我們的 bot 應用程式服務分享結果。此時,bot 時可以採取下內容已檢舉不當設定旗標。請注意這裡的彈性。您可以調整您的工作流程中的分數和檢閱者決定哪一種適用於特定應用程式。

若要開始,您必須註冊在此內容的仲裁者檢閱工具 bit.ly/2n8XUB6。您可以使用 Microsoft 帳戶登入,或建立本機帳戶。接下來,網站會要求您建立的檢閱小組,其目的是要檢閱灰色區域內容。您可以建立多個子小組,並建立將檢閱指派給不同的子小組的工作流程。在入口網站的 [設定] 頁面的 [認證] 索引標籤中,您可以連結您與您先前建立的 Azure 認知服務資源的內容仲裁者設定。複製的索引鍵和資源識別碼從 Azure 入口網站到仲裁者 UI 中的訂閱金鑰和資源識別碼設定。當您第一次建立您的帳戶時,您會取得自動設定 「 預設 」 工作流程。您可以檢閱 UI 中看到,此工作流程會建立人力的檢閱,如果是成人找到映像。現在就開始檢閱 API 的作業作業中使用此工作流程。

若要呼叫檢閱作業 API,您使用中的程式碼**[圖 7**。

[圖 7 呼叫檢閱作業 API

var url = 'https://westus.api.cognitive.microsoft.com/contentmoderator/
  review/v1.0/teams/butterfly/jobs';
var req = unirest.post(url)
  .type("application/json")
  .query({
    ContentType: 'Image',
    ContentId: '67c21785-fb0a-4676-acf6-ccba82776f9a',
    WorkflowName: 'default',
    CallBackEndpoint: 'http://butterfly.azure.com/review'
  })
  .headers({
    "Ocp-Apim-Subscription-Key": <ocp_key>
  })
  .send({
    "ContentValue": pictureUrl
  })
  .end(function (res) {
    return callback(res.error, res.body );
});

請注意,URL 包含小組名稱蝴蝶和後置工作。在 CallBackEndpoint,我們會指定內容的仲裁者會呼叫以通知檢閱結果的 REST 端點。此外,我們也會指定唯一的 ContentId 時內容的仲裁者會呼叫我們,我們可以相互關聯的映像,而且我們 ContentValue 中傳送的實際影像的 URL。呼叫成功時,結果的本文不包含任何內容仲裁者可以存取結果。相反地,它會傳回 JobId:

{"JobId":"2017035c6c5f19bfa543f09ddfca927366dfb7"}

結果會透過您在 CallBackEndpoint 中指定的回呼。此結果就會再有 JobId,它可能會參考 ReviewId,並讓您可以跨 ContentId。預設工作流程內容的仲裁者會回呼立即中繼資料的結果如果影像不被認為是成人。實際的 JSON 如下所示**[圖 8**。

[圖 8 預設工作流程的結果

{
  "JobId": "2017035c6c5f19bfa543f09ddfca927366dfb7",
  "ReviewId": "",
  "WorkFlowId": "default",
  "Status": "Complete",
  "ContentType": "Image",
  "CallBackType": "Job",
  "ContentId": "67c21785-fb0a-4676-acf6-ccba82776f9a",
  "Metadata": {
    "adultscore": "0.465",
    "isadult": "False",
    "racyscore": "0.854",
    "isracy": "True"
  }
}

這項工作狀態設定為 「 完成 」,而且 CallbackType 工作。不過,影像會被視為成人內容,如果內容仲裁者會建立檢閱,並填入 ReviewId 欄位的識別項。映像然後最後會檢閱小組檢閱 UI (請參閱**[圖 9**)。

包含圖片和未選取的標記內容仲裁者檢閱工具
[圖 9 使用圖片與未選取的標記內容仲裁者檢閱工具

檢閱工具,並使用獲益加以說明。這個工具被設計來處理大量的影像。檢閱者在螢幕上會查看所有圖片,標記不傳遞 muster,然後移至下一個畫面中的項目。此工具可讓檢閱者移回以防他認為他犯了幾秒鐘的時間。這些幾秒鐘後,內容仲裁者會將影像儲存的最後一個標記,並呼叫回呼函式,我們同樣地,現在以指定最終 judgement。我們現在可以採取適當的動作,或是關閉內容發佈根據業務需求。第二次呼叫回會如下所示圖 10

[圖 10 結果檢閱回撥

{
  "ReviewId": "201703367f430472074c1fb18651a04750448c",
  "ModifiedOn": "2017-03-07T18:34:17.9436621Z",
  "ModifiedBy": "Bob",
  "CallBackType": "Review",
  "ContentId": "67c21785-fb0a-4676-acf6-ccba82776f9a",
  "ContentType": "Image",
  "Metadata": {
    "adultscore": "0.465",
    "isadult": "False",
    "racyscore": "0.854",
    "isracy": "True"
  },
  "ReviewerResultTags": {
    "a": "True",
    "r": "True",
    "pt": "False"
  }
}

CallBackType 現在是而不是工作的評論和 ContentId 和 ReviewId 符合的結果,從第一個回呼時,您可以看到新增的 ReviewerResultTags。

自訂工作流程

既然我們已經有預設的工作流程的深入了解,我們可以開始開啟某些參數並撥。蝴蝶,我們要讓一切賊分數小於 0.7,但是封鎖賊分數高於 0.9 的任何項目。項目之間,我們想要看第二個檢閱小組。因此,在工作流程編輯器中,我們將建立新的工作流程。

您會看到有許多連接到下拉式清單中的選項。這些選項可讓您從映像建立進階的工作流程,例如光學字元辨識 (OCR) 文字和面對偵測 Api。此工具也可讓您宣告回呼端點,以便檢閱。如果您指定回呼作業 API,以及這裡 CallBackEndpoint 中,工作流程中的一項覆寫 CallBackEndpoint。

現在,當您呼叫檢閱作業 API,並指定此工作流程,您會收到 JobId,就像您呼叫預設的工作流程時一樣。賊圖片 (0.7 和 0.9 在我們的案例) 之間的分數,根據內容仲裁者將再次建立評論,您會看到這些映像中內容的仲裁者檢視 UI。

有兩個注意事項最終工作流程。首先,如果圖片不符合在初始作業回呼的評論,我們仍然必須了解圖片是否已遭到封鎖的需求與高階或上下限及任何允許的。若要這樣做,您必須一點,複製邏輯,這表示項目可能會不同步處理。幸運的是,檢閱工具會在工作流程公開為 JSON。更棒的是,是工作流程 REST API,可用來提交工作流程內容的仲裁者可以存取應用程式開發介面。位元的配管您可以使用相同的 JSON,使您的機器人邏輯和檢閱 UI 工具保持同步。

關於工作流程的第二個附註與它們的擴充性。小組的焦點是檢閱工具的各種 Api 共同的目的地。當您瀏覽至 [連接器] 索引標籤,檢閱 UI 中時,您可以看到目前可用的連接器。若要啟動這些連接器,您可以輸入對應的訂閱金鑰。PhotoDNA 的案例是容易的。如果您的產品取得任何類型的使用者內容,您會想要確定不共用任何子遭人利用,映像。一旦您已經註冊服務,將此連結至現有的工作流程很簡單。它一定勝過不必個別呼叫 REST Api。在撰寫本文時,文字分析 API 和臉偵測 API 可用做為連接器。對於您可以移 Azure 入口網站中,建立如同我們稍早的認知服務和內容的仲裁者 UI 中輸入的訂閱金鑰。

總結

還有其他我們沒有空間中的進階的功能。例如,您可以建立自己的標記,在您的工作流程中使用的設定。我們建立 「 點 」 標記,標記褻瀆文字中。我們會使用它的文字內容的仲裁設定的工作流程中。此外,工作流程有替代的輸入,以處理輸入的格式不會比對的辨識符號的情況。例如,當您需要偵測文字褻瀆 OCR 透過映像中。您可以註冊視訊仲裁,也就是目前在私人預覽。最後,您可以預期顯示在入口網站,您可以用來建置和擴充您的工作流程的多個連接器。

使用內容仲裁者,可讓您擴充您的內容仲裁功能,為所有的媒體格式跨大型磁碟區。內容仲裁者是一種平台,Api 和專為垂直內容仲裁,我們要建置的解決方案。您可以使用它,小數位數和轉換成其他媒體格式和新內容仲裁功能可以使用。內容的仲裁者會使用最佳電腦學習式分類器能夠與其他技術越來越好所有的時間。在分類器的增強功能會自動改善您的結果。 


Maarten van de Bospoort是在雷德蒙德的 Microsoft 開發人員經驗的主要軟體開發工程師。他負責開發人員和架構設計人員大取用者 Isv 加速採用 Microsoft 技術,例如 bot、 認知 services 和偶爾的通用 Windows 平台應用程式。

Sanjeev Jagtap是 Microsoft 在里德蒙內容仲裁者小組的資深產品經理。他是熱衷於客戶、 Microsoft 技術和 Hackathons。

感謝下列 Microsoft 技術專家來檢閱這份文件︰ Christopher Harrison 和 Sudipto Rakshit