تشخیص گروه دوستان در شبکه اجتماعی

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

۱. مقدمه

امروزه شبکه های اجتماعی ما بسیار گسترده و بهم ریخته شده اند و درحال حاضر هیچ راه مناسبی برای مدیریت و دسته بندی آن ها وجود ندارد. البته بعضی از شبکه های اجتماعی به کاربران این امکان را داده اند تا خودشان دوستانشان را در حلقه های اجتماعی ( مانند حلقه ها در google+ و لیست دوستان در facebook و twitter ) دسته بندی کنند. بهرحال این روش راهی مناسب به نظر نمی رسد چرا که با اضافه شدن افراد دیگر به دوستان باید این حلقه ها توسط کاربران بروزرسانی گردند.
پس ما به دنبال طراحی سیستمی هستیم که قابلیت یادگیری و شناسایی افراد را داشته باشد و بتواند به صورت خودکار حلقه های اجتماعی را تشکیل داده و آن ها را بروز رسانی کند.
در این پروژه ما اطلاعات یک شخص و دوستان وی در یک شبکه اجتماعی را داریم و هدف ما پیدا کردن حلقه های اجتماعی شخص مورد نظر است که هر حلقه زیر مجموعه ای از دوستان شخص می باشد.
همان طور که در شکل زیر مشاهده می شود شخص با u و دوستان وی با v مشخص گردیده اند و هدف ما پیدا کردن حلقه های نمایش داده شده است.

an ego-network with labled circles

۱.۱. شرح مسئله

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

۲. کارهای مرتبط

۲.۱. Clustering

در روش خوشه بندی یا clustering مدلی برای ایجاد حلقه ها با ویژگی های زیر تعریف می شود:

  1. راس هایی که در یک حلقه قرار دارند باید ویژگی ها یا جنبه های یکسانی داشته باشند

  2. حلقه های مختلف باید براساس ویژگی های متفاوتی شکل گرفته باشند مثلا حلقه ی خانوادگی یا حلقه ی افراد یک دانشگاه

  3. حلقه ها می توانند با یکدیگر تداخل داشته باشند و همچنین حلقه های قوی تر نیز میتوانند داخل حلقه های ضعیف تر شکل بگیرند

ورودی این مدل برای هر کاربر مجوعه V که رئوس متصل به u ( کاربر مورد نظر ) و مجموعه E که شامل تمام یال هایی می باشد که میان مجموعه V وجود دارد به همراه پروفایل تمام اعضای مجموعه V است.
هدف این روش پیش بینی کردن مجموعه نهایی C ( حلقه های کاربر ) میباشد

C = \{ C_1\dotso C_k \}, C_k \subseteq V

و همچنین مشخص کردن پارامتر
\theta_k

که نمایش دهنده این می باشد که حلقه بر اساس چه ویژگی یا جنبه هایی تشکیل شده است.
همچنین از پارامتر
\phi(x,y)

به عنوان نمایش دادن میزان شباهت پروفایل دو کاربر x و y استفاده شده است.
در قدم اول ابتدا هر یک از رئوس گراف را یک خوشه در نظر میگیریم و سپس از فرمولی که در زیر آمده برای تشخیص اینکه آیا دو خوشه میتوانند با هم ترکیب شوند و یا خیر استفاده میشود. این روش را تا جایی که مجموعه C تغییری نکند انجام میدهیم.
p((x,y) \in E) \propto exp \Bigg\{ \sum_{C_k \supseteq \{x,y\}}\langle \phi(x,y) , \theta_k \rangle - \sum_{C_k \nsupseteq \{x,y\}}\alpha_k \langle \phi(x,y) , \theta_k \rangle \Bigg\}

که سیگمای اول شامل تمام حلقه هایی است که هر دو راس در آن ها قرار میگیرند و سیگمای دوم بقیه ی حلقه ها را شامل می شود.
در این فرمول مقدار
\alpha_k

ضریب تناسبی برای متعادل کردن مقدار سیگما ها می باشد.
ایده این فرمول آن است که اگر مقدار پارامتر
\langle \phi(x,y) , \theta_k \rangle

که نمایش دهنده میزان شباهت دو راس با یکدیگر بر اساس ویژگی مورد نظر می باشد بالا باشد یعنی هر دو راس متعلق به یک خوشه می باشند و اگر پایین باشد یعنی متعلق به خوشه ی مورد نظر نیستند[1].

۲.۲. Infomap

در روش infomap با استفاده از روش خوشه بندی با این تفاوت نسبت به روش قبل که می تواند بر روی گراف های جهت دار و وزن دار نیز اعمال شود دو الگوریتم برای خوشه بندی داده ها ارائه می شود که به طور مختصر به شرح آن ها می پردازیم[2].

  • الگوریتم Two-level clustering
    هسته کاری این الگوریتم خوشه بندی براساس map equation است و ابتدا هر یک از راس های گراف را یک خوشه درنظر می گیرد و در هر مرحله هرکدام از خوشه ها که شباهت زیادی با یکدیگر دارند ادغام می کند.
    این روش از این نظر مناسب نیست که هر گاه دو خوشه با یکدیگر ترکیب شوند یک خوشه ی جدید به وجود می آید و اثری از خوشه های قبلی دیگر نیست و ممکن است که اگر خوشه های قبلی با خوشه های دیگری در مراحل بعد ترکیب شوند به جواب بهتر و دارای دقت بالاتری دست پیدا کنیم[2].
    برای رفع این مشکل دو متد زیر در نظر گرفته شده است:
    1. متد Submodule movements
    این متد به ما قابلیت تجزیه ی یک خوشه به زیر خوشه هایش که در مرحله قبل تشکیل شده اند را می دهد.
    2. متد Single-node movements
    این متد به ما قابلیت تجزیه ی خوشه و جدا کردن یک راس و درنظر گرفتن راس به عنوان خوشه ی مستقل را می دهد.

  • الگوریتم Multi-level clustering
    این الگوریتم مدل کامل تری از الگوریتم قبل بوده و متد هایی که در این الگوریتم تعریف می شوند می توانند به جای تجزیه ی خوشه به یک مرحله قبل خوشه را به مقدار دلخواه تجزیه کنند.

توسط این دو متد می توان در هر مرحله و هر جا که یک خوشه ترکیب شد چک کنیم که آیا بهترین ترکیب برای خوشه بندی را انتخاب کرده ایم و یا خیر!

۲.۳. Martelot

روش Le Martelot نیز همانند روش های پیشین از الگوریتم های خوشه بندی اطلاعات استفاده می کند و قابل اجرا بر روی گراف های جهت دار و وزن دار می باشد.
در این روش با استفاده از [4]Newman's modularity که فرمولی برای محاسبه میزان تفاوت های یک راس یا یک خوشه با دیگر خوشه ها می باشد به خوشه بندی اطلاعات می پردازیم.
این فرمول خوشه بندی برای حل مسئله ی تشخیص گروه ها مناسب نیست چرا که در شناسایی گروه های کوچک و متداخل ضعیف عمل می کند.
برای حل این مشکل در روش Martelot ضرایب مختلفی به میزان متفاوت بودن خوشه ها با یکدیگر در ماژولاریتی داده می شود و الگوریتم خوشه بندی را چندین بار اجرا می کند و خوشه بندی بهینه را انتخاب میکند [5].

۲.۴. Louvain

متد Louvain یک متد نسبتا سریع برای پیدا کردن گروه ها در شبکه های بزرگ است.
در این متد با استفاده از روش های حریصانه بر روی ماژولاریتی [4] آن را بهینه کرده و به خوشه بندی راس های گراف می پردازد.
این بهینه سازی در 2 مرحله انجام می شود:

  1. با بهینه سازی محلی متد به دنبال گروه های کوچک میگردد.

  2. سپس با ادغام گروه های کوچک که توانایی ایجاد گروه های بزرگتر را دارند خوشه بندی را ادامه می دهد.

این مراحل را مرتبا تکرار می شود تا به مقدار ماکزیمم ماژولاریتی برسیم [6].

Louvain two greedy optimization steps

۲.۵. Combo

الگوریتم های جستجوی موجود برای تشخیص گروه های شبکه های اجتماعی براساس یک یا چند روش زیر کار می کنند:

  1. ادغام : ادغام و ترکیب دو جامعه مشابه

  2. تقسیم : تقسیم و تجزیه ی دو جامعه ی متفاوت

  3. نوترکیبی : انتقال و حرکت کردن یک راس بین دو جامعه ی مجزا

الگوریتم combo با بهره گیری از هر ۳ روش بالا به حل مساله تشخیص گروه های اجتماعی می پردازد که روش انجام کار این الگوریتم را توضیح می دهیم.
پس از انتخاب شدن یک حالت اولیه از یک شبکه اجتماعی موجود ( منظور از حالت اولیه ،جوامع موجود در ابتدای برنامه است که می توانند هر جوامع تصادفی انتخاب شوند و یا در ابتدای کار تمام شبکه یک جامعه در نظر گرفته شود و در مراحل بعدی تقسیم شود و یا هر کدام از رئوس یک جامعه جدا در نظر گرفته شوند و در مراحل بعد ادغام گردند ) مراحل زیر تا زمانی که تابع هدف به امتیاز بالا و نتایج مطلوب دست پیدا کند انجام می شود[3]:

  1. برای هر جامعه بهترین توزیع مجدد ممکن برای تمام رئوس به جامعه ی مقصد آن ها ( اگر جامعه ی مقصد موجود نباشد جامعه جدید ایجاد می گردد ) محاسبه می شود. به زبان ساده تر در این مرحله وضعیت یک جامعه بررسی می شود که آیا جامعه مشخص شده مستقل از بقیه ی جوامع موجود است یا نیاز دارد که تغییرات روی آن صورت بگیرد[3].

  2. در این مرحله اگر جامعه نیاز به تغییر داشته باشد بهترین عمل ادغام/تقسیم/نوترکیبی انتخاب شده و اعمال می شود[3].

۳. آزمایش و نتایج

۳.۱. Data Set

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

  1. فرمت Link list
    این نوع ورودی دارای N خط می باشد که به تعداد یال های گراف شبکه است و در هر خط هر یال به صورت source target weight تعریف می شود. که source و target رئوس مبدا و مقصد را مشخص می کنند و weight نیز نمایش دهنده وزن یال است که عددی نا منفی است و می تواند نباشد که در این صورت به صورت پیش فرض مقدار ۱ در نظر گرفته می شود.
    همان طور که مشاهده می شود توسط این نوع به سادگی می توان گراف های جهت دار و وزن دار را نیز پشتیبانی کرد.

  2. فرمت Pajek
    این نوع ورودی راس ها و یال های گراف شبکه را در دو قسمت جداگانه همانند زیر در یک فایل مشخص می کند:

    *Vertices N
    1 "V1"
    2 "V2"
    3 "V3"
    ...

    *Edges M
    1 2 1
    1 5 0.33
    4 3 0.5
    2 3 1
    ...

در بخش رئوس که با Vertices N* مشخص می شود N نمایش دهنده ی تعداد رئوس گراف است و در N خط بعد در هر خط ابتدا id راس و سپس label آن می آید.
در بخش یال ها نیز که با Edges M* و یا Arcs M* مشخص می شود M نمایش دهنده ی تعداد یال های گراف است و M خط بعد همانند فرمت Link List تعریف می شود.

ورودی آزمایش شده ابتدایی شبکه ی کوچکی از فیسبوک با 4,039 راس و 88,234 یال و از هر دو نوع فرمت Link list و Pajek می باشد.

۳.۲. Methods of Implementation

در این قسمت به بررسی و انجام آزمایش الگوریتم های ارائه شده روی مجموع دادگان پرداخته شده و از کدهای موجود و آماده ی آنان استفاده شده است. (لینک کدها)
روش کامپایل و اجرای هر الگوریتم در فایل readme که داخل فولدر هر کدام قرار دارد آورده شده است.

  • ۳.۲.۱. Infomap
    با انجام این روش بر روی دادگان facebook به نتایج و خروجی های زیر دست یافتیم که در گیت هاب نیز موجود است. برای مشاهده نوع فرمت فایل های خروجی به اینجا مراجعه کنید.
    تعداد ۷ انجمن پیدا شد که توسط ۱۲ یال با یکدیگر در ارتباطند. این ۷ انجمن با یکدیگر قابل ترکیب نیستند ولی توسط وزن یالی که بین آن هاست می توان تشخیص داد که چه مقدار به نسبت بقیه به یکدیگر شباهت دارند.

    communities predicted by infomap on facebook dataset

  • ۳.۲.۲. Combo
    پس از انجام این روش بر روی دادگان facebook زمان زیادی را برای دریافت نتایج منتظر ماندم ( در حدود ۷۰ ثانیه ). در پایان کار نتایج و فایل خروجی این الگوریتم فایلی متنی است که تعداد خطوط آن به تعداد رئوس گراف می باشد و در هر خط تنها یک عدد نامنفی تولید شده است که نشان دهنده تعداد انجمن هایی است که راس مورد نظر در آن مشترک است.
    تعداد انجمن ها و همچنین اعضای این انجمن ها جزو نتایج و خروجی برنامه نیست!!

  • ۳.۲.۳. Louvain
    نتایج خروجی برنامه ی نوشته شده برای متد Louvain به صورت یک فایل با فرمت tree. می باشد که برای تبدیل این فرمت به clu. این قطعه کد را نوشتم. چرا که برای نمایش خروجی به فرمت clu. نیازمندیم.
    با انجام این روش بر روی دادگان facebook به تعداد 17 انجمن مختلف دست پیدا کردم که در شکل زیر قابل مشاهده می باشد.

    facebook clu results in louvain method

  • ۳.۲.۴. Martelot
    با اجرای متد Le Martelot بر روی دیتاست facebook به خروجی زیر دست پیدا کردیم ( گیت هاب ) .
    این روش ۱۲ انجمن بر روی این دادگان پیدا کرد که در شکل زیر نمایان است.

    facebook clu results in martelot method

۴. کارهای آینده

بررسی نتایج بدست آمده

تا اینجای کار روش های موجود را بر روی دادگان فیسبوک اجرا کردیم و برای هر کدام به نتایجی رسیدیم.
برای دقیق تر شدن نتایج اقدام به بررسی دادگان توییتر (اینجا) نیز کردم که متاسفانه به دلیل بالا بودن حجم آن رم کامپیوترم پر شد و در استفاده از تمام روش ها به ارور segmentation fault برخوردم.
برای بررسی دقت الگوریتم های مختلف نیازمند یک جواب بودم که با خروجی دیگر برنامه ها مقایسه کنم و میزان صحت روش های مختلف را اندازه گیری کنم ولی متاسفانه دسترسی به جواب صحیح برای دادگان فیسبوک نداشتم. البته طبق تحقیقات دانشگاه MIT بر روی همین دادگان و مقایسه روش ها با یکدیگر به نمودار رسیده اند.

comparison of algorithms

با توجه به این نمودار که از نظر کیفیت و سرعت متدهای مختلف بررسی شده اند متد Combo دارای بالاترین کیفیت و متد Martelot بالاترین سرعت را دارا بوده است.
نکته حائز اهمیت نبودن روش Infomap است که دلیلش رو نمیدونم!
با توجه به گستردگی زیاد این روش و همچنین داشتن کد بسیار قوی که از انواع فرمت های ورودی و خروجی را پشتیبانی می کند و دارای option زیادی برای اجرای آن است به همراه داکیومنت بسیار قوی و کامل ، من استفاده از روش Infomap را درحال حاضر مناسب ترین روش برای پیدا کردن گروه های دوستان در شبکه های اجتماعی می دانم و به بقیه ی دوستان پیشنهاد می کنم.

۵. مراجع

[1] J. McAuley and J. Leskovec. Learning to Discover Social Circles in Ego Networks. NIPS, 2012.
[2] M. Rosvall, D. Axelsson, and C.T. Bergstrom. The map equation. Eur. Phys. J. Special Topics 178, 13, 2009.
[3] S. Sobolevsky, R. Campari, A. Belyi, and C. Ratti "General optimization technique for high-quality community detection in complex networks" Phys. Rev. E 90, 012811 2014.
[4] Newman, M.E.J. and Girvan, M. (2004) Finding and evaluating community structure in networks. Phys. Rev. E, 69, 026113.
[5] Le Martelot, E. and Hankin, C. (2013) Fast Multi-Scale Detection of Overlapping Communities using Local Criteria. Computing, Springer, 2014.
[6] Vincent D Blondel, Jean-Loup Guillaume, Renaud Lambiotte, Etienne Lefebvre. Fast unfolding of communities in large networks. J. Stat. Mech. (2008) P10008.

محمد غضنفری

وقتی شما از «تشخیص گروه دوستان در شبکه‌های اجتماعی» صبحت می‌کنید قطعا به مسئله مشهور «تشخیص انجمن‌ها» (Community Detection) اشاره دارید. به دلیل این که کارهای بسیاری در زمینه تشخیص انجمن‌ها در حوزه شبکه‌های اجتماعی انجام شده است (برای مثال Infomap، Louvain و معیار مشهور ماژولاریتی) سوال اصلی در ارتباط با پروژه شما این است که «هدف نهایی پروژه شما چیست؟». بهتر است در ابتدای کار به صورت صریح مشخص کنید که شما قصد «پیاده‌سازی یکی از روش‌های موجود و مقایسه آن با دیگر روش‌ها بر روی مجموعه‌دادگان مختلف را دارید و یا تصمیم دارید روش جدیدی در این حوزه ارائه دهید»؟ و اگر هدف شما مورد دوم است، به این نکته توجه داشته باشید که تا به حال کارهای بسیاری در حوزه «تشخیص انجمن‌ها» صورت گرفته است و در حال حاضر نیز تز ارشد و دکترا بر روی این موضوع تعریف می‌شود و شما برای نوآوری و دستیابی به نتایج بهتر نسبت به روش‌های پیشین، کار ساده‌ای در پیش‌رو نخواهید داشت.
در پاراگراف آخر مقدمه شما ذکر کرده‌اید که
«با پیدا کردن این حلقه ها میتوانیم افرادی که در یک حلقه قرار دارند ولی با هم دوست نیستند (راس های داخل یک حلقه که یالی میان آنان وجود ندارد) را مانند سیستم people you may know در facebook به یکدیگر پیشنهاد دهیم»
که این موضوع یک مسئله شناخته شده دیگر در حوزه شبکه‌های اجتماعی به نام «پیش‌بینی پیوند» (Link Prediction) است. شما در مقدمه خود به دو مسئله بزرگ در حوزه شبکه‌های اجتماعی اشاره کرده‌اید. بهتر است کلا بر روی همان مسئله «تشخیص انجمن‌ها» تمرکز کنید و صرفا انجمن‌ها را تشخیص دهید و به عنوان خروجی پروژه خود انجمن‌های تشخیص ‌داده شده را مشخص کنید چرا که «پیش‌بینی پیوند» خود مسئله‌ای مجزا با پیچیدگی‌های خاص خود خواهد بود.
در بخش «کارهای مرتبط» تنها یک کار بررسی شده و به مهم‌ترین کارهای این حوزه که در بالا ذکر شد اشاره‌ای نشده است. همچنین معمولا مرسوم نیست که کارهای پیشین به این شکل بیان شود و بهتر است که خلاصه‌ای از ایده‌های اصلی کارهای پیشین بیان شود و نهایتا روابط اصلی آن‌ها بیان شود. همچنین در تنها کار معرفی شده کمی ابهام وجود دارد، ابتدا بیان شده «هدف این روش پیش بینی کردن مجموعه C است» و بعد در رابطه ارائه شده از C برای محاسبه p((x,y)∈E) استفاده شده که بهتر است کمی روشن‌تر بیان شود و یا این که کارهای بیشتر در بخش کارهای مرتبط آورده شود ولی فقط به ذکر ایده‌ها کلی آن‌ها بسنده شود و وارد روابط و الگوریتم‌های آن‌ها نشوید و به جای آن روش خودتان و روابط آن را به خوبی بیان کنید.
همچنین نیاز است به صورت صریح «مجموعه دادگان‌(های)» خود را نیز مشخص کنید و در پروژه خود جزیئات آن را شرح دهید.

تایید شده

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

محمد غضنفری

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

رد شده

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

محمد غضنفری

به زودی اضافه خواهد شد

محمد غضنفری

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

رد شده

با عرض سلام و احترام
پباده سازی به خوبی انجام شده بود فقط در یکی از لینک ها http://www.mapequation.org/code.html#Output
نیاز به توضیح بیشتری احساس میشد
در پیاده سازی نیز در این آدرس
https://github.com/sina-bty/AI-community-detection/blob/master/Results/Infomap/facebook/facebook_Infomap.clu
فایل .clu حاوی چه اطلاعاتی است که بازهم نیاز به توضیح دارد.
موفق باشید

تایید شده

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