استخراج کلمات کلیدی پست‌ها در ویرگول

من میلاد هستم و کاری که در ویرگول می‌کنم سر و کله زدن با داده‌های متنی است (پردازش زبان طبیعی). در این پست می‌خواهم راجع به یکی از ویژگی‌های (Features) ویرگول صحبت کنم. ویژگی که قبل از ورود من به تیم و آپدیت اردیبهشت ۱۴۰۱ ویرگول وجود داشت، اما کاربران به آن کمتر توجه می‌کردند.

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

هشتگ
هشتگ

تگ‌ها اساسا چه می‌کنند و چرا این ویژگی را بهتر کردیم؟

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

چالشی که ما در ویرگول داشتیم این بود که نویسندگان را ترغیب کنیم تا از این تگ‌ها بیشتر استفاده کنند.

و اما راه حل ما

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

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

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

رشد استفاده کاربران از تگ‌ در پست‌های خود
رشد استفاده کاربران از تگ‌ در پست‌های خود

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

فرایند استخراج کلمه‌های کلیدی و تگ‌ها

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

اگر پردازش زبان طبیعی کار می‌کنید قطعا می‌دانید که برای استخراج کلمات کلیدی از متن، تکنیک‌های متفاوتی وجود دارد. از رویکردهای آماری که کلمات کلیدی را با شمارش فراوانی کلمات شناسایی می‌کنند، مثل (Term Frequency-Inverse Document Frequency) به اختصار TF-IDF و (Rapid Automatic Keyword Extraction) یا RAKE، تا رویکردهای پیشرفته‌تری مثل یادگیری ماشینی، که با یادگیری از نمونه‌های قبلی، مدل‌های پیچیده‌تری را ایجاد می‌کند.

Keyword Extraction
Keyword Extraction

روش ما در ویرگول چه بود؟

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

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

برای به دست آوردن وزن کلمه‌ها در این روش از تابع TfidfVectorizer کتابخانه معروف sklearn استفاده کردیم.

برای به دست آوردن بهترین کلمه‌ها و عبارت‌های کلیدی مناسب به عنوان تگ ما نیاز به بهتر کردن وزن کلمات داشتیم که با استفاده از یک سری قوانین و منطق این وزن‌ها رو تغییر دادیم:

۱. ما در حدود ۵۰۰۰ تگ از تگ‌های مفید و پرکاربرد در همه‌ی دسته‌های موضوعی ویرگول را بدست آوردیم. در این مرحله اگر عبارت کلیدی متن یک پست در این لیست وجود داشته باشد وزن آن عبارت افزایش پیدا می‌کند.

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

۳. تگ‌های چند کلمه‌ای معمولا توضیح کامل‌تری نسبت به تگ‌های تک کلمه‌ای از متن به ما می‌دهند. مثلا اگر شما مقاله‌ای راجع به تنظیمات دوربین عکاسی نوشته باشید برای این مقاله پر اهمیت‌ترین تگ‌ها عبارتند از : «تنظیمات دوربین عکاسی»، «دوربین عکاسی»، «عکاسی».

در آخر با در نظر گرفتن تمامی این موارد، وزن‌دهی بهتر می‌شود و تگ‌هایی با بالاترین وزن‌ها انتخاب می‌شوند.

Sorted & selected best tags
Sorted & selected best tags

چالش تگ‌های تکراری

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

به عنوان مثال در یک مقاله دو تگ «استخراج کلمه کلیدی» و «استخراج کلمات کلیدی» را در نظر بگیرید این دو تگ شبیه یکدیگرند و بهتر است فقط یکی از آنها به کاربر نمایش داده شود. پس در این مرحله فیلتری اضافه کردیم تا اگر دو تگ زیرمجموعه‌ای از هم باشند و شباهت کسینوسی زیادی به یکدیگر داشته باشند یکی از آنها حذف شود.

اگر برایتان سوال شده شباهت کسینوسی چطور به ما کمک می‌کند؟ بهتر است در ابتدا تابع کسینوسی رو به یاد بیاورید.

کسینوس زاویه‌ی بین دو بردار در فضا رو محاسبه می‌کند. اگر دو بردار در فضا دارای زاویه ۰ باشند پس کسینوس زاویه آنها برابر ۱ و دو بردار برهم منطبق‌اند و اگر داری زاویه ۱۸۰ باشند پس کسینوس -۱ خواهد بود و دو بردار خلاف جهت هم هستند.

خب اینجا ما نه بردار داریم نه فضا؛ ما اینجا فقط کلمه‌ و جمله داشتیم. پس نیاز داشتیم که کلمه‌ها را تبدیل به بردار کنیم. با استفاده از روش word2vec کلمات را تبدیل به بردار کردیم. این روش که برای جاسازی کلمات (word embedding) استفاده می‌شود یک پیکره بزرگ از متن را به عنوان ورودی دریافت می‌کند و یک فضای برداری چند صد بُعدی تولید می‌کند که به هر کلمه منحصر به فرد در پیکره یک بردار متناظر در این فضا اختصاص داده می‌شود. بردارهای کلمه‌ها در فضای برداری به گونه‌ای قرار می‌گیرند که کلماتی که زمینه‌های موضوعی مشترکی در پیکره دارند در فاصله نزدیک به یکدیگر قرار می گیرند.

 فضای برداری کلمات که به سه بُعد کاهش یافته است.
فضای برداری کلمات که به سه بُعد کاهش یافته است.

به این ترتیب برای هر کلمه ما یک بردار عددی پیدا کردیم که می‌توانیم عملیات جبری را بر روی این بردارها اعمال کنیم و مثلا کسینوس زاویه بین دو کلمه را با استفاده از بردارهای متناظر آن کلمات بدست آوریم.

این کار باعث شد که تگ‌های پیشنهادی دایره وسیع‌تری از موضوع مورد بحث در پست را بتوانند پوشش دهند.

و در نهایت

تگ‌های پیشنهادی ویرگول

در نهایت برای هر پست ۱۰ تگ با بیشترین وزن انتخاب می‌شود، این تگ‌ها در بازه‌ای بین صفر تا یک نمره می‌گیرند و تگ‌هایی که وزنی بیش از ۰.۵ دارند، در بخش تگ‌های صفحه‌ی انتشار به کاربر نشان داده می‌شوند.




چرا باید از تگ‌ها استفاده کنیم؟

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

استفاده از تگ و انتخاب‌های بهتر برای خواننده

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

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

استفاده از تگ و دیده شدن پست برای نویسنده

اگر در ویرگول می‌نویسید، لطفا گذاشتن تگ‌ را فراموش نکنید. گذاشتن تگ به بیشتر دیده شدن نوشته‌‌ی شما و رسیدن به دست مخاطبین پست کمک می‌کند.

استفاده از تگ و پیشنهاد پست‌های بهتر برای ویرگول

یکی از روش‌های موتور هوشمند ویرگول در پیشنهاد پست‌ها، رصد کردن همین تگ‌ها است. با بررسی علاقه‌مندی شما، ویرگول پست‌های بهتر و ‌نزدیک‌تر به علاقه‌مندی شما را نشانتان خواهد داد.

در واقع همه‌ی این فرایند‌ها طراحی و اجرا شده تا در نهایت و به مرور رضایت شما و همه‌ی کاربران ویرگول بیشتر شود.




گام بعدی برای بهبود عملکرد این ویژگی

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

روش رمزگذار-رمزگشا یا encoder-decoder نسبت به روش‌های آماری سریع‌تر عمل می‌کند و دقت بیشتری دارد. این روش یک ترنسفورمر است و نحوه عملکرد آن تبدیل یک رشته به رشته دیگر است.

مثالی که شاید زیاد با آن مواجه شده باشید، گوگل ترنسلیت است. در گوگل ترنسلیت با استفاده از این روش متن وارد شده به زبان دیگر ترجمه می‌شود. کارایی این روش برای ما، تبدیل متن به تگ است.

مقایسه این دو روش می‌تواند دید بهتری به شما دهد. برای مثال در روش آماری، تعداد تکرار کلمات اهمیت زیادی دارد، ممکن است که در یک متن از یک کلمه‌ی ربط زیاد استفاده شده باشد بنابراین آن کلمه را پیشنهاد می‌دهد، در حالی که کلمه‌ی اصلی متن شاید کلمه‌ای باشد که دوبار تکرار شده. اما روش رمزگذار-رمزگشا متن را پردازش می‌کند و در نهایت پراهمیت‌ترین کلمه نه پرتکرارترین را پیشنهاد می‌کند.

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

تمامی مزیت‌های روش رمزگذار-رمزگشا به نسبت روش آماری باعث می‌شود که ما برای قدم بعدی آن را انتخاب کنیم.

منتظر آپدیت بعدی باشید.



در ضمن فراموش نکنید میتوانید با دنبال کردن تگ‌ها، فید بهتری داشته باشید.