Work

Current work

I am working on tools for structured scenario thinking.

Many important situations are too messy to hold in the head at once. They involve partial information, social pressure, hidden assumptions, competing goals, and futures that are plausible enough to matter but not certain enough to predict.

I am interested in software that helps people turn this kind of situation into something outside the head: a possible world that can be inspected, questioned, played with, and revised.

The goal is not prediction. The goal is better orientation: seeing the situation more fully, making choices from a clearer model, acting, and learning from what changes.

Some questions I keep returning to:

  • How can people externalize a messy situation without flattening it?
  • How can software preserve uncertainty instead of pretending it is solved?
  • How can imagined consequences be useful without becoming fake prediction?
  • How can reflection after exploration turn into better judgment?

Adaptive language-learning systems

For nearly ten years, I worked on NLP, machine-learning, LLM, and adaptive-learning systems for language education.

I built human-in-the-loop AI systems for language learning: model-assisted content generation, example selection, answer evaluation, quality review, and learner-behavior feedback loops.

My work with neural and language-model-based systems predates the current AI hype cycle: from classical machine learning and LSTMs to transformers, fine-tuning, and LLM-driven content workflows.

I later led a small AI/NLP team, balancing research, product needs, content quality, and production constraints.

That work also put me close to product and management discussions, where I became interested in how teams reason through uncertainty, tradeoffs, and possible futures.

Some of the same questions remain alive for me: what should a model generate, what should a person review, what should a system remember, and what kind of experience actually helps someone learn?


Earlier public projects

Vocabulary tests

I worked with Marc Brysbaert and Emmanuel Keuleers on massive online vocabulary tests: simple yes/no lexical decision experiments where participants decided whether a string on screen was a real word.

The tests gave participants an estimate of their vocabulary size and gave us measurements of who knew which words, plus reaction times at a scale that is hard to get in a lab. I wrote code and maintained the English and Dutch tests, and we also ran related projects in Spanish, Basque (with BCBL), and Italian (with University of Milano-Bicocca).

The original test sites are no longer online. The resulting work is listed on the research page, including papers on word prevalence, vocabulary size, and large-scale lexical decision data.

Snaut – accessible distributional semantics

Making semantic spaces usable for researchers without computational infrastructure. A big obstacle to widespread use of distributional semantics in psycholinguistics has been the gap between producers and consumers of semantic spaces.

Although several packages have been published that allow users to train various kinds of semantic spaces, the large corpora and computational infrastructure as well as the technical know-how regarding training and evaluating semantic spaces is not available to many psycholinguists.

Therefore, in order to encourage the exchange and use of semantic spaces trained by various research groups, we release a simple interface that can be used to measure relatedness between words on the basis of semantic spaces.

See the source code for snaut and a related python module on GitHub. The original UGent interface is no longer online; the semantic spaces now live in the relocation note, with web interfaces for English and Dutch.

Duometer

This tool implements an efficient algorithm which allows to efficiently detect pairs of near-duplicate documents. This tool is for you, if you have a large corpus and you suspect it may contain some documents that are not identical but are similar enough that probably one of them should be excluded in your workflow.

The tool is implemented in Scala. You can view the source code on github or read a tutorial.

Semantic spaces and extrapolation of psycholinguistic variables

Can we predict whether most people find ‘jump’ concrete or abstract? Is there a method to find out at what age the word ‘distance’ is acquired?

Subjective ratings for words are ubiquitous in psycholinguistic research, but collecting them is time consuming and expensive.

At the same time, based on large text corpora, we can now estimate how similar meanings of two words are. I investigate whether machine learning techniques together with such semantic similarity measures derived from text corpora can improve our estimates of variables such as age of acquisition, concreteness, valence, arousal or dominance.

The paper is available via its DOI.

SUBTLEX-PL

There are now multiple publications which show that text corpora based on movie subtitles can provide particularly good word frequency estimates.

We created such a resource also for Polish. You can download the frequencies here.

Some information in Polish can be found in this blog post.

Rescorla-Wagner in TensorFlow

The formal model of Pavlovian conditioning described by Rescorla and Wagner (1972) is a special case of a neural network. To allow for efficient simulations, I implemented it in TensorFlow. You can find the implementation here.