6
Feb
Posted by Jason Adams in computational linguistics, natural language processing, search engines, search interfaces, semantic search engine, semantic web, wolfram alpha. Leave a Comment
At the Atlanta Semantic Web Meetup tonight, Vishy Dasari gave us a quick description and demo of a new search engine called Semantifi. They purportedly are a search engine for the deep web, meaning the web that is not indexed by traditional search engines because the content is dynamic. They are just in the very early stages, but have opened the site for people to play with and add data to via “Apps.” These apps are sort of like agents that respond to queries, returning results to some marshal process that decides which App will get the right to answer. Results are ranked by some method I wasn’t able to ascertain, but it reminded me of how Amy Iris works. These apps form the backbone of the Semantifi system, it seems, and they are crowdsourcing their creation. You can create a very simple app to return answers on your own data set in a few short minutes.
Perhaps more interesting is that they use a natural language interface in addition to the standard query sort of interface we’re all used to. Given the small amount of data currently available, I couldn’t really determine just how well this interface performs. It is based on a cognitive theory by John Hawks (sp?) that apparently states we think in terms of patterns. That’s very general and I haven’t been able to chase down that reference — and I forgot to ask Vishy for more info at the meetup. If someone can clear that up for me, I’d be grateful. The only seemingly relevant John Hawks I could find is a paleoanthropologist, so not sure. Anyhow, these patterns are what Vishy says the system uses to interpret natural language input. That may be a grandiose way of saying n-gram matching.
While Wolfram|Alpha is a computational knowledge engine™, Semantifi does not make that claim. Apps may compute certain things like mortgage values, but it’s not a general purpose calculator. However, Semantifi is looking at bringing in unstructured data from blogs and the like, that W|A ignores. It remains to be seen what that will look like, though. Also, users can contribute to Semantifi while W|A is a black box. In any case, they are making interesting claims and I look forward to seeing how they play out with more data.
Note: All of my observations are based on notes and memories of tonight’s presentation, so if I made any mistakes please post corrections in the comments or email me.
31
Oct
Posted by Jason Adams in beagles, halloween, pumpkins. 1 Comment
We decided to do a complicated pumpkin design this year and it turned out surprisingly well! I present, the Daedalpumpkin:

The Daedalpumpkin
13
Sep
Posted by Jason Adams in computational linguistics, java, natural language processing, nlp, parsers, python, ruby, stemmers, wordnet. 4 Comments
There are quite a few well-known libraries for doing various NLP tasks in Java and Python, such as the Stanford Parser (Java) and the Natural Language Toolkit (Python). For Ruby, there are a few resources out there, but they are usually derivative or not as mature. By derivative, I mean they are ports from other languages or extensions using code from another language. And I’m responsible for two of them! :)
There are also a number of fledgling or orphaned projects out there purporting to be ports or interfaces for various other libraries like Stanford POS Tagger and Named Entity Recognizer. Ruby (straight Ruby, not just JRuby) can interface just about any Java library using the Ruby Java Bridge (RJB). RJB can be a pain, and I could only initialize it once per run (a second attempt never succeeds), so there are some limitations. But using it, I was able to easily interface with the Stanford POS tagger.
So while there aren’t terribly many libraries for NLP tasks in Ruby, the availability of interfacing with Java directly widens the scope quite a bit. You can also incorporate a c library using extensions.
Naturally, if I missed anything, no matter how small, please let me know.
16
Aug
Posted by Jason Adams in adaptations, books, douglas adams, movies, time traveler's wife. 2 Comments
This post contains NO spoilers.
I saw The Time Traveler’s Wife with my wife today. I had read the book about a year ago, and had been looking forward to the movie. I wasn’t disappointed — I thought the movie was very moving and captured the spirit of the book, even if it didn’t capture everything. It ignored some dynamics that the book elaborated on and some scenes and details were slightly different.
One thing I was concerned about while watching the movie was just how much I was liking it because I knew all the background in the book, or how much came from the movie. If the former was true, then the movie wasn’t going to be that great an experience for someone who had read it. If the latter was true, then it was a damn good movie. I don’t have the answer to that.
Another concern is how it’s a cultural norm in our society to bash movies based on books, and yet to relentlessly watch them to the point that Hollywood feels compelled to turn every book that sells a few copies into one. Douglas Adams once made the point that he changed the story of the Hitchhiker’s Guide to the Galaxy to match the medium he was writing it for. A story that plays well on the radio can take advantage of completely different things when it is translated to book or movie form. I don’t have the exact quote and searching for that kind of thing is damn near impossible on Google (let me know if you find it).
But that’s an observation I have long taken to heart when watching movies translated from books. Obviously you can’t fit an entire book into 2 hours and still have a story that tells like anything worth watching. You can’t capture the full power of every scene, every nuance, nor every subtlety that a book can. That’s not what the silver screen does well. What it does well (when it is done right) is making you feel in touch with characters and the story. Books do that too, but movies actually put the images before your eyes.
That said, I have never been able to bring myself to read a book based on a movie. I just can’t do it.
4
Aug
Posted by Jason Adams in astronomy, futureme, solar eclipse, wolfram alpha. 1 Comment
I already knew Wolfram|Alpha could do some cool astronomy calculations, like comparing the escape velocities of the Galilean moons. A recent W|A blog post also pointed out that you can calculate the next lunar eclipse. So I tried to see when the next solar eclipse would be for my area and it came up with a partial solar eclipse in 2014. Skip that and go to the next and it turns out there’s going to be a decent one in 2017. As a reminder, I sent an email to myself via FutureMe. It’ll be interesting to see if a) I’m still using gmail in 8 years, b) if FutureMe is still around sending emails, and c) if we can still see the sun. Man, I love W|A.

Total solar eclipse in 2017
1
Aug
Posted by Jason Adams in algorithms, code, collections, java, programming, sorting. 5 Comments
I’m always a little annoyed I have to implement sorting Map keys by their values myself in Java. It seems like they should be a part of the standard Collections library or something. Maybe they are and I just haven’t seen it? My solution (gist) is based on feedback from Josh in the comments to a previous post. How does that look to you?
30
Jul
Posted by Jason Adams in contests, github, netflix prize, recommender systems. 1 Comment
Github just announced their own version of the Netflix Prize. Instead of predicting movie ratings, Github wants you to suggest repositories for users to watch. This is different from the Netflix Prize in a number of ways:
- a user watching a repo is similar to a user visiting a page from a search engine – they are implicit endorsements (we assume that doing so means the user actually likes the repo)
- we are predicting the likelihood of a user wanting to watch a repo (binary event), rather than how much a user likes a movie
- the data set is a lot smaller, and sparsity is a LOT greater (the matrix is 0.006% filled vs. Netflix 1% filled)
- you get multiple tries! they let you pick 10 repos that user may watch and as long as one of them matches, you get credit for it
Already there have been many submissions. The number one place is currently held by Daniel Haran with 46.9% guessed correctly. Happy hunting, if you decide to compete.
The prizes are a bottle of Pappy van Winkle bourbon and a large Github account for life. The bottle of Pappy is making me consider competing.
30
Jul
Posted by Jason Adams in c, computational linguistics, latent dirichlet allocation, lda, machine learning, nlp, ruby, rubygems, topic modeling. Leave a Comment
A while back I ported David Blei’s lda-c code for performing Latent Dirichlet Allocation to Ruby. Basically I just wrapped the C methods in a Ruby class, turned it into a gem, and called it a day. The result was a bit ugly and unwieldy, like most research code. A few months later, Todd Fisher came along and discovered a couple bugs and memory leaks in the C code, for which I am very grateful. I had been toying with the idea of improving the Ruby code, and embarked on a mission to do so. The result is a hopefully much cleaner gem that can be used right out of the box with little screwing around.
Unfortunately, I did something I’m ashamed of. Ruby gems are notorious for breaking backwards compatibility, and I have done just that. The good news is, your code will almost work, assuming you didn’t start diving into the Document and Corpus classes too heavily. If you did, then you will probably experience a lot of breakage. The result, I hope is a more sensical implementation, however, so maybe you won’t hate me. Of course, I could be wrong and my implementation is still crap. If that’s the case, please let me know what needs to be improved.
To install the gem:
gem sources -a http://gems.github.com
sudo gem install ealdent-lda-ruby
Enjoy!