TGTGInsighttelegram intelligenceLIVE / telegram public index
← ML Baldini • Nikita Boyandin
ML Baldini • Nikita Boyandin avatar

TGINSIGHT POST

Post #275

@ml_baldini

ML Baldini • Nikita Boyandin

Görüntülemeler1,890Gönderi görüntüleme sayısı
Yayınlandı4 Ağu04.08.2025 15:01
İçerik

Gönderi içeriği

В этих постах я хочу обсудить архитектуры, которые не так часто встречаются в жизни, но при этом представляют собой достаточно интересные решения. ELMO — это многослойная двунаправленная рекуррентная нейронная сеть c LSTM (рис. сверху). При использовании word2vec или fastText не учитывается семантическая неоднозначность слов. Так, word2vec назначает слову один вектор независимо от контекста. _ELMO_ решает эту проблему. В основе стоит идея использовать скрытые состояния языковой модели многослойной LSTM. Было замечено, что нижние слои сети отвечают за синтаксис и грамматику, а верхние — за смысл слов. Пусть даны токены t1,...,tN, на которые поделено предложение. Будем считать логарифм правдоподобия метки слова в обоих направлениях, учитывая контекст слева и контекст справа, то есть на основании данных от начала строки до текущего символа и данных от текущего символа и до конца строки. Таким образом, модель предсказывает вероятность следующего токена с учетом истории. Пусть есть L слоев сети. Входные и выходные данные будем представлять в виде векторов, кодируя слова. Тогда каждый результирующий вектор будем считать на основании множества: {xLMk,hLMk,j−→−,hLMk,j←−−|j=1,...,L}={hLMk,j|j=1,...,L}. Здесь xLMk — входящий токен, а hLMk,j−→− и hLMk,j←−− — скрытые слои в одном и в другом направлении. Тогда результат работы ELMO будет представлять из себя выражение: ELMOtaskk=γtaks∑Lj=0staskihLMk,j. Обучаемый общий масштабирующий коэффициент γtask регулирует то, как могут отличаться друг от друга по норме векторные представления слов. Коэффициенты staski — это обучаемые параметры, нормализованные функцией Softmax. Модель применяют дообучая ее: изначально берут предобученную ELMO, а затем корректируют γ и si под конкретную задачу. Тогда вектор, который подается в используемую модель для обучения, будет представлять собой взвешенную сумму значений этого векторах на всех скрытых слоях ELMO. Простое использование ELMO: import torch from allennlp.modules.elmo import Elmo, batch_to_ids options_file = "https://allennlp.s3.amazonaws.com/models/elmo/2x4096_512_2048cnn_2xhighway/elmo_2x4096_512_2048cnn_2xhighway_options.json" weight_file = "https://allennlp.s3.amazonaws.com/models/elmo/2x4096_512_2048cnn_2xhighway/elmo_2x4096_512_2048cnn_2xhighway_weights.hdf5" elmo = Elmo(options_file, weight_file, 1, dropout=0) sentences = [["I", "love", "to", "play", "soccer"], ["My", "favorite", "team", "is", "Barcelona"]] character_ids = batch_to_ids(sentences) elmo_embeddings = elmo(character_ids) Использование ELMO с механизмом Attention: import torch import torch.nn as nn import torch.nn.functional as F from allennlp.modules.elmo import Elmo, batch_to_ids class Attention(nn.Module): def __init__(self, hidden_size): super(Attention, self).__init__() self.fc = nn.Linear(hidden_size, hidden_size) self.tanh = nn.Tanh() self.softmax = nn.Softmax(dim=1) def forward(self, x): out = self.fc(x) out = self.tanh(out) weights = self.softmax(out) return weights options_file = "https://allennlp.s3.amazonaws.com/models/elmo/2x4096_512_2048cnn_2xhighway/elmo_2x4096_512_2048cnn_2xhighway_options.json" weight_file = "https://allennlp.s3.amazonaws.com/models/elmo/2x4096_512_2048cnn_2xhighway/elmo_2x4096_512_2048cnn_2xhighway_weights.hdf5" elmo = Elmo(options_file, weight_file, 1, dropout=0) attention = Attention(1024) sentences = [["I", "love", "to", "play", "soccer"], ["My", "favorite", "team", "is", "Barcelona"]] character_ids = batch_to_ids(sentences) weights = attention(elmo_embeddings['elmo_representations'][0]) weighted_elmo_embeddings = weights * elmo_embeddings['elmo_representations'][0] Как вам такой формат постов и какую архитектуру вы хотите разобрать?) Обязательно ставьте реакции и пишите комментарии💗