گراف دانش  و هوش‌مصنوعی

گراف دانش به عنوان هستی‌شناسی در علوم اطلاعاتی و محاسباتی شناخته ‌می‌شود که یک ساختار برای ذخیره، بازیابی و به اشتراک‌گذاری مفاهیم موجود در یک دامنه و ضوابط و روابط بین آن‌ها است. علوم اطلاعات و علوم محاسبات برای گسترش و کارایی بیشتر و نیز برآورده نمودن نیازهایی مانند وب معنایی، نیازمند به ساخت و ایجاد گراف دانش هستند.در ساخت گراف دانش، دو وظیفه بایستی به درستی انجام شوند، وظیفه ذخیره اطلاعات و وظیفه استخراج اطلاعات. پیشرفت‌های نوین هوش‌مصنوعی به خصوص در زمینه یادگیری ماشین و به دنبال آن در یادگیری عمیق، به انجام هر چه بهتر این دو وظیفه کمک می‌کند.ساخت گراف دانش در حوزه‌های مختلف و استفاده از یادگیری عمیق برای استخراج اطلاعات می‌تواند دریچه نوینی به روی انبوهی از اطلاعات پردازش نشده متنی در آن حوزه باشد. همچون متن‌های فقهی، متن‌های حقوقی، متن‌های ورزشی، سینمایی و امثال این‌ها.به طور مثال فرض کنید در حوزه ورزشی، قسمت لیگ برتر فوتبال ایران، در تمامی وب‌سایت‌های خبری، وب‌سایت‌های ورزشی، روزنامه‌های عمومی و ورزشی، همواره در ارتباط با این قسمت، نوشته‌ها و متن‌های بسیاری تولید شده و می‌شوند و در بهترین حالت امکان جستجوی متنی بر روی آن‌ها امکان پذیر است.با کمک گراف دانش و یادگیری عمیق، می‌توان اطلاعات موجود را پردازش کرد، موجودیت‌ها و روابط را شناسایی کرد و از این اطلاعات گراف دانش را در این حوزه ساخت.به عنوان مثال در شکل زیر موجودیت‌ها و ارتباطات بین آن‌ها برای مسابقه‌های فوتبال نشان داده شده است.در این شکل ۵ کلاس مسابقه، لیگ، تیم، داور و استادیوم توصیف شده است. نمونه‌های این کلاس‌ها با هم در ارتباط هستند به طور مثال یک تیم در یک یا چند مسابقه که در یک لیگ است بازی ‌می‌کند. ارتباط بین این کلاس‌ها با خصیصه‌ها توصیف ‌می‌شود. به عنوان مثال: خصیصه‌ی MEMBERSHIP، نمونه‌هایی از کلاس تیم را به نمونه‌هایی از کلاس لیگ مرتبط می‌کند که بیان‌گر عضویت یک تیم فوتبال در یک لیگ فوتبال است.اطلاعات متنی تولید شده در مورد لیگ فوتبال باید به کلاس‌ها، نمونه‌ها و خصیصه‌های گراف دانش لیگ برتر نگاشت شوند. شکل زیر یکی از مسابقه‌های فوتبال لیگ برتر را نشان می‌دهد.برای ذخیره‌سازی هر گراف دانشی به یک پایگاه‌داده گرافی نیاز داریم. در ادامه به توضیح پایگاه داده گرافی می‌پردازیم و چند پایگاه‌داده گرافی را معرفی می‌کنیم.پایگاه‌داده‌ی گرافی چیست ؟یک پایگاه‌ داده‌ گرافی ابزاری آنلاین برای مدیریت سیستم اطلاعاتی است که عملیات CRUD را بر روی مدل داده گرافی انجام می‌دهد. برخلاف سایر پایگاه‌های داده‌، روابط (relationship) از اولویت بالایی برخوردارند و برای دسترسی به داده نیازی به تعریف foreign keys یا پردازش های خارج از باند نظیر Map Reduce نیست.پایگاه‌داده‌های گرافی از گره‌ها برای ذخیره اطلاعات موجودیت‌ها و لبه‌ها برای ذخیره روابط بین موجودیت‌ها استفاده می‌کنند. یک لبه همیشه دارای یک گره شروع، گره انتهایی، نوع و جهت است و یک لبه می‌تواند روابط والدین و فرزند، اقدامات، مالکیت و موارد مشابه را توصیف کند. از نظر تعداد و نوع روابط برای یک گره محدودیتی وجود ندارد.انواع پایگاه‌ داده‌‌های گرافیبرخی از معروف‌ترین پایگاه‌داده‌های گرافی که غالبا متن‌باز هستند عبارتند ازGraknFlockDBAllegroGraphGraphDBInfiniteGraphNeo4jاین پایگاه‌داده‌ها هر یک معایب و مزایای خودشان را دارند که بررسی آن‌ها در این مطلب نمی‌گنجد. در ادامه هر یک را به صورت مختصر معرفی می‌کنیم.InfiniteGraphیک پایگاه داده گرافی مبتنی بر جاوا است که توسط کمپانی به همین نام طراحی شده است. هدف این شرکت ساخت یک پایگاه داده با مقیاس پذیری نامحدود می باشد.GraphDBپایگاه داده GraphDB یک پایگاه داده‌ی گرافی بر اساس .NET می باشد که توسط کمپانی sones طراحی شده است.FlockDBاین گراف دیتابیس توسط توئیتر و برای تحلیل ارتباطات طراحی و ساخته شده است.AllegroGraphپایگاه‌داده گرافی AllegroGraph توسط W3C ساخته شده و برای منابع با چارچوب توصیفی می‌باشد. این پایگاه‌داده گرافی طراحی شده است تا با Linked Data ها و Semantic Web کار کند.Graknپایگاه‌داده گرافی GRAKN.AI یک گراف دانش منبع باز و توزیع شده برای سیستم های دانش محور است که کاملا مدل (ER(Entity-Relationship را پیاده‌سازی می‌کند. این پایگاه‌داده زبان جستجوی خود را دارد به اسم Graql.Neo4jپایگاه داده‌ گرافی Neo4j یک گراف دانش معروف و متن باز مبتنی بر جاوا است. Neo4j برای جستجو در پایگاه‌داده علاوه بر زبان مخصوص به خودش یعنی Cypher امکان استفاده از Graphql را هم فراهم کرده است.فوتمناپلیکیشن موبایل فوتمن یک دستیار هوشمند فوتبالی است که بر پایه‌ی گراف دانش و یادگیری عمیق توسعه داده شده است. برای توسعه این دستیار هوشمند از پایگاه‌داده Neo4j استفاده شده است و به کمک یادگیری عمیق، فوتمن می‌تواند به پرسش‌های فوتبالی مرتبط با لیگ برتر ایران به شما پاسخ دهد.در این دستیار هوشمند ابتدا گفتار حاوی سوال به متن تبدیل می‌شود، سپس متن حاوی سوال توسط چندین الگوریتم یادگیری عمیق به یک پرس‌وجو (query) نگاشت می‌شود و سپس بر اساس نتیجه پرس‌و‌جو، جواب آماده می‌شود.گراف دانش فوتمن شامل چندین موجودیت است که برخی در ادامه آورده شده است.موجودیت CLUB ← موجودیت یک تیم فوتبال استموجودیت PLAYER ← موجودیت یک بازیکن است موجودیت STADIUM ← موجودیت یک استادیوم فوتبال استاین موجودیت‌ها با یک یا چندین رابطه به یکدیگر وصل هستند. برخی از این رابطه‌ها عبارتند از: ارتباط BELONG ← ارتباط بین یک بازی و یک لیگ را مشخص می‌کند ارتباط CONTRACT ← قرارداد بین یک بازکن و یک تیم را مشخص می‌کند ارتباط PLAYED ← ارتباط بین یک بازیکن و بازی که در آن بازی کرده است را مشخص می‌کندبه عنوان مثال اگر سوال‌های زیر را از فوتمن بپرسید بدین شکل پاسخ را آماده می‌کند.سوال: کدام بازیکن پرسپولیس در لیگ هجدهم به عنوان آقای پاس گلی دست یافت؟۱. استخراج موجودیت‌های متنموجودیت Club → پرسپولیسموجودیت League → لیگ هجدهم۲. انتخاب پرس‌و‌جوMATCH (p: PLAYER)-[s: SCORER]->(m: MATCH)-->(l:LEAGUE{{season: &quot{season}&quot}}) MATCH (c:CLUB)-->(m) WHERE s.assists<>&quot000&quot AND c.club_id =&quot{club}&quot WITH p, COUNT(s.assists) as a ORDER BY a {DESC} RETURN p, a , {assists} LIMIT {limit}۳. انجام پرس‌و‌جو و ساخت پاسخسوال: بازی شهر خودرو و پارس جنوبی چند چند شد؟استخراج موجودیت‌های متنموجودیت Club → شهر خودرو موجودیت Club → پارس جنوبی۲. انتخاب پرس‌و‌جوMATCH (c1:CLUB)-[side1:STATS]->(sm:MATCH)-[b:BELONG]->(l:LEAGUE {{season: &quot{season}&quot}}) MATCH (c2:CLUB)-[side2:STATS]->(sm) WHERE c1.club_id =&quot{c1_id}&quot and c2.club_id = &quot{c2_id}&quot and sm.status = &quotFT&quot RETURN c1,c2,sm, side1, side2 ORDER BY sm.date DESC LIMIT 1 ۳. انجام پرس‌و‌جو و ساخت پاسخاگر علاقه‌مند شدید که در برنامه‌ها و اپلیکیشن‌های خود از گراف دانش استفاده کنید، می‌توانید نحوه نصب و راه‌اندازی و همچنین استخراج اطلاعات از گراف دانش، از طریق زبان برنامه نویسی پایتون را در ادامه ملاحظه نمایید.نصب و راه‌اندازی Neo4j۱. ابتدا از سایت Neo4j نسخه‌ Neo4j Community را دریافت و آن را از حالت فشرده خارج کنید :tar -xf neo4j-community-3.5.12.tar۲. برای اجرای سرویس به مانند زیر عمل کنیدcd neo4j-community-3.5.12 bin/neo4j start۳. برای توقف سرویس نیز می‌توانید به صورت زیر عمل کنیدbin/neo4j stopچنانچه بخواهید می‌توانید از طریق داکر هم این سرویس را راه‌اندازی کنید.sudo docker run --publish=7474:7474 --publish=7687:7687 \ --volume=$HOME/neo4j/data:/data neo4jپس از راه‌اندازی سرویس Neo4J می‌توانید از طریق آدرس زیر به داشبورد پایگاه داده متصل شوید و پرس‌و‌جوهای خود را در آن انجام دهید.http://localhost:7474Neo4j Panel پروتکل Boltپروتکل شبکه bolt یک پروتکل بسیار کارآمد و سبک وزن client-server است که برای برنامه‌های پایگاه داده طراحی شده است و امکان ارسال عباراتی (statement) که شامل یک رشته و مجموعه پارامترهای تایپ شده است را فراهم می‌کند. سرور به هر درخواست به صورت اختیاری نتایج پیشین یا پیام نتیجه را باز می‌گرداند.نصب درایو‌های Neo4jاتصال پایگاه‌داده Neo4j به زبان برنامه‌نویسی پایتون از طریق درایو‌ها (drivers) با bolt یا http انجام می‌شود.نصب پکیج:pip install neo4jمثال:from neo4j import GraphDatabase driver = GraphDatabase.driver(&quotbolt://localhost:7687&quot, auth=(&quotneo4j&quot, &quotpassword&quot)) def add_friend(tx, name, friend_name): tx.run(&quotMERGE (a:Person {name: $name}) &quot &quotMERGE (a)-[:KNOWS]->(friend:Person {name: $friend_name})&quot, name=name, friend_name=friend_name) def print_friends(tx, name): for record in tx.run(&quotMATCH (a:Person)-[:KNOWS]->(friend) WHERE a.name = $name &quot &quotRETURN friend.name ORDER BY friend.name&quot, name=name): print(record[&quotfriend.name&quot]) with driver.session() as session: session.write_transaction(add_friend, &quotArthur&quot, &quotGuinevere&quot) session.write_transaction(add_friend, &quotArthur&quot, &quotLancelot&quot) session.write_transaction(add_friend, &quotArthur&quot, &quotMerlin&quot) session.read_transaction(print_friends, &quotArthur&quot)