The document describes an approach called LEarning ANnotations (Lean) that aims to automatically annotate program variables with semantic concepts by combining program analysis, runtime monitoring, and machine learning. Lean takes as input source code along with an initial set of annotations provided by developers and a concept diagram describing relationships between concepts. It instruments the code to collect runtime profiles, trains machine learning models to classify variables, and uses program analysis to validate predicted annotations. The authors evaluate Lean on open source projects and find it can correctly annotate an additional 47% of variables on average when given initial annotations for 6% of variables.