0

我是自然语言生成的新手,目前正处于实验阶段。激励用例是为图像生成单句标题,但我的问题/问题并不是我当前的 NLG 用例所独有的。

我尝试的第一个模型使用了 CNN 和 RNN 的组合。除了生成的图像标题句子有时以第一人称,有时以第二人称,有时以第三人称之外,一切都或多或少地按预期工作。

对于我的图像字幕用例,我希望我的所有照片字幕都以第二人称的声音书写。我用我能想到的每个关键字组合搜索了 google、google 学者、stack exchange、GitHub 等,但我没有想出关于这个主题的任何内容。

他们是否有任何 NLG 技术可以让我在生成的输出中控制作者的观点?

如果没有,我能想到的唯一途径是建立一个训练语料库,其中只包含以第二人称视角写的句子;但似乎很难建立一个足够大的语料库。

4

2 回答 2

0

如果您只为标准化训练一个单独的网络,那会容易得多。我不确定您的特定任务是否有数据集。但是,我相信通过创建一个相当小的数据集并微调 bert 以接收具有不同观点的序列并生成它的第二人称语音版本,您可以获得令人满意的结果并节省一些时间。

于 2019-02-20T23:43:47.803 回答
0

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以获得一些想法。如果在某些情况下简单的代词替换是不够的,这可能会导致语料库中的一些错误,但是如果没有看到您的语料库的一些示例,就很难进一步评论。

于 2019-02-22T11:43:55.290 回答