GraphGPT: تعلم الرسم البياني باستخدام المحولات التوليدية المدربة مسبقًا
هذا المستودع هو التطبيق الرسمي لـ "GraphGPT: تعلم الرسم البياني باستخدام المحولات التوليدية المدربة مسبقًا" في PyTorch.
GraphGPT: تعلم الرسم البياني باستخدام المحولات التوليدية المدربة مسبقًا
كيفانغ تشاو، ويدونغ رن، تيانيو لي، شياوكسياو شو، هونغ ليو
تحديث:
13/10/2024
- صدر v0.4.0. تحقق من
CHANGELOG.md
للحصول على التفاصيل. - تحقيق SOTA في 3 مجموعات بيانات واسعة النطاق:
- PCQM4M-v2 (بدون ثلاثي الأبعاد): 0.0802 (SOTA 0.0821 السابق)
- ogbl-ppa: 68.76 (SOTA 65.24 السابق)
- ogbl-citification2: 91.15 (SOTA 90.72 السابق)
18/08/2024
- صدر v0.3.1. تحقق من
CHANGELOG.md
للحصول على التفاصيل.
07/09/2024
- صدر v0.3.0.
19/03/2024
- صدر v0.2.0.
- قم بتنفيذ
permute_nodes
لمجموعة بيانات نمط الخريطة على مستوى الرسم البياني، من أجل زيادة الاختلافات في مسارات Eulerian، مما يؤدي إلى نتائج أفضل وقوية. - أضف
StackedGSTTokenizer
بحيث يمكن تكديس الرموز المميزة للدلالات (على سبيل المثال، العقدة/الحافة) مع الرموز الهيكلية، وسيتم تقليل طول التسلسل كثيرًا. - رموز إعادة البناء.
23/01/2024
- v0.1.1، إصلاح أخطاء حزمة common-io.
01/03/2024
- الإصدار الأولي من الرموز.
الاتجاهات المستقبلية
قانون القياس: ما هو حد القياس لنماذج GraphGPT؟
- كما نعلم، يمكن لـ GPT المدربة باستخدام البيانات النصية أن تتوسع إلى مئات المليارات من المعلمات، وتستمر في تحسين قدرتها.
- يمكن أن توفر البيانات النصية تريليونات من الرموز، وهي ذات درجة عالية من التعقيد، وتمتلك الكثير من المعرفة، بما في ذلك المعرفة الاجتماعية والطبيعية.
- في المقابل، تحتوي بيانات الرسم البياني التي لا تحتوي على سمات العقدة/الحافة على معلومات الهيكل فقط، وهي محدودة جدًا مقارنة بالبيانات النصية. معظم المعلومات المخفية (على سبيل المثال، الدرجات، عدد الهياكل الأساسية وما إلى ذلك) خلف الهيكل يمكن حسابها بدقة باستخدام حزم مثل Networkx. لذلك، قد لا تكون المعلومات الواردة من بنية الرسم البياني قادرة على دعم قياس حجم النموذج حتى مليارات المعلمات.
- تُظهر تجاربنا الأولية مع العديد من مجموعات بيانات الرسوم البيانية واسعة النطاق أنه يمكننا توسيع نطاق GraphGPT بما يصل إلى 400 مليون+ من المعلمات مع تحسين الأداء. لكن لا يمكننا تحسين النتائج أكثر. قد يكون ذلك بسبب تجاربنا غير الكافية. ولكن من الممكن أن تكون القيود المتأصلة في بيانات الرسم البياني هي السبب في ذلك.
- قد تتمكن مجموعات بيانات الرسم البياني الكبيرة (إما رسم بياني كبير أو كميات ضخمة من الرسوم البيانية الصغيرة) مع سمات العقدة/الحافة من توفير معلومات كافية لنا لتدريب نموذج GraphGPT كبير. ومع ذلك، قد لا تكون مجموعة بيانات رسم بياني واحدة كافية، وقد نحتاج إلى جمع مجموعات بيانات رسوم بيانية مختلفة لتدريب GraphGPT واحد.
- المشكلة هنا هي كيفية تحديد رمز مميز عالمي لسمات الحافة/العقدة من مجموعات بيانات الرسم البياني المختلفة.
بيانات الرسم البياني عالية الجودة: ما هي بيانات الرسم البياني عالية الجودة لتدريب GraphGPT للمهام العامة؟
- على سبيل المثال، إذا أردنا تدريب نموذج واحد على جميع أنواع مهام فهم الجزيئات وتوليدها، فما نوع البيانات التي يجب أن نستخدمها؟
- من خلال تحقيقنا الأولي، أضفنا ZINC (4.6M) وCEPDB (2.3M) إلى التدريب المسبق، ولم نلاحظ أي مكاسب عند ضبط PCQM4M-v2 لمهمة التنبؤ بالفجوة المتجانسة. يمكن أن تكون الأسباب المحتملة كما يلي:
- #structure# أنماط الرسم البياني خلف الرسم البياني الجزيئي بسيطة نسبيًا.
- تعد أنماط الرسم البياني مثل السلاسل أو الحلقات ذات العقد 5/6 شائعة جدًا.
- في المتوسط حافتان لكل عقدة، مما يعني أن الذرات لها رابطتين في المتوسط.
- #دلالات# القواعد الكيميائية لبناء الجزيئات العضوية الصغيرة بسيطة: تحتوي ذرة الكربون على 4 روابط، وذرة النيتروجين لها 3 روابط، وذرة الأكسجين لها رابطتان، وذرة الهيدروجين لها رابطة واحدة، وهكذا. ببساطة، طالما أن عدد الروابط الذرية لدينا مكتمل، يمكننا توليد أي جزيئات.
- القواعد من البنية والدلالات بسيطة جدًا لدرجة أنه حتى النموذج المتوسط يمكنه التعلم من مجموعة البيانات متوسطة الحجم. لذا فإن إضافة بيانات إضافية لا يساعد. نحن نقوم بتدريب النماذج الصغيرة/المتوسطة/الأساسية/الكبيرة مسبقًا باستخدام بيانات جزيئية تبلغ 3.7 مليون، وكانت خسائرها قريبة جدًا، مما يشير إلى مكاسب محدودة من توسيع أحجام النماذج في مرحلة ما قبل التدريب.
- ثانيًا، إذا أردنا تدريب نموذج واحد على أي نوع من مهام فهم بنية الرسم البياني، فما نوع البيانات التي يجب أن نستخدمها؟
- هل يجب أن نستخدم بيانات الرسم البياني الحقيقية من الشبكات الاجتماعية وشبكات الاستشهاد وما إلى ذلك، أم نستخدم فقط بيانات الرسم البياني الاصطناعية، مثل الرسوم البيانية العشوائية لـ Erdos-Renyi؟
- تظهر تجاربنا الأولية أن استخدام الرسوم البيانية العشوائية للتدريب المسبق على GraphGPT مفيد للنموذج لفهم هياكل الرسم البياني، ولكنه غير مستقر. نشك في أن الأمر مرتبط بتوزيعات هياكل الرسم البياني في مراحل ما قبل التدريب والضبط الدقيق. على سبيل المثال، إذا كان لديهم عدد مماثل من الحواف لكل عقدة، وعدد مماثل من العقد، فإن نموذج التدريب المسبق والضبط الدقيق يعمل بشكل جيد.
- #Universality# إذًا، كيف يمكن تدريب نموذج GraphGPT لفهم أي بنية رسم بياني بشكل عام؟
- يعود هذا إلى الأسئلة السابقة حول قانون التوسع: ما هي بيانات الرسم البياني المناسبة والعالية الجودة لمواصلة توسيع نطاق GraphGPT حتى يتمكن من القيام بمهام الرسم البياني المختلفة بشكل جيد؟
لقطات قليلة: هل يمكن لـ GraphGPT الحصول على إمكانية التقاط لقطات قليلة؟
- إذا كان ذلك ممكنًا، كيف يتم تصميم بيانات التدريب لتمكين GraphGPT من تعلمها؟
- من خلال تجاربنا الأولية مع مجموعة بيانات PCQM4M-v2، لم نلاحظ وجود عدد قليل من القدرة على تعلم اللقطات! لكن هذا لا يعني أنها لا تستطيع ذلك. يمكن أن يكون للأسباب التالية:
- النموذج ليس كبيرا بما فيه الكفاية. نحن نستخدم النموذج الأساسي مع ~ 100 مليون معلمة.
- بيانات التدريب ليست كافية. نحن نستخدم فقط 3.7 مليون جزيء، مما يوفر رموزًا محدودة فقط للتدريب.
- تنسيق بيانات التدريب غير مناسب للنموذج للحصول على قدرة قليلة على التصوير.
ملخص:
نقترح GraphGPT، وهو نموذج جديد لتعلم الرسم البياني من خلال محولات الرسم البياني التوليدية قبل التدريب الخاضعة للإشراف الذاتي (GET). نقدم أولاً GET، الذي يتكون من العمود الفقري لمشفر/وحدة فك تشفير محولات الفانيليا وتحويل يحول كل رسم بياني أو رسم بياني فرعي تم أخذ عينات منه إلى سلسلة من الرموز المميزة التي تمثل العقدة والحافة والسمات بشكل عكسي باستخدام مسار أويلريان. ثم نقوم بتدريب GET مسبقًا إما بمهمة التنبؤ بالرمز المميز التالي (NTP) أو مهمة التنبؤ بالرمز المميز المقنع (SMTP). وأخيرًا، نقوم بضبط النموذج باستخدام المهام الخاضعة للإشراف. يحقق هذا النموذج البديهي والفعال نتائج متفوقة أو قريبة من أحدث الأساليب للمهام على مستوى الرسم البياني والحافة والعقدة في مجموعة البيانات الجزيئية واسعة النطاق PCQM4Mv2، ومجموعة بيانات رابطة البروتين البروتين ogbl-ppa ومجموعة بيانات شبكة الاقتباس ogbl-citation2 ومجموعة بيانات ogbn-proteins من Open Graph Benchmark (OGB). علاوة على ذلك، يتيح لنا التدريب المسبق التوليدي تدريب GraphGPT حتى 2B+ من المعلمات مع زيادة الأداء باستمرار، وهو ما يتجاوز قدرة شبكات GNN ومحولات الرسم البياني السابقة.
الرسم البياني للتسلسلات
بعد تحويل الرسوم البيانية Eulerized إلى تسلسلات، هناك عدة طرق مختلفة لربط سمات العقدة والحافة بالتسلسلات. نحن نسمي هذه الأساليب short
long
prolonged
.
بالنظر إلى الرسم البياني، نقوم بتحليله أولًا، ثم نحوله إلى تسلسل مكافئ. وبعد ذلك، نقوم بإعادة فهرسة العقد بشكل دوري.
افترض أن الرسم البياني يحتوي على سمات عقدة واحدة وسمات حافة واحدة، ثم يتم عرض الطريقة short
long
prolong
أعلاه.
في الأشكال أعلاه، يمثل n1
و n2
و e1
الرموز المميزة لسمات العقدة والحافة، ويمثل [p]
رمز الحشو.
إعادة فهرسة العقدة الدورية
الطريقة المباشرة لإعادة فهرسة تسلسل العقد هي البدء بالرقم 0 وإضافة 1 بشكل تدريجي. بهذه الطريقة، سيتم تدريب الرموز المميزة للمؤشرات الصغيرة بشكل كافٍ، ولن يتم تدريب المؤشرات الكبيرة. للتغلب على ذلك، نقترح cyclical re-index
، والتي تبدأ برقم عشوائي في النطاق المحدد، على سبيل المثال [0, 255]
، وتزيد بمقدار 1. بعد الوصول إلى الحد، على سبيل المثال، 255
، سيكون فهرس العقدة التالي 0 .
نتائج
عفا عليها الزمن. ليتم تحديثها قريبا.
مهمة على مستوى الرسم البياني: مجموعة بيانات PCQM4M-v2
مهمة على مستوى الحافة: مجموعة بيانات ogbl-ppa
مهمة على مستوى العقدة: مجموعة بيانات البروتينات ogbn
تثبيت
git clone https://github.com/alibaba/graph-gpt.git
- قم بتثبيت التبعيات في ملف require.txt (باستخدام Anaconda، تم اختباره باستخدام py38 وpytorch-1131 وCUDA-11.7 و11.8 و12.1 على GPU V100 وA100)
conda create -n graph_gpt python=3.8 pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 pytorch-cuda=11.7 -c pytorch -c nvidia
conda activate graph_gpt
cd graph-gpt
pip install -r ./requirements.txt
pip install torch-scatter torch-sparse -f https://data.pyg.org/whl/torch-1.13.1+cpu.html
sudo apt-get install bc
مجموعات البيانات
يتم تنزيل مجموعات البيانات باستخدام حزمة python ogb.
عند تشغيل البرامج النصية في ./examples
، سيتم تنزيل مجموعة البيانات تلقائيًا.
ومع ذلك، فإن مجموعة البيانات PCQM4M-v2 ضخمة، وقد يكون التنزيل والمعالجة المسبقة مشكلة. نقترح تنزيل cd ./src/utils/
و python dataset_utils.py
لتنزيل مجموعة البيانات ومعالجتها مسبقًا بشكل منفصل.
يجري
- التدريب المسبق: قم بتعديل المعلمات في
./examples/graph_lvl/pcqm4m_v2_pretrain.sh
، على سبيل المثال، dataset_name
و model_name
و batch_size
و workerCount
وما إلى ذلك، ثم قم بتشغيل ./examples/graph_lvl/pcqm4m_v2_pretrain.sh
للتدريب المسبق للنموذج باستخدام PCQM4M-v2 dataset.- لتشغيل مثال اللعبة، قم بتشغيل
./examples/toy_examples/reddit_pretrain.sh
مباشرةً.
- الضبط الدقيق: قم بتعديل المعلمات في
./examples/graph_lvl/pcqm4m_v2_supervised.sh
، على سبيل المثال، dataset_name
و model_name
و batch_size
و workerCount
و pretrain_cpt
وما إلى ذلك، ثم قم بتشغيل ./examples/graph_lvl/pcqm4m_v2_supervised.sh
لضبط المهام النهائية .- لتشغيل مثال اللعبة، قم بتشغيل
./examples/toy_examples/reddit_supervised.sh
مباشرة.
معيار الكود
الالتزام المسبق
- تحقق من الموقع الرسمي للحصول على التفاصيل
-
.pre-commit-config.yaml
: قم بإنشاء الملف بالمحتوى التالي لـ python repos :
- repo : https://github.com/pre-commit/pre-commit-hooks
rev : v4.4.0
hooks :
- id : check-yaml
- id : end-of-file-fixer
- id : trailing-whitespace
- repo : https://github.com/psf/black
rev : 23.7.0
hooks :
- id : black
-
pre-commit install
: تثبيت الالتزام المسبق في خطافات git الخاصة بك.- سيتم الآن تشغيل الالتزام المسبق عند كل التزام.
- في كل مرة تقوم فيها باستنساخ مشروع باستخدام الالتزام المسبق، يجب أن يكون
pre-commit install
أول شيء تفعله دائمًا.
-
pre-commit run --all-files
: تشغيل جميع خطافات الالتزام المسبق في المستودع -
pre-commit autoupdate
: قم بتحديث خطافاتك إلى الإصدار الأحدث تلقائيًا -
git commit -n
: يمكن تعطيل عمليات التحقق المسبق لالتزام معين باستخدام الأمر
الاقتباس
إذا وجدت هذا العمل مفيدا، يرجى التكرم بذكر الأوراق التالية:
@article{zhao2024graphgpt,
title={GraphGPT: Graph Learning with Generative Pre-trained Transformers},
author={Zhao, Qifang and Ren, Weidong and Li, Tianyu and Xu, Xiaoxiao and Liu, Hong},
journal={arXiv preprint arXiv:2401.00529},
year={2024}
}
اتصال
كيفانغ تشاو ([email protected])
نقدر بصدق اقتراحاتكم بشأن عملنا!
رخصة
تم إصداره بموجب ترخيص MIT (انظر LICENSE
):
Ali-GraphGPT-project is an AI project on training large scale transformer decoder with graph datasets,
developed by Alibaba and licensed under the MIT License.