[ad_1]

چرخاندن لنز به خودش ، انگار.
بزرگنمایی / چرخاندن لنز به خودش ، انگار.

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

خواننده ، من خودم را به مدت دو هفته در این ماجراجویی یادگیری ماشین دیدم. من با داده ها ، ابزارها و رویکردهای شناخته شده برای مشکلات این نوع داده ها آشنا شدم و چندین روش را برای حل آنچه در نگاه اول به عنوان یک مسئله ساده با یادگیری ماشین به نظر می رسید ، امتحان کردم: آیا می توانیم براساس نتایج گذشته پیش بینی کنیم در آزمون A / B برنده هستید؟

اوضاع خیلی خوب پیش نمی رود. در واقع ، وقتی این قسمت را تمام کردم ، آخرین تجربه من نشان داد که الگوریتم ما دقیقاً به اندازه وارونه سازی یک سکه دقیق است.

اما حداقل این آغاز کار بود. و در روند رسیدن به آنجا ، من چیزهای زیادی در مورد تمیز کردن و پیش پردازش داده ها که در هر پروژه یادگیری ماشین وجود دارد ، آموختم.

آماده سازی میدان جنگ

منبع داده ما ثبت نتایج بیش از 50،000 آزمایش برای عناوین A / B طی پنج سال گذشته است – این تقریباً تا زمانی است که Ars برای هر نشریه ای که منتشر می شود این نوع عنوان را ایجاد کند. از آنجا که برای همه این داده ها برچسب هایی داریم (یعنی می دانیم وی در آزمون A / B خود پیروز شده یا از دست داده است) ، به نظر می رسد این یک مشکل یادگیری کنترل شده است. تمام کاری که من برای تهیه داده ها باید انجام می دادم این بود که از مدلی که برای ایجاد الگوریتم خود استفاده کردم به درستی قالب بندی شده باشد.

من دانشمند داده نیستم ، بنابراین نمی خواهم مدل خودم را برای این دهه ایجاد کنم. خوشبختانه ، AWS تعدادی مدل از پیش ساخته شده مناسب متناسب با وظیفه پردازش کلمات و به طور خاص طراحی شده برای اجرای در فضای آمازون ارائه می دهد. همچنین مدل های شخص ثالثی مانند Hugging Face وجود دارد که می تواند در جهان SageMaker استفاده شود. به نظر می رسد که هر مدل به داده های ارسالی به روش خاصی نیاز دارد.

انتخاب مدل در این مورد عمدتا به روشی که ما برای حل مسئله خواهیم داشت برمی گردد. در ابتدا ، دو روش ممکن برای یادگیری الگوریتم برای دستیابی به احتمال موفقیت عنوان دیدم:

  • طبقه بندی باینری: ما به سادگی احتمال سقوط عنوان در ستون “برد” یا “باخت” را بر اساس برندگان و بازندگان قبلی تعیین می کنیم. ما می توانیم احتمال دو عنوان را مقایسه کنیم و قوی ترین نامزد را انتخاب کنیم.
  • طبقه بندی چندین دسته: سعی می کنیم عناوین را بر اساس میزان کلیک آنها در چندین دسته طبقه بندی کنیم – به عنوان مثال ، آنها را از 1 تا 5 ستاره طبقه بندی می کنیم. سپس می توانیم نتایج نامزدهای عنوان را مقایسه کنیم.

رویکرد دوم بسیار دشوارتر است و نگرانی فراگیر در مورد هر یک از این دو روش وجود دارد که باعث انعطاف پذیری دوم می شود: 5500 تست با 11000 عنوان داده های زیادی برای کار در طرح بزرگ AI / ML نیستند.

به همین دلیل طبقه بندی باینری را برای اولین تلاش خود انتخاب کردم ، زیرا به نظر می رسید به احتمال زیاد موفق می شوم. این همچنین بدان معنی است که تنها نقطه داده ای که برای هر عنوان (تا خود عنوان) نیاز دارم این است که آیا در آزمون A / B برنده یا از دست داده است. من داده های منبع خود را گرفته و مجدداً آنها را به یک فایل مقدار جدا شده با ویرگول با دو ستون تبدیل کردم: عنوان در یک و “بله” یا “نه” در دیگری. من همچنین از یک اسکریپت برای حذف همه برچسب های HTML از عنوان (عمدتا برخی از آنها) استفاده کردم و چندین نشانگر ) از آنجا که داده ها تقریباً به مهمترین موارد کاهش یافتند ، آنها را در SageMaker Studio بارگذاری کردم تا بتوانم از ابزارهای پایتون برای بقیه مراحل آماده سازی استفاده کنم.

سپس مجبور شدم نوع مدل را انتخاب کرده و داده ها را تهیه کنم. باز هم ، بسیاری از آماده سازی داده ها به نوع مدلی که داده ها در آن ارسال می شوند بستگی دارد. انواع مختلف مدل های پردازش زبان طبیعی (و مشکلات) به سطوح مختلفی از آماده سازی داده ها نیاز دارند.

سپس “توکن سازی” می آید. جولین سیمون ، مبلغ فنی AWS اینگونه توضیح می دهد: “پردازش داده ها ابتدا باید کلمات را با نشانه ها ، نشانه های جداگانه جایگزین کند.” این رمز یک عدد قابل خواندن توسط ماشین است که به معنی رشته ای از شخصیت ها است. وی گفت: “بنابراین” باج افزار “اولین کلمه خواهد بود ،” کلاهبرداران کلمه دوم خواهند بود ، “تنظیم” کلمه سوم … مدل خواهد بود و به او بگویید کدام یک خوب و کدام یک بد هستند. ” “

بسته به مشکل خاص ، ممکن است بخواهید برخی از داده ها را کنار بگذارید. به عنوان مثال ، اگر ما سعی می کردیم کاری مانند تجزیه و تحلیل خلق و خوی (یعنی تعیین اینکه آیا عنوان Ars مثبت است یا منفی) یا گروه بندی عناوین را با توجه به آنچه در مورد آن بود انجام دهیم ، من احتمالاً می خواهم داده ها را به مناسب ترین مطالب با حذف “کلمات متوقف” – کلمات رایجی که برای ساختار دستوری مهم هستند اما به شما نمی گویند که در واقع متن چه چیزی را می گوید (مانند بیشتر مقالات).

عناوین بدون توقف کلمات با استفاده از جعبه ابزار زبان طبیعی Python نشانه گذاری می شوند (<code> nltk </code>)  توجه داشته باشید که علائم نگارشی گاهی با کلمات به عنوان نماد بسته بندی می شود.  این باید برای برخی موارد استفاده شود. “src =” https://cdn.arstechnica.net/wp-content/uploads/2021/07/ai-ml-pt2-Picture1-640×527.png “width =” 640 “height = “527” srcset = “https://cdn.arstechnica.net/wp-content/uploads/2021/07/ai-ml-pt2-Picture1.png 2x”/><figcaption class=
بزرگنمایی / عناوین بدون کلمات متوقف با استفاده از جعبه ابزار زبان طبیعی Python (nltk) توجه داشته باشید که علائم نگارشی گاهی با کلمات به عنوان نماد بسته بندی می شود. این باید برای برخی موارد استفاده تمیز شود.

در این حالت ، کلمات stop به طور بالقوه بخش مهمی از داده ها هستند – به هر حال ، ما به دنبال ساختار عناوینی هستیم که توجه را جلب کند. بنابراین من انتخاب کردم که تمام کلمات را حفظ کنم. و در اولین تلاش آموزشی ، تصمیم گرفتم از BlazingText استفاده كنم ، یك مدل پردازش كلمات كه AWS آن را در یك مسئله طبقه بندی مشابه با همان چیزی كه ما سعی می كنیم نشان می دهد. BlazingText مستلزم آن است که داده های برچسب – داده هایی که بیت خاصی از طبقه بندی متن را فرا می خواند – قبل از “__label__و به جای یک فایل جدا شده با ویرگول ، داده های برچسب و متن مورد پردازش در یک خط واحد در یک فایل متنی قرار می گیرند ، به شرح زیر:

داده های تهیه شده برای مدل BlazingText ، با عناوین بزرگ با حروف کوچک.
بزرگنمایی / داده های تهیه شده برای مدل BlazingText ، با عناوین کوچک با حروف کوچک.

بخش دیگری از پیش پردازش داده ها برای آموزش کنترل شده ML ، تقسیم داده ها به دو مجموعه است: یکی برای آموزش الگوریتم و دیگری برای اعتبار سنجی نتایج آن. مجموعه داده های آموزش معمولاً مجموعه بزرگتر است. داده های اعتبار سنجی معمولاً از حدود 10 تا 20 درصد از کل داده ها تولید می شوند.

تحقیقات زیادی درمورد داده های صحت سنجی انجام شده است – برخی از این تحقیقات نشان می دهد که نقطه شیرین بیشتر از تعداد کل داده ها مربوط به تعداد پارامترهای مدل استفاده شده برای ایجاد الگوریتم است. در این حالت ، با توجه به اینکه داده های نسبتاً کمی برای پردازش توسط مدل وجود دارد ، من تصمیم گرفتم که داده های تأیید من 10 درصد باشد.

در بعضی موارد ، ممکن است بخواهید مجموعه کوچکی از داده های دیگر را برای آزمایش الگوریتم نگه دارید بعد از تایید شده است. اما برنامه ما در اینجا استفاده از عناوین زنده در Ars برای تست است ، بنابراین این مرحله را از دست دادم.

برای انجام آماده سازی داده های نهایی ، از Jupyter Notebook – یک رابط وب تعاملی برای نمونه Python – استفاده کردم تا CSV دو ستونی را به یک ساختار داده تبدیل و پردازش کنم. پایتون دارای برخی ابزارهای مناسب برای دستکاری داده ها و ابزارهای خاص علم داده است که این وظایف را کاملاً روشن می کند ، و من به طور خاص از دو مورد در اینجا استفاده کرده ام:

  • pandas، یک ماژول محبوب تجزیه و تحلیل و دستکاری داده ها که برای تقسیم و برش دادن فایل های CSV و سایر قالب های رایج داده ها معجزه می کند.
  • sklearn (یا scikit-learn) ، یک ماژول علوم داده است که کار زیادی را در پیش پردازش داده های یادگیری ماشین به کار می برد.
  • nltk، جعبه ابزار زبان طبیعی – و به ویژه ، Punkt tokenizer تلفظ شده برای پردازش واژه عناوین ما.
  • csv ماژول خواندن و نوشتن پرونده های CSV.

در اینجا برخی از کدهای موجود در دفترچه یادداشت وجود دارد که من برای ایجاد مجموعه های آموزش و اعتبار سنجی خود از داده های CSV استفاده کردم:

من شروع به استفاده کردم pandas برای وارد کردن ساختار داده از CSV ایجاد شده از داده های تمیز شده و قالب بندی شده اصلی ، فراخوانی شی “” مجموعه داده “حاصل. استفاده كردن dataset.head() دستور به من نگاهی انداخت به عناوین مربوط به هر ستونی که توسط CSV وارد شده است ، همراه با یک نگاه اجمالی به برخی از داده ها.

ماژول pandas به من اجازه داد رشته را به صورت عمده اضافه کنم “__label__“برای تمام مقادیر موجود در ستون برچسب ، همانطور که توسط BlazingText لازم است ، و من از تابع lambda برای پردازش عناوین و مجبور کردن کلمات با حروف کوچک استفاده کردم. در نهایت ، من استفاده کردم sklearn ماژولی برای تقسیم داده های دو پرونده ای که من به BlazingText ارسال می کنم.

[ad_2]

منبع: tarjome-news.ir