SimpleNLG等基于规则的 NLG 系统允许您更改短语的人称和时态。您面临的问题是您的语料库包含自由文本描述,而不是由这种形式语法定义的描述。
虽然有可能将您的描述转换为这样的语法,但在您的情况下可能是矫枉过正。如果您的描述相对简单,您可以尝试通过spaCy 之类的解析器运行它们。这将在您的描述中识别代词的人称(和时态)。您可能只能更改它们(“I”为“you”,“my”为“your”等)。或者,您可以拒绝那些不在第二人称中的人,并在语料库的一个子集上进行训练。
蟒蛇代码:
import spacy
nlp = spacy.load('en_core_web_sm')
doc = nlp(u'A photo of you beside your car')
for token in doc:
print(token.text, token.lemma_, token.pos_, token.tag_, token.dep_,
token.shape_, token.is_alpha, token.is_stop, nlp.vocab.morphology.tag_map[token.tag_])
给出输出:
A a DET DT det X True False {74: 89}
photo photo NOUN NN ROOT xxxx True False {74: 91, 'Number': 'sing'}
of of ADP IN prep xx True True {74: 84}
you -PRON- PRON PRP pobj xxx True True {74: 94, 'PronType': 'prs'}
beside beside ADP IN prep xxxx True True {74: 84}
your -PRON- ADJ PRP$ poss xxxx True True {74: 83, 'PronType': 'prs', 'Poss': 'yes'}
car car NOUN NN pobj xxx True False {74: 91, 'Number': 'sing'}
你可以写一些简单的形态规则来改变你的描述,用适当的第二人称替换每个第一和第三人称代词。查看 SimpleNLG MorphologyRules以获得一些想法。如果在某些情况下简单的代词替换是不够的,这可能会导致语料库中的一些错误,但是如果没有看到您的语料库的一些示例,就很难进一步评论。