WEBVTT
00:01.920 --> 00:03.280
Hi everyone!
00:03.280 --> 00:04.400
My name is Shane,
00:04.400 --> 00:09.679
and it's truly a real honor to be
00:09.679 --> 00:14.480
able to speak at EmacsConf.
00:14.480 --> 00:16.880
I love Emacs. I love Emacs Lisp,
00:16.880 --> 00:19.279
and this is also another topic
00:19.279 --> 00:22.233
that really excites me ever since
00:22.233 --> 00:28.160
I got my hands on OpenAI's GPT-3.
00:28.160 --> 00:29.920
Six months ago, I knew that it was
00:29.920 --> 00:33.920
important to research this for Emacs,
00:33.920 --> 00:35.980
you know, asides from being somebody
00:35.980 --> 00:39.040
who never wants to leave Emacs myself,
00:39.040 --> 00:41.440
and I hope that….
00:41.440 --> 00:43.120
Being one of the few Emacs users,
00:43.120 --> 00:45.360
possibly the only one that had
00:45.360 --> 00:48.160
access to GPT-3 for this long,
00:48.160 --> 00:52.559
I hope that I can contribute.
00:52.559 --> 00:55.199
So, Emacs, sorry.
00:55.199 --> 00:58.960
Imaginary programming is…,
00:58.960 --> 01:01.280
it's based on prompt engineering currently,
01:01.280 --> 01:02.559
but it's an abstraction over
01:02.559 --> 01:03.359
prompt engineering.
01:03.359 --> 01:06.479
You can read about prompt engineering
01:06.479 --> 01:08.560
and language models,
01:08.560 --> 01:13.040
that's quite easy to google for.
01:13.040 --> 01:15.520
And imaginary programming is a subfield
01:15.520 --> 01:17.360
of imaginary computing,
01:17.360 --> 01:19.424
which is just the larger domain
01:19.424 --> 01:21.420
of employing of computing
01:21.420 --> 01:24.240
that's based on imagination,
01:24.240 --> 01:25.600
artificial imagination,
01:25.600 --> 01:29.920
so, basically, dreaming up user interfaces
01:29.920 --> 01:32.159
instead of…, or at least partially
01:32.159 --> 01:34.079
dreaming them up.
01:34.079 --> 01:41.439
I suppose that it's a fringe paradigm,
01:41.439 --> 01:43.759
but it's extremely useful.
01:43.759 --> 01:47.759
Imaginary computing,
01:47.759 --> 01:49.200
if you're willing to call it that,
01:49.200 --> 01:51.920
would be what's used to
01:51.920 --> 01:53.413
imagine simulations
01:53.413 --> 01:54.320
for self-driving cars,
01:54.320 --> 01:57.840
as they're trained for example.
01:57.840 --> 01:58.984
But this technology finds
01:58.984 --> 02:00.960
its way to the public,
02:00.960 --> 02:04.880
and it should be in the public domain.
02:04.880 --> 02:06.799
So, Demis Hassabis
02:06.799 --> 02:08.959
he's the founder of DeepMind,
02:08.959 --> 02:12.400
and he did his Ph.D. in human imagination,
02:12.400 --> 02:16.900
now he's working on artificial imagination.
02:16.900 --> 02:20.239
So, just a couple of days ago
02:20.239 --> 02:25.040
I took AlephAlpha's world model API
02:25.040 --> 02:28.080
and I plugged it into Emacs's eww browser,
02:28.080 --> 02:30.800
and now I have a way of generating
02:30.800 --> 02:33.840
text for the images instead of actually…,
02:33.840 --> 02:38.072
so I can stay in my text only Emacs,
02:38.072 --> 02:42.560
which is the way it should be.
02:42.560 --> 02:45.636
Intelligent NFTs, I'll leave this
02:45.636 --> 02:47.360
for you guys to look at.
02:47.360 --> 02:49.280
Information bubbles.
02:49.280 --> 02:55.360
So, there's some potential bad outcomes
02:55.360 --> 03:05.680
from the runaway empowering of these
03:05.680 --> 03:08.959
large language models and other models
03:08.959 --> 03:10.000
in commercial hands.
03:10.000 --> 03:13.680
It's causing information bubbles and
03:13.680 --> 03:15.680
ways of controlling people.
03:15.680 --> 03:19.440
So, for example,
03:19.440 --> 03:21.680
micro tasks and stuff that…,
03:21.680 --> 03:23.650
furthermore just automating away,
03:23.650 --> 03:26.000
or abstracting away the role
03:26.000 --> 03:27.680
of a programmer,
03:27.680 --> 03:29.360
and the automating more and more
03:29.360 --> 03:32.319
increasingly abstract tasks,
03:32.319 --> 03:33.659
and I think the solution is to
03:33.659 --> 03:36.319
decentralize and break up these tasks.
03:36.319 --> 03:39.120
I have a potential way of doing that,
03:39.120 --> 03:40.693
but firstly I'll talk about
03:40.693 --> 03:42.400
the imaginary web briefly
03:42.400 --> 03:44.720
because the thing about these
03:44.720 --> 03:48.000
language models is,
03:48.000 --> 03:49.280
they can replace basically
03:49.280 --> 03:52.159
everything on the internet.
03:52.159 --> 03:55.280
So, like, replace your Wikipedia,
03:55.280 --> 03:57.680
or Stack Overflow,
03:57.680 --> 04:01.519
replace conversation if you want it with,
04:01.519 --> 04:05.920
from real people to chatbots instead,
04:05.920 --> 04:13.120
replace basically anything there's
04:13.120 --> 04:14.959
a website for.
04:14.959 --> 04:17.280
And that means that rich media has gone
04:17.280 --> 04:20.639
from becoming images and video
04:20.639 --> 04:22.560
and even from paywalls
04:22.560 --> 04:26.400
now into intelligent and truthful,
04:26.400 --> 04:29.520
because generating fictional websites
04:29.520 --> 04:31.919
is going to become a very easy thing to do,
04:31.919 --> 04:35.120
and actually the best way to do it,
04:35.120 --> 04:37.440
and the most useful way to do it,
04:37.440 --> 04:40.560
so then you need a source of truth.
04:40.560 --> 04:43.759
The imaginary web is a thing,
04:43.759 --> 04:46.000
imaginary interpreters are a thing,
04:46.000 --> 04:50.000
so you imagine your interpreter,
04:50.000 --> 04:53.759
or you overlay prompting on top of
04:53.759 --> 04:55.520
a real interpreter to see
04:55.520 --> 04:57.440
what you might want to do
04:57.440 --> 04:58.800
in an interpreter,
04:58.800 --> 05:01.039
and what you might want to say to somebody
05:01.039 --> 05:01.919
if you're talking to them.
05:01.919 --> 05:03.199
If you're inside, say,
05:03.199 --> 05:05.840
ERC in Emacs, an IRC client,
05:05.840 --> 05:07.440
and you prompt after somebody
05:07.440 --> 05:08.479
says something,
05:08.479 --> 05:10.400
then the prompt will probably suggest,
05:10.400 --> 05:13.120
what you might say in return,
05:13.120 --> 05:15.199
and then you can prompt like a multiverse,
05:15.199 --> 05:18.800
and you can pick from them.
05:18.800 --> 05:23.912
There's a bunch of crazy utilities
05:23.912 --> 05:26.560
for these language models.
05:26.560 --> 05:28.960
Paracosm vs Metaverse.
05:28.960 --> 05:30.828
So, Mark Zuck wants you to live in
05:30.828 --> 05:34.320
his virtual reality as defined by him,
05:34.320 --> 05:36.160
and he's going to do it
05:36.160 --> 05:40.539
by using these models to make you
05:40.539 --> 05:42.639
a fictional world that you can live in.
05:42.639 --> 05:43.280
You can do that,
05:43.280 --> 05:46.400
or you can use them yourself,
05:46.400 --> 05:50.000
and you build your own Paracosm.
05:50.000 --> 05:51.440
And I think that's an important
05:51.440 --> 05:53.440
ability to be able to have,
05:53.440 --> 05:56.880
otherwise we will be like the borg,
05:56.880 --> 06:01.520
and we'll be connected to Mark Zuckerberg.
06:01.520 --> 06:06.400
Truth is a hot topic.
06:06.400 --> 06:08.880
So, the way that I think we should do this
06:08.880 --> 06:10.720
to decentralize the language models is,
06:10.720 --> 06:13.199
to use Structuralism.
06:13.199 --> 06:19.600
Universal grammar,
06:19.600 --> 06:21.680
template metaprogramming, and GPT-3
06:21.680 --> 06:23.919
what do they have in common?
06:23.919 --> 06:27.759
Well, you have some kind of basis,
06:27.759 --> 06:31.408
like, you train your GPT-3,
06:31.408 --> 06:32.663
and then you do all your prompting
06:32.663 --> 06:33.360
on top of it.
06:33.360 --> 06:35.840
Like a person is born with this grammar,
06:35.840 --> 06:37.759
and then they quickly learn language,
06:37.759 --> 06:40.240
and like with C++ templates,
06:40.240 --> 06:42.080
you pre-process and then
06:42.080 --> 06:44.800
the run time runs on that.
06:44.800 --> 06:48.000
So, anyway, that was a slide.
06:48.000 --> 06:50.479
Structuralism.
06:50.479 --> 06:52.080
I think you can decompile…,
06:52.080 --> 06:52.880
think you can break,
06:52.880 --> 06:53.840
so you can decompose
06:53.840 --> 06:55.840
the language models into units,
06:55.840 --> 06:57.759
but those units won't look like neurons,
06:57.759 --> 06:59.440
they would look like these,
06:59.440 --> 07:01.759
and you put them onto a blockchain.
07:01.759 --> 07:02.744
But you can look at that later
07:02.744 --> 07:03.840
if you want anyway.
07:03.840 --> 07:07.199
I'm going to skip straight to ilambda,
07:07.199 --> 07:09.919
running out of time.
07:09.919 --> 07:12.240
I'll just quickly show you
07:12.240 --> 07:15.199
the ilambda primitive in ilambda.
07:15.199 --> 07:19.199
So, it evaluates instead of run,
07:19.199 --> 07:21.680
for example, here's the reduced function,
07:21.680 --> 07:22.632
and you've defined your
07:22.632 --> 07:25.520
imaginary lambda here.
07:25.520 --> 07:26.560
And it doesn't have a body,
07:26.560 --> 07:31.599
it's just got the comment
07:31.599 --> 07:33.120
and the parameters,
07:33.120 --> 07:36.560
and that's enough for….
07:36.560 --> 07:38.720
Once you have that ilambda
07:38.720 --> 07:40.080
that runs now as a function,
07:40.080 --> 07:40.800
you can stick it into
07:40.800 --> 07:42.720
a reduced function, for example,
07:42.720 --> 07:46.240
and it'll reduce this list.
07:46.240 --> 07:50.560
You could even remove…, yeah,
07:50.560 --> 07:51.759
so you kind of need the comment
07:51.759 --> 07:56.048
otherwise it's too hard to imagine
07:56.048 --> 07:57.360
what would happen next,
07:57.360 --> 08:01.520
but for a function you can literally
08:01.520 --> 08:03.360
have an idefun even without
08:03.360 --> 08:04.639
the argument list.
08:04.639 --> 08:06.319
It was just like generate-fib-sequence,
08:06.319 --> 08:09.919
and most likely when you run that defun,
08:09.919 --> 08:13.759
it would work the way you want it.
08:13.759 --> 08:16.000
The more information you give the idefun,
08:16.000 --> 08:17.840
the imaginary defun,
08:17.840 --> 08:20.879
the better it would capture the task
08:20.879 --> 08:22.000
which you're trying to do,
08:22.000 --> 08:23.039
in this case you want to generate
08:23.039 --> 08:24.080
a Fibonacci sequence.
08:24.080 --> 08:28.319
And yeah, you can define functions
08:28.319 --> 08:30.560
without having a body,
08:30.560 --> 08:32.640
and they run an inference instead.
08:32.640 --> 08:34.159
Here's a way of overriding
08:34.159 --> 08:36.000
the language model that's used,
08:36.000 --> 08:40.640
for example, using dynamic scope.
08:40.640 --> 08:41.863
So, under the hood,
08:41.863 --> 08:47.040
idefun just uses an ilambda.
08:47.040 --> 08:50.959
This function here just doubles things.
08:50.959 --> 08:53.752
So, here's a function that gets you
08:53.752 --> 08:59.279
a hexadecimal color just from the name.
08:59.279 --> 09:00.160
And you can create
09:00.160 --> 09:02.160
arbitrary functions like this,
09:02.160 --> 09:04.268
so, what we need is like a library
09:04.268 --> 09:07.200
of imaginary functions, I think,
09:07.200 --> 09:12.800
that match a language model.
09:12.800 --> 09:15.760
Macros on the other hand,
09:15.760 --> 09:18.160
as different from functions,
09:18.160 --> 09:20.000
they actually macro expand
09:20.000 --> 09:21.360
and generate code.
09:21.360 --> 09:23.279
So, when you macro expand this,
09:23.279 --> 09:26.320
you'll get this,
09:26.320 --> 09:30.000
and that's because this has an arity of 3,
09:30.000 --> 09:31.839
and then when you macro expand
09:31.839 --> 09:32.959
that underlying macro,
09:32.959 --> 09:35.120
it generates the actual source code.
09:35.120 --> 09:37.839
You can actually run these macros,
09:37.839 --> 09:41.279
and it will cache the output…,
09:41.279 --> 09:42.480
it will catch the source code,
09:42.480 --> 09:44.240
so the macro runs the same
09:44.240 --> 09:45.839
every single time,
09:45.839 --> 09:47.519
or generates the same code,
09:47.519 --> 09:48.560
but you can just use it
09:48.560 --> 09:49.920
to generate code really easily
09:49.920 --> 09:52.000
while you're programming.
09:52.000 --> 09:55.920
I hope that this has been informative,
09:55.920 --> 09:57.600
it wasn't too much time,
09:57.600 --> 10:00.312
but there's plenty of material
10:00.312 --> 10:01.680
for you to dig into it more
10:01.680 --> 10:04.000
if you're interested.
10:04.000 --> 10:04.959
Thank you very much
10:04.959 --> 10:09.519
for letting me talk today.
10:09.519 --> 10:15.680
Peace out!
10:15.680 --> 10:16.680
[captions by bhavin192 (Bhavin Gandhi)]