#nlp #lstm #recurrent-neural-network
#nlp #lstm #рекуррентная нейронная сеть
Вопрос:
я хочу создать функцию прогнозирования, которая завершает часть «предложения». используемая здесь модель — это RNN на основе символов (LSTM). какие шаги мы должны предпринять? я пробовал это, но я не могу ввести в качестве входных данных предложение
def generate(self) -> Tuple[List[Token], torch.tensor]:
start_symbol_idx = self.vocab.get_token_index(START_SYMBOL, 'tokens')
# print(start_symbol_idx)
end_symbol_idx = self.vocab.get_token_index(END_SYMBOL, 'tokens')
padding_symbol_idx = self.vocab.get_token_index(DEFAULT_PADDING_TOKEN, 'tokens')
log_likelihood = 0.
words = []
state = (torch.zeros(1, 1, self.hidden_size), torch.zeros(1, 1, self.hidden_size))
word_idx = start_symbol_idx
for i in range(self.max_len):
tokens = torch.tensor([[word_idx]])
embeddings = self.embedder({'tokens': tokens})
output, state = self.rnn._module(embeddings, state)
output = self.hidden2out(output)
log_prob = torch.log_softmax(output[0, 0], dim=0)
dist = torch.exp(log_prob)
word_idx = start_symbol_idx
while word_idx in {start_symbol_idx, padding_symbol_idx}:
word_idx = torch.multinomial(
dist, num_samples=1, replacement=False).item()
log_likelihood = log_prob[word_idx]
if word_idx == end_symbol_idx:
break
token = Token(text=self.vocab.get_token_from_index(word_idx, 'tokens'))
words.append(token)
return words, log_likelihood,start_symbol_idx
Комментарии:
1. Что вы пробовали? Нашли ли вы какие-либо ресурсы в Интернете для решения этой проблемы?
2. этот код может быть полезен для меня?
3. Какова ваша цель? У вас есть обученная модель, из которой вы хотите сгенерировать? Вы хотите обучить модель генерировать символы? Вы ищете учебные пособия? Вам нужны указания о том, как обучать / использовать модель машинного обучения?
4. у меня уже есть функция генерации, код приведен выше, он не основан на вводе, заданном пользователем для завершения предложения.
Ответ №1:
Вот два руководства о том, как использовать библиотеки машинного обучения для генерации текста Tensorflow и PyTorch.
Ответ №2:
этот фрагмент кода является частью руководства allennlp «language model», здесь определена функция генерации для вычисления вероятности токенов и поиска наилучшего токена и последовательности токенов в соответствии с максимальной вероятностью вывода модели, полный код находится в записной книжке colab ниже, вы можете обратиться к нему: https://colab.research.google.com/github/mhagiwara/realworldnlp/blob/master/examples/generation/lm.ipynb#scrollTo=8AU8pwOWgKxEпосле обучения языковой модели для использования этой функции вы можете сказать:
for _ in range(50):
tokens, _ = model.generate()
print(''.join(token.text for token in tokens))