Seems a though task to me. I would tackle it with another strategy, namely inserting selectors in DCG where you want discriminate alternatives. Something like
s --> pronoun(X), verb(X), location.
pronoun(1) --> {this}, [i].
pronoun(2) --> [you].
verb(1) --> [am].
verb(2) --> [are].
location --> {this},[here].
location --> [there].
% here choice just between 2
this :- random(0,2,1).
which yields
?- phrase(s,L).
L = [i, am, there] ;
L = [you, are, there].
?- phrase(s,L).
L = [you, are, there].