خلفية
كيف أتنقل في الحديقة؟
تصميم
بنيان
كيف نجد اتصالات بين بياناتك؟
تقديم
أين البيانات؟
تعليمات
مستقبل
شكر وتقدير
كانت فكرة حديقة رقمية رائعة دائمًا بالنسبة لي. في وقت سابق من هذا الشهر ، بدأت أتساءل كيف يمكننا تقديم حديقتنا الرقمية أكثر من مجرد رسالة نصية على الصفحة؟ كيف يمكننا أن نجعلها تفاعلية ونخلق تجربة حول تصفح بصمة الرقمية الخاصة بك؟ كيف يمكننا أن نجعل حديقتنا الرقمية تشعر وكأنها حديقة رقمية فعلية .
فلورا هي تجربة لاستكشاف هذا.
يتم شرح ذلك بالتفصيل في البرنامج التعليمي في البداية عند تشغيل Flora - يرجى الرجوع إلى ذلك.
استغرق الاستقرار على التصميم عدة أسابيع من التجارب. أردت أن أكون قادرًا على إنشاء شعور يشبه الرسم البياني لعرض البيانات في حديقتي. كان التحدي هو خلق شيء كان بديهية ولكنه ممكن من الناحية الفنية (خلال فترة زمنية قليلة). هذا هو السبب في أنني استقرت على "شجرة الوالدين" المعزولة عن "الغابات" التي هي جميع أجزاء البيانات الأكثر صلة بالوالد. 

ملاحظة في البداية ، فإن الوالد هو مجرد موقع الويب الخاص بي والغابات تتألف من بيانات تشبه الموضوعات الأكثر أهمية. هذه ليست مختارة . المزيد عن ذلك لاحقًا!
تم تصميم الخريطة الكاملة باستخدام أداة MapEditor الممتازة تمامًا من نقطة الصفر باستخدام Tileset رائعة وجدتها من Jestan.
كل من Tileset والخريطة متاحان بالكامل ضمن مجلد map بحيث يمكنك اللعب معها تمامًا لجعلها خاصة بك.
ارجع إلى قسم التقديم لمزيد من التفاصيل حول كيفية تقديم الخريطة وإضافة منطق اللعبة.
تتم كتابة Flora مع Poseidon و Pixi (للمساعدة في تقديم) على الواجهة الأمامية ، باستخدام البرنامج المساعد Tilemap Pixi (لتقديم Tilemap السريع) والذهاب إلى الواجهة الخلفية. يستخدم خوارزمية بحث دلالية ونص كامل مخصص لإيجاد اتصالات بين البيانات في بصمة الرقمية. يساعدنا هذا في العثور على المحتوى ذي الصلة الذي يشبه إلى حد ما وعجمًا أي بيانات محددة أو كلمة رئيسية محددة (قد تكون قد لاحظتها ، أقوم بتحميل اثنين من المهمة لي شخصيًا في الشاشة الأولى ، مثل بدء التشغيل ، والمجتمع ، والمشاريع الجانبية ، إلخ). الرجوع أدناه إلى كيفية عمل هذه الخوارزمية.
أحب أن أسمي هذه الخطوة توليد "رسم بياني عند الطلب". لا تعيش معظم بياناتاتي في أداة تحتوي على روابط ثنائية الاتجاه - معظم بياناتاتي منتشرة عبر مجموعة من الروابط والملاحظات والمقالات المحفوظة والمزيد. ستكون محاولة العثور على أي ارتباطات تشعبية داخل البيانات (التي قمت بحفظها كنص) شبه مستحيلة. بدلاً من ذلك ، قمت بتأسيس النباتات حتى نتمكن من القيام بشيء آخر بدلاً من ذلك - يمكننا استخدام خوارزمية بحث دلالية ونص كامل مخصصة للعثور على أجزاء البيانات الأكثر ارتباطًا .
هذا يأخذ على اثنين من الأشكال. بالنظر إلى سجل بيانات محدد ، يمكننا العثور على سجلات البيانات الأخرى ذات الصلة بهذا السجل ، وبهذه الطريقة ، تحدد رابط ثنائي الاتجاه إلى حد ما.
يمكننا أيضًا ، بالنظر إلى استعلام أو كلمة محددة ، العثور على سجلات البيانات الأكثر ارتباطًا بهذا الاستعلام المحدد - وهو ما قد لاحظته في الحمل الأول في الفيديو التجريبي أو إذا جربته (مع الكلمات ، build ، community startups ، وما side projects ذلك). وبالتالي ، يمكننا إنشاء "رسم بياني عند الطلب" مع خوارزمية بحث قوية ، والتي تحتوي على مكونين جدير بالملاحظة.
يتكون الجزء الدلالي من خوارزمية البحث من استخدام تضمينات الكلمات التي هي متجهات عالية الأبعاد التي تشفر أجزاء مختلفة من المعلومات المرتبطة بالكلمات (على سبيل المثال ، قد يكون لدى المتجه لكلمة الملك بعض المعلومات المرتبطة بالذكور ، المسطرة ، إلخ). يتم بناء هذه بطريقة يمكننا من خلالها العمل على هذه المتجهات (أي إضافتها ، وطرحها متوسطها) والحفاظ على نوع من البنية المعلوماتية حول النتيجة.
هذا يعني لأي جزء من البيانات ، يمكننا متوسط جميع الكلمات لإنشاء متجه مستند وهو مجرد متجه واحد يحاول تشفير/تلخيص المعلومات حول البيانات. هناك طرق أكثر تعقيدًا وذات مغزى للقيام بذلك من مجرد حساب متوسط كل الكلمات ، لكن هذا كان بسيطًا بما يكفي لتنفيذ ويعمل بشكل جيد نسبيًا لغرض هذا المشروع.
بمجرد أن يكون لدينا متجه مستند لقطعة من البيانات ، يمكننا استخدام تشابه جيب التمام للعثور على مدى تشابه هذين المتجهات المستندتين (وبالتالي مدى تشابه موضوعات أي قطعتين من البيانات).
يمكنني استخدام عمليات إزالة الكلمات التي تم تدريبها مسبقًا من مجموعة بيانات توصيلات FastText Commons المرخصة من Facebook. على وجه التحديد ، أستخدم 50 ألف كلمة من البيانات المدربة على Wikipedia 2017 UMBC Webbase Corpus الموجودة هنا. تحتوي مجموعة البيانات الفعلية على حوالي مليون رموز ، لكنني فقط أقابل وأستخدم أول 50 ألفًا حتى يتمكن الخادم من التعامل معه. يمكنني تغيير هذا أو تبديله في المستقبل ، لقد اخترت هذا لأنه كان لديه أصغر حجم ملف.
يقوم مكون النص في البحث عن متجهات TF-IDF لكل جزء من البيانات ، وهو متجه يخزن الترددات الرمزية لجميع الكلمات التي تظهر في المستند. نظرًا لأن المستندات قد تحتوي على مفردات مختلفة ، فإن متجهات TF-IDF تستخدم المفردات الخاصة بالمجموعة بأكملها ، بحيث يكون لأي كلمة لا تظهر في المستند 0 للموقع المرتبط في المتجه.
بمجرد أن يكون لدينا متجهات TF-IDF لكلمتين ، يمكننا مرة أخرى استخدام تشابه جيب التمام لإيجاد مدى تشابه ناقلات TF-IDF هذه (وبالتالي مدى تشابه الكلمات المستخدمة لأي قطعتين من البيانات).
مع جمع كل هذا معًا ، فإن "النتيجة المخصصة" الخاصة بنا حول مدى مشابهة بيانات واحدة هي بصمتها لآخر هو مجرد متوسط تشابه جيب التجربة للبحث عن النص وتشابه جيب التمام في البحث الدلالي.
عندما "ننزل إلى حفرة أرنب" لأي جزء من البيانات ، فإننا نحسب الدرجات بين القطعة الأولية من البيانات وكل البيانات الأخرى في بصمة لدينا ، ونستخدم تلك الدرجات لتصنيف N الأكثر صلة ، والتي نعيدها بعد ذلك على الواجهة الأمامية.
تذكر كيف قلت أن الأشجار الأولى المتعلقة بكلمات معينة لا يتم اختيارها ؟ حسنًا ، هذا لأننا نستخدم بحثنا الدلالي للعثور على المستندات الأقرب إلى كلمة تضمينات تلك الكلمات المختارة!
يستخدم Flora Pixi لتقديمه و Pixi tilemap البرنامج المساعد لتقديم الخريطة. لاحظ أنني لن أخوض في الكثير من التفاصيل حول كيفية عمل هذه الأطر ، لكنها تجري الكثير من التقديم الذي يمكننا الاستفادة منه عبر WebGL مع استرداد على قماشية HTML عندما لا يكون ذلك متاحًا. انهم رائع!
فيما يتعلق بخريطةنا في النباتات ، لا يتم تنفيذ أي إعدام (جربته ، لكنني لم أستطع العمل على العمل بسلاسة من ملف JSON وهو ما أقوم بتحميله ، وأحب بعض المؤشرات!) افتراضيًا - بدلاً من ذلك يتم تحميل الخريطة بأكملها من خريطة JSON المصدرة ونعرض نافذة/كاميرا صغيرة من الخريطة.
تحتفظ فلورا بجميع البلاط في شبكة ثنائية الأبعاد من الصفوف والأعمدة من خريطتنا بأكملها. هذه هي الطريقة التي تنفذ بها نظام الكشف عن التصادم. لاحظ أن العفريت لا "يتحرك جسديًا" ، ولكن بدلاً من ذلك ، نقوم بتوجيه الخريطة حول العفريت لإعطاء وهم الحركة. نحتفظ أيضًا ببعض المؤشرات لتتبع النافذة المرئية الحالية التي نعوضها في Gameloop مع "تحركات" العفريت عبر الشاشة. نستخدم ملف tilset.json الذي هو Tileset الذي تم تصديره من MapeDitor لتحميل أي معلومات ذات صلة لكل بلاط مطلوب لتحديد ما إذا كان البلاط شجرة ، يجب ألا يسمح للمستخدمين بالتحرك من خلالها (مثل الطوب من المنزل) وما إلى ذلك والاستجابة على الفور في حلقة لعبتنا.
تعمل فلورا على بيانات أبولو وفهرس مقلوب. إذا كنت ترغب في أن تكون قادرًا على استخدام هذا لبياناتك الخاصة ، فستحتاج إلى توفير البيانات بتنسيق بيانات Apollo (تفاصيل في Apollo's ReadMe) أو تغيير خطوات التحميل على الواجهة الخلفية لإقامة تنسيق البيانات الخاص بك.
models ومجلد corpusgo run cmd/flora.go127.0.0.1:8992 ويجب أن يكون قد تم إنشاء recordVectors.json التي تحتوي على متجهات المستند لجميع البيانات/السجلات من قاعدة البيانات