<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Farzad</title>
        <link>https://virgool.io/feed/@euwars</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-07 12:32:22</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/1200/avatar/avatar.png?height=120&amp;width=120</url>
            <title>Farzad</title>
            <link>https://virgool.io/@euwars</link>
        </image>

                    <item>
                <title>مشکل ساده، راه‌حل سخت (بخش اول)</title>
                <link>https://virgool.io/@euwars/earthisflat-mk5y4cm2mp8w</link>
                <description>عکس از سایت گت‌فیلتربیشتر از یک‌سال پیش من یک اپلیکیشن به اسم گت‌فیلتر درست کردم تا پیامک‌های تبلغاتی رو مسدود کنه و درمورد استفاده از یادگیری ماشین نوشتم که چجوری ازش استفاده کردم.به دلیل کمبود وقت و اینکه این پروژه رایگان بود دوباره به سراغش نرفتم برای آپدیت کردن. باید گفت که همچنان تعداد کاربران خوبی رو داره بدون تغییر یا تبلیغات و اینکه پس از ریلیز توی صفحه اصلی اپ‌استور پروموت شده بود توسط اپل.گت‌فیلتر توی صفحه اصلی اپل۳ماه پیش تصمیم گرفتم بررسی کنم تا ببینم چجوری میتونم روش‌های جدیدی رو اضافه کنم برای مقابله با پیامک‌های تبلیغاتی یا چه امکاناتی رو میتونم اضافه کنم که توی همین زمنیه باشه. بعد از چند روز به این لیست رسیدم:۱. فراهم کردن شرایطی که یادگیری ماشین کیفیتش بیشتر بشه بدون لازم بودن کار اضافه از من۲. استفاده از امکان گزارش‌دهی تماس یا پیامک که به آی‌او‌اس۱۲ اضافه شده۳. تشویق‌کردن کاربر‌ها برای دعوت از بقیه دوستانشون برای استفاده از اپ۴. تست‌کردن ایده جمع‌سپاری اطلاعات با رعایت کامل حریم‌شخصی کاربر۵. ساختن بک‌اند کاملا نوشته شده به زبان سوییفت۶. مسدودکردن تماس‌های تلفنی تبلیغاتی۷. پشتیبانی‌کردن از زبان‌های بیشتراول توی این فکر بودم که دونه دونه این امکانات رو اضافه کنم، ولی بعد به این نتیجه رسیدم که شاید لازم باشه تغییرات اساسی رو انجام بدم اگر بخوام امکان مهمی رو اضافه کنم پس همه‌ی امکانات رو با‌هم انجام دادم، اپ رو از‌اول بازنویسی کردم و طراحی جدید هم براش انجام دادم.به راحتی میشه گفت گت‌فیلتر۲ یکی از وقت‌گیرترین پروژه‌های شخصی من هست، شاید با دیدن این عکس از روش کارکردن کل سیستم شما هم به این نتیجه برسید.getFilter 2.0توی این ساختار:۱. هر پیامک گزارش‌شده، ارسال‌کننده پیامک شمارش ارزشش توی جمع‌سپاری تغییر‌میکنه و توی سینک‌بعدی میره توی دستگاه کاربران برای استفاده آنلاین، هر ۱۲ساعت. متن پیامک تمیزمیشه(اعداد، لینک‌ها و علایم ازش پاک‌میشه قبل ارسال) و به دیتابیس اضافه میشه. اگر پیامک تکراری باشه ارزشش تغییر میکنه و اگر تکراری نباشه AI آنلاین همون موقع آموزش میبینه با پیامک جدید.۲. برای فیلترکردن پیامک اول متن پیامک براساس قوانین کاربر چک میشه، بعد با قوانین جمع‌سپاری(فقط شماره‌تلفن)، AIآنلاین پیامک تمیز‌شده و اگر شرایط استفاده آنلاین نباشه از نسخه آفلاین.۳. اطلاعات تغییر پیدا کرده به صورت اتوماتیک هر ۱۲ساعت آپدیت میشن، فقط تغییرات برای همین همیشه سینک سریع و کم حجم می‌مونه.۴. مسدود سازی تماس‌های تلفنی براساس شماره‌های گزارش‌شده و قوانین کاربر انجام میشه. این اطلاعات بعد از هر سینک دراختیار آی‌او‌اس قرار داده میشه چون باید سریع تصمیم گرفته شه که شماره باید مسدود شه یا نه.۵. برای استفاده از CPU کمتر جواب درخواست‌ها AI آنلاین توی دیتابیس ذخیره میشن. هر دوهفته پیامک‌هایی که نمونشون توی گزارش‌شده‌ها هست اگر وضعیتشون یکی نیست با AI از دیتابیس پاک میشن تا دفعه بعدی که درخواست میشه از AI جوابش آپدیت بشه.۶. AI آفلاین و آنلاین. دیتاشون و مدل‌هاشون برای هرزبان فرق میکنه. زبان‌های براساس دقت مدل‌ها(چینی، انگلیسی، فارسی)۷. تمامی اطلاعات اگر توی سرور ذخیره‌میشه برای استفاده از بهبود کیفیت سرویس، تمامی اطلاعات کاربر ازش پاک میشه. و درتمامی مراحل اطلاعات درحال انتقال رمزگذاری میشه. اطلاعات دخیره شده طوری هست که اگر هم بخوام نتونم به کاربر وابستشون بکنم که هیچ‌موقع استرس لو رفتن اطلاعات شخصی کاربر‌ها رو نداشته باشم.این ساختار تنها زمانی میتونه کیفیت خوبی رو ارایه کنه که تعداد کاربران زیادی داشته باشه. برای همین کاربر‌ها اگر می‌خوان از یادگیری‌ماشین و جمع‌سپاری استفاده کنن. باید کاربر دیگری رو دعوت کنن، برای هر نصب کسی دیگه با لینک اون کاربر هردو یک‌ماه‌ رایگان سرویس میگیرن. احتمالا این مقدار رو تغییر میدم و راحت‌ترش میکنم برای هر کشوری که تعداد کاربراش زیاد‌تر بشه!توی قسمت‌های بعد میتونم درمورد این موضوع‌ها بنویسم، توی نظر‌ها میتونید بگید کدوم رو دوست دارید سریع‌تر بخونید یا اگر بخشی دیگه رو دوست‌دارید بدونید میتونم پوشش بدم• یادگیری ماشین برای پشتیبانی چند‌زبانه• UI و UX اپ• سوییفت روی سرورپانویس: گت‌فیلتر۲ هنوز ریلیزنشده و درحال تست هست. اگر دوست‌دارید پیامی برام بفرستید یا از گت‌فیلتر می‌خواید پشتیبانی کنید از طریق توییتر میتونید میتونید با من ارتباط برقرار کنید.</description>
                <category>Farzad</category>
                <author>Farzad</author>
                <pubDate>Sun, 30 Dec 2018 03:18:18 +0330</pubDate>
            </item>
                    <item>
                <title>&#039;یادگیری ماشین&#039; با استفاده از &#039;CoreML&#039;</title>
                <link>https://virgool.io/@euwars/howtocoreml-eroldad4teyd</link>
                <description>من تا قبل‌از معرفی CoreML توسط اپل، شاید درکل ۷ساعت درمورد یادگیری ماشین تحقیق کرده بودم، دلیل اصلیش هم این‌بود که توی زمینه‌ی فعالیتیم نبود و فقط برای اطلاعات عمومی بوده. بعد از انتشار مستندات آی‌او‌اس۱۱ رفتم ببینم چه امکاناتی اضافه شده که دیدم &#x27;IdenitityLookup&#x27; و &#x27;CoreML&#x27; شامل این لیست بودن.براساس اون ۷ساعت اطلاعات یادگیری ماشین ? به این فکر افتادم که نرم‌افزاری که از این دو امکان جدید استفاده کنه، تا چه میزان میتونه در بلاک کردن پیامک‌های تبلیغاتی موفق باشه. من به شخصه شاید سالی یکبار پیامک‌ تبلیغاتی بگیرم، ولی میدونم که این مشکل واقعا بزرگی هست در داخل ایران. شنیده بودم که بعضی‌ها کاملا استفاده از پیامک‌ رو گذشتن کنار و نوتیفیکیشن‌های پیامک رو قطع کرده بودن. از طرفی دیگه هم دیدن توییت‌های کاربران توییتر به وزیر ارتباطات یا خوندن سایت‌های خبری ناراضی بودن مردم رو نشون میده. لینک‌های خبری دیجیاتو در این مورد:وزیر ارتباطات از توقف ارسال پیامک های تبلیغاتی مزاحم خبر می دهدساماندهی پیامک‌های تبلیغاتی تا پایان مهرماهساماندهی پیامک‌های تبلیغاتی مشکل فنی دارداز اونجایی که همه‌ی ما میدونیم که به این زودی‌ها این مشکل رفع نمیشه من ساخت نمونه‌اولیه getFilter رو شروع کردم. که الان تموم شده و توی اپ‌استور هست.قبل از شروع کردن به نوشتن کد، یه سری مفاهیم و موارد هست که آشناییشون خیلی در یادگیری ماشین کمک میکنه.برای پردازش متن در یادگیری ماشین، اولین قدم تناسب دادن عدد به یه میزان از اون متن هست. چندین روش رایج و کاربردی برای اینکار هست که هرکدوم خوبی‌ها و بدی‌های خودشون رو دارن و حتی ممکنه لازم باشه شما در مسئله‌ای که حل میکنید روشی کاملا مختص خودتون رو انجام بدید. این توضیح خیلی خلاصه و کوتا دو روشی هست که ممکنه اینجا استفاده شه:- فارسیشو نمیدونم(N-gram)توی این روش، &#x27;تعداد دفعات تکرار&#x27;(gram) هر &#x27;بازه‌ای از لغات&#x27;(N) میشه معادل عددی اون متن. مثال:در جمله‌ی &quot;من متن نمونه من هستم&quot;,اگر n=1 باشه این حالت رو با نام &#x27;کیسه‌ای از لغات&#x27; میشناسن و وزن‌ها به این شکل میشه:من= ۲، متن=۱، نمونه=۱، هستم= ۱اگر n=۲ باشه وزن‌ها به این شکل میشه:من متن=۱، متن نمونه=۱، نمونه من=۱، من هستم=۱توی مسئله‌ ما که هدف مشخص کردن اسپم بودن یا نبودن(دسته) متن هست، توی دیتابیسی که داریم برای هر دسته وزن‌معادل رو برای تعداد N دلخواه حساب میکنید. یعنی &#x27;من هستم&#x27; ممکنه توی اسپم‌ها ۳بار تکرار شده باشه ولی توی غیر‌اسپم‌ها ۱۰بار.بعداز اینکه این اطلاعات رو جمع‌آوری کردید، جمع وزن‌معادل تمامی بازه‌ها رو جداگونه برای هر دسته باید انجام بدید. نتیجه جمع اعداد هریکی که بیشتر شه یعنی اون متن  توی اون دسته هست.این روش شاید استفادش گاهی اوقات ایده‌آل باشه مثلا: پیداکردن غلط‌های املایی یا حدس زدن لغت بعدی توی متن، ولی در کل مقدار پردازشی که لازم داره توی دیتابیس‌های بزرگ و وجود یه بازه‌ای از کلمات که ممکنه خیلی معنی نداشته باشه توی یک دسته ولی معنی زیادی توی یکی دیگه میتونه جواب رو خیلی تحت تاثیر بده که اینجا مناسب نیست.- مخفف فراوانی - عکس فراوانی(tf-idf)از توضیحی خوبی هست که boute.ir نوشته:در روش TF-IDF وزن دهی کلمات تابعی از توزیع کلمات مختلف در مستندات است.برای پیاده سازی این روش ابتدا یک مجموعه اسناد (برای مثال مجموعه اسناد همشهری) را در نظر می گیریم. به ازای تمام کلماتی که در پیکره وجود دارد ، بررسی می کنیم که هر کلمه در چه تعداد از سندها تکرار شده است و آن را ذخیره می کنیم .سپس یک سند به عنوان ورودی دریافت می شود. هدف یافتن کلمات کلیدیِ سند دریافت شده است.برای این منظور ابتدا بررسی می کنیم که هر یک از کلمات سند ورودی ، چند بار در همان سند استفاده شده است.سپس به ازای تمام کلمات سند ورودی بررسی می کنیم که هر کلمه در چه تعداد از اسناد پیکره اصلی (برای مثال همشهری) وجود دارد.این روش چون فراوانی هر سند رو نسبت به خودش هم مقایسه میکنه هم دقیق‌تره و اینکه مقدار اطلاعات بعد پردازش کمتر. برای همین هست که این روش رو برای حل مسئله‌‌مون استفاده خواهیم کرد.توضیحات CoreMLاولین چیزی رو که باید بدونید اینه که CoreML پلتفرمی برای ساخت و تمرین دادن هوش‌مصنوعی نیست. CoreML این اجازه رو به شما میده تا از مدل‌های که قبلا با استفاده از کتابخانه‌های دیگه تمرین داده شدن بدون اینکه لازم باشه نگران سازگاری و سرعت باشید استفاده کنید و هیچگونه روشی برای بهبود همون مدل هم روی دستگاه نیست.برای تبدیل مدل‌هایی که قبلا تمرین داده شدن به فرمت &#x27;mlmodel.&#x27; میتونید از CoreMLTools استفاده کنید یا اینکه خودتون تبدیل مخصوص مدل خودتون رو بنویسید. ما اینجا از CoreMLTools استفاده خواهیم کرد. مستندات این پکیجو یکی از کمبود‌هایی که درحال حاضر CoreMLTools داره مدل‌هایی که کارشون پردازش متن هست و مستقیما از tf-idf یا n-gram استفاده میکنن رو پشتیبانی نمیکنه، و باید خودمون این کار رو انجام بدیم.قبل از کدنویسیابزارهایی که لازم دارید:python (2.7), numpy (1.12.1+), protobuf (3.1.0+), coremltools(0.6.3), scikit-learn (0.15+)Xcode (9.0)و یه نسخه کوچیک از دیتابیس getFilter رو آماده و دسته‌بندی شده که توی گیت‌هاب گذاشتم.برای بالا بردن دقت و کمتر شدن احتمال پیدا کردن رفتار برای دستکاری نتیجه‌ها توسط دوستان اسپمر طبقه‌بندی و مرتب‌کردن دیتا و پیامک‌ها خیلی میتونه کمک کنه. کارهایی که من انجام میدم هم داخل دیتابیس و هم پیامک‌ها قبل پردازش هوش مصنوعی:- پاک کردن اعداد و جایگزینی با &quot; &quot;- پاک کردن علایم و جایگزینی با &quot; &quot;- پاک کردن حروف عربی و جایگزینی با معادل فارسی- پاک کردن تمامی فرم‌های فاصله مثل خط بعدی و جایگزینی با &quot; &quot;- پاک کردن &quot; &quot;های اضافی طوری که بین هر کلمه فقط یکبار وجود داشته باشه کدنویسی مدلاضافه کردن لایبرری‌ها# Required importsimport numpy as npfrom sklearn.svm import LinearSVCfrom sklearn.feature_extraction.text import TfidfVectorizerimport coremltools۲. خوندن و آماده کردن دیتا # Reading in and parsing dataraw_data = open(&#x27;Archive.txt&#x27;, &#x27;r&#x27;)sms_data = []for line in raw_data:    split_line = line.split(&quot;\t&quot;)    sms_data.append(split_line)sms_data = np.array(sms_data)۳. جدا کردن دسته و پیامک‌ها# Separating content and labeslX = sms_data[:, 1]y = sms_data[:, 0]۴. تبدیل اطلاعات خام پیامک‌ها به tf-idf# Vectorize the data to tf-idf using sklearn extractionvectorizer = TfidfVectorizer()vectorized = vectorizer.fit_transform(X)۵. ذخیره لیست لغات*# Saving words into text filewords = open(&#x27;Words.txt&#x27;, &#x27;w&#x27;)for feature in vectorizer.get_feature_names():    words.write(feature.encode(&#x27;utf-8&#x27;) + &#x27;\n&#x27;)words.close()۶. مدل جدید و تمرین دادنش# Saving words into text filemodel = LinearSVC()model.fit(vectorized, y)۷. تبدیل مدل تمرین داده شده با فرمت coreml# Converting the sklearn model to coremlcoreml_model = coremltools.converters.sklearn.convert(model, &quot;message&quot;, &#x27;label&#x27;)coreml_model.save(&#x27;MessageClassifier.mlmodel&#x27;)*این مرحله لازمه برای محاسبه دستی tf-idfبعد از اینکه این فایل پایتون رو اجرا کنید ۲تا فایل زیر براتون ساخته میشه.MessageClassifier.mlmodel, Words.txtاستفاده از mlmodel در Xcodeاگر از یکی مدل‌های دیگه که با متن سروکار ندارن میخواستید استفاده کنید تنها مرحله‌ای که لازم بود اضافه کردن mlmodel. بود توی Xcode، اما الان باید متنی رو که میخواید مدلی که تمرین دادید آزمایش بکنه باید قبلش به tf-idf تبدیل بکنید:مممم، ظاهرا فرمت کد بهم میخوره اینجا واسه همین مجبورم عکس بزارم.اینا همون مراحلی هستن که بالا توضیح دادم قبل پردازش خوبه که انجام شه.آماده سازی قبل تبدیلفکر نکنم این بخش محاسبه tf-idf توضیح لازم داشته باشه  چون خیلی واضحه مراحل انجامش.تبدیل متن پیامک به معادل tf-idfاینجا هم متن داخل فایل testMessage رو میخونیم و بعد از آماده‌سازی و تبدیل به tf-idf میدیم به مدل برای بررسی کردنش.اینجا میتونید سورس این آموزش رو ببینید.اگر سوالی دارید یا فکر میکنید جایی لازم به توضیح بیشتر داره بگید،چیزی هم اگر اشتباهه لطفا از طریق توییتر اطلاع بدید.</description>
                <category>Farzad</category>
                <author>Farzad</author>
                <pubDate>Wed, 27 Sep 2017 05:29:17 +0330</pubDate>
            </item>
            </channel>
</rss>