add semi supervised learning