انجام تبدیل دسته ای با مدل های زبان بزرگ Amazon SageMaker Jumpstart Text2Text Generation | خدمات وب آمازون

انجام تبدیل دسته ای با مدل های زبان بزرگ Amazon SageMaker Jumpstart Text2Text Generation | خدمات وب آمازون

امروز ما با هیجان اعلام می کنیم که اکنون می توانید تبدیل های دسته ای را انجام دهید Amazon SageMaker JumpStart مدل های زبان بزرگ (LLMs) برای Text2Text Generation. تبدیل‌های دسته‌ای در موقعیت‌هایی مفید هستند که نیازی نیست پاسخ‌ها در زمان واقعی باشند و بنابراین می‌توانید برای مجموعه داده‌های بزرگ به صورت دسته‌ای استنتاج کنید. برای تبدیل دسته ای، یک کار دسته ای اجرا می شود که ورودی دسته ای را به عنوان یک مجموعه داده و یک مدل از پیش آموزش دیده می گیرد و پیش بینی هایی را برای هر نقطه داده در مجموعه داده به دست می دهد. تبدیل دسته ای مقرون به صرفه است زیرا بر خلاف نقاط پایانی میزبان زمان واقعی که دارای سخت افزار پایدار هستند، خوشه های تبدیل دسته ای پس از تکمیل کار از بین می روند و بنابراین سخت افزار فقط برای مدت زمان کار دسته ای استفاده می شود.

در برخی موارد استفاده، درخواست‌های استنتاج بلادرنگ را می‌توان در دسته‌های کوچکی برای پردازش دسته‌ای گروه‌بندی کرد تا پاسخ‌های بلادرنگ یا تقریباً بی‌درنگ ایجاد کنند. به عنوان مثال، اگر شما نیاز به پردازش یک جریان پیوسته از داده‌ها با تأخیر کم و توان عملیاتی بالا دارید، فراخوانی یک نقطه پایانی بلادرنگ برای هر درخواست به طور جداگانه به منابع بیشتری نیاز دارد و پردازش همه درخواست‌ها بیشتر طول می‌کشد زیرا پردازش به صورت سریالی انجام می‌شود. . یک رویکرد بهتر این است که برخی از درخواست‌ها را گروه‌بندی کنید و نقطه پایانی بلادرنگ را در حالت استنتاج دسته‌ای فراخوانی کنید، که درخواست‌های شما را در یک پاس رو به جلو مدل پردازش می‌کند و پاسخ انبوه درخواست را در زمان واقعی یا تقریباً واقعی برمی‌گرداند. . تأخیر پاسخ به تعداد درخواست‌هایی که با هم گروه‌بندی می‌کنید و اندازه حافظه نمونه بستگی دارد، بنابراین می‌توانید اندازه دسته را بر اساس نیازهای کسب‌وکارتان برای تأخیر و توان تنظیم کنید. ما به این می گوییم استنتاج دسته ای بلادرنگ زیرا مفهوم دسته بندی را ترکیب می کند و در عین حال پاسخ های بلادرنگ را ارائه می دهد. با استنتاج دسته ای بلادرنگ، می توانید به تعادلی بین تاخیر کم و توان عملیاتی بالا دست یابید و به شما امکان می دهد حجم زیادی از داده ها را به موقع و کارآمد پردازش کنید.

تبدیل دسته ای Jumpstart برای مدل های Text2Text Generation به شما این امکان را می دهد که فراپارامترهای دسته ای را از طریق متغیرهای محیطی عبور دهید که باعث افزایش بیشتر و کاهش تاخیر می شود.

JumpStart مدل های از پیش آموزش دیده و منبع باز را برای طیف گسترده ای از انواع مشکلات ارائه می دهد تا به شما در شروع یادگیری ماشین (ML) کمک کند. می توانید این مدل ها را قبل از استقرار به صورت تدریجی آموزش داده و تنظیم کنید. JumpStart همچنین الگوهای راه حلی را ارائه می دهد که زیرساخت هایی را برای موارد استفاده رایج تنظیم می کند و نمونه های نوت بوک قابل اجرا برای ML با آمازون SageMaker. می توانید از طریق صفحه فرود JumpStart به مدل های از پیش آموزش دیده، الگوهای راه حل و نمونه ها دسترسی داشته باشید. Amazon SageMaker Studio. همچنین می توانید با استفاده از SageMaker Python SDK به مدل های JumpStart دسترسی داشته باشید.

در این پست نحوه استفاده از پیشرفته ترین آموزش های قبلی را نشان می دهیم مدل های text2text FLAN T5 از Hugging Face برای تبدیل دسته ای و استنتاج دسته ای در زمان واقعی.

بررسی اجمالی راه حل

نوت بوک تبدیل دسته ای مدل های Text2Text FLAN T5 از پیش آموزش دیده را نشان می دهد در آغوش کشیدن صورت موجود در ادامه مطلب مخزن GitHub. این نوت بوک از داده های صورت در آغوش گرفته استفاده می کند cnn_dailymail مجموعه داده برای یک کار خلاصه سازی متن با استفاده از SageMaker SDK.

در زیر مراحل کلیدی برای اجرای تبدیل دسته ای و استنتاج دسته ای بلادرنگ آمده است:

  1. پیش نیازها را تنظیم کنید.
  2. یک مدل از پیش آموزش دیده را انتخاب کنید.
  3. بازیابی مصنوعات برای مدل.
  4. فراپارامترهای کار تبدیل دسته ای را مشخص کنید.
  5. داده ها را برای تبدیل دسته ای آماده کنید.
  6. کار تبدیل دسته ای را اجرا کنید.
  7. خلاصه سازی را با استفاده از الف ارزیابی کنید RED نمره (مطالعه فراخوان گرا برای ارزیابی Gisting).
  8. استنتاج دسته ای را در زمان واقعی انجام دهید.

پیش نیازها را تنظیم کنید

قبل از اجرای نوت بوک، باید چند مرحله اولیه راه اندازی را انجام دهید. بیایید نقش اجرای SageMaker را تنظیم کنیم تا مجوز اجرای خدمات AWS از طرف شما را داشته باشد:

sagemaker_session = Session()
aws_role = sagemaker_session.get_caller_identity_arn()
aws_region = boto3.Session().region_name
sess = sagemaker.Session()

یک مدل از پیش آموزش دیده را انتخاب کنید

ما از مدل huggingface-text2text-flan-t5-large به عنوان مدل پیش فرض استفاده می کنیم. به صورت اختیاری، می توانید لیست مدل های Text2Text موجود را در JumpStart بازیابی کنید و مدل دلخواه خود را انتخاب کنید. این روش یک راه ساده برای انتخاب شناسه های مدل های مختلف با استفاده از یک نوت بوک فراهم می کند. برای اهداف نمایشی، از مدل huggingface-text2text-flan-t5-large استفاده می کنیم:

model_id, model_version, = ( "huggingface-text2text-flan-t5-large", "*",
)

بازیابی مصنوعات برای مدل

با SageMaker، می‌توانیم استنتاج را روی مدل از پیش آموزش‌دیده انجام دهیم، حتی بدون اینکه ابتدا آن را روی یک مجموعه داده جدید تنظیم کنیم. ما با بازیابی شروع می کنیم deploy_image_uri, deploy_source_uriو model_uri برای مدل از پیش آموزش دیده:

inference_instance_type = "ml.p3.2xlarge" # Retrieve the inference docker container uri. This is the base HuggingFace container image for the default model above.
deploy_image_uri = image_uris.retrieve(
region=None,
framework=None, # automatically inferred from model_id
image_scope="inference",
model_id=model_id,
model_version=model_version,
instance_type=inference_instance_type,
) # Retrieve the model uri.
model_uri = model_uris.retrieve(
model_id=model_id, model_version=model_version, model_scope="inference"
) #Create the SageMaker model instance
model = Model(
image_uri=deploy_image_uri,
model_data=model_uri,
role=aws_role,
predictor_cls=Predictor)

فراپارامترهای کار تبدیل دسته ای را مشخص کنید

شما می توانید هر زیر مجموعه ای از فراپارامترها را به عنوان متغیرهای محیطی به کار تبدیل دسته ای ارسال کنید. شما همچنین می توانید این هایپرپارامترها را در یک بار JSON ارسال کنید. با این حال، اگر مانند کد زیر، متغیرهای محیطی را برای هایپرپارامترها تنظیم می‌کنید، در این صورت از فراپارامترهای پیشرفته از نمونه‌های جداگانه در بارگذاری خطوط JSON استفاده نمی‌شود. اگر می خواهید از هایپرپارامترهای بارگذاری استفاده کنید، ممکن است بخواهید آن را تنظیم کنید hyper_params_dict پارامتر به جای آن null است.

#Specify the Batch Job Hyper Params Here, If you want to treate each example hyperparameters different please pass hyper_params_dict as None
hyper_params = {"batch_size":4, "max_length":50, "top_k": 50, "top_p": 0.95, "do_sample": True}
hyper_params_dict = {"HYPER_PARAMS":str(hyper_params)}

داده ها را برای تبدیل دسته ای آماده کنید

اکنون ما آماده بارگذاری هستیم cnn_dailymail مجموعه داده از صورت در آغوش گرفته:

cnn_test = load_dataset('cnn_dailymail','3.0.0',split='test')

هر ورودی داده را مرور می کنیم و داده های ورودی را در قالب مورد نیاز ایجاد می کنیم. ما ایجاد می کنیم articles.jsonl فایل به عنوان یک فایل داده آزمایشی حاوی مقالاتی است که باید به عنوان بار ورودی خلاصه شوند. همانطور که ما این فایل را ایجاد می کنیم، دستور را اضافه می کنیم "Briefly summarize this text:" به هر ردیف ورودی تست اگر می‌خواهید برای هر ورودی تست، هایپرپارامترهای متفاوتی داشته باشید، می‌توانید آن فراپارامترها را به عنوان بخشی از ایجاد مجموعه داده اضافه کنید.

ما ایجاد می کنیم highlights.jsonl به عنوان فایل حقیقت پایه حاوی نکات برجسته هر مقاله ذخیره شده در فایل آزمایشی articles.jsonl. ما هر دو فایل تست را در یک ذخیره می کنیم سرویس ذخیره سازی ساده آمازون سطل (Amazon S3). کد زیر را ببینید:

#You can specify a prompt here
prompt = "Briefly summarize this text: "
#Provide the test data and the ground truth file name
test_data_file_name = "articles.jsonl"
test_reference_file_name = 'highlights.jsonl' test_articles = []
test_highlights =[] # We will go over each data entry and create the data in the input required format as described above
for id, test_entry in enumerate(cnn_test): article = test_entry['article'] highlights = test_entry['highlights'] # Create a payload like this if you want to have different hyperparameters for each test input # payload = {"id": id,"text_inputs": f"{prompt}{article}", "max_length": 100, "temperature": 0.95} # Note that if you specify hyperparameter for each payload individually, you may want to ensure that hyper_params_dict is set to None instead payload = {"id": id,"text_inputs": f"{prompt}{article}"} test_articles.append(payload) test_highlights.append({"id":id, "highlights": highlights}) with open(test_data_file_name, "w") as outfile: for entry in test_articles: outfile.write("%sn" % json.dumps(entry)) with open(test_reference_file_name, "w") as outfile: for entry in test_highlights: outfile.write("%sn" % json.dumps(entry)) # Uploading the data s3 = boto3.client("s3")
s3.upload_file(test_data_file_name, output_bucket, os.path.join(output_prefix + "/batch_input/articles.jsonl"))

کار تبدیل دسته ای را اجرا کنید

هنگامی که یک کار تبدیل دسته ای را شروع می کنید، SageMaker منابع محاسباتی لازم را برای پردازش داده ها، از جمله نمونه های CPU یا GPU بسته به نوع نمونه انتخاب شده، راه اندازی می کند. در طول کار تبدیل دسته ای، SageMaker به طور خودکار منابع محاسباتی مورد نیاز برای پردازش داده ها، از جمله نمونه ها، منابع ذخیره سازی و شبکه را تهیه و مدیریت می کند. هنگامی که کار تبدیل دسته ای کامل شد، منابع محاسباتی به طور خودکار توسط SageMaker پاک می شوند. این بدان معنی است که نمونه ها و ذخیره سازی مورد استفاده در طول کار متوقف و حذف می شوند و منابع آزاد می شوند و هزینه به حداقل می رسد. کد زیر را ببینید:

# Creating the Batch transformer object
batch_transformer = model.transformer( instance_count=1, instance_type=inference_instance_type, output_path=s3_output_data_path, assemble_with="Line", accept="text/csv", max_payload=1, env = hyper_params_dict
) # Making the predications on the input data
batch_transformer.transform(s3_input_data_path, content_type="application/jsonlines", split_type="Line") batch_transformer.wait()

در زیر یک نمونه رکورد از articles.jsonl فایل تست توجه داشته باشید که رکورد در این فایل دارای شناسه ای است که با آن مطابقت دارد predict.jsonl رکوردهای فایلی که یک رکورد خلاصه شده را به عنوان خروجی از مدل Hugging Face Text2Text نشان می دهد. به طور مشابه، فایل حقیقت زمین نیز دارای شناسه تطبیقی ​​برای رکورد داده است. شناسه تطبیق در بین فایل آزمایشی، فایل حقیقت زمین و فایل خروجی اجازه می دهد تا رکوردهای ورودی را با سوابق خروجی برای تفسیر آسان نتایج پیوند دهید.

در زیر نمونه رکورد ورودی ارائه شده برای خلاصه سازی است:

{"id": 0, "text_inputs": "Briefly summarize this text: (CNN)The Palestinian Authority officially became the 123rd member of the International Criminal Court on Wednesday, a step that gives the court jurisdiction over alleged crimes in Palestinian territories. The formal accession was marked with a ceremony at The Hague, in the Netherlands, where the court is based. The Palestinians signed the ICC's founding Rome Statute in January, when they also accepted its jurisdiction over alleged crimes committed "in the occupied Palestinian territory, including East Jerusalem, since June 13, 2014." Later that month, the ICC opened a preliminary examination into the situation in Palestinian territories, paving the way for possible war crimes investigations against Israelis. As members of the court, Palestinians may be subject to counter-charges as well. Israel and the United States, neither of which is an ICC member, opposed the Palestinians' efforts to join the body. But Palestinian Foreign Minister Riad al-Malki, speaking at Wednesday's ceremony, said it was a move toward greater justice. "As Palestine formally becomes a State Party to the Rome Statute today, the world is also a step closer to ending a long era of impunity and injustice," he said, according to an ICC news release. "Indeed, today brings us closer to our shared goals of justice and peace." Judge Kuniko Ozaki, a vice president of the ICC, said acceding to the treaty was just the first step for the Palestinians. "As the Rome Statute today enters into force for the State of Palestine, Palestine acquires all the rights as well as responsibilities that come with being a State Party to the Statute. These are substantive commitments, which cannot be taken lightly," she said. Rights group Human Rights Watch welcomed the development. "Governments seeking to penalize Palestine for joining the ICC should immediately end their pressure, and countries that support universal acceptance of the court's treaty should speak out to welcome its membership," said Balkees Jarrah, international justice counsel for the group. "What's objectionable is the attempts to undermine international justice, not Palestine's decision to join a treaty to which over 100 countries around the world are members." In January, when the preliminary ICC examination was opened, Israeli Prime Minister Benjamin Netanyahu described it as an outrage, saying the court was overstepping its boundaries. The United States also said it "strongly" disagreed with the court's decision. "As we have said repeatedly, we do not believe that Palestine is a state and therefore we do not believe that it is eligible to join the ICC," the State Department said in a statement. It urged the warring sides to resolve their differences through direct negotiations. "We will continue to oppose actions against Israel at the ICC as counterproductive to the cause of peace," it said. But the ICC begs to differ with the definition of a state for its purposes and refers to the territories as "Palestine." While a preliminary examination is not a formal investigation, it allows the court to review evidence and determine whether to investigate suspects on both sides. Prosecutor Fatou Bensouda said her office would "conduct its analysis in full independence and impartiality." The war between Israel and Hamas militants in Gaza last summer left more than 2,000 people dead. The inquiry will include alleged war crimes committed since June. The International Criminal Court was set up in 2002 to prosecute genocide, crimes against humanity and war crimes. CNN's Vasco Cotovio, Kareem Khadder and Faith Karimi contributed to this report."}

خروجی پیش‌بینی‌شده با خلاصه‌سازی به صورت زیر است:

{'id': 0, 'generated_texts': ['The Palestinian Authority officially became a member of the International Criminal Court on Wednesday, a step that gives the court jurisdiction over alleged crimes in Palestinian territories.']}

در زیر خلاصه حقیقت پایه برای اهداف ارزیابی مدل آمده است:

{"id": 0, "highlights": "Membership gives the ICC jurisdiction over alleged crimes committed in Palestinian territories since last June .nIsrael and the United States opposed the move, which could open the door to war crimes investigations against Israelis ."}

در مرحله بعد، از حقیقت پایه و خروجی های پیش بینی شده برای ارزیابی مدل استفاده می کنیم.

ارزیابی مدل با استفاده از نمره ROUGE¶

REDیا Recall-Oriented Understudy for Gisting Evaluation، مجموعه‌ای از معیارها و یک بسته نرم‌افزاری است که برای ارزیابی خلاصه‌سازی خودکار و ترجمه ماشینی در پردازش زبان طبیعی استفاده می‌شود. این معیارها یک خلاصه یا ترجمه خودکار تولید شده را با یک خلاصه یا ترجمه مرجع (تولید شده توسط انسان) یا مجموعه ای از مراجع مقایسه می کند.

در کد زیر خلاصه‌های پیش‌بینی‌شده و اصلی را با پیوستن آن‌ها روی کلید مشترک ترکیب می‌کنیم id و از این برای محاسبه امتیاز ROUGE استفاده کنید:

# Downloading the predictions
s3.download_file(
output_bucket, output_prefix + "/batch_output/" + "articles.jsonl.out", "predict.jsonl"
) with open('predict.jsonl', 'r') as json_file:
json_list = list(json_file) # Creating the prediction list for the dataframe
predict_dict_list = []
for predict in json_list:
if len(predict) > 1:
predict_dict = ast.literal_eval(predict)
predict_dict_req = {"id": predict_dict["id"], "prediction": predict_dict["generated_texts"][0]}
predict_dict_list.append(predict_dict_req) # Creating the predictions dataframe
predict_df = pd.DataFrame(predict_dict_list) test_highlights_df = pd.DataFrame(test_highlights) # Combining the predict dataframe with the original summarization on id to compute the rouge score
df_merge = test_highlights_df.merge(predict_df, on="id", how="left") rouge = evaluate.load('rouge')
results = rouge.compute(predictions=list(df_merge["prediction"]),references=list(df_merge["highlights"]))
print(results)
{'rouge1': 0.32749078992945646, 'rouge2': 0.126038645005132, 'rougeL': 0.22764277967933363, 'rougeLsum': 0.28162915746368966}

استنتاج دسته ای را در زمان واقعی انجام دهید

در مرحله بعد، ما به شما نشان می‌دهیم که چگونه استنتاج دسته‌ای بلادرنگ را در نقطه پایانی با ارائه ورودی‌ها به صورت فهرست اجرا کنید. ما از همان شناسه مدل و مجموعه داده قبلی استفاده می کنیم، با این تفاوت که چند رکورد از مجموعه داده آزمایشی می گیریم و از آنها برای فراخوانی یک نقطه پایانی بلادرنگ استفاده می کنیم.

کد زیر نحوه ایجاد و استقرار یک نقطه پایانی بلادرنگ برای استنتاج دسته‌ای بلادرنگ را نشان می‌دهد:

from sagemaker.utils import name_from_base
endpoint_name = name_from_base(f"jumpstart-example-{model_id}")
# deploy the Model. Note that we need to pass Predictor class when we deploy model through Model class,
# for being able to run inference through the sagemaker API.
model_predictor = model.deploy( initial_instance_count=1, instance_type=inference_instance_type, predictor_cls=Predictor, endpoint_name=endpoint_name
)

در مرحله بعد، بار ورودی خود را آماده می کنیم. برای این کار از داده هایی که قبلا آماده کرده بودیم استفاده می کنیم و 10 ورودی آزمایشی اول را استخراج می کنیم و ورودی های متن را با هایپرپارامترهایی که می خواهیم استفاده کنیم اضافه می کنیم. ما این بار را در زمان واقعی ارائه می دهیم invoke_endpoint. سپس بار پاسخ به عنوان لیستی از پاسخ ها برگردانده می شود. کد زیر را ببینید:

#Provide all the text inputs to the model as a list
text_inputs = [entry["text_inputs"] for entry in test_articles[0:10]] # The information about the different Parameters is provided above
payload = { "text_inputs": text_inputs, "max_length": 50, "num_return_sequences": 1, "top_k": 50, "top_p": 0.95, "do_sample": True, "batch_size": 4
} def query_endpoint_with_json_payload(encoded_json, endpoint_name):
client = boto3.client("runtime.sagemaker")
response = client.invoke_endpoint(
EndpointName=endpoint_name, ContentType="application/json", Body=encoded_json
)
return response query_response = query_endpoint_with_json_payload(
json.dumps(payload).encode("utf-8"), endpoint_name=endpoint_name
) def parse_response_multiple_texts(query_response):
model_predictions = json.loads(query_response["Body"].read())
return model_predictions generated_text_list = parse_response_multiple_texts(query_response)
print(*generated_text_list, sep='n')

پاک کردن

پس از اینکه نقطه پایانی را آزمایش کردید، مطمئن شوید که نقطه پایانی استنتاج SageMaker را حذف کرده و مدل را حذف کرده اید تا از تحمیل هزینه جلوگیری کنید.

نتیجه

در این نوت بوک، ما یک تبدیل دسته ای انجام دادیم تا مدل Hugging Face Text2Text Generator را برای کارهای خلاصه سازی به نمایش بگذاریم. تبدیل دسته ای در به دست آوردن استنتاج از مجموعه داده های بزرگ بدون نیاز به نقطه پایانی پایدار سودمند است. ما رکوردهای ورودی را با استنباط‌ها پیوند دادیم تا به تفسیر نتایج کمک کنیم. ما از امتیاز ROUGE برای مقایسه خلاصه داده های آزمون با خلاصه سازی تولید شده توسط مدل استفاده کردیم.

علاوه بر این، استنتاج دسته‌ای بلادرنگ را نشان دادیم، که در آن می‌توانید دسته کوچکی از داده‌ها را به نقطه پایانی بلادرنگ ارسال کنید تا تعادلی بین تأخیر و توان عملیاتی برای سناریوهایی مانند جریان داده‌های ورودی ایجاد کنید. استنتاج دسته ای بلادرنگ به افزایش توان عملیاتی درخواست های بلادرنگ کمک می کند.

امروز تغییر دسته ای را با مدل های Text2Text Generation در SageMaker امتحان کنید و نظرات خود را با ما در میان بگذارید!


درباره نویسندگان

انجام تبدیل دسته ای با مدل های زبان بزرگ Amazon SageMaker Jumpstart Text2Text Generation | خدمات وب آمازون هوش داده پلاتو بلاک چین. جستجوی عمودی Ai.همانت سینگ یک مهندس یادگیری ماشین با تجربه در آمازون SageMaker JumpStart و Amazon SageMaker است. او کارشناسی ارشد خود را از موسسه علوم ریاضی Courant و B.Tech از IIT دهلی دریافت کرد. او تجربه کار بر روی طیف متنوعی از مشکلات یادگیری ماشین در حوزه پردازش زبان طبیعی، بینایی کامپیوتر و تجزیه و تحلیل سری های زمانی را دارد.

انجام تبدیل دسته ای با مدل های زبان بزرگ Amazon SageMaker Jumpstart Text2Text Generation | خدمات وب آمازون هوش داده پلاتو بلاک چین. جستجوی عمودی Ai.راچنا چادا یک معمار راه حل اصلی AI/ML در حساب های استراتژیک در AWS است. Rachna خوشبین است که معتقد است استفاده اخلاقی و مسئولانه از هوش مصنوعی می تواند جامعه را در آینده بهبود بخشد و رونق اقتصادی و اجتماعی را به ارمغان بیاورد. راچنا در اوقات فراغت خود دوست دارد با خانواده، پیاده روی و گوش دادن به موسیقی وقت بگذراند.

انجام تبدیل دسته ای با مدل های زبان بزرگ Amazon SageMaker Jumpstart Text2Text Generation | خدمات وب آمازون هوش داده پلاتو بلاک چین. جستجوی عمودی Ai.دکتر آشیش ختان یک دانشمند کاربردی ارشد با الگوریتم های داخلی Amazon SageMaker است و به توسعه الگوریتم های یادگیری ماشین کمک می کند. او دکترای خود را از دانشگاه ایلینویز Urbana-Champaign گرفت. او یک محقق فعال در یادگیری ماشین و استنتاج آماری است و مقالات زیادی در کنفرانس های NeurIPS، ICML، ICLR، JMLR، ACL و EMNLP منتشر کرده است.

تمبر زمان:

بیشتر از آموزش ماشین AWS