Dreamspace is an exploration of the collective unconscious through computational art. Over one hundred thousand online dream journal entries were compiled and processed using the Word2Vec machine-learning algorithm to create a vector space of one hundred dimensions. This was then projected in 3D and a dynamic planisphere map was created which represented the words used to describe people’s dreams as stars and the relationships between them as constellations.
During the early days of the coronavirus lockdown in the UK, many people reported having strange dreams. This led me to think about an idea which I have dwelt on since childhood as to the nature of consciousness and what separates one mind from another.
I discussed the idea with my crit group at Goldsmiths and felt it had good promise. The next morning a friend from undergrad days, who I hadn’t been in touch with for many years, contacted me out of the blue to say that I had appeared in his dream the night before. He is a practising Buddhist, and so we discussed my idea and forms of consciousness at some length. This event cemented in my mind that the project was the right choice.
Concept and background research
My ideas centred on showing our dreams as the product of one collective entity. I wanted the work to focus less on the specifics of any individual dream and instead to consider the environment of dreaming as a whole. Each night we all escape to the 'dreamspace' where our minds are released from the constraints of conscious thought. In our dreams, there is no work to be done.
Your vision will become clear only when you can look into your own heart. Who looks outside, dreams; who looks inside, awakes. — C. G. Jung
Talking through my idea with friends, the same book was independently recommended three times to me: The Hero with a Thousand Faces (Campbell, 1949) which explores the ideas of myths in society as a form of collective memory. It also looks at the role of symbols and archetypes informed by the ideas of Carl Jung. I wanted my work to draw on these ideas and to pose questions about consciousness and the environment of dreams.
In producing sketches, I often returned to node-based graphs of relationships and from here I felt that perhaps creating a map to the collective unconscious would be a great starting point for the journey.
A friend had recently seen Susan Hiller’s Dream Mapping (1973) in which the artist created thematic maps from the dream descriptions shared in the morning conversations of a group of seven dreamers and found shared features between the dreams. I intended to do something similar but on a larger scale of sampling and using just textual descriptions, where the words for entities would create the distances of the space.
Visually, I was inspired by the work of Joseph Cornell and in particular his reworkings of celestial planispheres and star charts. Cornell was himself interested in surrealism and the realm of dreams and was inspired by the novella Aurélia (Nerval, 1854) which features dreams and hallucinations of the author’s descent into madness at his infatuation with his muse.
The process of creating this work was divided into three parts: fetching and generating the data, displaying it on screen, and plotting and laser cutting the prints.
To gather the data, I decided to scrape around 20,000 dream journals from DreamBank's online collection. I later added around 30,000 more journal entries from the Sleep and Dream Database, and another 50,000 from the Dream Journal Ultimate app public feed. In the final version I had 100,140 dream journal entries, totalling 17,114,790 terms with a unique vocabulary of 118,730 terms. Unfortunately, it isn’t easy to estimate how many people contributed to this corpus since on the original websites some dreams are attributed to groups and some are anonymous.
Getting hold of these journal entries was relatively straightforward, as I have previous experience of scraping data, however cleaning the text was quite involved since the journals had been compiled from various surveys and had inconsistent formatting and metadata within the journal entries.
For analysis of the dreams I initially looked at Linguistic Inquiry and Word Count (LWIC) text analysis programme, after seeing it used in one of artist Lauren Lee McCarthy’s projects, but it’s only available under a proprietary license and didn’t seem that suited to my idea as it mostly focuses on classification of fragments of text.
I then started looking at other neuro-linguistic programming (NLP) algorithms and found Word2Vec and GloVe. I found there was an existing Node module for Word2Vec and it was quite easy to get the demo working. The Word2Vec algorithm is interesting because it uses two-layer neural networks that are trained to reconstruct linguistic contexts of words. I trained it on my initial set of dreams using 100 dimensions and then extracted those values.
My next problem was to reduce the 100 dimensions to three dimensions. I had previously seen t-distributed stochastic neighbor embedding (t-SNE) used in projects and thought it would be a great fit in this case as it would allow me to reveal the semantic relationships between the words. There were a lot of libraries which could do the calculations but I found most of them were either hard to get working or had a very slow runtime. I found the TensorFlow version worked really well and so I stuck to using that.
I I found that projecting to lower dimensions is something that requires quite a lot of tuning, both of the parameters and the input values. It wasn’t really any advantage to project the full 10,000 values, as it tended to both look messy and cluster too tightly around certain very common terms. In the end I curated a set of 1,004 terms to project, I picked this number as it was the number of fixed stars identified by Tycho Brahe in his star table of 1598. I used a mix of heuristics to identify which terms to include, such as TF-IDF (Robertson, S. E., and K. Spärck Jones), a score of how common a word is to individual documents and to a corpus.
I then took the 3D projected coordinates and normalised them using Three.js vectors and fitted them to the World Geodetic System (WGS84) model to turn them into the GeoJSON format.
I wanted to dynamically create a constellation for any given dream using the words in the projected map. To do this, I created a Delaunay Mesh of the selected points and then used the Urquhart edges subset; I then discarded any connections that were outside of the range of acceptable lengths. This gave a nice-looking set of connections that looked similar to constellations you might see in a star map.
For creating the prints, I used Matt DesLauriers’ canvas-sketch library, which helps by generating a preview and setting various defaults and converting units to millimetres. I already had a plotter (Roland DPX-3300) but unfortunately, it’s rather old and predates the SVG standard language and only understands HPGL. To get around this, I had already written a library Canvas Polyline, which converts HTML Canvas commands into a series of either lineTo or moveTo commands. In the past, this has worked well, but this was by far the most complex output I’ve plotted so far and I discovered a few bugs and missing features in my existing code along the way.
Plotting is a slow process, but it’s enjoyable to watch and gives degrees of freedom that aren’t easily available by other printed methods. I decided to plot on black card using a mix of white, silver and gold pens (Uni-ball Signo Broad pens). It took quite a few attempts to find settings that would work well for these. In the end, I created two sets of final prints and then took these to the Hatchlab at university where I used the laser cutter to burn out holes for the stars. I then created a cardboard jib to hold in place LED lights that were used to back-light the stars once the prints were framed.
There is a lot of scope for future development of this work. One of the big advantages of the broad scope was that I could develop the project in a variety of different ways and then narrow down the scope as we got closer to the deadline and had more certainty about what form our degree show would take.
I looked at allowing direct user interaction, outside of Covid-19 issues. I would have probably allowed users to select dreams and perhaps words directly using a mouse and keyboard. I did do some user testing of allowing people to enter their own dreams, however I found this rarely led to a good interaction since people would usually type out dreams that were a single sentence of around 15 words which meant it had very limited scope to draw a pleasant constellation.
I would like to develop the plots further. I think small versions could have more appeal for people to buy for their homes, as I had a number of enquiries along this line and I would like to try plotting twelve views of Dreamspace rotated by 30° instead of just the two views which are 180° rotated.
I also worked on a 3D representation of Dreamspace. My plan was to project it onto a wall or ceiling near to the rest of the works, but I didn’t feel the space in which I was exhibiting was suitable for this, so I didn’t develop it further.
Overall, I was very pleased with the outcome of this project. The hardest problem was not knowing if and how our degree show would progress and how my work might be exhibited and what form would work best under those circumstances.
The core concept had many strands that could be explored and so I had several areas that I developed quite far which could have been used if the circumstances had been different.
I was pleased that I got the backlighting of the prints working, but it took a lot more time than I anticipated. I think it might have been better if I could have exhibited in a darker space as this would have both accentuated the backlighting and also reduced the reflection on the glass. I think it also could have worked well to have projected the Dreamspace spheres so that they were much larger, giving a different feel to the work.
As I said previously, I found it didn't work well to allow users to directly enter their dreams to be visualised within Dreamspace. However, given more time, I would like to explore working with the Dream Journal Ultimate app team to be able to access their private API so that I could add timestamps to the latest dream journal entries to situate the work more in the present moment.
Be not afeard; the isle is full of noises,
Sounds and sweet airs, that give delight, and hurt not.
Sometimes a thousand twangling instruments
Will hum about mine ears; and sometime voices,
That, if I then had waked after long sleep,
Will make me sleep again: and then, in dreaming,
The clouds methought would open, and show riches
Ready to drop upon me; that when I waked,
I cried to dream again.
— Caliban, in Shakespeare's The Tempest
Materials and libraries
- Svelte — https://svelte.dev
- Node Word2Vec — https://github.com/Planeshifter/node-word2vec
- D3.js — https://d3js.org
- Canvas-sketch — https://github.com/mattdesl/canvas-sketch
- Canvas-polyline — https://github.com/aubergene/canvas-polyline
- Noto Serif — https://fonts.google.com/specimen/Noto+Serif
- Big Shoulders Display https://fonts.google.com/specimen/Big+Shoulders+Display
- Campbell, Joseph. (1956). The Hero with a Thousand Faces. New York: Meridian.
- Crary, Jonathan. (2013). 24/7: Late Capitalism and the Ends of Sleep. New York: Verso.
- Encyclopaedia Britannica. Astronomical Map — The Constellations and Other Sky Divisions. [online] Available at: www.britannica.com/science/astronomical-map/The-constellations-and-other-sky-divisions#ref510210. [Accessed 25 Sept. 2020].
- Hiller, Susan. Susan Hiller website [online] available at: www.susanhiller.org, www.susanhiller.org/otherworks/dream_mapping.html. [Accessed 13 Aug. 2020].
- Hoving, Kirsten A. (2009). Joseph Cornell and Astronomy: A Case for the Stars. Princeton: Princeton University Press.
- Jung, Carl Gustav. (1966). 'On the Relation of Analytical Psychology to Poetry'.
- Kandinsky, Wassily. (2013). Point and Line to Plane. Mansfield Center: Martino Publ.
- Marenko, Betti. (2015). 'When making becomes divination: Uncertainty and contingency in computational glitch-events.' [pdf] London: Design Studies. Available at: ualresearchonline.arts.ac.uk/id/eprint/8663/. [Accessed 13 Aug. 2020].
- Meulen, B.C. ter, et al. (2009). 'From Stroboscope to Dream Machine: A History of Flicker-Induced Hallucinations.' [pdf] European Neurology, vol. 62, no. 5, pp. 316–320, DOI: 10.1159/000235945. Available at: researchgate.net/publication/26789124_From_Stroboscope_to_Dream_Machine_A_History_of_Flicker-Induced_Hallucinations. [Accessed 31 Mar. 2020].
- Mikolov, Tomas, et al. (2013) 'Efficient Estimation of Word Representations in Vector Space.' [pdf] ArXiv.Org. Available at: arxiv.org/abs/1301.3781.
- Radford, Alec, et al. (2019) Language Models Are Unsupervised Multitask Learners. [pdf] Available at: https://www.semanticscholar.org/paper/Language-Models-are-Unsupervised-Multitask-Learners-Radford-Wu/9405cc0d6169988371b2755e573cc28650d14dfe.
- Robertson, S. E., and Spärck Jones, K. (1994) 'Simple, proven approaches to text retrieval.' [pdf] Available at: www.cl.cam.ac.uk. www.cl.cam.ac.uk/techreports/UCAM-CL-TR-356.html. [Accessed 13 Aug. 2020].
- Rushkoff, Douglas. (2011). Program or Be Programmed: Ten Commands for a Digital Age. New York: Soft Skull Press.
- Shakespeare, William. The Tempest.
- Walter, W. Grey. (1961). The Living Brain. Harmondsworth: Penguin Books.