2023–24 Projects:
Several years ago, I developed a Software Design assignment followed by a comps topic based on a goofy thriller called Daemon, by Daniel Suarez. This novel starts just after the death of a billionaire game developer who has left a lot of malicious software running in the background on computers around the world. The job of the software (collectively referred to as "the Daemon") is to monitor the news for particular events, which in turn trigger various actions pre-selected by the now-dead evil genius. The action kicks into high gear (with a couple of murders, of course, including one involving an electrified door frame) as soon as the Daemon detects the death of its author.
Even if you don't have plans for posthumous world domination, how might you use software that detects complex events in the human world? At a simple level, you could use such a system to filter which news you read. For example, I might want to read everything about patent troll court cases, or baseball news but only about the Twins. At a more complex level, you can imagine responding to a combination of news about Congress, the TPP Treaty, and a public corporation's quarterly conference call by automatically buying or selling shares of some stock.
For this project, you will focus your attention on the part of this Daemon vision that involves the detection of events described online using English prose. Your final product will include a simple specification language for articulating events of various types, and an engine for determining whether those events have occurred. Your system only needs to log the occurrence of each event. It need not (and in fact, I'll be bold and say it shouldn't) kill anybody using an electrified door frame or any other mechanism of mayhem.
Much of what you can imagine for this project would probably involve creating an artificial intelligence equivalent to a person. We will use a somewhat lower bar than "successfully created sentient software" to evaluate your performance on this project.
The heart of your project will be here:
(assertion, block_of_prose) → boolean
,
where the result is True if and only if block_of_prose validates the assertion. For a (fairly advanced) example,
suppose the assertion is "The Pope is in Argentina." This could be validated by prose including sentences
like: "The Pope began his South American tour today." and "After his
arrival this morning, he toured the Buenos Aires Botanical Garden."
You'll start some easy assertion types to get used to the process (e.g. "price for stock X goes above $Y per share" or "Fidel Castro has died"). Gradually, you'll extend to trickier ("any current or former head of state has died") and trickier ("the Pope is in Argentina") assertions and assertion-validation techniques.
In addition:
Though it's not a requirement for members of this team, you might find it helpful to take CS322 Natural Language Processing in the fall.