Adam Vandervorst

Hi, I'm a developer and independent researcher working on machine learning, graph generalizations, and human-computer interaction.

Collaboration requests

Information Programming

Making machine learning robust in real-world applications faces several challenges. One of these challenges is integrating probabilistic outputs of deep learning systems models with prior beliefs, simple heuristics, and data from other sources. Information Programming enables you to think holistically about the system and solve problems in a comprehensive framework. Based on the principle of increasing the information about the problem, you have to be explicit about how subsystems exchange information and how deductions on the data get you closer to the desired result. With that specification, the framework makes policies available for running the resulting system safely.

Delta Streams

Reactive Programming (RP) is an interesting but rather niche paradigm for constructing programs that behave solely based on the events passing through the system. Recently, systems like React have taken over with a simplified data-centric paradigm. It addressed the biggest shortcoming of RP - not being able to talk about data structures well - by giving up control over the specific flow. Elm allows for more control at the cost of manually modeling changes to the data. Delta streams provides a framework for constructing models of changes to specific data structures and compositions thereof on top of Functional Reactive Programming, merging a carefree data changes model with a high level of control. The Impuls Scala library attempts to implement this and cross-compiles to the web.

Large Language Model Semantics

Large Language models carry semantics but not the most accessible way: it classically takes a fair share of empathy and trial and error formulating "what sequence of tokens would likely be followed by what I want to know on the internet". Even ones fine-tuned with human feedback struggle with robustness when met with multistep tasks. There are several methods that can improve the core capabilities, yet one can get production-ready results today: invocation and prompting strategies. This includes checking its own results (which works because the model is myopic, and for now fails to distinguish its own outputs), automated and on-the-fly prompt testing, programmatic (re)formulation of questions, and in general employing factored cognition. Leveraging these was crucial for GPT-3 startups I worked with, and long-term efforts towards powerful system should not be undertaken without a firm understanding of the dynamics and a transparent framework (like ICE but with the knowledge and state integrated, probabilistic reasoning, and resource control) for managing and designing strategies.

Domains of interest

Graph generalizations

Graphs are convenient for representing many everyday structures, but often they need to be extended to accommodate different classes of objects, weighted relationships, or meta-data. Graph generalizations can be seen as an extension of graphs that naturally embeds many of these features simultaneously. One popular generalization is that of the hypergraph (which is sometimes used to refer to graph generalizations), which extends connections to apply to more than two objects.

I am researching a formalism where connections between connections are allowed, as well as more applicable and more general forms of that. Other formalisms by different people can be found on a page dedicated to related work. Currently, I'm compiling these formalisms into a practical lifelong graph library.

Semantic typing

A semantic keyboard is an input mechanism that doesn't rely on characters. Instead, you type meaningful chunks or perform actions to shape a body of information. These keyboards can: alleviate the experience of people with disabilities by only requiring high-level inputs, ease the learning curve while typing faster, or give rise to new input devices.

I've worked on a handful of semantic keyboards, varying strongly in purity and performance. With an early attempt at this - Mirror - you type with complete words or programming constructs with any number of keys mapping to any number of meaningful chunks. Darts takes the idea a step further: you repeatedly navigate a word-space to 'type' a sentence. Although young, I think this area of research can provide exciting new tools to many people. Currently, I'm working on Auxilio - an assistive application framework - with Chang Lab.

HCI and programming

Despite the globalization of computer applications and the introduction of new modalities, interfaces are often poorly adapted. We still use a typewriter keyboard design on refined touch devices, a desktop experience as introduced in Windows 95 on teraflop computers, and spend hours browsing a diverse mess of websites.

Human-computer interaction (HCI) is - in my opinion - in dire need of innovation. I'm actively working on software - both for clients and to share as FOSS - trying to eliminate these historical constraints. At SingularityNET we're exploring an AI-first programming language with a dataset and knowledgebase aware editor (my vision talk at AGI-22).

Programming - the semantic side - has come a long way, but we should strive to keep pushing our ability to express our problems, constraints, thoughts, runtime, data, and (finally) solution. From new computational grounds in Simuli and Groq to new code management in Unison (Cloud) and Hydro.