Signs of over generalization:
1) Most important standard: what your system can do with the generalized type? For an example: If you generalize Customer and Administrator to a type called Human, what your system can do with a Human type object? If there is very little, then you probably should remove the Human type to simplify your system.
2) The generalized type itself has little work. What code you can put in the Human type?