paint-brush
एआई/एमएल कंटेंट मॉडरेशन के साथ ऑनलाइन समुदायों को सुरक्षित बनानाद्वारा@amazonivs
2,796 रीडिंग
2,796 रीडिंग

एआई/एमएल कंटेंट मॉडरेशन के साथ ऑनलाइन समुदायों को सुरक्षित बनाना

द्वारा Amazon Interactive Video Service (IVS) 11m2023/05/25
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

लाइव स्ट्रीमिंग प्लेटफॉर्म की अन्तरक्रियाशीलता और अप्रत्याशितता उनके इतने लोकप्रिय होने का एक बड़ा हिस्सा है। समुदायों को यह सुनिश्चित करने के लिए अपनी सामग्री की निगरानी करने में मेहनती होना चाहिए कि यह उनके सामुदायिक दिशानिर्देशों या स्वीकार्य उपयोग नीति को पूरा करती है। यह अक्सर एक मॉडरेशन प्रणाली के रूप में परिणत होता है जहां उपयोगकर्ता समुदाय दिशानिर्देशों को संभावित अपराधों की रिपोर्ट करते हैं और मॉडरेटर या व्यवस्थापक आवश्यक कार्रवाई करते हैं। आर्टिफिशियल इंटेलिजेंस (एआई) और मशीन लर्निंग (एमएल) टूल्स में हाल के वर्षों में सुधार हुआ है, और डेवलपर्स इन टूल्स का उपयोग अपने समुदायों को मॉडरेट करने में सहायता के लिए कर सकते हैं।
featured image - एआई/एमएल कंटेंट मॉडरेशन के साथ ऑनलाइन समुदायों को सुरक्षित बनाना
Amazon Interactive Video Service (IVS)  HackerNoon profile picture


लाइव-स्ट्रीमिंग उपयोगकर्ता-जनित सामग्री (UGC) प्लेटफ़ॉर्म की अन्तरक्रियाशीलता और अप्रत्याशितता इस बात का एक बड़ा हिस्सा है कि वे इतने लोकप्रिय क्यों हैं। लेकिन, उस अप्रत्याशितता का मतलब है कि समुदायों को अपनी सामग्री की निगरानी में मेहनती होना चाहिए ताकि यह सुनिश्चित हो सके कि यह उनके सामुदायिक दिशानिर्देशों या स्वीकार्य उपयोग नीति को पूरा करता है और सभी उपयोगकर्ताओं के लिए उपयुक्त, सुरक्षित और स्वागत योग्य है। इसका परिणाम अक्सर एक मॉडरेशन प्रणाली में होता है जहां उपयोगकर्ता समुदाय के दिशा-निर्देशों के लिए संभावित अपराधों की रिपोर्ट करते हैं और मॉडरेटर या व्यवस्थापक आवश्यक कार्रवाई करते हैं। यह अक्सर एक मैन्युअल प्रक्रिया होती है जो वांछित होने के लिए बहुत कुछ छोड़ देती है।


आर्टिफिशियल इंटेलिजेंस (एआई) और मशीन लर्निंग (एमएल) टूल्स में हाल के वर्षों में सुधार हुआ है, और डेवलपर्स इन टूल्स का उपयोग अपने समुदायों को मॉडरेट करने में सहायता के लिए कर सकते हैं। इस पोस्ट में, हम Amazon Interactive Video Service (Amazon IVS) और Amazon Rekognition के साथ ऐसा करने का एक तरीका देखेंगे।

समाधान अवलोकन

एआई/एमएल के साथ एक एप्लिकेशन में हर लाइव स्ट्रीम के हर फ्रेम का विश्लेषण करना बहुत महंगा और मुश्किल काम होगा। इसके बजाय, डेवलपर अपने मॉडरेटर्स की मदद के लिए एक निर्दिष्ट आवृत्ति पर उनके अनुप्रयोगों में लाइव स्ट्रीम के नमूनों का विश्लेषण कर सकते हैं, अगर सामग्री में मानव मॉडरेटर द्वारा आगे की समीक्षा की आवश्यकता है तो उन्हें सतर्क कर सकते हैं। यह 100% सही समाधान नहीं है, लेकिन यह सामग्री मॉडरेशन को स्वचालित करने और मॉडरेटर के काम को आसान बनाने में मदद करने का एक तरीका है।


इस समाधान में निम्नलिखित चरण शामिल हैं:


  • कॉन्फ़िगर Amazon सिंपल स्टोरेज सर्विस (Amazon S3) में लाइव स्ट्रीम की ऑटो रिकॉर्डिंग एक निर्दिष्ट आवृत्ति पर थंबनेल छवियों को सहेजने के लिए अपने Amazon IVS चैनल पर
  • एक Amazon EventBridge नियम बनाएं जो Amazon S3 बकेट में एक नया ऑब्जेक्ट बनाए जाने पर सक्रिय होता है
  • एक एडब्ल्यूएस लैम्ब्डा फ़ंक्शन बनाएं जो इवेंटब्रिज नियम द्वारा ट्रिगर हो जाता है और नग्नता, हिंसा या जुआ जैसी सामग्री का पता लगाने के लिए अमेज़ॅन रिकॉग्निशन का उपयोग करता है जिसे मानव मॉडरेटर द्वारा नियंत्रित करने की आवश्यकता हो सकती है
  • एक एडब्ल्यूएस लैम्ब्डा फ़ंक्शन बनाएं और यदि आवश्यक हो तो लाइव स्ट्रीम को रोकने के साधन प्रदान करने के लिए इसे अमेज़ॅन एपीआई गेटवे के माध्यम से प्रदर्शित करें
  • एक कस्टम घटना भेजें अमेज़न आईवीएस चैट रूम विश्लेषण के परिणामों से युक्त


Amazon EventBridge नियम और AWS लैम्ब्डा फ़ंक्शंस बनाना

नियम और कार्यों को बनाना आसान बनाने के लिए हम AWS सर्वर रहित एप्लिकेशन मॉडल (SAM) का उपयोग करेंगे। यहाँ संपूर्ण template.yaml फ़ाइल है जो आवश्यक अनुमतियों, Amazon EventBridge नियम, AWS लैम्ब्डा परत (AWS SDK निर्भरता के लिए), और फ़ंक्शन परिभाषाओं का वर्णन करती है। हम इसे नीचे तोड़ देंगे।


 AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Description: Amazon IVS Moderation Functions Globals: Function: Runtime: nodejs18.x Timeout: 30 MemorySize: 128 Api: EndpointConfiguration: Type: REGIONAL Cors: AllowMethods: "'GET, POST, OPTIONS'" AllowHeaders: "'Content-Type'" AllowOrigin: "'*'" MaxAge: "'600'" Resources: IvsChatLambdaRefLayer: Type: AWS::Serverless::LayerVersion Properties: LayerName: sam-app-dependencies Description: Dependencies for sam app ContentUri: dependencies/ CompatibleRuntimes: - nodejs18.x LicenseInfo: "MIT" RetentionPolicy: Retain IVSAccessPolicy: Type: AWS::IAM::Policy Properties: PolicyName: IVSModerationAccessPolicy PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action: - 's3:GetObject' - 's3:GetObjectAcl' - 'ivschat:SendEvent' - 'ivs:StopStream' - 'rekognition:DetectModerationLabels' Resource: '*' Roles: - Ref: ModerateImageRole - Ref: StopStreamRole ApiAccessPolicy: Type: AWS::IAM::Policy Properties: PolicyName: ApiAccessPolicy PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action: - 'sts:AssumeRole' Resource: '*' Roles: - Ref: ModerateImageRole - Ref: StopStreamRole EventRule: Type: AWS::Events::Rule Properties: Description: EventRule State: ENABLED EventPattern: source: - aws.s3 detail-type: - "Object Created" detail: bucket: name: - ivs-demo-channel-stream-archive object: key: - suffix: .jpg Targets: - Arn: !GetAtt ModerateImage.Arn Id: MyLambdaFunctionTarget PermissionForEventsToInvokeLambda: Type: AWS::Lambda::Permission Properties: FunctionName: !Ref ModerateImage Action: lambda:InvokeFunction Principal: events.amazonaws.com SourceArn: !GetAtt EventRule.Arn ModerateImage: Type: 'AWS::Serverless::Function' Properties: Environment: Variables: DEMO_CHAT_ARN: 'arn:aws:ivschat:us-east-1:[redacted]:room/[redacted]' DEMO_CHANNEL_ARN: 'arn:aws:ivs:us-east-1:[redacted]:channel/[redacted]' Handler: index.moderateImage Layers: - !Ref IvsChatLambdaRefLayer CodeUri: lambda/ StopStream: Type: 'AWS::Serverless::Function' Properties: Environment: Variables: DEMO_CHAT_ARN: 'arn:aws:ivschat:us-east-1:[redacted]:room/[redacted]' DEMO_CHANNEL_ARN: 'arn:aws:ivs:us-east-1:[redacted]:channel/[redacted]' Handler: index.stopStream Layers: - !Ref IvsChatLambdaRefLayer CodeUri: lambda/ Events: Api1: Type: Api Properties: Path: /stop-stream Method: POST Outputs: ApiURL: Description: "API endpoint URL for Prod environment" Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/"


उस फ़ाइल में बहुत कुछ चल रहा है, तो आइए इसे थोड़ा सा तोड़ दें। सबसे पहले, हम अपने फंक्शन में JavaScript (v3) के लिए AWS SDK को शामिल करने के लिए एक लेयर बनाते हैं।


 IvsChatLambdaRefLayer: Type: AWS::Serverless::LayerVersion Properties: LayerName: sam-app-dependencies Description: Dependencies for sam app ContentUri: dependencies/ CompatibleRuntimes: - nodejs18.x LicenseInfo: "MIT" RetentionPolicy: Retain


dependencies/nodejs निर्देशिका में, एक package.json फ़ाइल होती है जिसमें मॉड्यूल शामिल होते हैं जिनकी हमारे फ़ंक्शन को आवश्यकता होती है।


 { "dependencies": { "@aws-sdk/client-ivs": "^3.289.0", "@aws-sdk/client-ivschat": "^3.289.0", "@aws-sdk/client-rekognition": "^3.289.0" } }


IVSAccessPolicy और APIAccessPolicy कुंजियों द्वारा पहचाना जाने वाला अगला खंड हमारे सर्वर रहित एप्लिकेशन को आवश्यक APIs ( s3:GetObject , s3:GetObjectAcl , ivschat:SendEvent , ivs:StopStream , और rekognition:DetectModerationLabels ) तक पहुंचने की क्षमता देता है और स्टॉप स्ट्रीम विधि को उजागर करता है। जिसे हम Amazon API गेटवे के माध्यम से नीचे बनाएंगे।


अगला, हम Amazon EventBridge नियम बनाते हैं। bucket के अंतर्गत name संपत्ति Amazon S3 बकेट के नाम से मेल खानी चाहिए जिसे आपने अपने रिकॉर्डिंग कॉन्फ़िगरेशन में कॉन्फ़िगर किया था। अमेज़ॅन एस 3 में रिकॉर्डिंग प्लेलिस्ट और एचएलएस मीडिया समेत विभिन्न फाइलें बनाती है, इसलिए हम इस नियम को केवल हमारे थंबनेल के लिए सक्रिय करने के लिए फ़िल्टर कर सकते हैं, object के नीचे key को suffix: jpg


 EventRule: Type: AWS::Events::Rule Properties: Description: EventRule State: ENABLED EventPattern: source: - aws.s3 detail-type: - "Object Created" detail: bucket: name: - ivs-demo-channel-stream-archive object: key: - suffix: .jpg Targets: - Arn: !GetAtt ModerateImage.Arn Id: MyLambdaFunctionTarget


अगला, हम नियम को AWS लैम्ब्डा फ़ंक्शन को लागू करने के लिए आवश्यक अनुमतियाँ देते हैं।


 PermissionForEventsToInvokeLambda: Type: AWS::Lambda::Permission Properties: FunctionName: !Ref ModerateImage Action: lambda:InvokeFunction Principal: events.amazonaws.com SourceArn: !GetAtt EventRule.Arn


अब हम अपने कार्य को परिभाषित कर सकते हैं जिसे Amazon EventBridge नियम द्वारा लागू किया जाएगा।


 ModerateImage: Type: 'AWS::Serverless::Function' Properties: Environment: Variables: DEMO_CHAT_ARN: 'arn:aws:ivschat:us-east-1:[redacted]:room/[redacted]' DEMO_CHANNEL_ARN: 'arn:aws:ivs:us-east-1:[redacted]:channel/[redacted]' Handler: index.moderateImage Layers: - !Ref IvsChatLambdaRefLayer CodeUri: lambda/


नोट: मैं DEMO_CHAT_ARN और DEMO_CHANNEL_ARN को पर्यावरण चर के रूप में घोषित कर रहा हूं, लेकिन आपके एप्लिकेशन को फ़ंक्शन में पारित ईवेंट से ARN मान प्राप्त होने की संभावना है क्योंकि आप इस कार्यक्षमता का उपयोग केवल एक Amazon IVS चैनल से अधिक के साथ करेंगे।


अंत में, हम उस फ़ंक्शन को परिभाषित कर सकते हैं जिसका उपयोग यदि आवश्यक हो तो स्ट्रीम को रोकने के लिए किया जाएगा।


 StopStream: Type: 'AWS::Serverless::Function' Properties: Environment: Variables: DEMO_CHAT_ARN: 'arn:aws:ivschat:us-east-1:[redacted]:room/[redacted]' DEMO_CHANNEL_ARN: 'arn:aws:ivs:us-east-1:[redacted]:channel/[redacted]' Handler: index.stopStream Layers: - !Ref IvsChatLambdaRefLayer CodeUri: lambda/ Events: Api1: Type: Api Properties: Path: /stop-stream Method: POST

AWS लैम्ब्डा फ़ंक्शंस बनाना

अब जब हमने AWS SAM के साथ अपने बुनियादी ढांचे का वर्णन कर लिया है, तो चलिए उन कार्यों को बनाते हैं जिनका हमने वर्णन किया था। index.mjs में, हम SDK क्लासेस को import , उन पर्यावरण चरों से Arn मानों को पुनः प्राप्त करते हैं जिन्हें हमने पारित किया है, और हमारे कार्यों के लिए आवश्यक क्लाइंट के उदाहरण बनाते हैं।


 import { IvsClient, StopStreamCommand } from "@aws-sdk/client-ivs"; import { IvschatClient, SendEventCommand } from "@aws-sdk/client-ivschat"; import { RekognitionClient, DetectModerationLabelsCommand } from "@aws-sdk/client-rekognition"; const chatArn = process.env.DEMO_CHAT_ARN; const channelArn = process.env.DEMO_CHANNEL_ARN; const ivsClient = new IvsClient(); const ivsChatClient = new IvschatClient(); const rekognitionClient = new RekognitionClient();


moderateImage फंक्शन Amazon EventBridge ईवेंट प्राप्त करेगा, ईवेंट से bucket और key निकालेगा, और श्रेणियों के आधार पर छवियों में किसी भी अनुचित या आपत्तिजनक सामग्री का पता लगाने के लिए rekognitionClient के माध्यम से DetectModerationLabelsCommand भेजेगा यहाँ सूचीबद्ध .


 export const moderateImage = async (event) => { console.log('moderateImage:', JSON.stringify(event, null, 2)); const bucket = event.detail.bucket.name; const key = event.detail.object.key; const detectLabelsCommandInput = { Image: { S3Object: { Bucket: bucket, Name: key, } }, }; const detectLabelsRequest = new DetectModerationLabelsCommand(detectLabelsCommandInput); const detectLabelsResponse = await rekognitionClient.send(detectLabelsRequest); if (detectLabelsResponse.ModerationLabels) { sendEvent('STREAM_MODERATION', detectLabelsResponse.ModerationLabels); } };


यदि आवश्यक हो, तो moderateImage फ़ंक्शन किसी दिए गए Amazon IVS चैट रूम में किसी भी फ्रंट एंड कनेक्टेड क्लाइंट को कस्टम इवेंट प्रकाशित करने के लिए sendEvent कॉल करता है।


 const sendEvent = async (eventName, eventDetails) => { const sendEventInput = { roomIdentifier: chatArn, attributes: { streamModerationEvent: JSON.stringify(eventDetails), }, eventName, }; const sendEventRequest = new SendEventCommand(sendEventInput); await ivsChatClient.send(sendEventRequest); };


आपका फ्रंट एंड यह तय कर सकता है कि इस घटना को कैसे संभालना है और इस घटना को प्रकाशित करने का तर्क आपकी व्यावसायिक आवश्यकताओं पर निर्भर करेगा। शायद आप क्लाउडवॉच में कस्टम अलार्म ट्रिगर करना चाहते हैं, एक ईमेल भेजें, या अमेज़ॅन एसएनएस के माध्यम से अधिसूचना प्रकाशित करें? हर एप्लिकेशन की ज़रूरतें अलग-अलग होती हैं, लेकिन इस बिंदु पर मॉडरेशन डेटा उपलब्ध है, जिससे आपको इसकी आवश्यकता है।


StopStreamCommand भेजने के लिए stopStream विधि ivsClient का उपयोग करती है। दोबारा, इसका कार्यान्वयन आप पर निर्भर है। आप संभावित रूप से इस कमांड को पूरी तरह से स्वचालित भी कर सकते हैं यदि Amazon रिकॉग्निशन परिणाम एक निश्चित श्रेणी से मेल खाता है या एक आत्मविश्वास स्तर से अधिक है।


 export const stopStream = async (event) => { console.log('stopStream:', JSON.stringify(event, null, 2)); try { const stopStreamRequest = new StopStreamCommand({ channelArn }); const stopStreamResponse = await ivsClient.send(stopStreamRequest); responseObject.body = JSON.stringify(stopStreamResponse); } catch (err) { responseObject.statusCode = err?.name === 'ChannelNotBroadcasting' ? 404 : 500; responseObject.body = JSON.stringify(err); } return responseObject; };

डेमो

मेरे डेमो में, मैंने कस्टम इवेंट्स को सुनने और परिणामों को एक मॉडरेटर दृश्य में प्रदर्शित करने का निर्णय लिया, जो पता लगाए गए आइटम और आत्मविश्वास के स्तर को दर्शाता है। मैं मॉडरेटर को 'स्टॉप स्ट्रीम' बटन के साथ भी प्रस्तुत करता हूं जो उजागर अमेज़ॅन एपीआई गेटवे के माध्यम से stopStream विधि को आमंत्रित करता है।


सारांश

इस पोस्ट में हमने सीखा कि मानव मध्यस्थों को उन अनुप्रयोगों में सामग्री को मॉडरेट करने में मदद करने के लिए Amazon रिकॉग्निशन का उपयोग कैसे करें जो वे Amazon IVS का उपयोग करके बनाते हैं। अगर आप इस बारे में अधिक जानना चाहते हैं कि कैसे Amazon IVS सुरक्षित UGC समुदायों को बनाने में मदद कर सकता है, तो निम्न ब्लॉग पोस्ट देखें: