The paper states, "Then, we employed a functional group annotation algorithm that assigns one of the 190 functional group types to each atom, ensuring that every atom is classified into only one functional group."
But, when I tested with this molecule, "CC(=O)OC(CN(CCCl)C(=O)C#N)CO", some atoms were found out to be attached to two functional groups. Your code also formats functional group prediction task as a multi-label classification task, not a single label classification task. So, was this just a typo in the paper?