Welcome to Manicprogrammer Sign in | Join | Help

Building Natural Language Interaction for TFS Is No Easy Task

Let me begin that if one were to take the title and remove the words 'for TFS' the statement would be no less true. So far my experience in building some semblance of a natural language vocabulary and supporting constructs are no easy task. I think that any time someone begins to learn something new and apply it to something known they will encounter an uncomfortable learning curve. That uncomfortable resistance in getting the results I want is exactly where I am in this process. I'll outline my experiences so far, my approach and also outline what comes next.

There are generally two major ways I have to choose from to go about picking up the new skills I need to build my "natural language engine for Microsoft Visual Studio Team System"A.K.A. TeamPatter -

  1. The Agilist Approach - I'll plan out basic minimal feature sets and apply them to deliver a first pass but generally low sophistication product with a wider breadth (wider than the #2 approach).
  2. The Narrow Approach - I'll take one narrowly defined feature and just keep drilling and drilling deeper with greater sophistication but limited breadth.

I have a strong tendency to use the Narrow Approach in my personal projects. They also have a tendency to never see the light of day.  In fact, in my personal projects I almost always take the Narrow Approach. My experience is that I learn tons but often yield little product. This is fine for personal projects where the primary goal is learning but is almost never acceptable in business production. Thus I don't do this in business production cases. I learned that lesson many years ago but always have to remind myself. When the project is a mixture of a personal project but something I'd like to bring to the wider community I have tended to continue my Narrow Approach and have been happily headed down that path with TeamPatter. BUT...

 

A Resolution

I have decided that this project will be better served if I don't take it on as my own personal learning project but in a goal of producing a deliverable in iterative fashion i.e. The Agilist Approach. Also I'm going to try and share my lessons learned. I tend to keep my slip-ups and failures to myself. I'll share them with you instead on this project. Just don't expect me to make a habit of it on other projects. Once I have the product seeded for a 0.1 release I'll make it available. In the meantime, I'll keep you filled in - or not, if it falls by the wayside. The next thing that you should see arrive is the ability to interact with the very limited agent live.

Now back to the primary theme in accordance with the title.

What I Have Discovered So Far

At about 4 am this morning I was working on a simple set of patterns. I have been using the Windows Live Agent SDK. It's a phenomenal engine. Not that I have a lot to compare it to. I'm beginning to also take a look at Verbot, largely for some topology reasons.  I have found that building a natural language vocabulary for any environment is comparable to the nature of certain types of cracks in rock climbing. Let me explain what might be a bit of an esoteric relationship I draw in that comparison. Back in the day, when I climbed a good bit, we used to say 'Don't get sucked into that crack'. As you climb, cracks have natural solid holds to contort your body into. It was very easy to get carried away with that and find you relied on those features too much. You could easily find you followed those nice holds right into the back end of a shelf or other area off your line. In other words it was nice getting there but it's not where you wanted to be. In fact, you may now be in a bit of a jam (pun) from getting sucked up into that crack (also refers to sometimes literally climbing into a large crack further back than you really wanted to be) . You could easily just get 'sucked into' following the wonderful crack into a poor position. So far my experience with natural language has led me to repeat the same cautionary phrase to myself. I think I could endlessly refactor small sets of vocabulary so that I could provide you a thousand ways to say in English 'Show me all the failed builds in the last 24 hours'. It's the nature of the technology to abstract, rephrase and find alternative ways to say the same thing. But is there value in  being able to say that phrase with a mind boggling number of combinatorial patterns? NO, of course not. The goal isn't for me to prove how cleverly I can try to guess what you are saying no matter how clever you think you can be in saying it. We'll probably both be much happier if a few reasonable constructs are understood. That's why I have decided I have no choice but to go with the Agilist Approach. If I went with my preferred learning approach I'd have the greatest natural language engine in the world that let you do exactly one task initiated in a million ways of which 999,990 would never be used. My goal is to provide a more natural language means to interact with TFS to make my life easier and also provide services and information to others that can benefit from it.  OH-- And to find out if it's as cool a thing to do as it seems like.

I have also discovered that I am not very fond of the SDK documentation for BuddyScript (the Windows Live Agent natural language scripting language). Where oh where do I find more documentation on rephrase and how I use the opening operators of '+-' versus '+' versus something like 'RES - BEFORE OMG AFTER' or "=>" transforms etc.?! (this is hyperbole but you get the idea) I have the samples and the MSDN SDK docs but they're not as prescriptive as I'd like. I know it's just a learning curve and I'll get it all down but the samples on the MSDN documentation is poor.

I've also learned that just like every other time I am learning about anything new, it captivates a lot of my thoughts that are running in many directions. Luckily, my already drawn out mindmap comes to the rescue - this will keep me focused. I'll post up the small map for accountability soon.

 

More later. I have decided I want to get to writing some code on this instead of talking about it. If all goes well it won't be long before you'll get to actually interact with a 0.1 version.

Until later.

-M

Published Thursday, August 28, 2008 10:18 PM by michaelruminer

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

# Building Natural Language Interaction for TFS Is No Easy Task

Sunday, August 31, 2008 8:25 PM by Siddharth Bhatia

# re: Building Natural Language Interaction for TFS Is No Easy Task

This is really interesting.  Looking foward to see what you come up with.

Friday, September 05, 2008 9:33 AM by Team System News

# VSTS Links - 09/05/2008

Michael Ruminer on Building Natural Language Interactin for TFS Is No Easy Task Maor David on VSTSDB...

Friday, October 10, 2008 3:48 PM by User links about "mindmap" on iLinkShare

# User links about "mindmap" on iLinkShare

Monday, December 01, 2008 8:37 AM by if ( ! blogClogged )

# Updates To Team Patter - On Primitive Conversation Thread and Controlling Builds With Natural Language

I have just pushed out a few more changes to the Builder Bob of TeamPatter[ 1 ][ 2 ]. It won't be long

Tuesday, May 26, 2009 4:15 AM by Bookmarks about Interact

# Bookmarks about Interact


Enter the text you see in the image:

Leave a Comment

(required) 
required 
(required)