شباهت معنایی
آموزش‌های پایه‌ای هوش مصنوعیآموزش‌های پیشرفته هوش مصنوعیپردازش زبان طبیعیکتابخانه‌ های یادگیری عمیق

محاسبه شباهت معنایی بین دو متن نوشتاری با PyTorch و SentenceTransformers

    0
    مدت زمان مطالعه: ۵ دقیقه

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

    فهرست مطالب

    ۱. نصب وابستگی‌ها و کتابخانه‌ها
    ۲. انتقال کتابخانه
    ۳. انتخاب و تعریف مدل
    ۴. محاسبه‌ی شباهت معنایی بین دو جمله
    ۵. محاسبه‌ی شباهت معنایی بین دو فهرست از جملات
    ۶. بازیابی K مورد از شبیه‌ترین جملات از پیکره‌ی متنی

    نصب وابستگی‌ها

    کتابخانه‌ی اصلی که اینجا برای محاسبه‌ی شباهت معنایی به کار می‌بریم، SentenceTransformers (لینک Github) است. این کتابخانه‌ی ساده، برای محاسبه‌ی بازنمایی بردارهای متراکم (تعبیه‌ها) در متون، روشی آسان ارائه می‌دهد. این کتابخانه مدل‌های جدیدی دارد که برای کاربردهای مختلف به صورت دقیق تنظیم شده‌اند. یکی از مسائل مهمی که این کتابخانه پشتیبانی می‌کند، شباهت معنایی نوشتاری است.
    برای نصب SentenceTransformers باید ابتدا وابستگی‌های Pytorch و Transformers را نصب کنید.

    نصب Pytorch

    وارد وبسایت رسمی Pytorch شوید و دستورالعمل‌های مربوط به نصب را دنبال کنید.

    نصب Transformers

    برای نصب Transformers، این دستور را اجرا کنید:

     

    نصب SentenceTransformers

    حال که Pytorch و Transformers را نصب کرده‌اید می‌توانید SentenceTransformers را با استفاده از این دستور نصب کنید:

    نکته: SentenceTransformers استفاده از Python 3.6 یا بالاتر، Pytorch 1.6.0 یا بالاتر و transformers v3.1.0 را به کاربران پیشنهاد می‌کند.

    انتقال کتابخانه

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

     

    انتخاب و مقداردهی اولیه مدل

    SentenceTransformers از مدل‌های زیادی پشتیبانی می‌کند که از پیش ‌آموزش دیده‌اند و برای مسائل گوناگون به صورت دقیق تنظیم شده‌اند. در این لینک فهرستی از مدل‌هایی را مشاهده می‌کنید که برای مسئله‌ی شباهت معنایی، بهینه شده‌اند.
    در حال حاضر، stsb-roberta-large  که از ROBERTA-large به عنوان مدل پایه و mean-pooling استفاده می‌کند، بهترین مدل برای مسئله‌ی شباهت معنایی به شمار می‌رود. به همین دلیل در این نوشتار از آن استفاده می‌کنیم.
    بعد از انتخاب مدل، می‌توانیم بدین صورت آن را تعریف کنیم:

     

    محاسبه‌ی شباهت معنایی بین دو جمله

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

    ابتدا دو جمله‌ی مدنظر را تعریف می‌کنیم (sentence1 و sentence2). سپس با استفاده از مدلی که از پیش تعریف کرده‌ایم آن‌‌ها را رمزگذاری می‌کنیم. تعبیه‌های نهایی خود را به تنسور تبدیل می‌کنیم تا GPU بتواند سریع‌تر آن‌ها را پردازش کند. البته این گام زمانی که با مقدار کمی داده سروکار داریم (همچون مورد کاربرد ما) ضروری نیست.
    سپس می‌توانیم با استفاده از تابع pytorch_cos_sim (که در بخش util پیاده‌سازی کردیم)، به راحتی مقدار شباهت کسینوسی بین دو تعبیه را به دست آوریم.

    شباهت معنایی

    همانطور که مشاهده می‌کنید، مقدار شباهت sentence1 و sentence2 نزدیک به ۱ است، یعنی این دو جمله شباهت زیادی به هم دارند.

    محاسبه‌ی شباهت معنایی بین دو لیست از جملات

    اگر بخواهید جملات بیشتری را با هم مقایسه کنید، می‌توانید جملات را در دو لیست قرار دهید و از همان کد قبلی برای محاسبه‌ی مقدار شباهت بین آن‌ها استفاده کنید. نتیجه‌ی نهایی، یک ماتریس از مقادیر شباهت است که مؤلفه‌ی i, j  در آن نشان‌دهنده‌ی مقدار شباهت بین جمله‌ی i  در لیست ۱ و جمله‌ی j در لیست ۲ است. برای محاسبه‌ی مقدار شباهت بین دو لیست، این کد را اجرا کنید:

    شباهت معنایی

    همانطور که مشاهده می‌کنید این دو جفت جمله («من Python را دوست دارم چون می‌توانم برنامه‌های کاربردی هوش مصنوعی بسازم»، «من Python را دوست دارم چون می‌توانم به تجزیه و تحلیل داده بپردازم») و («گربه روی زمین نشسته است»، «گربه در پیاده‌رو راه می‌رود») به هم شبیه هستند. بنابراین مقدار شباهتی که به عنوان خروجی مدل تولید می‌شود نیز بالاتر خواهد بود. از سوی دیگر، جملات مربوط به Python از جملات مربوط به گربه خیلی متفاوت هستند؛ بنابراین مقدار شباهت بین دو جفت دیگر از این جملات، کمتر خواهد بود.

    بازیابی K مورد از شبیه‌ترین جملات از پیکره‌ی متنی

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

    شباهت معنایی

    در مثال این مقاله، پیکره‌ی متنی ما ۴ جمله دارد. ما top-k را روی ۲ تنظیم کردیم تا ۲ جمله که بیشترین شباهت را با کوئری دارند بازیابی کنیم. جمله‌ی کوئری ما این بود: «من Javascript را دوست دارم چون می‌توانم برنامه‌های کاربردی شبکه بسازم» و مدل دو جمله‌ی مربوط به پایتون را به ما برگرداند، چون Javascript به Python شباهت بیشتری دارد (نسبت به گربه‌ها).

    جمع‌بندی

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

    این مطلب چه میزان برای شما مفید بوده است؟
    [کل: ۰ میانگین: ۰]

    آکادمی ماد برگزار می‌کند: دوره آموزشی تشخیص اشیا

    مقاله قبلی

    هوش مصنوعی و پیش‌بینی نتایج درمانی بیمارانِ مبتلا به بیماری لثه ایمپلنت یا پری‌ایمپلنت

    مقاله بعدی

    شما همچنین ممکن است دوست داشته باشید

    نظرات

    پاسخ دهید

    نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *