<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های علی سطوتی</title>
        <link>https://virgool.io/feed/@alistvt</link>
        <description>M. Sc. AI at Sharif University \n NLP Researcher</description>
        <language>fa</language>
        <pubDate>2026-06-19 11:39:03</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/239393/avatar/Z3lbxn.jpeg?height=120&amp;width=120</url>
            <title>علی سطوتی</title>
            <link>https://virgool.io/@alistvt</link>
        </image>

                    <item>
                <title>چطوری colab رو به vscode وصل کنیم؟</title>
                <link>https://virgool.io/@alistvt/%DA%86%D8%B7%D9%88%D8%B1%DB%8C-colab-%D8%B1%D9%88-%D8%A8%D9%87-vscode-%D9%88%D8%B5%D9%84-%DA%A9%D9%86%DB%8C%D9%85-crxgjweeyzua</link>
                <description>colab + vscodeاگه توی حوزه ی هوش مصنوعی کار میکنید احتمال زیاد سر و کارتون با google colab که یه سرویس ارائه خدمات محاسباتی و GPU هست افتاده و قطعا از خدمات رایگانش استفاده کردید.مشکلی که colab همیشه برای من داشته سخت بودن دیباگ کردن کدها توش بوده که معمولا کارم رو با پرینت کردن متغیرها  سایزشون سعی میکردم راه بندازم که واقعا همه چیزو برام وقت گیر و طاقت فرسا میکرد.و یه جمله هست که میگه:اگه به من 6 ساعت زمان بدند تا یک درخت رو قطع کنم، 4 ساعت اول رو صرف تیز کردن تبرم میکنم.- آبراهام لینکلنو خیلی وقتها ما نمیدونیم که واقعا امکان تیز کردن تبر وجود داره به همین دلیل سعی میکنیم کارمون رو همونطوری با یک تبر کند ادامه بدیم.از طرفی اگه برنامه نویس باشید حتما تا به حال از ویرایشگر کد vscode استفاده کردید. این ویرایشگر کد به دلیل امکاناتی که در اختیار برنامه نویس ها قرار میده کار کد نویسی و همچنین دیباگ رو خیلی آسون تر کرده به طوری که به یکی از محبوبترین ویرایشگرها تبدیل شده. (اگه محبوبترین نباشه) برای همین با خودم فکر کردم چی میشد اگه میتونستم به جای اینکه توی colab کدهامو بنویسم و دیباگشون کنم، توی vscode این کارو انجام بدم.برای همین سعی کردم چند ساعت روی تیز کردن تبرم وقت بذارم و جستجو کردم و خبر خوب این بود که این کار شدنیه. با بررسی منابع مختلف به چند روش رسیدم که انجامشون دادم، بعضی از روشها قدیمی بود و بعضی ها هم کارایی نداشت، اما یکی از اونها خوب بود و از بقیه هم سرراست تر و بهتر بود که آموزش انجامش رو توی یه ویدیوی کوتاه آماده کردم:https://youtu.be/jDTCBiwZMHIامیدوارم کمک کننده باشه.موفق و پیروز باشید.</description>
                <category>علی سطوتی</category>
                <author>علی سطوتی</author>
                <pubDate>Sat, 18 Jun 2022 13:56:03 +0430</pubDate>
            </item>
                    <item>
                <title>پرسش و پاسخ مکالمه‌ای با استفاده از بازنویسی سؤالات</title>
                <link>https://virgool.io/@alistvt/question-rewriting-b3dlmxdifs8p</link>
                <description>مقدمهدر این پست قصد داریم به روش‌های مختلف ارائه شده در پرداختن به مسأله‌ی پرسش و پاسخ مکالمه‌ای با استفاده از بازنویسی سؤالات بپردازیم. پس از خواندن این پست، شما با هوش مصنوعی مکالمه‌ای آشنا شده و همچنین سه تا از مهم‌ترین روش‌های ارائه شده برای چالش بازنویسی سؤالات را فراخواهید گرفت.برای شروع و برای کسانی که پیش زمینه‌ کافی ندارند، پرسش و پاسخ مکالمه‌ای زیرشاخه‌ای از علم پردازش زبان طبیعی است که در آن، ماشین بایستی در بستر یک مکالمه به سؤالات کاربر پاسخ دهد. به عبارت دیگر می‌توان آن را جزوی از چالش پرسش و پاسخ و ماشینی دانست که حول یک مکالمه شکل میگیرد. همانند دیگر مسائل حوزه‌ی هوش مصنوعی، این چالش هم دارای مجموعه دادگان برای آموزش و تست مدل‌های این حوزه می‌باشد که از معروف‌ترین آنها میتوان به QuAC و CoQA اشاره کرد.بازنویسی سؤالات چیست؟یکی از چالش‌های اساسی در پرسش و پاسخ مکالمه‌ای، وابستگی سؤالات کاربر به یکدیگر و ارجاع‌های مکرر به سؤالات قبلی است. بنابراین مدل‌های ارائه شده برای این چالش، بایستی بتوانند راه حلی برای فهم و درک ارجاع‌ها ارائه داده و سپس به ارائه پاسخ خود بپردازند. برای فهم ارجاع‌ها و برطرف کردن آنها راه‌حل های مختلفی ارائه شده است که یکی از آنها بازنویسی صورت سؤال می‌باشد. در سال 2019 یک دیتاست با عنوان CANARD ارائه شد که در آن قسمتی از سؤالات دیتاست QuAC به صورت یک سؤال خودمشمول برطبق آن مکالمه بازنویسی شده است. به طور مثال یک مکالمه میتواند به شکل زیر باشد:+ پایتخت ایران کجاست؟— تهران+ ترکیه چطور؟— استانبولهمانطور که مشاهده کردید، برای پاسخ به سؤال دوم، ماشین بایستی بفهمد که منظور کاربر از سؤال دوم پرسیدن در مورد «پایتخت» کشور ترکیه می‌باشد. بنابراین احتمالا اگر به دیتاست CANARD [1] مراجعه کنیم، مکالمه‌ی بالا به شکل زیر بازنویسی شده است:+ پایتخت ایران کجاست؟ — تهران + پایتخت ترکیه چطور؟ — استانبولبنابراین همانطور که گفته شد، یک مجموعه از مدل‌های حوزه‌ی هوش مکالمه‌ای، سعی میکنند ابتدا با استفاده از دیتاست‌های بازنویسی سؤالات، مدلی برای بازنویسی سؤالات ارائه داده، و سپس با استفاده از آن مدل یک سؤال خود-مشمول بدست آورده و این سؤال را به مدل‌های معمول پرسش و پاسخ بدهند و پاسخ را ارائه کنند. در این صورت مسأله‌ی پرسش و پاسخ مکالمه‌ای به دو مسأله‌ی دیگر، یعنی بازنویسی سؤالات و پرسش و پاسخ، شکسته می‌شود.حال چگونه می‌توان مدلی آموزش داد تا سؤالات یک مکالمه را بازنویسی کند؟ این سؤالی است که در ادامه قرار است به آن بپردازیم و تعدادی از مهمترین روش‌های ارائه شده در این حوزه را بررسی کنیم.مدل‌های بازنویسی سؤالاتترنسفورمر ++ [2]این مدل برپایه ترنسفورمرها می‌باشد و به روش رمزنگار-رمزگشا یا دنباله به دنباله آموزش دهی میشود. به عبارت دیگر در هنگام آموزش این مدل، دنباله‌ی کلمات ورودی، همان سؤالات مبهم و دارای ارجاع هستند و دنباله‌ی هدف، سؤالات خود-مشمول و بدون ارجاعات می‌باشند. تصویری از رمزگشای این مدل در شکل ۱ آمده است. این مدل در ابتدا با وزندهی اولیه‌ی مدل پیش آموزش دیده‌ی GPT2 شروع به آموزش میکند و روی امر بازنویسی سؤالات تنظیم دقیق (fine-tune) می‌شود. همچنین برای آموزش مدل به روش دنباله به دنباله، از تکنیک اجبار معلم (teacher forcing) نیز استفاده شده است و رمزگشایی نیز به روش حریصانه انجام شده.شکل ۱ - رمزگشای ترنسفورمر++برروی دیتاست TREC CAsT، این مدل به دقت ROUGE برابر با ۹۰ درصد رسیده است.دسته‌بندی کلمات [3]ایده‌ی اصلی در این روش این است که سعی کنیم سؤال بازنویسی شده را با استفاده از کلمات موجود در سؤالات قبلی و سؤال فعلی بسازیم. این روش از یک دسته‌بند دودویی استفاده میکند و برای هر یک از کلمات در سؤالات پیشین مکالمه، تصمیم میگیرد که آن کلمه بایستی در سؤال فعلی وجود داشته باشد یا خیر؟پس از اجرای دسته‌بندی روی کلمات پیشین، در نهایت کیسه‌ای از کلمات به عنوان سؤال فعلی خواهیم داشت که ممکن است به صورت یک جمله‌ی طبیعی بنظر نرسد. اما به عنوان شهود، مزیت استفاده از این روش نیاز به داده‌های کمتر برای آموزش می‌باشد، چرا که مدل‌های دنباله به دنباله، همانند ترنسفورمر++، اصولا نیازمند داده‌های بسیار زیاد برای داشتن عملکرد مناسب می‌باشند، درحالیکه دیتاست‌های بازنویسی سؤالات معمولا این حجم داده را براورده نمیکنند. تصویر معماری این مدل برای بازنویسی سؤالات در شکل ۲ آمده است. همانطور که مشاهده می‌شود، برای کدگذاری کلمات از مدل زبانی برت استفاده شده و پس از آن یک لایه دسته‌بند دودویی قرار داده‌شده است.شکل ۲ - معماری مدل دسته‌بند کلماتبرروی دیتاست TREC CAsT، این مدل به دقت F1 برابر با ۷۸.۵ درصد رسیده است.جمع‌بندیدر این پست به بررسی امر بازنویسی سؤالات که در راستای کمک به پرسش و پاسخ مکالمه‌ای ارائه شده است پرداختیم و با دو تا از معماری‌های بازنویسی سؤالات آشنا شدیم و دقت آنها روی دیتاست‌های بازنویسی سوالات را از نظر گذراندیم. همچنین به عنوان جمع‌بندی، طبق آزمایش‌های انجام شده توسط [4] بر روی هر دو این مدل‌ها، روش دسته‌بندی کلمات، برای دادگان CAsT 2020 بهتر از روش ترنسفورمر ++ عمل میکند.ارجاع‌ها[1] Elgohary, A., Peskov, D., Boyd-Graber, J.: Can you unpack that? learning to rewrite questions-in-context. In: EMNLP-IJCNLP (2019)[2] Vakulenko, S., Longpre, S., Tu, Z., Anantha, R.: Question rewriting for conversational question answering. In: WSDM (2021)[3] Voskarides, N., Li, D., Ren, P., Kanoulas, E., de Rijke, M.: Query resolution for conversational search with limited supervision. In: SIGIR (2020)[4] S. Vakulenko, N. Voskarides, Z. Tu, and S. Longpre, A Comparison of Question Rewriting Methods for Conversational Passage Retrieval. arXiv, 2021. doi: 10.48550/ARXIV.2101.07382.</description>
                <category>علی سطوتی</category>
                <author>علی سطوتی</author>
                <pubDate>Mon, 16 May 2022 17:26:42 +0430</pubDate>
            </item>
                    <item>
                <title>خلاصه فصل اول - کتاب Python Data Science Handbook</title>
                <link>https://virgool.io/@alistvt/python-data-science-handbook-summary-chapter-1-ea0rqp8fymga</link>
                <description>مقدمه (اینجانب، نه مولف)تصمیم گرفتم که وقتی این کتاب رو میخونم چیزهای جالبی که یاد میگیرم رو اینجا یادداشت کنم و به اشتراک بذارم تا همگی استفاده کنیم. همینجا عذرخواهی میکنم اگر یادداشت هام زیادی خلاصه وار هست، ولی هدف از این خلاصه نویسی صرفا آشنایی با دستورات و مفاهیم در حد عنوان اونها هست و همه ما برنامه نویس هستیم و جستجو کردن رو خوب بلدیم. برای همین فکر میکنم همینقدر کافی باشه. بریم که داشته باشیم:ژوپیتر و IPythonاین فصل در مورد IPython هست و تعدادی از دستورات کاربردی ژوپیتر. اگر تازه میخواید وارد دنیای دیتا ساینس بشید باید بگم که یکی از اولین کارهایی که باید بکنید این هست که jupyter رو نصب کنید و ژوپیتر کمک میکنه که کار خیلی آسون بشه. در ادامه با قابلیت های این برنامه آشنا میشیم.در این قسمت مولف اشاره میکنه که یکی از مهمترین قابلیت های یک دانشمند داده اینه که جستجو رو بلد باشه. مثه همه ما وقتی که میخوایم مشکل کامپیوتری یکی از فامیل هامون که ازمون کمک خواستند رو حل کنیم. معمولا بحث دانش فنی ما در زمینه کامپیوتر نیست. بلکه برتری ما نسبت به اونها صرفا این هست که سرچ کردن رو بلدیم و مولف اشاره میکنه که توی دیتاساینس هم قضیه از همین قراره.یافتن توضیحات توابع و کلاس ها در ژوپیترتوی پایتون هر تابع و کلاس و متود یک توضیحات داره که نحوه صدا زدن اون تابع و خروجی هاشو مشخص میکنه. توی پایتون از تابع help برای دسترسی به توضیحات استفاده میکنیم اما ipython برای این کار یک میانبر گذاشته به این صورت که جلوی اون تابع یک علامت سوال میذاریم. به شکل زیر:help( len)یاlen?دسترسی به سورس کدتوی ژوپیتر با دستور زیر میشه به سورس کد یک تابع دسترسی پیدا کرد:len??کامل کردن عبارت با استفاده از Tabاگه کلید تب رو بفشارید بعد از وارد کردن قسمتی از عبارت مورد نظر، تعدادی پیشنهاد براتون لیست میشه. مثلا اگه یک نمونه از یک کلاس دارید و میخواید متودهایی که روی اون قابل صدا زدن هستند رو پیدا کنید کافیه به شکل زیر عمل کنید:obj.&lt;TAB&gt;این کاررو حتی در زمان import کردن ماژول ها هم میتونید انجام بدید مثلا :import &lt;TAB&gt;
import h&lt;TAB&gt;بالاتر از کامل سازی با تب این هست که از کارت وحشی (یا wildcard :) ) استفاده کنید و اونوقت عبارتهای مطابق با اون کارت وحشی براتون لیست میشه: (به علامت ستاره توجه کنید. این یعنی چه کلماتی میتونیم به جای اون بذاریم تا عبارت قابل استفاده بشه. مثلا چه متغیرهایی هستند که آخرشون عبارت warning هست)*Warning?
str.*find*عبارتهای جادوییاجرای کد با عبارت زیر:%run code.pyاین کار براتون کدی که داخل اون فایل هست رو اجرا میکنه و به علاوه توابع و متغیرهایی که اونجا تعریف شدند توی محیط ژوپیتر هم تعریف میشن و میتونید استفاده کنید.محاسبه زمان اجرای کد%timeit
L = [n**3 for n in range(1000)]یک عبارت دیگه هم هست به شکل زیر که اطلاعات بیشتری رو در مورد زمان خروجی میده اما یه مقدار کندتر هست و انگار زمان سیستم عامل هم توش حساب میشه:%time
L.sort()یه دستور فوق العاده کاربردی دستور زیر هست که اطلاعات زمانی مربوط به هر خط از کدتون رو توی یه جدول چاپ میکنه. فرض کنید یه تابع دارید و میخواید ببینید هر خط اون تابع چقدر زمان میبره. (ممکنه اون تابع توابع دیگه رو هم صدا زده باشه و اونها هم حساب میشن):%prun tabee()روش قشنگ تر برای این کار استفاده از روش زیر هست (این بار به جای اینکه شماره خطوط نشون داده بشن، توی جدول محتوای خطوط نشون داده خواهد شد که خوانا تر و قابل فهم تر هست.)! pip install line_profiler
%load_ext line_profiler
%lprun -f tabee()پروفایل کردن حافظهاگه میخواید بدونید وضعیت کدتون از لحاظ اشغال حافظه چطوریه یا نه از روش زیر استفاده کنید:! pip install memory_profiler
%load_ext memory_profiler
%memit tabee()این تابع استفاده های جالب تری هم داره (مثل مشاهده پروفایل حافظه خط به خط کد) که میتونید برای خوندنش از داکیومنتیشن کمک بگیرید:%memit?لیستی از همه عبارات جادویی%lsmagicورودی و خروجیاگه میخاید خروجی رو چاپ نکنید کافیه ته عبارت از سمیکالن (;) استفاده کنید.اجرای دستور شل در ژوپیتر! ls! pip install xحتی جالب تر اینه که میتونید خروجی دستورات شل رو توی متغیرهای پایتون ذخیره کنید(!) : files = !lsو حتی میتونید متغیرهای پایتون رو به شل پاس بدید:message = &amp;quotshow me&amp;quot
!echo {message}روش جالب برای دیباگوقتی کد خطا میگیره یک عبارت چاپ میشه که به اصطلاح همون Exception هست و تعدادی از خطوط برنامه که صدا زدن توابع تو در تو هستند نمایش داده میشه. حالا اگه بخواید راحت تر دیباگ کنید میتونید از روش زیر استفاده کنید:%xmode Verboseو بعد زیرش کدتون رو بنویسید. اتفاقی که میفته اینه که این بار اطلاعات بیشتری به شما نمایش داده میشه. مثلا متغیرها هم علاوه بر جریان برنامه نمایش داده میشن که میتونه برای دیباگ خیلی کمک کننده باشه.یک دستور هم هست که برای دیباگ عمیق تر کاربرد داره و به شکل زیر هست:%debugاین یک روش دیباگ اینترکتیو و تعاملی هست که شما میتونید قدم به قدم جلو برید تا به خطا برسید.جمع بندیامیدوارم دستورات این بخش براتون مفید بوده باشه. برای خودم که چند ساله پایتون کارم خیلیهاشون مفید بود. در بخش بعدی به بررسی پکیج نامپای میپردازیم. (میپردازد ;)</description>
                <category>علی سطوتی</category>
                <author>علی سطوتی</author>
                <pubDate>Sun, 16 May 2021 21:46:09 +0430</pubDate>
            </item>
                    <item>
                <title>افزودن تقویم تیم محبوب به تقویم گوگل</title>
                <link>https://virgool.io/@alistvt/%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86-%D8%AA%D9%82%D9%88%DB%8C%D9%85-%D8%AA%DB%8C%D9%85-%D9%85%D8%AD%D8%A8%D9%88%D8%A8-%D8%A8%D9%87-%D8%AA%D9%82%D9%88%DB%8C%D9%85-%DA%AF%D9%88%DA%AF%D9%84-ffigkas6lspa</link>
                <description>توی این مقاله روش افزودن تقویم تیم محبوب به تقویم گوگلتون رو آموزش میدم. البته لازمه بگم که کار خاصی نیست و صرفا ایده اینکه میتونید تقویم بازیهای تیم محبوبتون رو توی تقویم خودتون داشته باشید هست که به نظرم راهگشا و کمک کنندست.ادامه کار اینه که مثلا اگه اسم تیمتون یوونتوس هست توی گوگل جستجو کنید:juventus fixtures calendarبعد از این یه تعدادی لینک براتون میاد که میرید داخلشون و لینک تقویم بازیها رو برمیدارید.مثلا من از وبسایت https://www.footballwebpages.co.uk استفاده کردم و توی این وبسایت اول لیگ مورد نظر رو انتخاب میکنید و بعد تیم خودتون رو انتخاب میکنید. بعد به زبانه calendar میرید و اونجا یه لینک هست که اون رو کپی میکنید.بعدش میاید توی تقویم گوگل خودتون (این قسمت رو باید از طریق کامپیوتر انجام بدید، یا همون مرورگر تلفن (از طریق اپلیکیشن گوگل کلندر نمیشه)) و روی + کنار other calendars کلیک میکنید. یه گزینه داره from url و اونو میزنید و لینک رو وارد میکنید و بعدم ok . اوکی میشه.اگه میخواید کار رو خیلی راحت تر کنید میتونید از سایت fixtur.es استفاده کنید که خودش تقویم رو به تقویمتون اضافه میکنه و نیازی به کپی پست و اینها نیست.خوش و خرم باشید.آپدیتلینک تقویم یورو 2021لینک تقویم یوونتوس</description>
                <category>علی سطوتی</category>
                <author>علی سطوتی</author>
                <pubDate>Sun, 16 May 2021 13:39:14 +0430</pubDate>
            </item>
            </channel>
</rss>