Amazon Comprehend PlatoBlockchain ডেটা ইন্টেলিজেন্স ব্যবহার করে পর্যালোচনাগুলি থেকে আরও ভাল অন্তর্দৃষ্টি পান। উল্লম্ব অনুসন্ধান. আ.

অ্যামাজন কম্প্রেহেন্ড ব্যবহার করে পর্যালোচনাগুলি থেকে আরও ভাল অন্তর্দৃষ্টি পান

"85% ক্রেতারা ব্যক্তিগত সুপারিশের মতো অনলাইন পর্যালোচনাগুলিকে বিশ্বাস করে" - গার্টনার

গ্রাহকরা ডিজিটাল সারফেস এবং একাধিক টাচপয়েন্টের মাধ্যমে ব্যবসার সাথে ক্রমবর্ধমানভাবে জড়িত হচ্ছেন। পরিসংখ্যান দেখায় যে বেশিরভাগ ক্রেতারা কোন পণ্য কিনবেন এবং কোন পরিষেবাগুলি ব্যবহার করবেন তা নির্ধারণ করতে পর্যালোচনাগুলি ব্যবহার করেন৷ যেমনটি স্পিগেল গবেষণা কেন্দ্র, পাঁচটি পর্যালোচনা সহ একটি পণ্যের ক্রয়ের সম্ভাবনা কোন পর্যালোচনা ছাড়াই একটি পণ্যের ক্রয়ের সম্ভাবনার চেয়ে 270% বেশি৷ পর্যালোচনাগুলি ভোক্তাদের সিদ্ধান্তকে প্রভাবিত করার এবং ব্র্যান্ডের মানকে শক্তিশালী করার ক্ষমতা রাখে।

এই পোস্টে, আমরা ব্যবহার অ্যামাজন সমঝোতা পণ্য পর্যালোচনা থেকে অর্থপূর্ণ তথ্য বের করতে, বিভিন্ন জনসংখ্যার ব্যবহারকারীরা কীভাবে পণ্যগুলিতে প্রতিক্রিয়া জানাচ্ছে তা বোঝার জন্য এটি বিশ্লেষণ করুন এবং একটি পণ্যের প্রতি ব্যবহারকারীর সখ্যতার উপর সমষ্টিগত তথ্য আবিষ্কার করুন। Amazon Comprehend হল একটি সম্পূর্ণরূপে পরিচালিত এবং ধারাবাহিকভাবে প্রশিক্ষিত প্রাকৃতিক ভাষা প্রক্রিয়াকরণ (NLP) পরিষেবা যা একটি নথি বা পাঠ্যের বিষয়বস্তু সম্পর্কে অন্তর্দৃষ্টি বের করতে পারে।

সমাধান ওভারভিউ

আজ, গ্রাহকরা বিভিন্ন উপায়ে পর্যালোচনাগুলি প্রদান করতে পারেন, যেমন স্টার রেটিং, বিনামূল্যের পাঠ্য বা প্রাকৃতিক ভাষা, বা সোশ্যাল মিডিয়া শেয়ার৷ বিনামূল্যের পাঠ্য বা প্রাকৃতিক ভাষা পর্যালোচনা বিশ্বাস গড়ে তুলতে সাহায্য করে, কারণ এটি ভোক্তাদের থেকে একটি স্বাধীন মতামত। এটি প্রায়শই পণ্য দলগুলি দ্বারা পর্যালোচনা চ্যানেলের মাধ্যমে গ্রাহকদের সাথে যোগাযোগ করতে ব্যবহৃত হয়। এটি একটি প্রমাণিত সত্য যে গ্রাহকরা যখন শুনতে পান, ব্র্যান্ড সম্পর্কে তাদের অনুভূতি উন্নত হয়। যেখানে স্টার রেটিং বা সোশ্যাল মিডিয়া শেয়ারগুলি বিশ্লেষণ করা তুলনামূলকভাবে সহজ, প্রাকৃতিক ভাষা বা বিনামূল্যে পাঠ্য পর্যালোচনাগুলি একাধিক চ্যালেঞ্জ তৈরি করে, যেমন কীওয়ার্ড বা বাক্যাংশ, বিষয় বা ধারণা এবং অনুভূতি বা সত্তা-স্তরের অনুভূতি সনাক্ত করা। চ্যালেঞ্জটি মূলত লিখিত পাঠ্যের দৈর্ঘ্যের পরিবর্তনশীলতার কারণে এবং উভয় সংকেত এবং শব্দের যুক্তিসঙ্গত উপস্থিতির কারণে। উপরন্তু, তথ্য হয় খুব স্পষ্ট এবং স্পষ্ট (উদাহরণস্বরূপ, কীওয়ার্ড এবং মূল বাক্যাংশ সহ) বা অস্পষ্ট এবং অন্তর্নিহিত (বিমূর্ত বিষয় এবং ধারণা) হতে পারে। এমনকি আরও চ্যালেঞ্জিং হল বিভিন্ন ধরণের অনুভূতি বোঝা এবং উপযুক্ত পণ্য এবং পরিষেবাগুলির সাথে তাদের সম্পর্কিত। তা সত্ত্বেও, একটি ঘর্ষণহীন গ্রাহক অভিজ্ঞতা প্রদানের জন্য এই তথ্য এবং পাঠ্য সংকেতগুলি বোঝা অত্যন্ত গুরুত্বপূর্ণ।

এই পোস্টে, আমরা একটি সর্বজনীনভাবে উপলব্ধ ব্যবহার NLP - fast.ai গ্রাহকদের দ্বারা প্রদত্ত পণ্য পর্যালোচনা বিশ্লেষণ করার জন্য ডেটাসেট। আমরা টপিক মডেলিং নামে পরিচিত একটি আনসুপারভাইজড মেশিন লার্নিং (ML) কৌশল ব্যবহার করে শুরু করি। এটি একটি জনপ্রিয় তত্ত্বাবধানহীন কৌশল যা বিমূর্ত বিষয়গুলি আবিষ্কার করে যা পাঠ্য পর্যালোচনা সংগ্রহে ঘটতে পারে। টপিক মডেলিং হল একটি ক্লাস্টারিং সমস্যা যা তত্ত্বাবধান করা হয় না, যার অর্থ মডেলগুলির সম্ভাব্য লক্ষ্য ভেরিয়েবল সম্পর্কে কোন জ্ঞান নেই (যেমন একটি পর্যালোচনার বিষয়)। বিষয়গুলি ক্লাস্টার হিসাবে উপস্থাপিত হয়। প্রায়শই, ডোমেন বিশেষজ্ঞদের সাহায্যে বা কিছু স্ট্যান্ডার্ড পরিসংখ্যান বিশ্লেষণ ব্যবহার করে নথির একটি কর্পাসে ক্লাস্টারের সংখ্যা নির্ধারণ করা হয়। মডেল আউটপুটগুলিতে সাধারণত তিনটি উপাদান থাকে: সংখ্যাযুক্ত ক্লাস্টার (বিষয় 0, বিষয় 1 এবং আরও অনেক কিছু), প্রতিটি ক্লাস্টারের সাথে যুক্ত কীওয়ার্ড এবং প্রতিটি নথির জন্য প্রতিনিধি ক্লাস্টার (বা আমাদের ক্ষেত্রে পর্যালোচনা)। এর অন্তর্নিহিত প্রকৃতির দ্বারা, বিষয় মডেলগুলি ক্লাস্টার বা বিষয়গুলির জন্য মানব-পঠনযোগ্য লেবেল তৈরি করে না, যা একটি সাধারণ ভুল ধারণা। সাধারণভাবে টপিক মডেলিং সম্পর্কে কিছু লক্ষণীয় যে এটি একটি মিশ্র সদস্যপদ মডেল— মডেলের প্রতিটি নথির প্রতিটি বিষয়ের সাথে সাদৃশ্য থাকতে পারে। প্রতিটি নথি একটি প্রদত্ত থিম বা বিষয়ের সাথে সম্পর্কিত যে সম্ভাব্যতা নির্ধারণ করতে টপিক মডেলটি একটি পুনরাবৃত্তিমূলক বায়েসিয়ান প্রক্রিয়ায় শেখে। মডেল আউটপুট সর্বোত্তমভাবে বিষয় সংখ্যা নির্বাচন উপর নির্ভর করে. অল্প সংখ্যক বিষয়ের ফলে বিষয়গুলি খুব বিস্তৃত হতে পারে এবং বেশি সংখ্যক বিষয়ের ফলে অপ্রয়োজনীয় বিষয় বা সাদৃশ্যপূর্ণ বিষয় হতে পারে। টপিক মডেল মূল্যায়ন করার অনেক উপায় আছে:

  • মানুষের বিচার - পর্যবেক্ষণ-ভিত্তিক, ব্যাখ্যা-ভিত্তিক
  • পরিমাণগত মেট্রিক্স - বিভ্রান্তি, সুসংগত গণনা
  • মিশ্র পদ্ধতি - বিচার-ভিত্তিক এবং পরিমাণগত পদ্ধতির সংমিশ্রণ

একটি ডেটাসেটকে দুটি অংশে বিভক্ত করে বিভ্রান্তি গণনা করা হয় - একটি প্রশিক্ষণ সেট এবং একটি পরীক্ষা সেট৷ সম্ভাবনা সাধারণত লগারিদম হিসাবে গণনা করা হয়, তাই এই মেট্রিককে কখনও কখনও হোল্ড-আউট লগ-সম্ভাবনা হিসাবে উল্লেখ করা হয়। বিভ্রান্তি একটি ভবিষ্যদ্বাণীমূলক মেট্রিক। এটি একটি প্রশিক্ষণ সেটে প্রশিক্ষিত হওয়ার পরে একটি পরীক্ষার সেটের ভবিষ্যদ্বাণী করার একটি বিষয় মডেলের ক্ষমতা মূল্যায়ন করে। বিভ্রান্তির ত্রুটিগুলির মধ্যে একটি হল এটি প্রসঙ্গ ক্যাপচার করে না, যার অর্থ এটি একটি বিষয় বা নথির বিষয়গুলির মধ্যে সম্পর্ককে ক্যাপচার করে না। যাইহোক, শব্দার্থক প্রেক্ষাপটের ধারণা মানুষের বোঝার জন্য গুরুত্বপূর্ণ। একটি বিষয়ের মধ্যে শব্দের সহ-সংঘটনের শর্তাধীন সম্ভাবনার মতো পরিমাপ সহায়ক হতে পারে। এই পন্থাগুলিকে সমষ্টিগতভাবে সংগতি হিসাবে উল্লেখ করা হয়। এই পোস্টের জন্য, আমরা মানুষের বিচার (পর্যবেক্ষণ-ভিত্তিক) পদ্ধতির উপর ফোকাস করি, যেমন একটি বিষয়ের শীর্ষ n শব্দগুলি পর্যবেক্ষণ করা।

সমাধানটি নিম্নলিখিত উচ্চ-স্তরের পদক্ষেপগুলি নিয়ে গঠিত:

  1. সেট আপ একটি আমাজন সেজমেকার নোটবুক উদাহরণ।
  2. একটি নোটবুক তৈরি করুন।
  3. অনুসন্ধানমূলক তথ্য বিশ্লেষণ সঞ্চালন.
  4. আপনার Amazon Comprehend বিষয় মডেলিং কাজ চালান.
  5. বিষয় তৈরি করুন এবং অনুভূতি বুঝতে.
  6. ব্যবহার অ্যামাজন কুইকসাইট ডেটা কল্পনা করতে এবং রিপোর্ট তৈরি করতে।

আপনি যেকোনো AWS অঞ্চলে এই সমাধানটি ব্যবহার করতে পারেন, তবে আপনাকে নিশ্চিত করতে হবে যে Amazon Comprehend API এবং SageMaker একই অঞ্চলে রয়েছে। এই পোস্টের জন্য, আমরা ইউএস ইস্ট (এন. ভার্জিনিয়া) অঞ্চল ব্যবহার করি।

আপনার সেজমেকার নোটবুক উদাহরণ সেট আপ করুন

আপনি এর মাধ্যমে অ্যামাজন কম্প্রেহেন্ডের সাথে যোগাযোগ করতে পারেন এডাব্লুএস ম্যানেজমেন্ট কনসোল, AWS কমান্ড লাইন ইন্টারফেস (AWS CLI), অথবা Amazon Comprehend API। আরো তথ্যের জন্য, পড়ুন Amazon Comprehend দিয়ে শুরু করা. Amazon Comprehend API-এর সাথে ইন্টারঅ্যাক্ট করতে আমরা এই পোস্ট জুড়ে একটি SageMaker নোটবুক এবং Python (Boto3) কোড ব্যবহার করি।

  1. Amazon SageMaker কনসোলে, নেভিগেশন প্যানে নোটবুকের অধীনে, নির্বাচন করুন
    নোটবুকের উদাহরণ।
  2. নোটবুক উদাহরণ তৈরি করুন নির্বাচন করুন।নোটবুক উদাহরণ
  3. একটি নোটবুকের উদাহরণের নাম উল্লেখ করুন এবং উদাহরণের ধরনটি ml.r5.2xlarge হিসাবে সেট করুন।
  4. বাকি ডিফল্ট সেটিংস ছেড়ে দিন।
  5. তৈরি একটি AWS আইডেন্টিটি অ্যান্ড অ্যাকসেস ম্যানেজমেন্ট (IAM) সঙ্গে ভূমিকা AmazonSageMakerFullAccess এবং যে কোনো প্রয়োজনীয় অ্যাক্সেস অ্যামাজন সিম্পল স্টোরেজ সার্ভিস (অ্যামাজন এস 3) buckets এবং Amazon Comprehend APIs।
  6. নোটবুক উদাহরণ তৈরি করুন নির্বাচন করুন।
    কয়েক মিনিট পরে, আপনার নোটবুকের উদাহরণ প্রস্তুত।
  7. নোটবুক ইনস্ট্যান্স থেকে অ্যামাজন কম্প্রেহেন্ড অ্যাক্সেস করতে, আপনাকে সংযুক্ত করতে হবে ComprehendFullAccess আপনার IAM ভূমিকার নীতি।

Amazon Comprehend এর নিরাপত্তা ওভারভিউ এর জন্য, পড়ুন আমাজন বুঝতে নিরাপত্তা.

জুপিটার কনসোলে আপনি যে নোটবুক ইন্সট্যান্সটি প্রবিধান করেছেন সেটি খোলার পরে, নতুন এবং তারপরে পাইথন 3 (ডেটা সায়েন্স) বেছে নিন। বিকল্পভাবে, আপনি নমুনা কোড ফাইল অ্যাক্সেস করতে পারেন গিটহুব রেপো. আপনি ফাইলটিকে নোটবুক ইনস্ট্যান্সে আপলোড করতে পারেন যাতে এটি সরাসরি চালানো বা ক্লোন করা যায়।

গিটহাব রেপোতে তিনটি নোটবুক রয়েছে:

  • data_processing.ipynb
  • model_training.ipynb
  • topic_mapping_sentiment_generation.ipynb

অনুসন্ধানমূলক তথ্য বিশ্লেষণ সঞ্চালন

আমরা প্রথম নোটবুক ব্যবহার করি (data_processing.ipynb) ডেটা অন্বেষণ এবং প্রক্রিয়া করতে। আমরা শুধুমাত্র একটি S3 বালতি থেকে ডেটা ফ্রেমে লোড করে শুরু করি।

# Bucket containing the data
BUCKET = 'clothing-shoe-jewel-tm-blog'

# Item ratings and metadata
S3_DATA_FILE = 'Clothing_Shoes_and_Jewelry.json.gz' # Zip
S3_META_FILE = 'meta_Clothing_Shoes_and_Jewelry.json.gz' # Zip

S3_DATA = 's3://' + BUCKET + '/' + S3_DATA_FILE
S3_META = 's3://' + BUCKET + '/' + S3_META_FILE

# Transformed review, input for Comprehend
LOCAL_TRANSFORMED_REVIEW = os.path.join('data', 'TransformedReviews.txt')
S3_OUT = 's3://' + BUCKET + '/out/' + 'TransformedReviews.txt'

# Final dataframe where topics and sentiments are going to be joined
S3_FEEDBACK_TOPICS = 's3://' + BUCKET + '/out/' + 'FinalDataframe.csv'

def convert_json_to_df(path):
    """Reads a subset of a json file in a given path in chunks, combines, and returns
    """
    # Creating chunks from 500k data points each of chunk size 10k
    chunks = pd.read_json(path, orient='records', 
                                lines=True, 
                                nrows=500000, 
                                chunksize=10000, 
                                compression='gzip')
    # Creating a single dataframe from all the chunks
    load_df = pd.DataFrame()
    for chunk in chunks:
        load_df = pd.concat([load_df, chunk], axis=0)
    return load_df

# Review data
original_df = convert_json_to_df(S3_DATA)

# Metadata
original_meta = convert_json_to_df(S3_META)

নিম্নলিখিত বিভাগে, আমরা ডেটা বোঝার জন্য অনুসন্ধানমূলক ডেটা বিশ্লেষণ (EDA) করি। আমরা ডেটা এবং মেটাডেটার আকার অন্বেষণ করে শুরু করি। সত্যতার জন্য, আমরা শুধুমাত্র যাচাইকৃত রিভিউ ব্যবহার করি।

# Shape of reviews and metadata
print('Shape of review data: ', original_df.shape)
print('Shape of metadata: ', original_meta.shape)

# We are interested in verified reviews only
# Also checking the amount of missing values in the review data
print('Frequency of verified/non verified review data: ', original_df['verified'].value_counts())
print('Frequency of missing values in review data: ', original_df.isna().sum())

আমরা আরও প্রতিটি বিভাগের গণনা অন্বেষণ করি, এবং কোন ডুপ্লিকেট ডেটা উপস্থিত আছে কিনা তা দেখুন।

# Count of each categories for EDA.
print('Frequncy of different item categories in metadata: ', original_meta['category'].value_counts())

# Checking null values for metadata
print('Frequency of missing values in metadata: ', original_meta.isna().sum())

# Checking if there are duplicated data. There are indeed duplicated data in the dataframe.
print('Duplicate items in metadata: ', original_meta[original_meta['asin'].duplicated()])

যখন আমরা ফলাফলের সাথে সন্তুষ্ট হই, আমরা ডেটা প্রিপ্রসেস করার পরবর্তী ধাপে চলে যাই। অ্যামাজন কম্প্রেহেন্ড প্রতিটি টপিক মডেলিং কাজে কমপক্ষে 1,000টি নথি প্রদানের সুপারিশ করে, প্রতিটি নথিতে কমপক্ষে তিনটি বাক্য দীর্ঘ হয়। নথিগুলি অবশ্যই UTF-8 ফর্ম্যাট করা পাঠ্য ফাইলগুলিতে থাকতে হবে৷ নিম্নলিখিত ধাপে, আমরা নিশ্চিত করি যে ডেটা প্রস্তাবিত UTF-8 ফর্ম্যাটে রয়েছে এবং প্রতিটি ইনপুট 5,000 বাইটের বেশি নয়৷

def clean_text(df):
    """Preprocessing review text.
    The text becomes Comprehend compatible as a result.
    This is the most important preprocessing step.
    """
    # Encode and decode reviews
    df['reviewText'] = df['reviewText'].str.encode("utf-8", "ignore")
    df['reviewText'] = df['reviewText'].str.decode('ascii')

    # Replacing characters with whitespace
    df['reviewText'] = df['reviewText'].replace(r'r+|n+|t+|u2028',' ', regex=True)

    # Replacing punctuations
    df['reviewText'] = df['reviewText'].str.replace('[^ws]','', regex=True)

    # Lowercasing reviews
    df['reviewText'] = df['reviewText'].str.lower()
    return df

def prepare_input_data(df):
    """Encoding and getting reviews in byte size.
    Review gets encoded to utf-8 format and getting the size of the reviews in bytes. 
    Comprehend requires each review input to be no more than 5000 Bytes
    """
    df['review_size'] = df['reviewText'].apply(lambda x:len(x.encode('utf-8')))
    df = df[(df['review_size'] > 0) & (df['review_size'] < 5000)]
    df = df.drop(columns=['review_size'])
    return df

# Only data points with a verified review will be selected and the review must not be missing
filter = (original_df['verified'] == True) & (~original_df['reviewText'].isna())
filtered_df = original_df[filter]

# Only a subset of fields are selected in this experiment. 
filtered_df = filtered_df[['asin', 'reviewText', 'summary', 'unixReviewTime', 'overall', 'reviewerID']]

# Just in case, once again, dropping data points with missing review text
filtered_df = filtered_df.dropna(subset=['reviewText'])
print('Shape of review data: ', filtered_df.shape)

# Dropping duplicate items from metadata
original_meta = original_meta.drop_duplicates(subset=['asin'])

# Only a subset of fields are selected in this experiment. 
original_meta = original_meta[['asin', 'category', 'title', 'description', 'brand', 'main_cat']]

# Clean reviews using text cleaning pipeline
df = clean_text(filtered_df)

# Dataframe where Comprehend outputs (topics and sentiments) will be added
df = prepare_input_data(df)

তারপরে আমরা Amazon S3 এ ডেটা সংরক্ষণ করি এবং নোটবুকের উদাহরণে একটি স্থানীয় অনুলিপিও রাখি।

# Saving dataframe on S3 df.to_csv(S3_FEEDBACK_TOPICS, index=False) 

# Reviews are transformed per Comprehend guideline- one review per line
# The txt file will be used as input for Comprehend
# We first save the input file locally
with open(LOCAL_TRANSFORMED_REVIEW, "w") as outfile:
    outfile.write("n".join(df['reviewText'].tolist()))

# Transferring the transformed review (input to Comprehend) to S3
!aws s3 mv {LOCAL_TRANSFORMED_REVIEW} {S3_OUT}

এটি আমাদের ডেটা প্রসেসিং ফেজ সম্পূর্ণ করে।

একটি Amazon Comprehend টপিক মডেলিং কাজ চালান

তারপরে আমরা পরবর্তী পর্যায়ে চলে যাই, যেখানে আমরা অ্যামাজন কম্প্রেহেন্ড ব্যবহার করে একটি টপিক মডেলিং কাজ চালানোর জন্য প্রি-প্রসেসড ডেটা ব্যবহার করি। এই পর্যায়ে, আপনি হয় দ্বিতীয় নোটবুক ব্যবহার করতে পারেন (model_training.ipynb) অথবা টপিক মডেলিং কাজ চালানোর জন্য Amazon Comprehend কনসোল ব্যবহার করুন। কনসোল ব্যবহার করার নির্দেশাবলীর জন্য, পড়ুন কনসোল ব্যবহার করে বিশ্লেষণের কাজ চলছে. আপনি যদি নোটবুক ব্যবহার করেন, আপনি Boto3 ব্যবহার করে একটি Amazon Comprehend ক্লায়েন্ট তৈরি করে শুরু করতে পারেন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে।

# Client and session information
session = boto3.Session()
s3 = boto3.resource('s3')

# Account id. Required downstream.
account_id = boto3.client('sts').get_caller_identity().get('Account')

# Initializing Comprehend client
comprehend = boto3.client(service_name='comprehend', 
                          region_name=session.region_name)

টপিক মডেলিংয়ের জন্য আপনি দুটি উপায়ে আপনার নথি জমা দিতে পারেন: ফাইল প্রতি একটি নথি, অথবা প্রতি লাইনে একটি নথি৷

আমরা 5টি বিষয় (k-সংখ্যা) দিয়ে শুরু করি এবং প্রতি লাইনে একটি নথি ব্যবহার করি। k বা বিষয়ের সংখ্যা নির্বাচন করার জন্য একটি আদর্শ অনুশীলন হিসাবে কোন একক সেরা উপায় নেই। আপনি k এর বিভিন্ন মান চেষ্টা করে দেখতে পারেন, এবং সবচেয়ে বেশি সম্ভাবনা আছে এমন একটি নির্বাচন করতে পারেন।

# Number of topics set to 5 after having a human-in-the-loop
# This needs to be fully aligned with topicMaps dictionary in the third script 
NUMBER_OF_TOPICS = 5

# Input file format of one review per line
input_doc_format = "ONE_DOC_PER_LINE"

# Role arn (Hard coded, masked)
data_access_role_arn = "arn:aws:iam::XXXXXXXXXXXX:role/service-role/AmazonSageMaker-ExecutionRole-XXXXXXXXXXXXXXX"

আমাদের Amazon Comprehend টপিক মডেলিং কাজের জন্য আপনাকে পাস করতে হবে InputDataConfig S3 সহ অভিধান বস্তু, InputFormat, এবং DocumentReadAction প্রয়োজনীয় পরামিতি হিসাবে। একইভাবে, আপনাকে প্রদান করতে হবে OutputDataConfig S3 সহ বস্তু এবং DataAccessRoleArn প্রয়োজনীয় পরামিতি হিসাবে। আরও তথ্যের জন্য, এর জন্য Boto3 ডকুমেন্টেশন পড়ুন start_topics_detection_job.

# Constants for S3 bucket and input data file
BUCKET = 'clothing-shoe-jewel-tm-blog'
input_s3_url = 's3://' + BUCKET + '/out/' + 'TransformedReviews.txt'
output_s3_url = 's3://' + BUCKET + '/out/' + 'output/'

# Final dataframe where we will join Comprehend outputs later
S3_FEEDBACK_TOPICS = 's3://' + BUCKET + '/out/' + 'FinalDataframe.csv'

# Local copy of Comprehend output
LOCAL_COMPREHEND_OUTPUT_DIR = os.path.join('comprehend_out', '')
LOCAL_COMPREHEND_OUTPUT_FILE = os.path.join(LOCAL_COMPREHEND_OUTPUT_DIR, 'output.tar.gz')

INPUT_CONFIG={
    # The S3 URI where Comprehend input is placed.
    'S3Uri':    input_s3_url,
    # Document format
    'InputFormat': input_doc_format,
}
OUTPUT_CONFIG={
    # The S3 URI where Comprehend output is placed.
    'S3Uri':    output_s3_url,
}

তারপরে আপনি নিম্নলিখিত উদাহরণে দেখানো বিষয়গুলির সংখ্যা, ইনপুট কনফিগারেশন অবজেক্ট, আউটপুট কনফিগারেশন অবজেক্ট এবং একটি IAM ভূমিকা পাস করে একটি অ্যাসিঙ্ক্রোনাস বিষয় সনাক্তকরণ কাজ শুরু করতে পারেন।

# Reading the Comprehend input file just to double check if number of reviews 
# and the number of lines in the input file have an exact match.
obj = s3.Object(input_s3_url)
comprehend_input = obj.get()['Body'].read().decode('utf-8')
comprehend_input_lines = len(comprehend_input.split('n'))

# Reviews where Comprehend outputs will be merged
df = pd.read_csv(S3_FEEDBACK_TOPICS)
review_df_length = df.shape[0]

# The two lengths must be equal
assert comprehend_input_lines == review_df_length

# Start Comprehend topic modelling job.
# Specifies the number of topics, input and output config and IAM role ARN 
# that grants Amazon Comprehend read access to data.
start_topics_detection_job_result = comprehend.start_topics_detection_job(
                                                    NumberOfTopics=NUMBER_OF_TOPICS,
                                                    InputDataConfig=INPUT_CONFIG,
                                                    OutputDataConfig=OUTPUT_CONFIG,
                                                    DataAccessRoleArn=data_access_role_arn)

print('start_topics_detection_job_result: ' + json.dumps(start_topics_detection_job_result))

# Job ID is required downstream for extracting the Comprehend results
job_id = start_topics_detection_job_result["JobId"]
print('job_id: ', job_id)

আপনি কল করে কাজের বর্তমান অবস্থা ট্র্যাক করতে পারেন DescribeTopicDetectionJob অপারেশন. চাকরির অবস্থা নিম্নলিখিতগুলির মধ্যে একটি হতে পারে:

  • জমা দেওয়া হয়েছে - কাজটি গৃহীত হয়েছে এবং প্রক্রিয়াকরণের জন্য সারিবদ্ধ
  • IN_PROGRESS – Amazon Comprehend কাজটি প্রক্রিয়া করছে
  • সমাপ্ত - কাজটি সফলভাবে সম্পন্ন হয়েছে এবং আউটপুট উপলব্ধ
  • ব্যর্থ হয়েছে - কাজটি সম্পূর্ণ হয়নি৷
# Topic detection takes a while to complete. 
# We can track the current status by calling Use the DescribeTopicDetectionJob operation.
# Keeping track if Comprehend has finished its job
description = comprehend.describe_topics_detection_job(JobId=job_id)

topic_detection_job_status = description['TopicsDetectionJobProperties']["JobStatus"]
print(topic_detection_job_status)
while topic_detection_job_status not in ["COMPLETED", "FAILED"]:
    time.sleep(120)
    topic_detection_job_status = comprehend.describe_topics_detection_job(JobId=job_id)['TopicsDetectionJobProperties']["JobStatus"]
    print(topic_detection_job_status)

topic_detection_job_status = comprehend.describe_topics_detection_job(JobId=job_id)['TopicsDetectionJobProperties']["JobStatus"]
print(topic_detection_job_status)

কাজটি সফলভাবে সম্পন্ন হলে, এটি দুটি ফাইল সমন্বিত একটি সংকুচিত সংরক্ষণাগার ফিরিয়ে দেয়: topic-terms.csv এবং doc-topics.csv। প্রথম আউটপুট ফাইল, topic-terms.csv, সংগ্রহের বিষয়গুলির একটি তালিকা। প্রতিটি বিষয়ের জন্য, তালিকায় ডিফল্টভাবে, তাদের ওজন অনুযায়ী বিষয় অনুসারে শীর্ষ পদগুলি অন্তর্ভুক্ত থাকে। দ্বিতীয় ফাইল, doc-topics.csv, একটি বিষয়ের সাথে সম্পর্কিত নথি এবং বিষয়ের সাথে সংশ্লিষ্ট নথির অনুপাত তালিকাভুক্ত করে৷ কারণ আমরা নির্দিষ্ট করেছি ONE_DOC_PER_LINE এর আগে input_doc_format পরিবর্তনশীল, নথিটি ফাইলের নাম এবং ফাইলের মধ্যে 0-সূচীযুক্ত লাইন নম্বর দ্বারা চিহ্নিত করা হয়। বিষয় মডেলিং সম্পর্কে আরও তথ্যের জন্য, পড়ুন টপিক মডেলিং.
আমাদের পরবর্তী পদক্ষেপের জন্য Amazon Comprehend-এর আউটপুট স্থানীয়ভাবে কপি করা হয়েছে।

# Bucket prefix where model artifacts are stored
prefix = f'{account_id}-TOPICS-{job_id}'

# Model artifact zipped file
artifact_file = 'output.tar.gz'

# Location on S3 where model artifacts are stored
target = f's3://{BUCKET}/out/output/{prefix}/{artifact_file}'

# Copy Comprehend output from S3 to local notebook instance
! aws s3 cp {target}  ./comprehend-out/

# Unzip the Comprehend output file. 
# Two files are now saved locally- 
#       (1) comprehend-out/doc-topics.csv and 
#       (2) comprehend-out/topic-terms.csv

comprehend_tars = tarfile.open(LOCAL_COMPREHEND_OUTPUT_FILE)
comprehend_tars.extractall(LOCAL_COMPREHEND_OUTPUT_DIR)
comprehend_tars.close()

যেহেতু বিষয়ের সংখ্যা নথি সংগ্রহের সাথে যুক্ত শব্দভান্ডারের তুলনায় অনেক কম, তাই বিষয় স্থান উপস্থাপনাকে একটি মাত্রিকতা হ্রাস প্রক্রিয়া হিসাবেও দেখা যেতে পারে। আপনি ক্লাস্টারিং সঞ্চালনের জন্য নথির এই বিষয় স্থান উপস্থাপনা ব্যবহার করতে পারেন। অন্যদিকে, আপনি প্রতিটি ক্লাস্টারের সাথে সম্পর্কিত বিষয় নির্ধারণ করতে প্রতিটি ক্লাস্টারে শব্দের ফ্রিকোয়েন্সি বিশ্লেষণ করতে পারেন। এই পোস্টের জন্য, আমরা ক্লাস্টারিংয়ের মতো অন্য কোনো কৌশল করি না।

আমরা তৃতীয় নোটবুক ব্যবহার করি (topic_mapping_sentiment_generation.ipynb) বিভিন্ন জনসংখ্যার ব্যবহারকারীরা কীভাবে পণ্যগুলিতে প্রতিক্রিয়া দেখায় তা খুঁজে বের করতে এবং একটি নির্দিষ্ট পণ্যের প্রতি ব্যবহারকারীর সখ্যতার সমষ্টিগত তথ্য বিশ্লেষণ করে।

প্রতিটি বিষয়ের জন্য বিষয় এবং সংশ্লিষ্ট পদ পেতে আমরা আগের নোটবুক থেকে আউটপুট একত্রিত করতে পারি। যাইহোক, বিষয়গুলি সংখ্যাযুক্ত এবং ব্যাখ্যাযোগ্যতার অভাব হতে পারে। তাই, আমরা পর্যাপ্ত ডোমেন জ্ঞান এবং বিষয়বস্তুর দক্ষতা সহ একটি হিউম্যান-ইন-দ্য লুপ ব্যবহার করতে পছন্দ করি যাতে বিষয়গুলি তাদের সম্পর্কিত পদগুলি দেখে নামকরণ করা যায়৷ এই প্রক্রিয়াটিকে বিষয় সংখ্যা থেকে বিষয়ের নাম পর্যন্ত একটি ম্যাপিং হিসাবে বিবেচনা করা যেতে পারে। যাইহোক, এটি লক্ষণীয় যে বিষয়গুলির জন্য পদগুলির পৃথক তালিকা পারস্পরিকভাবে অন্তর্ভুক্ত হতে পারে এবং তাই একাধিক ম্যাপিং তৈরি করতে পারে। হিউম্যান-ইন-দ্য-লুপকে ব্যবহারের ক্ষেত্রের প্রেক্ষাপটের উপর ভিত্তি করে ম্যাপিংগুলিকে আনুষ্ঠানিক করা উচিত। অন্যথায়, নিম্নধারার কর্মক্ষমতা প্রভাবিত হতে পারে।

আমরা ভেরিয়েবল ঘোষণা করে শুরু করি। প্রতিটি পর্যালোচনার জন্য, একাধিক বিষয় থাকতে পারে। আমরা তাদের ফ্রিকোয়েন্সি গণনা করি এবং সর্বাধিক তিনটি ঘন ঘন বিষয় নির্বাচন করি। এই বিষয়গুলি একটি পর্যালোচনার প্রতিনিধি বিষয় হিসাবে রিপোর্ট করা হয়। প্রথমত, আমরা একটি পরিবর্তনশীল সংজ্ঞায়িত করি TOP_TOPICS সর্বাধিক সংখ্যক প্রতিনিধি বিষয় ধরে রাখতে। দ্বিতীয়ত, আমরা সংজ্ঞায়িত করি এবং মান সেট করি language_code Amazon Comprehend এর প্রয়োজনীয় ভাষা প্যারামিটার সমর্থন করার জন্য পরিবর্তনশীল। অবশেষে, আমরা তৈরি করি topicMaps, যা একটি অভিধান যা বিষয়ের নামের সাথে বিষয় সংখ্যা ম্যাপ করে।

# boto3 session to access service
session = boto3.Session()
comprehend = boto3.client(  'comprehend',
                            region_name=session.region_name)

# S3 bucket
BUCKET = 'clothing-shoe-jewel-tm-blog'

# Local copy of doc-topic file
DOC_TOPIC_FILE = os.path.join('comprehend-out', 'doc-topics.csv')

# Final dataframe where we will join Comprehend outputs later
S3_FEEDBACK_TOPICS = 's3://' + BUCKET + '/out/' + 'FinalDataframe.csv'

# Final output
S3_FINAL_OUTPUT = 's3://' + BUCKET + '/out/' + 'reviewTopicsSentiments.csv'

# Top 3 topics per product will be aggregated
TOP_TOPICS = 3

# Working on English language only. 
language_code = 'en'

# Topic names for 5 topics created by human-in-the-loop or SME feed
topicMaps = {
    0: 'Product comfortability',
    1: 'Product Quality and Price',
    2: 'Product Size',
    3: 'Product Color',
    4: 'Product Return',
}

এর পরে, আমরা প্রতিটি বিষয়ের সাথে যুক্ত অনন্য পদগুলিকে সংযুক্ত করতে Amazon Comprehend দ্বারা তৈরি করা topic-terms.csv ফাইলটি ব্যবহার করি। তারপর, এই টপিক-টার্ম অ্যাসোসিয়েশনে ম্যাপিং ডিকশনারি প্রয়োগ করে, আমরা বিষয়ের নামের সাথে অনন্য পদগুলিকে সংযুক্ত করি।

# Loading documents and topics assigned to each of them by Comprehend
docTopics = pd.read_csv(DOC_TOPIC_FILE)
docTopics.head()

# Creating a field with doc number. 
# This doc number is the line number of the input file to Comprehend.
docTopics['doc'] = docTopics['docname'].str.split(':').str[1]
docTopics['doc'] = docTopics['doc'].astype(int)
docTopics.head()

# Load topics and associated terms
topicTerms = pd.read_csv(DOC_TOPIC_FILE)

# Consolidate terms for each topic
aggregatedTerms = topicTerms.groupby('topic')['term'].aggregate(lambda term: term.unique().tolist()).reset_index()

# Sneak peek
aggregatedTerms.head(10)

এই ম্যাপিং Amazon Comprehend দ্বারা উত্পন্ন বিষয়গুলির পঠনযোগ্যতা এবং ব্যাখ্যাযোগ্যতা উন্নত করে, যেমনটি আমরা নিম্নলিখিত ডেটাফ্রেমে দেখতে পাচ্ছি।

তদ্ব্যতীত, আমরা প্রাথমিক ইনপুট ডেটাতে টপিক নম্বর, পদ এবং নাম যোগ করি, যেমনটি নিম্নলিখিত ধাপে দেখানো হয়েছে।

এটি প্রতিটি পর্যালোচনার সাথে সম্পর্কিত বিষয় শর্তাবলী এবং নাম প্রদান করে। টপিক নম্বর এবং শর্তাবলী প্রতিটি পর্যালোচনার সাথে যুক্ত করা হয় এবং তারপরে আমরা প্রথম নোটবুকে সংরক্ষিত মূল ডেটাফ্রেমে আবার যোগদান করি।

# Load final dataframe where Comprehend results will be merged to 
feedbackTopics = pd.read_csv(S3_FEEDBACK_TOPICS)

# Joining topic numbers to main data
# The index of feedbackTopics is referring to doc field of docTopics dataframe
feedbackTopics = pd.merge(feedbackTopics, 
                          docTopics, 
                          left_index=True, 
                          right_on='doc', 
                          how='left')

# Reviews will now have topic numbers, associated terms and topics names
feedbackTopics = feedbackTopics.merge(aggregatedTerms, 
                                      on='topic', 
                                      how='left')
feedbackTopics.head()

আমরা ব্যবহার করে পর্যালোচনা পাঠ্যের জন্য অনুভূতি তৈরি করি detect_sentiment. এটি পাঠ্য পরিদর্শন করে এবং প্রচলিত অনুভূতির একটি অনুমান (ইতিবাচক, নিরপেক্ষ, মিশ্র বা নেতিবাচক) প্রদান করে।

def detect_sentiment(text, language_code):
    """Detects sentiment for a given text and language
    """
    comprehend_json_out = comprehend.detect_sentiment(Text=text, LanguageCode=language_code)
    return comprehend_json_out

# Comprehend output for sentiment in raw json 
feedbackTopics['comprehend_sentiment_json_out'] = feedbackTopics['reviewText'].apply(lambda x: detect_sentiment(x, language_code))

# Extracting the exact sentiment from raw Comprehend Json
feedbackTopics['sentiment'] = feedbackTopics['comprehend_sentiment_json_out'].apply(lambda x: x['Sentiment'])

# Sneak peek
feedbackTopics.head(2)

উভয় বিষয় এবং অনুভূতি দৃঢ়ভাবে পর্যালোচনা সঙ্গে মিলিত হয়. যেহেতু আমরা পণ্য স্তরে বিষয় এবং অনুভূতি একত্রিত করব, তাই আমাদের Amazon Comprehend দ্বারা উত্পন্ন বিষয় এবং অনুভূতিগুলিকে একত্রিত করে একটি যৌগিক কী তৈরি করতে হবে৷

# Creating a composite key of topic name and sentiment.
# This is because we are counting frequency of this combination.
feedbackTopics['TopicSentiment'] = feedbackTopics['TopicNames'] + '_' + feedbackTopics['sentiment']

তারপরে, আমরা পণ্য স্তরে একত্রিত করি এবং প্রতিটি পণ্যের জন্য যৌগিক কীগুলি গণনা করি।

এই চূড়ান্ত ধাপটি আমাদের পণ্য প্রতি পর্যালোচনার গ্র্যানুলারিটি আরও ভালভাবে বুঝতে সাহায্য করে এবং এটিকে একটি সমষ্টিগতভাবে বিষয় প্রতি শ্রেণীবদ্ধ করে। উদাহরণস্বরূপ, আমরা টপিকডিএফ ডেটাফ্রেমের জন্য দেখানো মানগুলি বিবেচনা করতে পারি। প্রথম পণ্যটির জন্য, এর জন্য সমস্ত পর্যালোচনার মধ্যে, সামগ্রিকভাবে গ্রাহকরা পণ্যের রিটার্ন, আকার এবং আরামের বিষয়ে একটি ইতিবাচক অভিজ্ঞতা পেয়েছেন। দ্বিতীয় পণ্যের জন্য, গ্রাহকদের বেশিরভাগই পণ্যের রিটার্নের ক্ষেত্রে একটি মিশ্র-থেকে-ইতিবাচক অভিজ্ঞতা এবং পণ্যের আকারের উপর একটি ইতিবাচক অভিজ্ঞতা ছিল।

# Create product id group
asinWiseDF = feedbackTopics.groupby('asin')

# Each product now has a list of topics and sentiment combo (topics can appear multiple times)
topicDF = asinWiseDF['TopicSentiment'].apply(lambda x:list(x)).reset_index()

# Count appreances of topics-sentiment combo for product
topicDF['TopTopics'] = topicDF['TopicSentiment'].apply(Counter)

# Sorting topics-sentiment combo based on their appearance
topicDF['TopTopics'] = topicDF['TopTopics'].apply(lambda x: sorted(x, key=x.get, reverse=True))

# Select Top k topics-sentiment combo for each product/review
topicDF['TopTopics'] = topicDF['TopTopics'].apply(lambda x: x[:TOP_TOPICS])

# Sneak peek
topicDF.head()

পণ্য প্রতি বিষয় বিষয়

আমাদের চূড়ান্ত ডেটাফ্রেমে এই বিষয়ের তথ্য এবং অনুভূতির তথ্য রয়েছে যার নাম চূড়ান্ত ডেটাফ্রেমে ফিরে এসেছে। feedbackTopics যেটি আমরা আমাদের প্রথম নোটবুকে Amazon S3 এ সংরক্ষণ করেছি।

# Adding the topic-sentiment combo back to product metadata
finalDF = S3_FEEDBACK_TOPICS.merge(topicDF, on='asin', how='left')

# Only selecting a subset of fields
finalDF = finalDF[['asin', 'TopTopics', 'category', 'title']]

# Saving the final output locally
finalDF.to_csv(S3_FINAL_OUTPUT, index=False)

ডেটা কল্পনা করতে অ্যামাজন কুইকসাইট ব্যবহার করুন

আপনি ডেটা কল্পনা করতে এবং রিপোর্ট তৈরি করতে QuickSight ব্যবহার করতে পারেন। QuickSight হল একটি ব্যবসায়িক বুদ্ধিমত্তা (BI) পরিষেবা যা আপনি বিভিন্ন উৎস থেকে ডেটা ব্যবহার করতে এবং বুদ্ধিমান ড্যাশবোর্ড তৈরি করতে ব্যবহার করতে পারেন। এই উদাহরণে, আমরা আমাদের তৈরি করা চূড়ান্ত ডেটাসেট ব্যবহার করে একটি কুইকসাইট বিশ্লেষণ তৈরি করি, যেমনটি নিম্নলিখিত উদাহরণের ভিজ্যুয়ালাইজেশনে দেখানো হয়েছে।

কুইকসাইট ভিজ্যুয়ালাইজেশন

Amazon QuickSight সম্পর্কে আরও জানতে, পড়ুন অ্যামাজন কুইকসাইট দিয়ে শুরু করা.

পরিষ্কার কর

শেষে, আমাদের AWS কনসোল থেকে এই পরীক্ষায় ব্যবহৃত নোটবুকের উদাহরণটি বন্ধ করতে হবে।

উপসংহার

এই পোস্টে, আমরা প্রদর্শন করেছি কিভাবে Amazon Comprehend ব্যবহার করে পণ্যের পর্যালোচনা বিশ্লেষণ করতে হয় এবং টপিক মডেলিংকে একটি কৌশল হিসেবে ব্যবহার করে শীর্ষ বিষয়গুলো খুঁজে বের করতে হয়। টপিক মডেলিং আপনাকে একাধিক বিষয় দেখতে এবং সেগুলিকে সংগঠিত করতে, বুঝতে এবং স্কেলে সংক্ষিপ্ত করতে সক্ষম করে৷ আপনি দ্রুত এবং সহজেই লুকানো নিদর্শনগুলি আবিষ্কার করতে পারেন যা ডেটা জুড়ে উপস্থিত রয়েছে এবং তারপরে ডেটা-চালিত সিদ্ধান্ত নিতে সেই অন্তর্দৃষ্টি ব্যবহার করতে পারেন। আপনি অনেক ব্যবসায়িক সমস্যা সমাধানের জন্য টপিক মডেলিং ব্যবহার করতে পারেন, যেমন স্বয়ংক্রিয়ভাবে গ্রাহক সহায়তা টিকিট ট্যাগ করা, বিষয়ের উপর ভিত্তি করে সঠিক টিমের সাথে কথোপকথন রাউটিং করা, সহায়তা টিকিটের জরুরিতা সনাক্ত করা, কথোপকথন থেকে আরও ভাল অন্তর্দৃষ্টি পাওয়া, ডেটা-চালিত পরিকল্পনা তৈরি করা, সমস্যা তৈরি করা -কেন্দ্রিক বিষয়বস্তু, বিক্রয় কৌশল উন্নত করা, এবং গ্রাহকের সমস্যা এবং ঘর্ষণ চিহ্নিত করা।

এগুলি মাত্র কয়েকটি উদাহরণ, তবে আপনি প্রতিদিন আপনার সংস্থায় যে আরও অনেক ব্যবসায়িক সমস্যার মুখোমুখি হন এবং সেগুলি সমাধান করার জন্য আপনি কীভাবে অন্যান্য ML কৌশলগুলির সাথে টপিক মডেলিং ব্যবহার করতে পারেন সে সম্পর্কে চিন্তা করতে পারেন৷


লেখক সম্পর্কে

গুরপ্রীত চিমাGurpreet কানাডা ভিত্তিক AWS পেশাদার পরিষেবা সহ একজন ডেটা বিজ্ঞানী। তিনি গ্রাহকদের মেশিন লার্নিং এবং কৃত্রিম বুদ্ধিমত্তা প্রযুক্তির মাধ্যমে ব্যবসায়িক মূল্য এবং ডেটা থেকে অন্তর্দৃষ্টি ট্যাপ করার জন্য উদ্ভাবনে সহায়তা করার বিষয়ে উত্সাহী৷ তার অবসর সময়ে, তিনি বাইরে হাইকিং এবং বই পড়া উপভোগ করেন

রুশদী শামসরুশদী শামস AWS প্রফেশনাল সার্ভিসেস, কানাডার একজন ডেটা সায়েন্টিস্ট। তিনি AWS গ্রাহকদের জন্য মেশিন লার্নিং পণ্য তৈরি করেন। তিনি বৈজ্ঞানিক কল্পকাহিনী পড়তে এবং লিখতে ভালবাসেন।

রিক তালুকদাররিক তালুকদার আমাজন কম্প্রেহেন্ড সার্ভিস টিমের একজন সিনিয়র আর্কিটেক্ট। তিনি এডব্লিউএস গ্রাহকদের সাথে কাজ করেন যাতে তারা বড় আকারে মেশিন লার্নিং গ্রহণ করে। কাজের বাইরে, তিনি পড়া এবং ফটোগ্রাফি উপভোগ করেন।

সময় স্ট্যাম্প:

থেকে আরো এডাব্লুএস মেশিন লার্নিং

পিজিএ ট্যুরের জেনারেটিভ এআই ভার্চুয়াল সহকারীর যাত্রা, ধারণা থেকে বিকাশ পর্যন্ত প্রোটোটাইপ পর্যন্ত | আমাজন ওয়েব সার্ভিসেস

উত্স নোড: 1956285
সময় স্ট্যাম্প: মার্চ 14, 2024

অ্যামাজন সেজমেকার স্টুডিও এবং অ্যামাজন সেজমেকার অটোপাইলট ব্যবহার করে স্যাটেলাইট ইমেজ বৈশিষ্ট্য ব্যবহার করে ম্যানগ্রোভ বন সনাক্ত করুন – পার্ট 1

উত্স নোড: 1497650
সময় স্ট্যাম্প: জুন 21, 2022

বিকাশকারীর উত্পাদনশীলতা বাড়ানো: ডেলয়েট কীভাবে নো-কোড/লো-কোড মেশিন লার্নিংয়ের জন্য অ্যামাজন সেজমেকার ক্যানভাস ব্যবহার করে | আমাজন ওয়েব সার্ভিসেস

উত্স নোড: 1920150
সময় স্ট্যাম্প: ডিসেম্বর 1, 2023

জেনারেটিভ এআই গণতন্ত্রীকরণ এবং এমএল ওয়ার্কলোড স্কেল করার জন্য AWS দ্বারা নতুন জুপিটার অবদানের ঘোষণা আমাজন ওয়েব সার্ভিসেস

উত্স নোড: 1834975
সময় স্ট্যাম্প: 10 পারে, 2023