Constraint-driven multi-task learning