learn model constructor