Protein–protein interaction prediction methods: from docking-based to AI-based approaches