Возвращаемое значение всегда будет обещанием. Если вы явно не вернете обещание, возвращаемое вами значение автоматически будет завернуто в обещание.
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.
blockquote>ES6 имеет функции, которые не возвращают точно то же значение, что и
return
. Эти функции называются генераторами.function* foo() { return 'test'; } // Logs an object. console.log(foo()); // Logs 'test'. console.log(foo().next().value);
Почему вы не используете обычную модель, используемую в НЛП?
Эти события можно перевести, как вы говорите, путем вложения матрицы. Затем вы можете представить цепочки событий, используя 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 (128, input_shape = (max_seq, dimensions), dropout = 0.2, recurrent_dropout = 0.2, return_sequences = True) (embedding)
out = Dense (10, activation = 'softmax') (lstm)