نگاهی جزئی تر بر ساخت گراف دانش

17:14, 06/20,2017

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

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

 

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

هر صفحه ویکی پدیا تقریبا ساختاری مشابه ساختار زیر دارد:

Title

Abstract

Infoboxes

Geo-coordinates

Categories

Images

Links

اما در این بین یکی از مهمترین قسمت هایی که یک صفحه ویکی پدیا دارد، قسمت infobox آن است. این تکه از صفحه معمولا در سمت راست و بالای صفحه ویکی پدیا قرار دارد که اطاعاتی را راجع به آن صفحه در قالب ساخت یافته ای در اختیار کاربر قرار می دهد. اطلاعات صفحات ویکی پدیا به صورت منظم و دوره ای به صورت dump ذخیره سازی می شوند که از طریق لینک هایی مانند https://dumps.wikimedia.org/other/static_html_dumps/

قابل دسترس هستند و با مراجعه به این لینک ها می توان فایل های دامپ ویکی پدیا را دانلود کرد. بعد از دانلود کردن این فایل ها ساختار هر صفحه ویکی پدیا را می توانیم مشاهده کنیم که مثلا اگر به صورت XML دانلود کرده باشیم، تمام اطلاعات یک صفحه در تگ page قرار می گیرد. ضمنا کل اطلاعات infobox ها نیز داخل { Infobox}} قرار می گیرد. مثلا به داده ی زیر توجه فرمایید:

{{Infobox Korean settlement

| title = Busan Metropolitan City

| img = Busan.jpg

| imgcaption = A view of the [[Geumjeong]] district in Busan

| hangul =

...

| area_km2 = 763.46

| pop = 3635389

| popyear = 2006

| mayor = Hur Nam-sik

| divs = 15 wards (Gu), 1 county (Gun)

| region = [[Yeongnam]]

| dialect = [[Gyeongsang]]

}}

در اینجا یک infobox داریم که Korean settlement را معرفی می کند و عنوان آن (title) Busan Metropolitan City است. همانطور که می بینید هر سطر از داده های اینفوباکس به صورت زوجی از خصیصه و مقدار هست. یعنی ابتدا نام خصیصه ( title) و سپس مقدار آن (Busan Metropolitan City) گفته می شود. همین روند برای سایر خطوط داده نیز وجود دارد.

دیبی پدیا یک گراف دانش فراگیر است. پس نگاهی کوتاه به دیبی پدیا نیز خواهیم داشت. حال در شکل زیر نگاهی کلی به معماری سیستم دیبی پدیا می اندازیم:

در سمت چپ داده های ویکی پدیا را داریم که به دو صورت بدست می آیند ؛ یا به صورت فایل های دامپ از پیش دانلود شده و یا به صورت داده هایی که توسط یک api از صفحات ویکی پدیا استخراج می شوند. البته برای استفاده از این api نیاز به داشتن پروتکلی برای مشخص کردن چارچوب جمع آوری فرا داده ها از روی منابع ویکی پدیا داریم که با عنوان OAI_PMH شناخته می شود. در هر صورت بعد از جمع آوری داده های ویکی پدیا، با پارس کردن داده ها به یک abstract syntax tree می رسیم. حال با توجه به اینکه این درخت عام است می توانیم تمام اطلاعات مربوط به برچسب های مورد نیاز خود را از آن استخراج کنیم. در نهایت آنها را به صورت rdf که می تواند فرمت های مختلفی از ذخیره سازی نیز داشته باشد، بر روی یک Triple Store ذخیره سازی کنیم که در اینجا با نام Virtuoso آمده است. بعد از آن می توانیم از این منبع با اجرای کوئری های اسپارکل و یا داده های پیوندی از طریق دسترسی وب که شامل (4 روش دسترسی است) استفاده کنیم. اما همانطور که در شکل نیز می بینیم، بلاکی با عنوان Ontology Mappings نیز داریم. با توجه به اینکه داده های ویکی پدیا در بیش از 120 زبان مختلف دنیا وجود دارد، لذا مشکلاتی وجود دارد که در ادامه در سناریویی درباره آن بحث می کنیم:

به شکل زیر توجه بفرمایید:

 

در این شکل در سمت چپ پایین یک template اینفوباکس را مشاهده می کنید که نام آن book است و در سمت راست پایین نیز قالب کلی برای کتاب است که به زبانی دیگر نوشته شده است. هر دو اینفوباکس به کتاب اشاره می کنند. در حالی که در آنتولوژی موجود در دیبی پدیا داریم فقط یک کلاس داریم که موجودیت کتاب را مدل می کند. این کلاس، کلاس Book است که شامل ویژگی هایی می باشد (شکل وسط صفحه بالا). حال برای آنکه اطلاعات بدست آمده از هر قالب کلی را بتوانیم به صورت یکپارچه در آنتولوژی خود داشته باشیم از نگاشت هایی استفاده می کنیم تا معلوم کنیم که اولا هر قالب کلی به کدام کلاس نگاشت می شود و ثانیا هر کدام از ویژگی های موجود در قالب ها به کدام ویژگی در کلاس نگاشت می­شود (قسمت بالاراست و بالاچپ شکل). بدین ترتیب به ازای هر زبان، یک قالب کلی برای "کتاب" داریم و یک فایل نگاشت.

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

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

 

انشالله شاد و پیروز باشین.. البته این بحث هنوز ادامه داره و در پست آینده یک راه کار جالب و علمی رو خدمتتون ارائه می کنم.

  


 

DBpedia

01:35, 06/08,2017

به نام خدا

سلام به همه دوستان !!!!

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

طبق تعریف، دیبی پدیا یک گراف دانش است که ویژگی های زیر را دارد:

قابل فهم

رایگان برای دانلود و استفاده

باز : به این مفهوم که توسط مجامع جهانی و بزرگ می تواند گسترش یابد و ارتقا پیدا کند.

پروژه دیبی پدیا از سال 2006 شروع شد و در اکثر استفاده های ممکن، این پایگاه دانش (یا گراف دانش) به عنوان دانش پیش زمینه برای کار های دیگری مانند: رتبه بندی مستندات و فهم زبان طبیعی استفاده می شود. در حال حاضر در این پایگاه دانش، دانش به 120 زبان مختلف دنیا وجود دارد. دیبی پدیا از مجموعه ای از حقایق تشکیل شده است. در واقع از دیبی پدیا برای پاسخ به پرسش های مربوط به حقایق استفاده می شود. هر حقیقت شامل 3 جزء است:

Subject , predicate , object

مثلا جمله ی "علی لیوان را شکست" را درنظر بگیرید. این جمله یک حقیقت را نشان می دهد. در این مثال علی همان subject و شکستن لیوان همان predicate و لیوان همان object است.

دیبی پدیا مشتریان زیادی دارد که به چند نمونه آن اشاره می کنم:

شرکت های بزرگی مانند Wolters Kluwer

کتابخانه ها

محققین

توسعه دهندگان وب

 

حال کمی عمیق تر به دیبی پدیا می پردازیم:

منابع عمده دیبی پدیا از دو جا تامین می شود : ویکی پدیا و ویکی دیتا

در واقع هر صفحه در ویکی پدیا، یک منبع (resource) در دیبی پدیا محسوب می شود. مثال زیر را در نظر بگیرید:

URL روبرو را درنظر بگیرید که نشان دهنده ی یک صفحه در ویکی پدیا است. http://en.wikipedia.org/wiki/Monty_Python حال متناظر با این صفحه، منبع زیر را در دیبی پدیا داریم که با URL زیر نمایش می دهیم

http://dbpedia.org/resource/Monty_Python

 

همانطور که می دانید، ویکی پدیا یک دانشنامه آنلاین و رایگان است که مطالب آن به صورت داوطلبانه ایجاد و یا اصلاح می شود.

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

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

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

Which films starred John Cleese without any other members of Monty Python?

اما پاسخ گوگل مجموعه ای از صفحات است که هر صفحه تکه ای از اطلاعات را در خود دارد. مثلا صفحه ای که فقط راجع به گروه مانتی پایتون اطلاعاتی را در اختیار ما می گذارد و یا صفحه ای راجع به خود جان کلیز و یا صفحه ای راجع به خود فیلم  و ... . در اینجا ما (به عنوان یک عامل انسانی) با اتصال اطلاعات این چند صفحه می توانیم به پرسش خود، پاسخ دهیم. در حالی که هدف این است که این اتصال به صورت خودکار و توسط ماشین انجام شود. ضمنا نکته دیگری نیز وجود دارد: این که در جمله مورد پرسش به جای کلمه ی film میتوان از کلمات مترادف مانند movie,.. استفاده کرد. همین نکته برای سایر واژه های موجود در جمله ما نیز صادق است.

اما راه حل، استفاده از یک پایگاه دانش مانند دیبی پدیا است. البته برای استفاده از این پایگاه دانش باید گرامر مربوط به نوشتن کوئری های معتبر را بدانیم. در دیبی پدیا می توانیم کوئری SPARQL اجرا کنیم. به عنوان مثال کوئری زیر می تواند مشکل ما را حل کند! در شکل زیر در قسمت بالا کوئری مربوطه را مشاهده می کنید و در قسمت پایین خروجی حاصل از اجرای این کوئری را می بینید:

 

 

همانطور که می بینید با یک کوئری 15 خطی توانستیم مشکل را حل کنیم. البته همان طور که گفته شد، برای نوشتن این کوئری باید زبان SPARQL را  بیاموزیم.

 

در پست آینده به جزئیات بیشتری اشاره خواهیم کرد، تا در نهایت روشی را برای ساخت یک گراف دانش ارائه دهیم..

 

شاد باشید.. 


 

آنتولوژی

20:36, 03/05,2017

به نام خدا

 

سلام به همه ی دوستان!!!

 

در این پست قرار است تا با یکی از مفاهیم مهم به نام Ontology (آنتولوژی) یا هستان­ شناسی یا هستان نگار آشنا بشویم.

با توجه به پست­ های گذشته که XML را معرفی کردیم و سپس از Xpath برای استفاده از XML کمک گرفتیم، می­ توان فهمید که این دو و شمای XML و ... که معرفی شدند به تنهایی برای ایجاد معنای عمومی قایل فهم برای همگان و البته قابل فهم برای ماشین که بتواند با استفاده از آن ها، به طور خودکار استنتاج انجام دهد کافی نیستند. در واقع ما به دنبال ایجاد ساختاری با روابط بین مفاهیم آن هستیم که یک ماشین بتواند از آن استفاده کند و استنتاج خوبی را ارائه دهد. پس ما مجبور هستیم تا به سراغ امکانات دیگری برویم که قابلیت های ذکر شده را داشته باشند.

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

ویژگی ها را با تگ xxxProperty نمایش می دهند که خود شامل انواعی هستند. ویژگی ها هم برای بیان روابط بین نمونه ها کاربرد دارند. انواع ویژگی ها عبارتند از

owl: ObjectProperty که خود شامل owl: SymmetricProperty و owl: TransitiveProperty می باشد.

owl: DatatypeProperty

owl: FunctionalProperty

owl:InverseFunctionalProperty

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

موفق باشید...

 


 

XPath چیست؟

20:59, 02/17,2017

دوستان سلام!

در این پست می­ خواهم در ادامه مطلب قبلی خود نکاتی تکمیلی در مورد XML را بیان کنم. من می ­خواهم XPath را معرفی کنم.

Xpath یا XML Path Language همانطور که از نام آن پیداست یک زبان مسیر بر روی XML است. این زبان برای انتخاب بخشی از کل فایل XMLاستفاده می­ شود.

فرض کنید که در فایل XML خود اطلاعات زیادی را با ساختاری خاص که توسط DTD یا XSD توصیف شده است، ذخیره کرده ­اید. حال می ­خواهید از این فایل استفاده کنید. مثلا می­ خواهید بدانید که آیا رکوردی به نام آقای xxx در فایل خود  دارید یا نه؟ یا اینکه اگر فایل شما نمرات دانشجویان را در خود دارد، می خواهید ببینید کدام یک از دانشجویان در درس xxx نمره ­ی زیر 15  کسب کرده ­اند. هر کدام از دو مورد ذکر شده یک پرس و جو (query) محسوب می ­شوند.

برای پاسخ به سوالات خود نیاز به Xpath دارید تا بتوانید اطلاعات مد نظر خود را از کل فایل XML ای که در اختیار دارید استخراج کنید. یکی از دلایل استفاده از این زبان این است که با توجه به حجیم بودن فایل XML خود، نمی­ توانید به صورت دستی (manual) خودتان کل فایل را جستجو کنید. زیرا در این روش احتمال بروز خطا وجود دارد.

این زبان همانند سایر زبان­ ها دارای نحوی خاص است. در ادامه یک مثال ارائه می ­شود. اما قبل از مشاهده مثال فرض کنید یک فایل XML مانند زیر وجود دارد. این فایل حاوی دستورات آشپزی برای تعدادی غذاست. در این فایل هر غذا شامل مواد تشکیل دهنده آن و نحوه پخت آن به صورت زیر  وجود دارد.

  

حال می­ خواهید بدانید که نام اولین ماده تشکیل ­دهنده ­ی اولین غذای موجود در این فایل چیست. برای این کار باید کد زیر را بنویسید:

string(doc ("recipes.xml" )//recipe[1]/ingredient[1]/@name)

اجرای این 1 خط کد، به شما خروجی روبرو را می ­دهد:                                  "beef cube steak"  

البته امکانات Xpath بسیار زیاد است و اینجا برای سادگی به ارائه همین مثال اکتفا می­­ کنم. اما برای کاربردهای واقعی باید با توابع مختلف و همچنین نحو آن کامل آشنا شوید. برای آشنایی کامل با Xpath از لینک زیر می­ توانید استفاده کنید.

https://www.w3schools.com/xml/xml_xpath.asp

موفق باشید...

 


 

مروری بر XML

18:55, 02/10,2017
 
به نام خدا
 
در این پست مروری مختصر بر روی XML خواهیم داشت. البته در همان ابتدا این نکته را بگویم که برای به کار گیری این زبان و تسلط بر تمام امکانات موجود در آن نیاز به مطالعه دقیق منابع دیگر وجود دارد.
 
یکی از زبان های مدل سازی داده که در مباحث وب معنایی استفاده می شود، زبان  XML است. این زبان حالت نمایشی خاصی ندارد. در واقع مانند HTML رندر نمی شود. برای همین است که زبان XML را زبانی برای مدل سازی داده می شناسند.
با به کار گیری این زبان می توانیم:
1- نحوه نمایش داده را از ذخیره سازی آن جدا کنیم. یعنی خود داده را در فایل خود نگهداری کنیم و در صورت نیاز از ابزارهای دیگری برای نمایش مناسب آن استفاده کنیم.
2- برای تبادل داده بین چند سیستم استفاده کنیم.
3- حتی زبان خاصی با گرامر مورد نظر خود را توسعه دهیم! (مانند WML که سال ها پیش توسعه یافت) 
اما برای ایجاد مدلی از داده های خود نیاز به فایلی داریم تا بتوانیم قالب کلی مدل را بیان کنیم. در اینجا دو نوع زبان مطرح می شوند که به ما در ایجاد ساختار کلی مدل خود کمک می کنند. همانطور که گفته شد ما نیاز به یک فایل توصیف کننده ساختار مدل خود داریم و در نتیجه می برای اینکار کافی است یا از مورد اول و یا دوم استفاده کنیم:
 1- DTD
 2- XML Schemas که با عنوان XSD نیز شناخته می شوند.
البته مورد دوم از مورد اول قوی تر بوده و جایگزینی برای مورد اول محسوب می شود. در اینجا به ارائه دو دلیل می پردازیم:
در مورد اول نحوی غیر از آنچه در XML وجود دارد استفاده می شود که این باعث می شود تا پارسری را داشته باشیم تا بتوانیم با این فایل کار کنیم. همچنین امکانات تعریف تگ در مورد اول نسبت به مورد دوم کمتر است. 
 
شاد باشید ...  

 

سلام

22:05, 10/19,2016
سلام دوستان!!