Почему вы не используете обычную модель, используемую в НЛП?
Эти события можно перевести, как вы говорите, путем вложения матрицы. Затем вы можете представить цепочки событий, используя 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)
[ 1115] Я думаю, что этот тип модели может помочь вам и дать лучшие результаты.
Во-первых, нет нет, и во-вторых, Вы не должны пробовать.
Стратегия всплывающего окна не будет работать (и будет раздражать пользователей). Мне установили мой браузер для 'Открытия окон как Вкладок', и я выбираю, отколоть ли один в другое окно. Или в некоторых случаях, выполнить ли другой браузер - не только другой экземпляр того же - для отображения другой страницы на том же сайте.
С другой стороны идентификатор мини-сессии перестанет работать, потому что сервер не может отслеживать то, является ли запрос от того же пользователя как существующая сессия. Несколько человек могут использовать ту же машину, даже с тем же именем пользователя; или у одного человека может быть несколько отдельных сессий входа в систему на одной или нескольких машинах.
Просто разберитесь в своем протоколе по сравнению с переменными 'Сессии' и удостоверьтесь, что последние зафиксированные изменения - те, которые сохраняются.
Как другие упомянул, Вы не можете препятствовать тому, чтобы пользователь запустил новую сессию, не обращаясь к ActiveX или другой злобности. Основная проблема состоит в том, что нет никакого способа для Вас знать, закрыл ли пользователь старое окно браузера или оставил его открытым.
То, что можно сделать однако, должно делать недействительным предыдущую сессию, как только пользователь входит в новое (Немного подобный тому, как может Мгновенные клиенты Обмена сообщениями вести себя).
На каждом входе в систему присвойте новый GUID пользователю в Вашей базе данных. Также сохраните этот GUID в кэше сессии (Никакая потребность поставить его назад и вперед в страницы, которые не будут работать на, ПОЛУЧАЮТ запросы так или иначе). По каждому запросу страницы сравните GUID, присвоенный пользователю в базе данных с GUID в кэше сессии. Если они не соответствуют, возвратитесь, "Вы вошли в систему от где-то в другом месте" ответа.
Обновление я был немного слишком быстр на триггере. Это не предотвращает сценарий, где пользователь открывает несколько вкладок/окон в рамках того же процесса браузера. Таким образом, необходимо было бы объединить это решение с предложением Dave Anderson для хранения хеша ViewState (или просто GUID) так, чтобы только последней подаваемой странице на сессии позволили отправить назад.
Обновление системы защиты кроме того, можно только полагаться на эту платформу как на удобство пользователю, так как это не безопасно. Любая половина достойного хакера сможет обойти эти меры.
Вы могли проверить, есть ли у пользователя больше чем одна активная сессия. Это могло бы работать, но могло быть проблематично, так как нет никакого хорошего способа определить, действительно ли сессия активна или нет.
Мы реализовали решение этой проблемы на slicethepie.com. Пользователям (или "бойскауты") только разрешают иметь одно окно браузера, открытое за один раз, чтобы гарантировать, чтобы они слушали музыку, которую им платят за обзор.
Когда бойскаут запрашивает первую дорожку рассмотреть на их разведывательной сессии, мы устанавливаем новый Гуид на их учетной записи и возвращаем этот "ключ" наряду с деталями дорожки, которую они склонны к обзору. Это происходит, что получатель этого ключа является фильмом флэш-памяти, но это не должно быть. Ключ повторно отправлен наряду с обзором бойскаута, и мы проверяем, чтобы видеть, соответствует ли он сохраненному ключу. Если это не делает они запустили новую разведывательную сессию в новом окне.
Я не подразумеваю, что этот метод является надежным, но он мог быть адаптирован к Вашим потребностям довольно легко.
Я предложил бы, чтобы Вы хешировали ViewState для страницы и сохранили его в переменной сеанса, прежде чем это будет возвращено как Ответ.
Затем для Запроса сначала проверяют хеш возвращенного ViewState против того, который Вы имеете в переменной сеанса и если они не соответствуют, не обрабатывают изменений на странице и отображают уведомление Вашему пользователю или перенаправляют их к ошибочной странице.
Два метода класса Page, который Вы захотите переопределить;
protected override object LoadPageStateFromPersistenceMedium()
protected override void SavePageStateToPersistenceMedium(object viewState)
Я использую прием открытия нового окна с определенным идентификатором и всегда удостоверяюсь, что любая страница будет всегда открывать использование то окно.
Вниз сторона, им нужно было выключить их блокировщик всплывающих окон для Вас, располагают. Это работает хорошо на сайты компании.
if (useOwnWindow && window.name != 'YourAPP'){
var w = window.open(document.location, 'YourAPP', 'toolbar=no,status=yes,resizable=yes,scrollbars=yes');
if (w==null){
alert("Please turn off your pop-up blocker");
}else{
window.open('','_parent','');
self.opener="";
self.close();
}
}
Отметьте флаг useOwnWindow, если используется разработчиками, таким образом, мы можем открыть его многократно
Существует ли простой способ определить, имеют ли они уже окно браузера, открытое для веб-приложения и если так, просто закрывают браузер или отображают другую страницу для уведомления их, у них может только быть 1 открытое за один раз?
Короче говоря, Нет.
Не пишущий некоторый элемент управления ActiveX, нет никакого кода, Вы могли записать, что это могло мешать пользователю открыться (отдельный экземпляр), IE/FF и т.д. и иметь один экземпляр обнаруживает другой.
Вы могли присвоить идентификатор 'мини-сессии' каждому экземпляру входной формы, затем использовать Ajax для проверки с помощью ping-запросов сервера с тем идентификатором. Если пользователь пытается запросить ту же форму, когда существует активный идентификатор, она должна отобразить сообщение об ошибке. Если сервер не слышит ping для определенного количества времени, истекает мини-сессия. (Это - в основном очень простая стратегия блокировки),