Как контролировать авторскую точку зрения в моделях генерации естественного языка? - PullRequest
0 голосов
/ 20 февраля 2019

Я новичок в Generation Natural Language, и сейчас я нахожусь в фазе экспериментов.Мотивирующий вариант использования состоит в том, чтобы генерировать подписи из одного предложения для изображений, но мой вопрос / проблема не уникален только для моего текущего варианта использования NLG.

Первая модель, которую я попробовал, использовала комбинацию CNN и RNN.Все работало более или менее так, как и ожидалось, за исключением того, что сгенерированные предложения с заголовками были иногда написаны голосом от первого лица, иногда голосом от второго лица, а иногда - голосом от третьего лица.

В моем случае использования подписей к изображениям я бы хотел, чтобы все подписи к моим фотографиям были написаны голосом второго лица .Я искал google, google scholar, stack stack, GitHub и т. Д. С каждой комбинацией ключевых слов, которую только мог придумать, и я ничего не придумал по этой теме.

Есть ли у них какие-либо методы NLG, которые позволят мне контролировать точку зрения автора в сгенерированном выводе?

Если нет, то единственный путь, о котором я могу подумать, будетбыть построенным учебным корпусом, который включает только предложения, написанные с точки зрения второго лица;но кажется, что было бы трудно построить корпус достаточного размера.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Системы NLG, основанные на правилах, такие как SimpleNLG , позволяют изменять лицо и время фразы.Проблема, с которой вы сталкиваетесь, состоит в том, что в вашем корпусе есть описания свободного текста, а не описания, определенные такой формальной грамматикой.

Хотя преобразование ваших описаний в такую ​​грамматику может оказаться возможным, в вашем случае это, возможно, излишне.Если ваши описания относительно просты, вы можете попробовать запустить их через парсер, например spaCy .Это идентифицирует лицо (и время) местоимений в ваших описаниях.Вы можете просто изменить их («я» на «ты», «мой» на «твой» и т. Д.).Кроме того, вы можете отказаться от тех, кто не во втором лице и обучаются на подмножестве корпуса.

Код Python:

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 для некоторых идей.Это может привести к некоторым ошибкам в корпусе, если есть случаи, когда простой замены местоимения недостаточно, но, не видя некоторых примеров вашего корпуса, трудно комментировать дальше.

0 голосов
/ 21 февраля 2019

Было бы намного проще, если бы вы тренировали отдельную сеть только для нормализации.Я не уверен, есть ли набор данных для вашей конкретной задачи.Однако я считаю, что, создав довольно небольшой набор данных и точную настройку для получения последовательности с различными точками зрения и создания ее голосовой версии от второго лица, вы сможете добиться удовлетворительных результатов и сэкономить некоторое время.

...