<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>FastText - Dnepr.com - Головний портал новин Дніпра</title>
	<atom:link href="https://dnepr.com/tag/fasttext/feed" rel="self" type="application/rss+xml" />
	<link>https://dnepr.com/tag/fasttext</link>
	<description></description>
	<lastBuildDate>Wed, 21 Aug 2019 12:38:43 +0000</lastBuildDate>
	<language>uk</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Автоматическое определение эмоций в текстовых беседах с использованием нейронных сетей</title>
		<link>https://dnepr.com/novyny/world-news/avtomaticheskoe-opredelenie-jemocij-v-tekstovyh-besedah-s-ispolzovaniem-nejronnyh-setej.html</link>
					<comments>https://dnepr.com/novyny/world-news/avtomaticheskoe-opredelenie-jemocij-v-tekstovyh-besedah-s-ispolzovaniem-nejronnyh-setej.html#respond</comments>
		
		<dc:creator><![CDATA[Галина]]></dc:creator>
		<pubDate>Wed, 21 Aug 2019 12:36:34 +0000</pubDate>
				<category><![CDATA[Світ]]></category>
		<category><![CDATA[emocontext]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[keras]]></category>
		<category><![CDATA[word embeddings]]></category>
		<category><![CDATA[tensorflow]]></category>
		<category><![CDATA[word2vec]]></category>
		<category><![CDATA[долгая краткосрочная память]]></category>
		<category><![CDATA[FastText]]></category>
		<category><![CDATA[рекуррентная нейронная сеть]]></category>
		<category><![CDATA[GloVe]]></category>
		<category><![CDATA[векторное представление слов]]></category>
		<category><![CDATA[LSTM]]></category>
		<category><![CDATA[emotion detection]]></category>
		<category><![CDATA[semeval]]></category>
		<category><![CDATA[semeval-2019]]></category>
		<guid isPermaLink="false">https://dnepr.com/?p=146450</guid>

					<description><![CDATA[<p>Одна из основных задач диалоговых систем состоит не только в предоставлении нужной пользователю информации, но и в генерации как можно более человеческих ответов. А распознание эмоций собеседника — уже не просто крутая фича, это жизненная необходимость. В этой статье мы рассмотрим архитектуру рекуррентной нейросети для определения эмоций в текстовых беседах, которая принимала участие в SemEval-2019 [&#8230;]</p>
<p>Запись <a href="https://dnepr.com/novyny/world-news/avtomaticheskoe-opredelenie-jemocij-v-tekstovyh-besedah-s-ispolzovaniem-nejronnyh-setej.html">Автоматическое определение эмоций в текстовых беседах с использованием нейронных сетей</a> опубликована здесь - <a href="https://dnepr.com">Dnepr.com - Головний портал новин Дніпра</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img fetchpriority="high" decoding="async" src="https://dnepr.com/wp-content/uploads/2019/08/548e745e464ca70ddcd9fb4088d19421ce836a89.jpg" alt="" width="479" height="357" class="alignnone size-full wp-image-146453" srcset="https://dnepr.com/wp-content/uploads/2019/08/548e745e464ca70ddcd9fb4088d19421ce836a89.jpg 479w, https://dnepr.com/wp-content/uploads/2019/08/548e745e464ca70ddcd9fb4088d19421ce836a89-300x224.jpg 300w, https://dnepr.com/wp-content/uploads/2019/08/548e745e464ca70ddcd9fb4088d19421ce836a89-80x60.jpg 80w, https://dnepr.com/wp-content/uploads/2019/08/548e745e464ca70ddcd9fb4088d19421ce836a89-265x198.jpg 265w" sizes="(max-width: 479px) 100vw, 479px" /><br />
Одна из основных задач диалоговых систем состоит не только в предоставлении нужной пользователю информации, но и в генерации как можно более человеческих ответов. А распознание эмоций собеседника — уже не просто крутая фича, это жизненная необходимость. В этой статье мы рассмотрим архитектуру рекуррентной нейросети для определения эмоций в текстовых беседах, которая принимала участие в SemEval-2019 Task 3 “EmoContext”, ежегодном соревновании по компьютерной лингвистике. Задача состояла в классификации эмоций (“happy”, “sad”, “angry” и “others”) в беседе из трех реплик, в которой участвовали чат-бот и человек, пишет <a href="https://m.habr.com/ru/company/mailru/blog/463045/?fbclid=IwAR3CdkYUEuOBwU8rkJvaX6yDiO9oZ9fNayas3cNhURpt8Vueeo4tSHC2pD0" rel="noopener noreferrer" target="_blank">m.habr.com</a><br />
В первой части статьи мы рассмотрим поставленную в EmoContext задачу и предоставленные организаторами данные. Во второй и третьей частях разберём предварительную обработку текста и способы векторного представления слов. В четвёртой части мы опишем архитектуру LSTM, которую мы использовали в соревновании. Код написан на языке Python с использованием библиотеки Keras. </p>
<p>1. Обучающие данные</p>
<p>Трек “EmoContext” на SemEval-2019 был посвящен определению эмоций в текстовых беседах с учетом контекста переписки. Контекст в данном случае — это несколько последовательных реплик участников диалога. В беседе два участника: анонимный пользователь (ему принадлежит первая и третья реплика) и чат-бот Ruuh (ему принадлежит вторая реплика). На основе трех реплик необходимо определить, какую эмоцию испытывал пользователь при написании ответа чат-боту (Таблица 1). Всего разметка датасета содержала четыре эмоции: «happy», «sad», «angry» или «others» (Таблица 1). Подробное описание представлено здесь: (Chatterjee et al., 2019).</p>
<p>Таблица 1. Примеры из датасета EmoContext (Chatterjee et al., 2019)<br />
Пользователь (Этап-1)	Диалоговый робот (Этап-1)	Пользователь (Этап-2)	True Class<br />
I just qualified for the Nabard internship	WOOT! That’s great news. Congratulations!	I started crying	Счастье<br />
How dare you to slap my child	If you spoil my car, I will do that to you too	Just try to do that once	Злость<br />
I was hurt by u more	You didn’t mean it.	say u love me	Грусть<br />
I will do night.	Alright. Keep me in loop.	Not giving WhatsApp no.	Другое</p>
<p>В ходе состязания организаторы предоставили несколько наборов данных. Обучающий датасет (Train) состоял из 30 160 размеченных вручную текстов. В этих текстах было примерно по 5000 объектов, относящихся к классам «happy», «sad» и «angry», а также 15000 текстов из класса «others» (Таблица 2). </p>
<p>Также организаторы предоставили наборы данных для разработки (Dev) и тестирования (Test), в которых, в отличие от обучающего датасета, распределение по классам эмоций соответствовало реальной жизни: примерно по 4 % для каждого из классов «happy», «sad» и «angry», а остальное — класс «others». Данные предоставлены Microsoft, скачать их можно в официальной группе в LinkedIn.</p>
<p>Таблица 2. Распределение меток классов эмоций в датасете (Chatterjee et al., 2019).<br />
Датасет	Счастье	Грусть	Злость	Другое	Итого<br />
Учебный<br />
14,07 %<br />
18,11 %<br />
18,26 %<br />
49,56 %<br />
30 160<br />
Для разработки<br />
5,15 %<br />
4,54 %<br />
5,45 %<br />
84,86 %<br />
2755<br />
Тестовый<br />
5,16 %<br />
4,54 %<br />
5,41 %<br />
84,90 %<br />
5509<br />
Дистанцированный<br />
33,33 %<br />
33,33 %<br />
33,33 %<br />
0 %<br />
900 тыс.</p>
<p>В дополнение к этим данным мы собрали 900 тыс. англоязычных сообщений из Twitter, чтобы создать Distant-датасет (300 тыс. твитов на каждую эмоцию). При его создании мы придерживались стратегии Go et al. (2009), в рамках которой просто ассоциировали сообщения с наличием относящихся к эмоциям слов, таких как #angry, #annoyed, #happy, #sad, #surprised и так далее. Список терминов основан на терминах из SemEval-2018 AIT DISC (Duppada et al., 2018). </p>
<p>Главной метрикой качества в соревновании EmoContext является усредненная F1-мера для трёх классов эмоций, то есть для классов «happy», «sad» и «angry».</p>
<p>def preprocessData(dataFilePath, mode):<br />
	conversations = []
	labels = []
	with io.open(dataFilePath, encoding=&#8221;utf8&#8243;) as finput:<br />
    	finput.readline()<br />
    	for line in finput:<br />
        	line = line.strip().split(&#8216;\t&#8217;)<br />
        	for i in range(1, 4):<br />
            	line[i] = tokenize(line[i])<br />
        	if mode == &#8220;train&#8221;:<br />
            	labels.append(emotion2label[line[4]])<br />
        	conv = line[1:4]
        	conversations.append(conv)<br />
	if mode == &#8220;train&#8221;:<br />
    	return np.array(conversations), np.array(labels)<br />
	else:<br />
    	return np.array(conversations)</p>
<p>texts_train, labels_train = preprocessData(&#8216;./starterkitdata/train.txt&#8217;, mode=&#8221;train&#8221;)<br />
texts_dev, labels_dev = preprocessData(&#8216;./starterkitdata/dev.txt&#8217;, mode=&#8221;train&#8221;)<br />
texts_test, labels_test = preprocessData(&#8216;./starterkitdata/test.txt&#8217;, mode=&#8221;train&#8221;)</p>
<p>2. Предварительная обработка текста</p>
<p>Перед обучением мы предварительно обработали тексты с помощью инструмента Ekphrasis (Baziotis et al., 2017). Он помогает исправить орфографию, нормализовать слова, сегментировать, а также определить, какие токены следует отбросить, нормализовать или аннотировать с помощью специальных тегов. На этапе предварительной обработки мы сделали следующее:</p>
<p>Адреса URL и почту, дату и время, ники, проценты, валюты и числа заменили соответствующими тегами.<br />
Повторяющиеся, цензурированные, удлинённые написанные прописными буквами термины мы сопроводили соответствующими метками.<br />
Удлинённые слова были автоматически скорректированы.</p>
<p>Кроме того, Emphasis содержит токенизатор, который может идентифицировать большинство эмодзи, эмотиконов и сложных выражений, а также даты, время, валюты и акронимы.</p>
<p>Таблица 3. Примеры предварительной обработки текста.<br />
Исходный текст	Предварительно обработанный текст<br />
I FEEL YOU… I&#8217;m breaking into million pieces 	<allcaps> i feel you </allcaps>. <repeated> i am breaking into million pieces<br />
tired and I missed you too :‑(	tired and i missed you too <sad><br />
you should liiiiiiisten to this: www.youtube.com/watch?v=99myH1orbs4	you should listen <elongated> to this: <url><br />
My apartment takes care of it. My rent is around $650.	my apartment takes care of it. my rent is around <money> .</p>
<p>from ekphrasis.classes.preprocessor import TextPreProcessor<br />
from ekphrasis.classes.tokenizer import SocialTokenizer<br />
from ekphrasis.dicts.emoticons import emoticons<br />
import numpy as np</p>
<p>import re<br />
import io</p>
<p>label2emotion = {0: &#8220;others&#8221;, 1: &#8220;happy&#8221;, 2: &#8220;sad&#8221;, 3: &#8220;angry&#8221;}<br />
emotion2label = {&#8220;others&#8221;: 0, &#8220;happy&#8221;: 1, &#8220;sad&#8221;: 2, &#8220;angry&#8221;: 3}</p>
<p>emoticons_additional = {<br />
	&#8216;(^・^)&#8217;: &#8216;<happy>&#8216;, &#8216;:‑c&#8217;: &#8216;<sad>&#8216;, &#8216;=‑d&#8217;: &#8216;<happy>&#8216;, &#8220;:&#8217;‑)&#8221;: &#8216;<happy>&#8216;, &#8216;:‑d&#8217;: &#8216;<laugh>&#8216;,<br />
	&#8216;:‑(&#8216;: &#8216;<sad>&#8216;, &#8216;;‑)&#8217;: &#8216;<happy>&#8216;, &#8216;:‑)&#8217;: &#8216;<happy>&#8216;, &#8216;:\\/&#8217;: &#8216;<sad>&#8216;, &#8216;d=<': '<annoyed>&#8216;,<br />
	&#8216;:‑/&#8217;: &#8216;<annoyed>&#8216;, &#8216;;‑]&#8217;: &#8216;<happy>&#8216;, &#8216;(^�^)&#8217;: &#8216;<happy>&#8216;, &#8216;angru&#8217;: &#8216;angry&#8217;, &#8220;d‑&#8217;:&#8221;:<br />
    	&#8216;<annoyed>&#8216;, &#8220;:&#8217;‑(&#8220;: &#8216;<sad>&#8216;, &#8220;:‑[&#8220;: &#8216;<annoyed>&#8216;, &#8216;(�?�)&#8217;: &#8216;<happy>&#8216;, &#8216;x‑d&#8217;: &#8216;<laugh>&#8216;,<br />
}</p>
<p>text_processor = TextPreProcessor(<br />
	# terms that will be normalized<br />
	normalize=[&#8216;url&#8217;, &#8217;email&#8217;, &#8216;percent&#8217;, &#8216;money&#8217;, &#8216;phone&#8217;, &#8216;user&#8217;,<br />
           	&#8216;time&#8217;, &#8216;url&#8217;, &#8216;date&#8217;, &#8216;number&#8217;],<br />
	# terms that will be annotated<br />
	annotate={&#8220;hashtag&#8221;, &#8220;allcaps&#8221;, &#8220;elongated&#8221;, &#8220;repeated&#8221;,<br />
          	&#8217;emphasis&#8217;, &#8216;censored&#8217;},<br />
	fix_html=True,  # fix HTML tokens<br />
	# corpus from which the word statistics are going to be used<br />
	# for word segmentation<br />
	segmenter=&#8221;twitter&#8221;,<br />
	# corpus from which the word statistics are going to be used<br />
	# for spell correction<br />
	corrector=&#8221;twitter&#8221;,<br />
	unpack_hashtags=True,  # perform word segmentation on hashtags<br />
	unpack_contractions=True,  # Unpack contractions (can&#8217;t -> can not)<br />
	spell_correct_elong=True,  # spell correction for elongated words<br />
	# select a tokenizer. You can use SocialTokenizer, or pass your own<br />
	# the tokenizer, should take as input a string and return a list of tokens<br />
	tokenizer=SocialTokenizer(lowercase=True).tokenize,<br />
	# list of dictionaries, for replacing tokens extracted from the text,<br />
	# with other expressions. You can pass more than one dictionaries.<br />
	dicts=[emoticons, emoticons_additional]
)</p>
<p>def tokenize(text):<br />
	text = &#8221; &#8220;.join(text_processor.pre_process_doc(text))<br />
	return text    </p>
<p>3. Векторное представление слов</p>
<p>Векторное представление стало неотъемлемой частью большинства подходов к созданию NLP-систем с применением глубокого обучения. Чтобы определить наиболее подходящие модели векторного отображения, мы попробовали Word2Vec (Mikolov et al., 2013), GloVe (Pennington et al., 2014) и FastText (Joulin et al., 2017), а также предварительно обученные векторы DataStories (Baziotis et al., 2017). Word2Vec находит взаимосвязи между словами согласно предположению, что в похожих контекстах встречаются семантически близкие слова. Word2Vec пытается прогнозировать целевое слово (архитектура CBOW) или контекст (архитектура Skip-Gram), то есть минимизировать функцию потерь, а GloVe рассчитывает вектора слов, уменьшая размерность матрицы смежности. Логика работы FastText похожа на логику Word2Vec, за исключением того, что для построения векторов слов она использует символьные n-граммы, и как следствие, может решать проблему неизвестных слов.</p>
<p>Для всех упомянутых моделей мы используем параметры обучения по умолчанию, предоставленные авторами. Мы обучили простую LSTM-модель (dim=64) на основе каждого из этих векторных представлений и сравнили эффективность классификации с помощью кросс-валидации. Наилучший результат в F1-меры показали предварительно обученные вектора DataStories.</p>
<p>Для обогащения выбранного векторного отображения эмоциональной окраской слов мы решили произвести тонкую настройку векторов с помощью автоматически размеченного Distant-датасета (Deriu et al., 2017). Мы использовали Distant-датасет для обучения простой LSTM-сети, чтобы классифицировать «злые», «грустные» и «счастливые» сообщения. Эмбеддинг слой был заморожен в течение первой итерации обучения, чтобы избежать сильных изменений у весов векторов, а для последующих пяти итераций слой был разморожен. После обучения «оттюненные» векторы были сохранены для последующего использования в нейронной сети, а также выложены в общий доступ.</p>
<p>def getEmbeddings(file):<br />
	embeddingsIndex = {}<br />
	dim = 0<br />
	with io.open(file, encoding=&#8221;utf8&#8243;) as f:<br />
    	for line in f:<br />
        	values = line.split()<br />
        	word = values[0]
        	embeddingVector = np.asarray(values[1:], dtype=&#8217;float32&#8242;)<br />
        	embeddingsIndex[word] = embeddingVector<br />
        	dim = len(embeddingVector)<br />
	return embeddingsIndex, dim</p>
<p>def getEmbeddingMatrix(wordIndex, embeddings, dim):<br />
	embeddingMatrix = np.zeros((len(wordIndex) + 1, dim))<br />
	for word, i in wordIndex.items():<br />
    	embeddingMatrix[i] = embeddings.get(word)<br />
	return embeddingMatrix</p>
<p>from keras.preprocessing.text import Tokenizer</p>
<p>embeddings, dim = getEmbeddings(&#8217;emosense.300d.txt&#8217;)<br />
tokenizer = Tokenizer(filters=&#8221;)<br />
tokenizer.fit_on_texts([&#8216; &#8216;.join(list(embeddings.keys()))])</p>
<p>wordIndex = tokenizer.word_index<br />
print(&#8220;Found %s unique tokens.&#8221; % len(wordIndex))</p>
<p>embeddings_matrix = getEmbeddingMatrix(wordIndex, embeddings, dim)</p>
<p>4. Архитектура нейросети</p>
<p>Рекуррентные нейросети (RNN) — это семейство нейросетей, специализирующихся на обработке серии событий. В отличие от традиционных нейросетей, RNN предназначены для работы с последовательностями путем использования внутренних весов. Для этого вычислительный граф RNN содержит циклы, отражающие влияние предыдущей информации из последовательности событий на текущую. LSTM-нейросети (Long Short-Term Memory) были представлены в качестве расширения RNN в 1997-м (Hochreiter and Schmidhuber, 1997). Рекуррентные ячейки LSTM соединены так, чтобы избегать проблем с взрывом и затуханием градиентов. Традиционные LSTM лишь сохраняют прошлую информацию, поскольку обрабатывают последовательность в одном направлении. Двунаправленные LSTM, работающие в обоих направлениях, комбинируют выходные данные двух скрытых LSTM-слоёв, передающих информацию в противоположных направлениях — один по ходу времени, другой против, — тем самым одновременно получая данные из прошлого и будущего состояний (Schuster and Paliwal, 1997).</p>
<p>Рисунок 1: Уменьшенная версия архитектуры. LSTM-модуль использует одни и те же веса для первого и третьего этапов.</p>
<p>Упрощённое представление описанного подхода представлено на рисунке 1. Архитектура нейросети состоит из эмбеддинг-слоя и двух двунаправленных LTSM-модулей (dim = 64). Первый LTSM-модуль анализирует слова первого пользователя (то есть первую и третью реплику беседы), а второй модуль анализирует слова второго пользователя (вторую реплику). На первом этапе слова каждого пользователя с помощью заранее обученных векторных представлений подаются в соответствующий двунаправленный LTSM-модуль. Затем получившиеся три карты признаков объединяются в плоский вектор признаков, а затем передаются в полносвязный скрытый слой (dim=30), который анализирует взаимодействия между извлечёнными признаками. Наконец, эти признаки обрабатываются в выходном слое с помощью функции softmax-активации, чтобы определить финальную метку класса. Для уменьшения переобучения после слоёв векторного представления были добавлены слои регуляризации с гауссовским шумом, а также в каждый LTSM-модуль (p = 0.2) и перед скрытым полностью связным слоем (p = 0.1) были добавлены dropout-слои (Srivastava et al., 2014).</p>
<p>from keras.layers import Input, Dense, Embedding, Concatenate, Activation, \<br />
	Dropout, LSTM, Bidirectional, GlobalMaxPooling1D, GaussianNoise<br />
from keras.models import Model</p>
<p>def buildModel(embeddings_matrix, sequence_length, lstm_dim, hidden_layer_dim, num_classes,<br />
           	noise=0.1, dropout_lstm=0.2, dropout=0.2):<br />
	turn1_input = Input(shape=(sequence_length,), dtype=&#8217;int32&#8242;)<br />
	turn2_input = Input(shape=(sequence_length,), dtype=&#8217;int32&#8242;)<br />
	turn3_input = Input(shape=(sequence_length,), dtype=&#8217;int32&#8242;)<br />
	embedding_dim = embeddings_matrix.shape[1]
	embeddingLayer = Embedding(embeddings_matrix.shape[0],<br />
                            	embedding_dim,<br />
                            	weights=[embeddings_matrix],<br />
                            	input_length=sequence_length,<br />
                            	trainable=False)</p>
<p>	turn1_branch = embeddingLayer(turn1_input)<br />
	turn2_branch = embeddingLayer(turn2_input)<br />
	turn3_branch = embeddingLayer(turn3_input)</p>
<p>	turn1_branch = GaussianNoise(noise, input_shape=(None, sequence_length, embedding_dim))(turn1_branch)<br />
	turn2_branch = GaussianNoise(noise, input_shape=(None, sequence_length, embedding_dim))(turn2_branch)<br />
	turn3_branch = GaussianNoise(noise, input_shape=(None, sequence_length, embedding_dim))(turn3_branch)</p>
<p>	lstm1 = Bidirectional(LSTM(lstm_dim, dropout=dropout_lstm))<br />
	lstm2 = Bidirectional(LSTM(lstm_dim, dropout=dropout_lstm))</p>
<p>	turn1_branch = lstm1(turn1_branch)<br />
	turn2_branch = lstm2(turn2_branch)<br />
	turn3_branch = lstm1(turn3_branch)</p>
<p>	x = Concatenate(axis=-1)([turn1_branch, turn2_branch, turn3_branch])</p>
<p>	x = Dropout(dropout)(x)</p>
<p>	x = Dense(hidden_layer_dim, activation=&#8217;relu&#8217;)(x)</p>
<p>	output = Dense(num_classes, activation=&#8217;softmax&#8217;)(x)</p>
<p>	model = Model(inputs=[turn1_input, turn2_input, turn3_input], outputs=output)</p>
<p>	model.compile(loss=&#8217;categorical_crossentropy&#8217;, optimizer=&#8217;adam&#8217;, metrics=[&#8216;acc&#8217;])</p>
<p>	return model</p>
<p>model = buildModel(embeddings_matrix, MAX_SEQUENCE_LENGTH, lstm_dim=64, hidden_layer_dim=30, num_classes=4)</p>
<p>5. Результаты</p>
<p>В ходе поиска оптимальной архитектуры мы экспериментировали не только с количеством нейронов в слоях, функциями активации и параметрами регуляризации, но и с самой архитектурой нейросети. Подробнее об этом говорится в исходной работе.</p>
<p>Описанная в предыдущем разделе архитектура продемонстрировала наилучшие результаты при обучении на датасете Train и валидации на датасете Dev, поэтому она использовалась на финальной стадии состязания. На последнем тестовом датасете модель показала микро-усредненную F1-меру 72,59 %, а максимально достигнутый результат среди всех участников составил 79,59 %. Тем не менее, наш результат оказался гораздо выше базового значения в 58,68 %, заданного организаторами.</p>
<p>Исходный код модели и векторного представления слов доступен на GitHub.<br />
Полная версия статьи и работа с описанием задачи лежат на сайте ACL Anthology.<br />
Учебный датасет можно скачать в официальной группе на LinkedIn.</p>
<p>Цитирование:<br />
@inproceedings{smetanin-2019-emosense,<br />
	title = &#8220;{E}mo{S}ense at {S}em{E}val-2019 Task 3: Bidirectional {LSTM} Network for Contextual Emotion Detection in Textual Conversations&#8221;,<br />
	author = &#8220;Smetanin, Sergey&#8221;,<br />
	booktitle = &#8220;Proceedings of the 13th International Workshop on Semantic Evaluation&#8221;,<br />
	year = &#8220;2019&#8221;,<br />
	address = &#8220;Minneapolis, Minnesota, USA&#8221;,<br />
	publisher = &#8220;Association for Computational Linguistics&#8221;,<br />
	url = &#8220;https://www.aclweb.org/anthology/S19-2034&#8221;,<br />
	pages = &#8220;210&#8211;214&#8221;,<br />
}</p>
<p><a href="https://dnepr.com" rel="noopener noreferrer" target="_blank">Dnepr.com</a></p>
<p>Запись <a href="https://dnepr.com/novyny/world-news/avtomaticheskoe-opredelenie-jemocij-v-tekstovyh-besedah-s-ispolzovaniem-nejronnyh-setej.html">Автоматическое определение эмоций в текстовых беседах с использованием нейронных сетей</a> опубликована здесь - <a href="https://dnepr.com">Dnepr.com - Головний портал новин Дніпра</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://dnepr.com/novyny/world-news/avtomaticheskoe-opredelenie-jemocij-v-tekstovyh-besedah-s-ispolzovaniem-nejronnyh-setej.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
