1. A computer-based method of generating natural language, comprising the steps of: receiving a concept comprising attributes and corresponding values of each of said attributes from a user; receiving grammar rules from the user, each rule including a head, a phrase fragment, a direction and a condition, wherein each phrase fragment includes one of said attributes; receiving a scoring function from the user; generating possible natural language phrases using the grammar rules; determining an optimal natural language phrase from the possible natural language phrases using the scoring function; and returning said optimal natural language phrase to the user.