Одно измерение Hot Encoding - сложность модели

Возвращаемое значение всегда будет обещанием. Если вы явно не вернете обещание, возвращаемое вами значение автоматически будет завернуто в обещание.

async function increment(num) {
  return num + 1;
}

// Even though you returned a number, the value is
// automatically wrapped in a promise, so we call
// `then` on it to access the returned value.
//
// Logs: 4
increment(3).then(num => console.log(num));

То же самое, даже если есть await.

function defer(callback) {
  return new Promise(function(resolve) {
    setTimeout(function() {
      resolve(callback());
    }, 1000);
  });
}

async function incrementTwice(num) {
  const numPlus1 = await defer(() => num + 1);
  return numPlus1 + 1;
}

// Logs: 5
incrementTwice(3).then(num => console.log(num));

Обещает автоматическое разворачивание, поэтому, если вы вернете обещание для значения из функции async, вы получите обещание для значения (не обещание для обещания для значения).

function defer(callback) {
  return new Promise(function(resolve) {
    setTimeout(function() {
      resolve(callback());
    }, 1000);
  });
}

async function increment(num) {
  // It doesn't matter whether you put an `await` here.
  return defer(() => num + 1);
}

// Logs: 4
increment(3).then(num => console.log(num));

В моем резюме поведение действительно противоречит традиционным операторам return. Похоже, что когда вы явно возвращаете значение non-prom из функции async, оно принудительно завершает его в обещание. У меня нет большой проблемы с этим, но он бросает вызов нормальному JS.

ES6 имеет функции, которые не возвращают точно то же значение, что и return. Эти функции называются генераторами.

function* foo() {
  return 'test';
}

// Logs an object.
console.log(foo());

// Logs 'test'.
console.log(foo().next().value);
0
задан Andrea Cinesi 15 January 2019 в 17:07
поделиться

1 ответ

Почему вы не используете обычную модель, используемую в НЛП?

Эти события можно перевести, как вы говорите, путем вложения матрицы. Затем вы можете представить цепочки событий, используя LSTM (или GRU или RNN или двусторонний LSTM), разница в использовании LSTM вместо обычной сети заключается в том, что вы используете один и тот же модуль, повторенный N раз. Таким образом, ваш вклад на самом деле не 460000, а внутренне событие A косвенно помогает вам узнать о событии B. Это потому, что LSTM имеет модуль, который повторяется для каждого события в цепочке.

У вас есть пример здесь: https://www.kaggle.com/ngyptr/lstm-sentiment-analysis-keras

В общем, я бы сказал следующее (в псевдокоде Keras):

  • Определение общего количества событий. Я генерирую уникальный список.
    unique_events = list (set ([event_0, ..., event_n]))
    You can perform the translation of a sequence with:
    seq_events_idx = map (unique_events.index, seq_events)
    
  • Добавьте необходимый пэд для каждой последовательности:
    sequences_pad = pad_sequences (sequences, max_seq)
    
  • Затем вы можете напрямую использовать вложение для переноса события в соответствующий вектор измерения, который вы рассматривать.
    input_ = Input (shape = (max_seq,), dtype = 'int32')
    embedding = Embedding (len(unique_events),
                        dimensions,
                        input_length = max_seq,
                        trainable = True) (input_)
    
  • Затем вы определяете архитектуру вашего LSTM (например):
    lstm = LSTM (128, input_shape = (max_seq, dimensions), dropout = 0.2, recurrent_dropout = 0.2, return_sequences = True) (embedding)
    
  • Добавьте плотный и желаемый результат:
    out = Dense (10, activation = 'softmax') (lstm)
    
[ 1115] Я думаю, что этот тип модели может помочь вам и дать лучшие результаты.

0
ответ дан Adria Ciurana 15 January 2019 в 17:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: