خبر

  • تک بورد - تغذیه ماشین: ما به هوش مصنوعی چند عنوان می دهیم و می بینیم چه کاری انجام می دهد

    تغذیه ماشین: ما به هوش مصنوعی چند عنوان می دهیم و می بینیم چه کاری انجام می دهد
    13 روز قبل

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

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

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

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

    آمادگی در میدان جنگ

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

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

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

    طبقه بندی باینری: ما به سادگی تعیین می کنیم که احتمال سقوط عنوان در ستون "برد" یا "باخت" بر اساس چیست در مورد برندگان و بازندگان قبلی ما می توانیم احتمال دو عنوان را مقایسه کنیم و قوی ترین نامزد را انتخاب کنیم. طبقه بندی چند دسته: ما سعی می کنیم عنوان ها را بر اساس میزان کلیک آنها در چند دسته طبقه بندی کنیم - به عنوان مثال آنها را از 1 تا 5 ستاره درجه بندی می کنیم. سپس می توانیم امتیازات نامزدهای اصلی را مقایسه کنیم. تبلیغات

    رویکرد دوم بسیار دشوارتر است و نگرانی اساسی در مورد هر یک از این دو روش وجود دارد که باعث ماندگاری دوم می شود: 5500 تست با 11000 عنوان ، داده های زیادی برای کار در هوش مصنوعی بزرگ نیست. / برنامه ML از همه چیز.

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

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

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

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

    عناوین بدون کلمات متوقف شده از طریق جعبه ابزار زبان طبیعی Python (code nltk /code). توجه داشته باشید که علائم نگارشی گاهی با کلمات به عنوان نشانه بسته بندی می شود ؛ این برای برخی موارد استفاده باید تمیز شود. بزرگنمایی / سرفصل ها بدون کلمات متوقف شده از طریق کیت ابزار زبان طبیعی Python (nltk). توجه داشته باشید که علائم نگارشی گاهی با کلمات به عنوان نشانه بسته بندی می شود. برای برخی موارد استفاده باید تمیز شود.

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

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

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

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

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

    برای انجام آخرین آماده سازی داده ها ، از یک دفترچه یادداشت Jupyter - یک رابط وب تعاملی برای نمونه Python - استفاده کردم تا CSV دو ستونی من را به یک ساختار داده تبدیل کرده و آن را پردازش کنید. پایتون دارای برخی از ابزارهای مناسب برای دستکاری داده ها و ابزارهای خاص دانش داده است که این وظایف را کاملاً ساده می کند ، و من به طور خاص از دو مورد استفاده کردم: قالب های داده sklearn (یا scikit-learn) ، یک ماژول علوم داده است که باعث می شود مقدار زیادی از پیش پردازش داده های یادگیری ماشین به راحتی برداشته شود. nltk ، جعبه ابزار زبان طبیعی - و به طور خاص ، توکن ساز جمله Punkt برای پردازش متن عناوین ما. ماژول csv برای خواندن و نوشتن فایل های CSV.

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

    https: / /techbord.com تغذیه ماشین: ما به هوش مصنوعی چند عنوان می کنم و می بینم چه کاری انجام می دهد Enlarge

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

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





خبرهای دیگر از فناوری اطلاعات