Ответ 1
Чтобы обучить модель, я бы начал с конкатенации последовательных последовательностей сообщений. Я бы сделал, используя метки времени, объединить сообщения без какого-либо сообщения между другим объектом.
Например:
Hello
I have a problem
I cannot install software X
Hi
What error do you get?
:
Hello I have a problem I cannot install software X
Hi What error do you get?
Тогда я бы тренировал модель с предложениями в этом формате. Я бы сделал это, потому что я предполагаю, что разговоры имеют "одну тему" все время между взаимодействиями с сущностями. И в этом сценарии, предлагая одно сообщение Hi What error do you get?
, было бы совершенно нормально.
Кроме того, взгляните на данные. Если вопросы от пользователей, как правило, однократно приговорены (как в примерах), обнаружение предложения может многое помочь. В этом случае я применил бы определение предложения в конкатенированных строках (nltk
мог бы быть вариант) и использовать только однопринятые вопросы для обучения. Таким образом, вы можете избежать проблемы с синхронизацией при обучении модели ценой уменьшения размера набора данных.
С другой стороны, я бы действительно подумал начать с очень простого метода. Например, вы могли бы набирать вопросы по tf-idf и, чтобы получить предложение, вы можете взять наиболее похожий вопрос в своем наборе данных по некоторым показателям (например, сходство с косинусом) и предложить ответ на этот вопрос. Это будет очень плохо в предложениях с контекстной информацией (например, how do you do it?
), но может хорошо работать в предложениях, таких как where are you based?
.
Мое последнее предложение состоит в том, что традиционные методы работают даже лучше, чем сложные методы NN, когда набор данных невелик. Насколько велик ваш набор данных?
То, как вы тренируете метод NN, также имеет решающее значение, существует множество гиперпараметров, и правильная настройка их может быть затруднена, поэтому, если базовый уровень с помощью простого метода может помочь вам много узнать, насколько вы хорошо себя чувствуете делает. В этой другой документе они сравнивают разные гиперпараметры для doc2vec, возможно, вы сочтете это полезным.
Изменить: совершенно другой вариант - подготовить модель для "ссылки" на вопросы с ответами. Но для этого вы должны вручную пометить каждый вопрос соответствующим ответом, а затем обучить контролируемую модель обучения этим данным. Это может потенциально обобщить лучше, но с дополнительным усилием ручной маркировки предложений, и все же это не выглядит легкой проблемой для меня.