Я работаю над реализацией DialogueGCN код из этой бумаги . Это модель, которая классифицирует «эмоции» из высказываний текста в разговоре. Поскольку эта модель учитывает контекст говорящего, структура данных очень важна. Это выглядит примерно так:
c = conversation (each conversation is independent of the other
u = utterances (ex.
u1 = "Hey how are you?"
u2 = "good, thanks, and you?"
u3 = "confused, my dog is cooking pasta")
Utterances are of variable length and conversations have variable amounts of utterances.
Each utterance has an 'emotion' label.
| corpus |
/ | \
c1 c2 c3
/ | \ / | \ / | \
u1 u2 u3 u1 u2 u3 u1 u2 u3
В статье используется CNN для создания элементов из текстовых данных. Модель CNN происходит от Ким (2014) . Есть несколько реализаций этого документа. Я использую эту реализацию Keras . Архитектура модели сводится к следующему:
### the model input is 1 utterance
z = Embedding(len(vocabulary_inv), embedding_dim, input_length=sequence_length, name="embedding")(model_input)
z = Dropout(dropout_prob[0])(z)
# Convolutional block
conv_blocks = []
filter_sizes = [2,4,5]
for sz in filter_sizes:
conv = Convolution1D(filters=num_filters,
kernel_size=sz,
padding="valid",
activation="relu",
strides=1)(z)
conv = MaxPooling1D(pool_size=2)(conv)
conv = Flatten()(conv)
conv_blocks.append(conv)
z = Concatenate()(conv_blocks) if len(conv_blocks) > 1 else conv_blocks[0]
z = Dropout(dropout_prob[1])(z)
z = Dense(hidden_dims, activation="relu")(z)
### the output of the dense layer is a tensor for the utterance
IIU C, каждое высказывание каждого разговора индивидуально вводится в этот CNN, и выводится 1 тензор на высказывание. Затем все высказывания за разговор объединяются. После обработки всего корпуса в результате получается список связанных тензоров. Это вводится в модель GCN.
Если вы все еще следуете за мной, у меня такой вопрос:
Я пытаюсь использовать модель GCN для прогнозирования новый набор диалогов. Диалоги структурированы в том же формате, но все еще находятся в текстовой (строковой) форме. Мне нужно векторизовать их, чтобы скормить их в модель генерации объектов CNN. В документе DialogueGCN не говорится, как это было сделано. Каков оптимальный способ векторизации строк, когда они структурированы в формате диалога, где слова в каждом высказывании зависят от разговора, но слова в разговорах независимы?
Другими словами, если я преобразовываю каждый уникальный слово в уникальное целое число, должен ли я обрабатывать весь корпус как один (используя одно и то же слово: целочисленное отображение для всех разговоров), или я должен обрабатывать каждый разговор отдельно (уникальное слово: отображение int для каждого конво), потому что они независимы друг от друга , Например, слово «бейсбол» может означать что-то различное в разговоре 1 и разговоре 2, в зависимости от контекста (предыдущие и будущие высказывания).