Αυτό το repository περιέχει την υλοποίηση ενός συστήματος πρόβλεψης συνδέσεων (link prediction) σε ακαδημαϊκά δίκτυα, με στόχο την πρόβλεψη πιθανών παραπομπών (citations) μεταξύ επιστημονικών εργασιών. Το έργο αναπτύχθηκε στο πλαίσιο της πρόκλησης "NLP 053 - CSE UOI 2025 Kaggle Challenge" του Πανεπιστημίου Ιωαννίνων, συνδυάζοντας τεχνικές Επεξεργασίας Φυσικής Γλώσσας (NLP) και Ανάλυσης Γράφων.
Το πρόβλημα της πρόβλεψης παραπομπών διαμορφώνεται ως ένα πρόβλημα δυαδικής ταξινόμησης (binary classification), όπου το σύστημα προβλέπει την πιθανότητα ύπαρξης μιας παραπομπής μεταξύ δύο εργασιών. Η προσέγγιση περιλαμβάνει:
- Προεπεξεργασία Δεδομένων: Καθαρισμός και μετασχηματισμός των abstracts και των πληροφοριών συγγραφέων, καθώς και κατασκευή του γραφήματος παραπομπών.
- Μηχανική Χαρακτηριστικών (Feature Engineering): Εξαγωγή χαρακτηριστικών βασισμένων σε κείμενο (π.χ., ομοιότητα abstracts), συγγραφείς (π.χ., κοινοί συγγραφείς), και δομή δικτύου (π.χ., κοινοί γείτονες, δείκτες κεντρικότητας).
- Εκπαίδευση Μοντέλου: Χρήση αλγορίθμων Μηχανικής Μάθησης, με ιδιαίτερη έμφαση στο XGBoost, για την εκπαίδευση ενός μοντέλου ικανού να διακρίνει μεταξύ υπαρχόντων και μη-υπαρχόντων παραπομπών.
- Βελτιστοποίηση και Αξιολόγηση: Εφαρμογή τεχνικών βελτιστοποίησης υπερπαραμέτρων (hyperparameter tuning) και μεθοδολογιών αποφυγής υπερπροσαρμογής (overfitting).
Το repository οργανώνεται ως εξής:
.
├── README.md \# Αυτό το αρχείο
├── requirements.txt \# Απαραίτητες βιβλιοθήκες Python
├── code/ \# Περιέχει όλα τα scripts της λύσης
│ ├── success-simple.py \# Απλή, αρχική υλοποίηση (καλή βάση)
│ ├── failed-1st-attempt-create\_training\_data.py \# 1η προσπάθεια: Δημιουργία training data
│ ├── failed-1st-attempt-train\_predict.py \# 1η προσπάθεια: Εκπαίδευση μοντέλου και πρόβλεψη
│ ├── failed-2nd-attempt.py \# 2η προσπάθεια: Περιλαμβάνει προηγμένα features & παραλληλοποίηση
│ ├── success-improved.py \# Βελτιστοποιημένη και τελική λύση (όλα σε ένα αρχείο)
│ └── ... \# Τυχόν άλλα βοηθητικά αρχεία
├── input/ \# Περιέχει τα αρχικά δεδομένα του Kaggle Challenge
│ └── nlp-cse-uoi-2025/
│ └── data\_new/
│ ├── abstracts.txt
│ ├── authors.txt
│ ├── edgelist.txt
│ └── test.txt
├── report/ \# Σχετικά έγγραφα της εργασίας
│ ├── NLP Citation Prediction Challenge Report.pdf \# Αναλυτική αναφορά
│ ├── NLP\_exam\_challenge\_June\_2025.pdf \# Πρόσθετες σημειώσεις για την πρόκληση
│ ├── report.pdf \# Αναφορά της εργασίας
│ └── kaggle\_challenge\_2025.pdf \# Περιγραφή της πρόκλησης
└── .gitignore \# Αρχείο για την παράβλεψη ανεπιθύμητων αρχείων από το Git
Τα δεδομένα για την πρόκληση είναι διαθέσιμα μέσω του Kaggle Challenge. Για την αναπαραγωγή, τα αρχεία (abstracts.txt, authors.txt, edgelist.txt, test.txt) θα πρέπει να τοποθετηθούν στη διαδρομή input/nlp-cse-uoi-2025/data_new/.
Ο κώδικας έχει αναπτυχθεί και δοκιμαστεί σε περιβάλλον Ubuntu 24.04. Για την εκτέλεση του κώδικα, απαιτούνται οι ακόλουθες βιβλιοθήκες Python:
# Περιεχόμενα του requirements.txt (Θα δημιουργηθεί με όλες τις βιβλιοθήκες)
Μπορείτε να εγκαταστήσετε όλες τις απαραίτητες βιβλιοθήκες χρησιμοποιώντας το pip:
pip install -r requirements.txtΣημείωση για Windows χρήστες: Εάν αντιμετωπίσετε προβλήματα με την παράλληλη επεξεργασία (multiprocessing), μπορεί να χρειαστεί να ρυθμίσετε τη μέθοδο έναρξης (start method) σε spawn στην αρχή του main block του script, όπως έχει γίνει σε ορισμένες προσπάθειες.
Ο φάκελος code/ περιέχει διάφορες εκδόσεις της λύσης, που δείχνουν την εξέλιξη και τις βελτιστοποιήσεις.
-
Απλή/Βασική Υλοποίηση (
success-simple.py)- Αυτό το script περιλαμβάνει ένα βασικό pipeline φόρτωσης δεδομένων, μηχανικής χαρακτηριστικών (text, author, network), δημιουργίας θετικών/αρνητικών δειγμάτων, εκπαίδευσης XGBoost και δημιουργίας αρχείου υποβολής.
- Εκτέλεση:
python code/success-simple.py - Αρχείο Εξόδου:
submission.csv(με σκορ περίπου0.208Public LogLoss)
-
Πρώτη Αποτυχημένη Προσπάθεια (
failed-1st-attempt-create_training_data.py&failed-1st-attempt-train_predict.py)- Αυτή η προσπάθεια διαχωρίζει τη δημιουργία training data από την εκπαίδευση/πρόβλεψη και εισάγει παραλληλοποίηση στη δημιουργία χαρακτηριστικών και αρνητικών δειγμάτων.
- Εκτέλεση:
python code/failed-1st-attempt-create_training_data.pypython code/failed-1st-attempt-train_predict.py
- Αρχεία Εξόδου:
training_data_optimized_multiprocessing.npz,best_model_optimized.pkl(δεν παράγει απευθείας .csv submission)
-
Δεύτερη "Αποτυχημένη" Προσπάθεια (
failed-2nd-attempt.py)- Παρά το όνομά της, αυτή η προσπάθεια εισάγει πιο προηγμένα χαρακτηριστικά (όπως Word2Vec, text statistics, temporal features) και εκτεταμένη παραλληλοποίηση σε όλες τις φάσεις.
- Εκτέλεση:
python code/failed-2nd-attempt.py - Αρχείο Εξόδου:
enhanced_submission_parallel.csv(με Public Score6.22277και Private Score6.19061)
-
Βελτιωμένη/Τελική Προσπάθεια (
success-improved.py)- Αυτό το script ενσωματώνει πολλές βελτιστοποιήσεις σε ένα ενιαίο pipeline, συμπεριλαμβανομένων lazy loading, caching, και βελτιωμένου negative sampling, καθώς και πιο σύνθετων χαρακτηριστικών (Word2Vec, Sentence Transformers, βελτιωμένα author/network features).
- Εκτέλεση:
python code/success-improved.py - Αρχείο Εξόδου:
submission_optimized.csv(με Public Score0.15045και Private Score0.14844)
Ενδεικτικά αποτελέσματα από υποβολές στο Kaggle Leaderboard:
| Script | Submission Filename | Public LogLoss | Private LogLoss |
|---|---|---|---|
success-simple.py |
submission.csv |
~0.20878 | ~0.20439 |
failed-2nd-attempt.py |
enhanced_submission_parallel.csv |
6.22277 | 6.19061 |
success-improved.py |
submission_optimized.csv |
0.15045 | 0.14844 |
Η υλοποίηση βασίστηκε σε αρχές και τεχνικές που καλύφθηκαν στο μάθημα NLP 053 - CSE UOI 2025, καθώς και σε ευρύτερη βιβλιογραφία για την πρόβλεψη συνδέσεων και την επεξεργασία φυσικής γλώσσας. Πιο συγκεκριμένα, χρησιμοποιήθηκαν έννοιες όπως:
- Vector Space Model και TF-IDF
- Τεχνικές Feature Engineering
- Τεχνικές Ανάλυσης Γράφων (π.χ., common neighbors, PageRank, Adamic-Adar, Resource Allocation, Preferential Attachment)
- Word Embeddings (Word2Vec, Sentence Transformers)
- Μοντέλα Ensemble (XGBoost, Random Forest)
- Τεχνικές Βελτιστοποίησης (Hyperparameter Tuning, Cross-validation, Regularization)
- Παράλληλη επεξεργασία για βελτιστοποίηση απόδοσης
Αυτό το repository παρέχεται ως εκπαιδευτικό και ερευνητικό υλικό. Ο κώδικας έχει σχεδιαστεί για να λειτουργεί στο συγκεκριμένο σύνολο δεδομένων της πρόκλησης και μπορεί να απαιτεί προσαρμογές για διαφορετικά σενάρια.