generate = function() {
let next, result = [];
let starts = Object.values(root.children).filter(n => /^[.?!]$/.test(n.word));
let current = root.child('<s>');
while (!current.isLeaf()) {
next = weightedChoice(Object.values(current.children));
result.push(next);
current = next;
}
while(!/^<\/s>$/.test(next.word)) {
let path = result.slice(-(N-1));
current = search(path);
next = weightedChoice(Object.values(current.children));
if (!next) break;
result.push(next);
}
return RiTa.untokenize(result.map(n => n.word)).replace(/"/g,'');
}