Amazon Athena, Amazon Translate और Amazon Comprehend के साथ SQL फ़ंक्शन का उपयोग करके पाठ का अनुवाद और विश्लेषण करें

स्रोत नोड: 748149

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

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

एथेना एक इंटरैक्टिव क्वेरी सेवा है जो SQL का उपयोग करके अमेज़न S3 में संग्रहीत डेटा का विश्लेषण करना आसान बनाता है। Amazon Comprehend एक प्राकृतिक भाषा प्रसंस्करण (NLP) सेवा है जो पाठ से अंतर्दृष्टि को उजागर करना आसान बनाती है। Amazon Translate एक तंत्रिका मशीन अनुवाद सेवा है जो तेज़, उच्च-गुणवत्ता, सस्ती और अनुकूलन योग्य भाषा अनुवाद प्रदान करती है। इस पोस्ट में, मैं आपको दिखाता हूं कि अब आप निम्नलिखित क्रियाओं को करने के लिए उन्हें एक साथ कैसे उपयोग कर सकते हैं:

  • एक पाठ क्षेत्र की प्रमुख भाषा का पता लगाएं
  • व्यक्त की गई प्रचलित धारणा का पता लगाएं- सकारात्मक, नकारात्मक, न तो या दोनों
  • डिटेक्ट या रिडक्ट इकाइयाँ (जैसे आइटम, स्थान या मात्रा)
  • PII का पता लगाएं या उसका निवारण करें
  • एक भाषा से दूसरी भाषा में पाठ का अनुवाद करें

यह पोस्ट निम्नलिखित लक्ष्यों को पूरा करती है:

  • आपको दिखाएं कि अपने AWS खाते में टेक्स्ट एनालिटिक्स फ़ंक्शंस को जल्दी से कैसे सेट करें (यह तेज़ और आसान है!)
  • संक्षेप में बताएं कि फ़ंक्शन कैसे काम करता है
  • प्रदर्शन और लागत पर चर्चा करें
  • एक ट्यूटोरियल प्रदान करें जहां हम अमेज़न उत्पाद समीक्षाओं पर कुछ पाठ विश्लेषिकी करते हैं
  • सभी उपलब्ध कार्यों का वर्णन करें

हम पोस्ट के अंत में सभी उपलब्ध कार्यों की एक सूची शामिल करते हैं; निम्नलिखित कोड कुछ उदाहरण प्रश्न और परिणाम दिखाता है:

USING FUNCTION detect_sentiment(text_col VARCHAR, lang VARCHAR) RETURNS VARCHAR TYPE LAMBDA_INVOKE WITH (lambda_name = 'textanalytics-udf') SELECT detect_sentiment('I am very happy', 'en') as sentiment sentiment POSITIVE USING FUNCTION detect_pii_entities(text_col VARCHAR, lang VARCHAR) RETURNS VARCHAR TYPE LAMBDA_INVOKE WITH (lambda_name = 'textanalytics-udf') SELECT detect_pii_entities('I am Bob, I live in Herndon VA, and I love cars', 'en') as pii pii [["NAME","Bob"],["ADDRESS","Herndon VA"]] USING FUNCTION redact_pii_entities(text_col VARCHAR, lang VARCHAR, type VARCHAR) RETURNS VARCHAR TYPE LAMBDA_INVOKE WITH (lambda_name = 'textanalytics-udf') SELECT redact_pii_entities('I am Bob, I live in Herndon VA, and I love cars', 'en', 'NAME,ADDRESS') as pii_redacted pii_redacted I am [NAME], I live in [ADDRESS], and I love cars USING FUNCTION translate_text(text_col VARCHAR, sourcelang VARCHAR, targetlang VARCHAR, terminologyname VARCHAR) RETURNS VARCHAR TYPE LAMBDA_INVOKE WITH (lambda_name = 'textanalytics-udf') SELECT translate_text('It is a beautiful day in the neighborhood', 'auto', 'fr', NULL) as translated_text translated_text C'est une belle journée dans le quartier 

टेक्स्ट एनालिटिक्स UDF इंस्टॉल करें

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

निम्न चरणों के साथ prebuilt Lambda फ़ंक्शन स्थापित करें:

  1. पर नेविगेट करें टेक्स्टअनलीटिक्ससुफ़हैंडलर में आवेदन AWS सर्वर रहित अनुप्रयोग रिपॉजिटरी.
  2. में अनुप्रयोग सेटिंग्स अनुभाग, उनकी चूक पर सेटिंग्स रखें।
  3. चुनते हैं मैं स्वीकार करता हूं कि यह ऐप कस्टम IAM भूमिका बनाता है.
  4. चुनें तैनाती.

और बस! अब आपके पास एक नया लैंबडा फंक्शन है textanalytics-udf। आप एथेना में कुछ पाठ विश्लेषिकी प्रश्नों की कोशिश करने के लिए तैयार हैं।

यदि आप इसके बजाय स्रोत कोड से निर्माण और तैनाती करना पसंद करते हैं, तो अंत में दिशाएं देखें गिटहब रिपॉजिटरी README.

अपना पहला टेक्स्ट एनालिटिक्स क्वेरी चलाएँ

यदि आप एथेना के लिए नए हैं, तो आप समीक्षा कर सकते हैं Getting Started मार्गदर्शक।

इस लेखन के रूप में, एथेना यूडीएफ सुविधा अभी भी पूर्वावलोकन में है। इसे सक्षम करने के लिए, नाम से एक एथेना कार्यसमूह बनाएं AmazonAthenaPreviewFunctionality और उस कार्यसमूह से सभी UDF क्वेरी चलाएं।

SQL संपादक में निम्न क्वेरी दर्ज करें:

USING FUNCTION detect_sentiment(text_col VARCHAR, lang VARCHAR) RETURNS VARCHAR TYPE LAMBDA_INVOKE WITH (lambda_name = 'textanalytics-udf') SELECT detect_sentiment('I am very happy', 'en') as sentiment

आप एक सरल प्राप्त करें POSITIVE परिणाम। अब फिर से कोशिश करें, इनपुट टेक्स्ट को अलग-अलग करें - यह देखने के लिए कुछ कम सकारात्मक प्रयास करें कि लौटे हुए भाव कैसे बदलते हैं।

प्रत्येक संभावित भावना मान के लिए आत्मविश्वास स्कोर के साथ भावना प्राप्त करने के लिए, इसके बजाय निम्नलिखित क्वेरी का उपयोग करें:

USING FUNCTION detect_sentiment_all(text_col VARCHAR, lang VARCHAR) RETURNS VARCHAR TYPE LAMBDA_INVOKE WITH (lambda_name = 'textanalytics-udf') SELECT detect_sentiment_all('I am very happy', 'en') as sentiment 

अब आपको एक JSON स्ट्रिंग है जिसमें सेंटीमेंट और सभी सेंटीमेंट स्कोर शामिल हैं:

{"sentiment":"POSITIVE","sentimentScore":{"positive":0.999519,"negative":7.407639E-5,"neutral":2.7478999E-4,"mixed":1.3210243E-4}}

आप का उपयोग कर सकते हैं अंतर्निहित JSON निष्कर्षण फ़ंक्शन एथेना में इस परिणाम पर आगे के विश्लेषण के लिए खेतों को निकालने के लिए।

यूडीएफ कैसे काम करता है

एथेना यूडीएफ ढांचे के बारे में अधिक जानकारी के लिए, देखें उपयोगकर्ता परिभाषित क्रियाओं के साथ क्वेरी करना.

जावा वर्ग टेक्स्टअनलीटिक्ससुफ़हैंडलर हमारे यूडीएफ लैम्ब्डा फ़ंक्शन हैंडलर को लागू करता है। इस क्लास में प्रत्येक टेक्स्ट एनालिटिक्स फ़ंक्शन की एक समान सार्वजनिक विधि है।

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

अमेज़न समझ एपीआई सेवा कोटा अनजाने उच्च उपयोग से आपकी लागत जोखिम को सीमित करने के लिए रेलिंग प्रदान करें (हम निम्नलिखित अनुभाग में इस पर अधिक चर्चा करते हैं)। डिफ़ॉल्ट रूप से, बहु-दस्तावेज़ बैच APIs प्रति सेकंड 250 रिकॉर्ड तक प्रक्रिया करते हैं, और एकल-दस्तावेज़ APIs 20 रिकॉर्ड प्रति सेकंड तक प्रक्रिया करते हैं। हमारे UDFs इन सीमाओं के भीतर रहने के लिए अनुरोध दर को नियंत्रित करने के लिए घातीय बैक ऑफ और रिट्री का उपयोग करते हैं। आप एपीआई का उपयोग करने के लिए दूसरे कोटे के लेनदेन में वृद्धि का अनुरोध कर सकते हैं कोटा अनुरोध टेम्पलेट पर एडब्ल्यूएस प्रबंधन कंसोल.

Amazon Comprehend और Amazon Translate प्रत्येक में अधिकतम 5,000 स्ट्रिंग बाइट्स की अधिकतम इनपुट स्ट्रिंग लंबाई लागू होती है। टेक्स्ट फ़ील्ड जो 8 utf-5,000 बाइट्स से अधिक लंबे होते हैं, उन्हें भाषा और भावना का पता लगाने के लिए 8 बाइट्स के लिए छोटा कर दिया जाता है, और अनुवाद और निकाय या PII डिटेक्शन और रिडक्शन के लिए 5,000 बाइट्स के कई टेक्स्ट ब्लॉक में वाक्य सीमाओं पर विभाजित किया जाता है। परिणाम तो संयुक्त हैं।

लागत का अनुकूलन

एथेना क्वेरी की लागत के अलावा, टेक्स्ट एनालिटिक्स यूडीएफ लैम्बडा और अमेज़ॅन कॉम्प्रिहेंड और अमेज़ॅन ट्रांसलेशन से उपयोग की लागत को बढ़ाता है। आपके द्वारा भुगतान की जाने वाली राशि, यूडीएफ के साथ आपके द्वारा संसाधित किए जाने वाले रिकॉर्ड और वर्णों की कुल संख्या का एक कारक है। अधिक जानकारी के लिए देखें AWS लैंबडा मूल्य निर्धारण, अमेज़ॅन समझाना मूल्य निर्धारण, तथा अमेज़न अनुवाद मूल्य निर्धारण.

लागत को कम करने के लिए, मेरा सुझाव है कि आप एक ही रिकॉर्ड को कई बार संसाधित करने से बचें। इसके बजाय, परिणामों को एक अलग तालिका में कैप्चर करने के लिए CREATE TABLE AS SELECT (CTAS) क्वेरी का उपयोग करके टेक्स्ट एनालिटिक्स UDF के परिणामों को मूर्त रूप दें, जिसके बाद आप अतिरिक्त UDF शुल्क लगाए बिना आवश्यकतानुसार लागत प्रभावी ढंग से क्वेरी कर सकते हैं। केवल नए रिकॉर्ड का विश्लेषण और संवर्धन करने और उन्हें लक्ष्य तालिका में जोड़ने के लिए INSERT INTO…SELECT क्वेरीज़ का उपयोग करके नए आने वाले रिकॉर्ड को क्रमिक रूप से संसाधित करें।

पाठ विश्लेषण कार्यों को अनावश्यक रूप से रिकॉर्ड पर कॉल करने से बचें, जिन्हें आप बाद में छोड़ देंगे। अस्थायी तालिका, दृश्य, या नेस्टेड क्वेरी का उपयोग करके पहले डेटासेट फ़िल्टर करने के लिए अपनी क्वेरी लिखें, और फिर परिणामी फ़िल्टर रिकॉर्ड के लिए पाठ विश्लेषिकी फ़ंक्शन लागू करें।

बड़ी संख्या में अलग-अलग रिकॉर्ड वाली टेबलों पर टेक्स्ट एनालिटिक्स प्रश्नों को चलाने से पहले हमेशा संभावित लागत का आकलन करें।

इस खंड में, हम दो उदाहरण लागत आकलन प्रदान करते हैं।

उदाहरण 1: ट्वीट की भाषा और भाव का विश्लेषण करें

मान लेते हैं कि आपके पास 10,000 ट्वीट रिकॉर्ड हैं, जिसकी औसत लंबाई 100 वर्ण प्रति ट्वीट है। आपकी SQL क्वेरी प्रत्येक ट्वीट के लिए प्रमुख भाषा और भाव का पता लगाती है। आप अपनी सेवा के दूसरे वर्ष में हैं (फ्री टियर अब लागू नहीं होता)। लागत विवरण इस प्रकार हैं:

  • प्रत्येक ट्वीट का आकार = 100 वर्ण
  • इकाइयों की संख्या (100 वर्ण) प्रति रिकॉर्ड (न्यूनतम 3 इकाइयाँ) = 3 है
  • कुल इकाइयाँ: 10,000 (रिकॉर्ड) x 3 (प्रति रिकॉर्ड इकाइयाँ) x 2 (प्रति रिकॉर्ड अमेज़न अनुरोध) = 60,000
  • मूल्य प्रति यूनिट = $ 0.0001
  • अमेज़ॅन कॉम्प्रिहेंड के लिए कुल लागत = [इकाइयों की संख्या] x [लागत प्रति यूनिट] = 60,000 x $ 0.0001 = $ 6.00 

उदाहरण 2: ट्वीट का अनुवाद करें

मान लेते हैं कि आपके ट्वीट्स में से 2,000 आपकी स्थानीय भाषा में नहीं हैं, इसलिए आप उन्हें ट्रांसलेट करने के लिए दूसरी SQL क्वेरी चलाते हैं। लागत विवरण इस प्रकार हैं:

  • प्रत्येक ट्वीट का आकार = 100 वर्ण
  • कुल वर्ण: 2,000 (रिकॉर्ड) * 100 (रिकॉर्ड प्रति वर्ण) x 1 (प्रति रिकॉर्ड अनुवाद का अनुरोध) = 200,000
  • मूल्य प्रति वर्ण = $ 0.000015
  • अमेज़ॅन अनुवाद के लिए कुल लागत = [वर्णों की संख्या] x [लागत प्रति चरित्र] = 200,000 x $ 0.000015 = $ 3.00

ग्राहक समीक्षाओं से अंतर्दृष्टि का विश्लेषण करें

यह हमारे नए पाठ विश्लेषिकी प्रश्नों को उपयोग करने का समय है।

ग्राहक समीक्षा से कार्रवाई योग्य अंतर्दृष्टि प्राप्त करने के लिए एक ट्यूटोरियल के लिए, देखें ट्यूटोरियल: Amazon Comprehend के साथ ग्राहक समीक्षा से अंतर्दृष्टि का विश्लेषण। यह पोस्ट उसी चुनौती के लिए एक वैकल्पिक दृष्टिकोण प्रदान करती है: एथेना और अमेज़ॅन कॉम्प्रिहेंड द्वारा संचालित एसक्यूएल प्रश्नों का उपयोग करना।

ट्यूटोरियल को पूरा होने में लगभग 10 मिनट लगते हैं, और अमेज़ॅन कॉम्प्रिहेंड के लिए $ 6 तक का खर्च आता है - अगर आप फ्री टियर के लिए पात्र हैं तो कोई लागत नहीं है।

एथेना में एक नया डेटाबेस बनाएँ

एथेना क्वेरी संपादक में निम्नलिखित क्वेरी चलाएँ:

CREATE DATABASE IF NOT EXISTS comprehendresults;

अपने डेटा स्रोत को कनेक्ट करते समय, अपना नया डेटाबेस चुनें।

ग्राहक समीक्षा डेटा युक्त एक स्रोत तालिका बनाएँ

हम उपयोग अमेज़न ग्राहक समीक्षा डेटासेट, अमेज़ॅन S3 में सार्वजनिक पहुंच के लिए सुविधाजनक रूप से होस्ट किया गया है।

  1. एथेना क्वेरी संपादक में निम्नलिखित क्वेरी चलाएँ:
    CREATE EXTERNAL TABLE amazon_reviews_parquet( marketplace string, customer_id string, review_id string, product_id string, product_parent string, product_title string, star_rating int, helpful_votes int, total_votes int, vine string, verified_purchase string, review_headline string, review_body string, review_date bigint, year int) PARTITIONED BY (product_category string) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' LOCATION 's3://amazon-reviews-pds/parquet/' 

  1. के अंतर्गत टेबल्स, नई तालिका amazon_reviews_parquet खोजें।
  2. विकल्प मेनू से, चुनें विभाजन को लोड करें.
  1. नई तालिका का पूर्वावलोकन करें, amazon_reviews_parquet.
  1. औसत समीक्षा लंबाई का आकलन करने के लिए निम्नलिखित क्वेरी चलाएँ:
    SELECT AVG(LENGTH(review_body)) AS average_review_length FROM amazon_reviews_parquet

औसत समीक्षा की लंबाई लगभग 365 वर्ण है। यह प्रति रिकॉर्ड 4 अमेज़ॅन कॉम्प्रिहेंस यूनिट (1 यूनिट = 100 वर्ण) के बराबर है।

प्रत्येक समीक्षा के लिए भाषा का पता लगाएं

प्रत्येक समीक्षा की भाषा का पता लगाने के लिए, एथेना क्वेरी एडिटर में निम्नलिखित क्वेरी चलाएँ- इसे चलाने में केवल 1 मिनट से अधिक समय लगता है और $ 2 खर्च होता है:

CREATE TABLE amazon_reviews_with_language WITH (format='parquet') AS USING FUNCTION detect_dominant_language(col1 VARCHAR) RETURNS VARCHAR TYPE LAMBDA_INVOKE WITH (lambda_name = 'textanalytics-udf') SELECT *, detect_dominant_language(review_body) AS language FROM amazon_reviews_parquet LIMIT 5000 

यह क्वेरी एक नई तालिका बनाता है, amazon_reviews_with_language, एक नए कॉलम के साथ जोड़ा गया: language। लिमिट क्लॉज रिकॉर्ड की संख्या को 5,000 तक सीमित करता है।

लागत के रूप में गणना की जाती है: 5,000 (रिकॉर्ड) x 4 (प्रति रिकॉर्ड इकाइयाँ) x 1 (रिकॉर्ड के अनुसार अनुरोध) x $ 0.0001 (प्रति इकाई अमेज़न मूल्य) = $ 2। 

प्रत्येक भाषा के लिए समीक्षाओं की गणना के साथ, पता लगाए गए भाषा कोड को देखने के लिए निम्नलिखित क्वेरी को चलाएं:

SELECT language, count(*) AS count FROM amazon_reviews_with_language GROUP BY language ORDER BY count DESC

प्रत्येक समीक्षा के लिए भावना और संस्थाओं का पता लगाएं

भावना का पता लगाने के लिए, एथेना क्वेरी एडिटर में निम्न क्वेरी को चलाएं- इसमें दो टेक्स्ट एनालिटिक्स फ़ंक्शंस का उपयोग किया जाता है, इसे चलाने में लगभग 1 मिनट लगता है, और इसकी लागत $ 4 होती है:

CREATE TABLE amazon_reviews_with_text_analysis WITH (format='parquet') AS USING FUNCTION detect_sentiment_all(col1 VARCHAR, lang VARCHAR) RETURNS VARCHAR TYPE LAMBDA_INVOKE WITH (lambda_name = 'textanalytics-udf'), FUNCTION detect_entities_all(col1 VARCHAR, lang VARCHAR) RETURNS VARCHAR TYPE LAMBDA_INVOKE WITH (lambda_name = 'textanalytics-udf') SELECT *, detect_sentiment_all(review_body, language) AS sentiment, detect_entities_all(review_body, language) AS entities FROM amazon_reviews_with_language WHERE language IN ('ar', 'hi', 'ko', 'zh-TW', 'ja', 'zh', 'de', 'pt', 'en', 'it', 'fr', 'es') 

यह क्वेरी एक नई तालिका बनाता है, amazon_reviews_with_text_analysisदो अतिरिक्त स्तंभों के साथ: sentiment और entities। WHERE क्लॉज़ परिणाम को अमेज़ॅन कॉम्प्रिहेंशन सेंटिमेंट और एंटिटी डिटेक्शन द्वारा समर्थित भाषाओं की सूची में सेट करता है।

लागत के रूप में गणना की जाती है: 5,000 (रिकॉर्ड) x 4 (प्रति रिकॉर्ड इकाइयाँ) x 2 (रिकॉर्ड के अनुसार अनुरोध) x $ 0.0001 (प्रति इकाई अमेज़न मूल्य) = $ 4।

नई तालिका का पूर्वावलोकन करें और नए के लिए कुछ मानों का निरीक्षण करें sentiment और entities कॉलम। इनमें नेस्टेड स्ट्रक्चर और फील्ड के साथ JSON स्ट्रिंग्स हैं।

निम्न स्क्रीनशॉट दिखाता है sentiment कॉलम विवरण।

निम्न स्क्रीनशॉट संस्थाओं कॉलम विवरण दिखाता है।

अगला, हम विश्लेषण के लिए इन स्तंभों को तैयार करने के लिए एथेना में JSON फ़ंक्शन का उपयोग करते हैं।

विश्लेषण के लिए भावना तैयार करें

एक नया टेबल बनाने के लिए निम्न SQL क्वेरी चलाएँ जिसमें सेंटीमेंट और सेंटीमेंट स्कोर अलग कॉलम में विस्तारित हैं:

CREATE TABLE sentiment_results_final WITH (format='parquet') AS SELECT review_date, year, product_title, star_rating, language, CAST(JSON_EXTRACT(sentiment,'$.sentiment') AS VARCHAR) AS sentiment, CAST(JSON_EXTRACT(sentiment,'$.sentimentScore.positive') AS DOUBLE ) AS positive_score, CAST(JSON_EXTRACT(sentiment,'$.sentimentScore.negative') AS DOUBLE ) AS negative_score, CAST(JSON_EXTRACT(sentiment,'$.sentimentScore.neutral') AS DOUBLE ) AS neutral_score, CAST(JSON_EXTRACT(sentiment,'$.sentimentScore.mixed') AS DOUBLE ) AS mixed_score, review_headline, review_body FROM amazon_reviews_with_text_analysis 

नए का पूर्वावलोकन करें sentiment_results_final तालिका (निम्न स्क्रीनशॉट देखें)। क्या आम तौर पर भावना पाठ के साथ संरेखित होती है review_body मैदान? यह कैसे सहसंबद्ध है? star_rating? यदि आप किसी भी संदिग्ध भावना असाइनमेंट को देखते हैं, तो यह देखने के लिए कि क्या कम भावना के साथ असाइन किया गया था, आत्मविश्वास स्कोर की जाँच करें।

विश्लेषण के लिए इकाइयाँ तैयार करें

एक अलग स्तंभ (बाहरी क्वेरी) में प्रत्येक क्षेत्र के साथ अलग-अलग पंक्तियों (आंतरिक उप-वर्ग) में अनावश्यक पहचान वाली एक नई तालिका बनाने के लिए निम्न SQL क्वेरी चलाएँ:

CREATE TABLE entities_results_final WITH (format='parquet') AS SELECT review_date, year, product_title, star_rating, language, CAST(JSON_EXTRACT(entity_element, '$.text') AS VARCHAR ) AS entity, CAST(JSON_EXTRACT(entity_element, '$.type') AS VARCHAR ) AS category, CAST(JSON_EXTRACT(entity_element, '$.score') AS DOUBLE ) AS score, CAST(JSON_EXTRACT(entity_element, '$.beginOffset') AS INTEGER ) AS beginoffset, CAST(JSON_EXTRACT(entity_element, '$.endOffset') AS INTEGER ) AS endoffset, review_headline, review_body FROM ( SELECT * FROM ( SELECT *, CAST(JSON_PARSE(entities) AS ARRAY(json)) AS entities_array FROM amazon_reviews_with_text_analysis ) CROSS JOIN UNNEST(entities_array) AS t(entity_element) ) 

नई तालिका की सामग्री का पूर्वावलोकन करें, entities_results_final (निम्नलिखित स्क्रीनशॉट देखें).

अमेज़ॅन क्विकसाइट (वैकल्पिक) में विज़ुअलाइज़ करें

एक वैकल्पिक कदम के रूप में, आप अपने परिणामों की कल्पना कर सकते हैं अमेज़न क्विकसाइट। निर्देशों के लिए, देखें चरण 5: अमेज़ॅन क्विकसाइट में अमेज़ॅन कॉम्प्रिहेंशन आउटपुट को विज़ुअलाइज़ करना.

आप पेड़ों के नक्शे के बजाय संस्थाओं के लिए नए शब्द क्लाउड विज़ुअल प्रकार का उपयोग कर सकते हैं। शब्द बादल चार्ट मेनू में, का चयन करें "अन्य" श्रेणियां छुपाएं.

अब आपके पास सेंटीमेंट और एंटिटी विज़ुअलाइज़ेशन वाला एक डैशबोर्ड है जो निम्न स्क्रीनशॉट के समान है।

समस्या निवारण

यदि आपकी क्वेरी विफल रहती है, तो जाँच करें अमेज़ॅन क्लाउडवॉच यूडीएफ लैम्बडा फ़ंक्शन द्वारा उत्पन्न मैट्रिक्स और लॉग।

  1. लैम्ब्डा कंसोल पर, खोजें textanalytics-udf समारोह.
  2. चुनें निगरानी.

आप क्लाउडवॉच मेट्रिक्स दिखा सकते हैं कि कितनी बार फ़ंक्शन चला, कितनी देर तक चलता है, कितनी बार विफल हुआ, और बहुत कुछ।

  1. चुनें CloudWatch में लॉग देखें अतिरिक्त समस्या निवारण अंतर्दृष्टि के लिए फ़ंक्शन लॉग स्ट्रीम खोलने के लिए।

लेम्बडा के माध्यम से CloudWatch मैट्रिक्स देखने के बारे में अधिक जानकारी के लिए, देखें लैंबडा कंसोल का उपयोग करना.

अतिरिक्त उपयोग के मामले

SQL पाठ विश्लेषण कार्यों के लिए कई उपयोग के मामले हैं। इस पोस्ट में दिखाए गए उदाहरण के अलावा, निम्नलिखित पर विचार करें:

  • वृद्धिशील एसक्यूएल प्रश्नों का उपयोग करके ईटीएल पाइपलाइनों को सरल बनाएं, पाठ डेटा को भावनाओं और संस्थाओं के साथ समृद्ध करने के लिए, जैसे कि सोशल मीडिया स्ट्रीम स्ट्रीमिंग द्वारा अमेज़न Kinesis डेटा Firehose
  • अपने ग्राहक सहायता ग्रंथों, ईमेल और समर्थन मामलों में भावना और संस्थाओं का पता लगाने के लिए SQL क्वेरी का उपयोग करें
  • ग्राहक या रोगी बातचीत से पीआईआई को फिर से तैयार करके शोध-तैयार डेटासेट तैयार करें
  • कई भाषाओं को एक सामान्य भाषा में मानकीकृत करें

इन कार्यों के लिए आपके पास अतिरिक्त उपयोग के मामले हो सकते हैं, या अतिरिक्त क्षमताएं जिन्हें आप जोड़कर देखना चाहते हैं, जैसे कि निम्नलिखित हैं:

  • अमेज़ॅन कॉम्प्रिहेंड में कस्टम इकाई मान्यता और कस्टम वर्गीकरण मॉडल को कॉल करने के लिए एसक्यूएल कार्य करता है
  • डी-आइडेंटिफिकेशन के लिए एसक्यूएल फ़ंक्शंस-इकाई और पीआईआई रिडक्शन फ़ंक्शंस को वैकल्पिक विशिष्ट पहचानकर्ताओं के साथ संस्थाओं को बदलने के लिए

इसके अतिरिक्त, कार्यान्वयन खुला स्रोत है, जिसका अर्थ है कि आप रेपो को क्लोन कर सकते हैं, कार्य को संशोधित और विस्तारित कर सकते हैं जैसा कि आप फिट देखते हैं, और (उम्मीद है) हमें पुल अनुरोध भेजें ताकि हम आपके सुधार को प्रोजेक्ट में वापस मर्ज कर सकें और इसे बेहतर बना सकें सब लोग।

सफाई करना

इस ट्यूटोरियल को पूरा करने के बाद, आप किसी भी AWS संसाधन को साफ़ करना चाहते हैं, जिसका आप अब उपयोग नहीं करना चाहते हैं। सक्रिय AWS संसाधन आपके खाते में शुल्क लगाना जारी रख सकते हैं।

  1. एथेना में, डेटाबेस और सभी तालिकाओं को छोड़ने के लिए निम्नलिखित क्वेरी चलाएँ:
    DROP DATABASE comprehendresults CASCADE

  1. AWS CloudFormation में, स्टैक को हटाएं serverlessrepo-TextAnalyticsUDFHandler.
  2. अपनी QuickSight सदस्यता रद्द करें.

निष्कर्ष

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

कृपया अपने विचार हमारे साथ टिप्पणी अनुभाग में, या परियोजना के मुद्दों अनुभाग में साझा करें गिटहब भंडार.

परिशिष्ट: उपलब्ध फ़ंक्शन संदर्भ

यह खंड वर्तमान में प्रदान किए गए कार्यों को संक्षेप में प्रस्तुत करता है। README फ़ाइल अतिरिक्त विवरण प्रदान करती है।

भाषा का पता लगाने

यह फ़ंक्शन Amazon Comprehend का उपयोग करता है बैचडक्टेक्टडोमिनेंटलंगेज एपीआई इनपुट पाठ के पहले 5,000 बाइट्स के आधार पर प्रमुख भाषा की पहचान करने के लिए।

निम्नलिखित कोड एक भाषा कोड देता है, जैसे कि फ्रेंच के लिए fr या अंग्रेजी के लिए en:

USING FUNCTION detect_dominant_language(text_col VARCHAR) RETURNS VARCHAR TYPE LAMBDA_INVOKE WITH (lambda_name = 'textanalytics-udf') SELECT detect_dominant_language('il fait beau à Orlando') as language 

निम्नलिखित कोड भाषा कोड और इसी विश्वास स्कोर के एक JSON स्वरूपित सरणी देता है:

USING FUNCTION detect_dominant_language_all(text_col VARCHAR) RETURNS VARCHAR TYPE LAMBDA_INVOKE WITH (lambda_name = 'textanalytics-udf') SELECT detect_dominant_language_all('il fait beau à Orlando') as language_all 

भाव का पता लगाएं

यह फ़ंक्शन Amazon Comprehend का उपयोग करता है बैच डिटेक्ट सेंटीमेंट एपीआई इनपुट पाठ के पहले 5,000 बाइट्स के आधार पर भावना की पहचान करने के लिए।

निम्न कोड पोसिटिव, NEGATIVE, NEUTRAL या MIXED के रूप में एक भाव देता है:

USING FUNCTION detect_sentiment(text_col VARCHAR, lang VARCHAR) RETURNS VARCHAR TYPE LAMBDA_INVOKE WITH (lambda_name = 'textanalytics-udf') SELECT detect_sentiment('Joe is very happy', 'en') as sentiment

निम्नलिखित कोड एक JSON स्वरूपित वस्तु देता है जिसमें प्रत्येक भावना मूल्य के लिए पहचाने गए भाव और आत्मविश्वास स्कोर होते हैं:

USING FUNCTION detect_sentiment_all(text_col VARCHAR, lang VARCHAR) RETURNS VARCHAR TYPE LAMBDA_INVOKE WITH (lambda_name = 'textanalytics-udf') SELECT detect_sentiment_all('Joe is very happy', 'en') as sentiment_all 

संस्थाओं का पता लगाएं

यह फ़ंक्शन Amazon Comprehend का उपयोग करता है पता लगाने की क्षमता पीआईआई की पहचान करने के लिए एपीआई। कई अमेजन कॉम्प्रिहेंशन एपीआई कॉल में 5,000 बाइट्स से अधिक लंबे समय तक इनपुट टेक्स्ट होता है।

निम्न कोड एक JSON स्वरूपित ऑब्जेक्ट देता है जिसमें एक सरणी होती है इकाई प्रकार और मान:

USING FUNCTION detect_entities(text_col VARCHAR, lang VARCHAR) RETURNS VARCHAR TYPE LAMBDA_INVOKE WITH (lambda_name = 'textanalytics-udf') SELECT detect_entities('His name is Joe, he lives in Richmond VA, he bought an Amazon Echo Show on January 5th, and he loves it', 'en') as entities 

निम्न कोड एक JSON स्वरूपित वस्तु देता है जिसमें PII इकाई प्रकारों की एक सरणी होती है, जिसमें उनके मान, स्कोर और वर्ण ऑफर्स शामिल होते हैं:

USING FUNCTION detect_entities_all(text_col VARCHAR, lang VARCHAR) RETURNS VARCHAR TYPE LAMBDA_INVOKE WITH (lambda_name = 'textanalytics-udf') SELECT detect_entities_all('His name is Joe, he lives in Richmond VA, he bought an Amazon Echo Show on January 5th, and he loves it', 'en') as entities_all 

कम करने वाली इकाइयाँ

यह फ़ंक्शन निर्दिष्ट निकाय प्रकारों के लिए इकाई मानों की जगह “[ENTITY_TYPE]”। कई अमेजन कॉम्प्रिहेंशन एपीआई कॉल में 5,000 बाइट्स से अधिक लंबे समय तक इनपुट टेक्स्ट होता है। निम्नलिखित कोड देखें:

USING FUNCTION redact_entities(text_col VARCHAR, lang VARCHAR, types VARCHAR) RETURNS VARCHAR TYPE LAMBDA_INVOKE WITH (lambda_name = 'textanalytics-udf') SELECT redact_entities('His name is Joe, he lives in Richmond VA, he bought an Amazon Echo Show on January 5th, and he loves it', 'en', 'ALL') as entities_redacted 

कमांड इनपुट स्ट्रिंग पर एक redacted संस्करण देता है। एक या अधिक निर्दिष्ट करें इकाई प्रकार मान्य की अल्पविराम से अलग की गई सूची प्रदान करके फिर से तैयार करना types प्रकार में स्ट्रिंग पैरामीटर, या ALL सभी प्रकार को कम करने के लिए।

PII का पता लगाएं

यह फ़ंक्शन उपयोग करता है डिटेक्टPiiएंटिटीज पीआईआई की पहचान करने के लिए एपीआई। कई अमेजन कॉम्प्रिहेंशन एपीआई कॉल में 5,000 बाइट्स से अधिक लंबे समय तक इनपुट टेक्स्ट होता है।

निम्न कोड एक JSON स्वरूपित ऑब्जेक्ट देता है जिसमें एक सरणी होती है PII इकाई प्रकार और मान:

USING FUNCTION detect_pii_entities(text_col VARCHAR, lang VARCHAR) RETURNS VARCHAR TYPE LAMBDA_INVOKE WITH (lambda_name = 'textanalytics-udf') SELECT detect_pii_entities('His name is Joe, his username is joe123 and he lives in Richmond VA', 'en') as pii 

निम्न कोड एक JSON स्वरूपित वस्तु देता है जिसमें PII इकाई प्रकारों की एक सरणी होती है, जिसमें उनके स्कोर और वर्ण ऑफ़सेट होते हैं:

USING FUNCTION detect_pii_entities_all(text_col VARCHAR, lang VARCHAR) RETURNS VARCHAR TYPE LAMBDA_INVOKE WITH (lambda_name = 'textanalytics-udf') SELECT detect_pii_entities_all('His name is Joe, his username is joe123 and he lives in Richmond VA', 'en') as pii_all 

पीआईआई सुधारें

यह फ़ंक्शन निर्दिष्ट PII इकाई प्रकारों के लिए PII मानों की जगह लेता है "[PII_ENTITY_TYPE]”। कई अमेजन कॉम्प्रिहेंशन एपीआई कॉल में 5,000 बाइट्स से अधिक लंबे समय तक इनपुट टेक्स्ट होता है। निम्नलिखित कोड देखें:

USING FUNCTION redact_pii_entities(text_col VARCHAR, lang VARCHAR, types VARCHAR) RETURNS VARCHAR TYPE LAMBDA_INVOKE WITH (lambda_name = 'textanalytics-udf') SELECT redact_pii_entities('His name is Joe, his username is joe123 and he lives in Richmond VA', 'en', 'ALL') as pii_redacted 

फ़ंक्शन इनपुट स्ट्रिंग पर एक redacted संस्करण देता है। एक या अधिक निर्दिष्ट करें PII इकाई प्रकार में मान्य प्रकारों की अल्पविराम से पृथक सूची प्रदान करके पुनः प्राप्त करना type स्ट्रिंग पैरामीटर, या ALL सभी प्रकार को कम करने के लिए।

पाठ का अनुवाद करें

यह फ़ंक्शन स्रोत भाषा से भाषा को लक्षित करने के लिए पाठ का अनुवाद करता है। कई अमेज़न अनुवाद एपीआई कॉल्स में 5,000 बाइट्स से अधिक लंबे समय तक इनपुट टेक्स्ट होता है। निम्नलिखित कोड देखें:

USING FUNCTION translate_text(text_col VARCHAR, sourcelang VARCHAR, targetlang VARCHAR, customterminologyname VARCHAR) RETURNS VARCHAR TYPE LAMBDA_INVOKE WITH (lambda_name = 'textanalytics-udf') SELECT translate_text('It is a beautiful day in the neighborhood', 'auto', 'fr', NULL) as translated_text 

फ़ंक्शन अनुवादित स्ट्रिंग लौटाता है। वैकल्पिक रूप से, स्रोत भाषा का ऑटो-पता करें (भाषा कोड के रूप में ऑटो का उपयोग करें, जो अमेज़ॅन कॉम्प्रिहेंशन का उपयोग करता है), और वैकल्पिक रूप से निर्दिष्ट करें कस्टम शब्दावली (अन्यथा उपयोग करें NULL एसटी customTerminologyName).


लेखक के बारे में

बॉब स्ट्रहानबॉब स्ट्रहान AWS भाषा AI सेवा टीम में एक प्रिंसिपल सॉल्यूशन आर्किटेक्ट है।

स्रोत: https://aws.amazon.com/blogs/machine-learning/translate-and-analyze-text-using-sql-functions-with-amazon-athena-amazon-translate-and-amazon-comprehend/

समय टिकट:

से अधिक एडब्ल्यूएस मशीन लर्निंग ब्लॉग