Skip to content

hbrouwer/dfs-tools

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DFS Tools

About

This implements the Distributional Formal Semantics (DFS) framework, as described in:

DFS Tools is written in Prolog, and tested in SWI-Prolog and YAP.

Detailed documentation can be found here:

Examples can be found in the worlds/ folder.

For more work, employing (an earlier formulation of) the framework, see:

Example workflow

Sampling:

Sampling a single model:

?- dfs_sample_model(M), dfs_pprint_model(M).

%%%% Um = { e1, e2, e3, e4, e5, e6, e7, e8 }
%%%%
%%%% Vm ( john ) = e1
%%%% Vm ( ellen ) = e2
%%%% Vm ( restaurant ) = e3
%%%% Vm ( bar ) = e4
%%%% Vm ( pizza ) = e5
%%%% Vm ( fries ) = e6
%%%% Vm ( wine ) = e7
%%%% Vm ( beer ) = e8
%%%%
%%%% Vm ( order ) = { < e1, e5 >, < e2, e7 >, < e2, e6 >, < e1, e8 >, < e2, e5 > }
%%%% Vm ( pay ) = { e1 }
%%%% Vm ( ask_menu ) = { e2 }
%%%% Vm ( eat ) = { < e2, e5 >, < e2, e6 > }
%%%% Vm ( drink ) = { < e1, e8 > }
%%%% Vm ( enter ) = { < e1, e3 >, < e2, e3 > }
%%%% Vm ( leave ) = { e1 }

M =  ([e1, e2, e3, e4, e5, e6, e7, e8], [john=e1, ellen=e2, restaurant=e3, bar=e4, pizza=e5, fries=e6, wine=e7, ... = ...|...]).

Sampling a set of models:

?- dfs_sample_models(2,Ms).
Sample: 1 / 2

%%%% drink: { < john, wine >, < ellen, wine > }
%%%% order: { < ellen, wine >, < john, beer >, < john, pizza >, < john, wine >, < ellen, pizza > }
%%%% pay: { ellen, john }
%%%% ask_menu: { ellen }
%%%% enter: { < john, bar >, < ellen, restaurant > }
%%%% eat: { < ellen, pizza > }

Sample: 2 / 2

%%%% pay: { john, ellen }
%%%% enter: { < ellen, bar > }
%%%% order: { < ellen, beer >, < john, beer >, < john, pizza > }
%%%% leave: { ellen, john }
%%%% eat: { < john, pizza > }
%%%% drink: { < ellen, beer > }

Ms = [([e1, e2, e3, e4, e5, e6, e7|...], [john=e1, ellen=e2, restaurant=e3, bar=e4, pizza=e5, fries=e6, ... = ...|...]),  ([e1, e2, e3, e4, e5, e6|...], [john=e1, ellen=e2, restaurant=e3, bar=e4, pizza=e5, ... = ...|...])].

From models to vector space

dfs_sample_models(50,Ms), dfs_models_to_matrix(Ms,Mx), dfs_pprint_matrix(Mx).

[...]

%%%% 01011000110110001111111111000101101100100011100011 ask_menu(ellen)
%%%% 01000111000100111010110010100111110101100101001100 ask_menu(john)
%%%% 00001101110000000100000111000100001010001001100000 leave(ellen)
%%%% 10010101001101000100011010010010000100100011000101 leave(john)
%%%% 00111101111111000111100111001110010110111101100000 pay(ellen)
%%%% 10011111001011010101011011010010001010110011001111 pay(john)
%%%% 00000000000101011000100000001001001000110000001010 drink(ellen,beer)
%%%% 11001011111010100101111111011100010110110101111000 drink(ellen,wine)
%%%% 10111111101011100011111010111111000010101010011011 drink(john,beer)
%%%% 00000010101010000100100000010101001001000000101111 drink(john,wine)
%%%% 10001011001010001101110010110010001001100011000001 eat(ellen,fries)
%%%% 00101000100100001000101110010100011000111111001101 eat(ellen,pizza)
%%%% 11100000110011000101010011010100110110101101001001 eat(john,fries)
%%%% 00000100101011001110000101000010001100110010011100 eat(john,pizza)
%%%% 10000001000010001011010001000010110000100000100100 enter(ellen,bar)
%%%% 01110100100101000100001000101101001110011101001011 enter(ellen,restaurant)
%%%% 00001101000010010100000001001100000001101010000001 enter(john,bar)
%%%% 01100010001100001011100110100011001100000001000110 enter(john,restaurant)
%%%% 00000000000101011100100000001001001001110000001010 order(ellen,beer)
%%%% 10001011001010001111110010110010111001100011100001 order(ellen,fries)
%%%% 01101100110100001000101111111100011100111111001101 order(ellen,pizza)
%%%% 11111011111011101111111111011100110111111101111001 order(ellen,wine)
%%%% 11111111111011111011111111111111101011101011011111 order(john,beer)
%%%% 11100000110011110111011011011101110111101111001001 order(john,fries)
%%%% 01100100101011001110100111110011001100110011111111 order(john,pizza)
%%%% 00000010101010001100101000010101011011001011101111 order(john,wine)

Ms = [([e1, e2, e3, e4, e5, e6, e7|...], [john=e1, ellen=e2, restaurant=e3, bar=e4, pizza=e5, fries=e6, ... = ...|...]),  ([e1, e2, e3, e4, e5, e6|...], [john=e1, ellen=e2, restaurant=e3, bar=e4, pizza=e5, ... = ...|...]),  ([e1, e2, e3, e4, e5|...], [john=e1, ellen=e2, restaurant=e3, bar=e4, ... = ...|...]),  ([e1, e2, e3, e4|...], [john=e1, ellen=e2, restaurant=e3, ... = ...|...]),  ([e1, e2, e3|...], [john=e1, ellen=e2, ... = ...|...]),  ([e1, e2|...], [john=e1, ... = ...|...]),  ([e1|...], [... = ...|...]),  ([...|...], [...|...]),  (..., ...)|...],
Mx = [[(ask_menu(ellen), 0),  (ask_menu(john), 0),  (leave(ellen), 0),  (leave(john), 1),  (pay(ellen), 0),  (pay(john), 1),  (drink(..., ...), 0),  (..., ...)|...], [(ask_menu(ellen), 1),  (ask_menu(john), 1),  (leave(ellen), 0),  (leave(john), 0),  (pay(ellen), 0),  (pay(...), 0),  (..., ...)|...], [(ask_menu(ellen), 0),  (ask_menu(john), 0),  (leave(ellen), 0),  (leave(john), 0),  (pay(...), 1),  (..., ...)|...], [(ask_menu(ellen), 1),  (ask_menu(john), 0),  (leave(ellen), 0),  (leave(...), 1),  (..., ...)|...], [(ask_menu(ellen), 1),  (ask_menu(john), 0),  (leave(...), 1),  (..., ...)|...], [(ask_menu(ellen), 0),  (ask_menu(...), 1),  (..., ...)|...], [(ask_menu(...), 0),  (..., ...)|...], [(..., ...)|...], [...|...]|...].

And much more ...

See DFS Tools PlDoc documentation for more information.