The model for tags is the same as for other input data: it's treated as a continuous stream of value that increase or decrease the association strength. If you added the tag with strength "1", add the association again with strength "-1" to undo it. The approximate real-time update will approximately undo the original change to the user/tag vectors; when the model is fully rebuilt these values will truly cancel and it will be really "gone" then.
removePreference()
does something slightly different, and the naming is a bit confusing, since part of it is held over from Mahout. This just makes the item eligible for recommendation again. It forgets the association but doesn't modify information about the user or item.
There is no counterpart for tags, because tags are never recommended anyway. So removing a tag amounts to calling setUserTag()
with negative values.
There is not a way to query tags. It may sound surprising but in general the model does not expose, or even necessarily preserve, all the original input data. It is all about access to the derived, learned results: recommendations, similar items, etc.
If you remove all user preferences, but there are user tags, the user will actually remain 'alive' in the model, yes. It would not have recommendations, but its data would indirectly affect other recommendations. If you re-added the user the tags would still have effect.
The API semantics are unusual, I think, but kind of on purpose: the problem domain is different than simple data storage!