91精品国产综合久久四虎久久_国产成人午夜高潮毛片_99er视频精品免费观看_2020亚洲熟女在线观看_日本女优人体写真_国内黄色毛片_年轻的老师中文版在线_丰满女邻居做爰_久久久久久精品成人免费图片

用于語言任務(wù)的卷積神經(jīng)網(wǎng)絡(luò)
雖然卷積神經(jīng)網(wǎng)絡(luò)通常適用于視覺問題,但它們對于某些語言任務(wù)可能非常有效。
編者注:更多人工智能內(nèi)容請關(guān)注2018年4月10-13日人工智能北京大會(huì)。

在處理序列數(shù)據(jù)(如自然語言處理任務(wù))這類問題時(shí),遞歸神經(jīng)網(wǎng)絡(luò)(RNN)通常是首選方法。 盡管RNN的時(shí)間序列性質(zhì)與文本數(shù)據(jù)相關(guān)的問題是天然匹配的,但是在處理視覺任務(wù)中曾獲得巨大成功的卷積神經(jīng)網(wǎng)絡(luò)(CNN)在這些問題上也同樣有效

我們的LSTM教程中,我們深入了解了長短期記憶模型(LSTM)的工作機(jī)制,并使用TensorFlow構(gòu)建了一個(gè)多層LSTM網(wǎng)絡(luò),通過社交媒體信息對股市情緒進(jìn)行建模。 在這篇文章中,我們將簡要地討論如何將CNN應(yīng)用于文本數(shù)據(jù),同時(shí)提供一些示例TensorFlow代碼來構(gòu)建CNN,以執(zhí)行與我們的股票市場情緒模型類似的二分類任務(wù)。

image1-b4d9a40d7d18c24d8208f0dd35b3cf63

圖1.用于文本分類的示例CNN模型結(jié)構(gòu)。Garrett Hoffman提供圖片,來自于論文《用于句子分類的卷積神經(jīng)網(wǎng)絡(luò)

我們在圖1中,看到了一個(gè)用于文本分類的樣本CNN網(wǎng)絡(luò)結(jié)構(gòu)。首先,我們從輸入句子(長度為seq_len)開始,它表示為一個(gè)矩陣,其中行是我們的詞向量,列是分布式詞嵌入。 在計(jì)算機(jī)視覺問題中,我們通常會(huì)看到RGB的三個(gè)輸入通道;不過,對于文本我們只有一個(gè)輸入通道。 當(dāng)我們在TensorFlow中實(shí)現(xiàn)我們的模型時(shí),我們首先為輸入定義占位符,然后建立詞嵌入矩陣和嵌入查找表。

# Define Inputs

inputs_ = tf.placeholder(tf.int32, [None, seq_len], name=’inputs’)

labels_ = tf.placeholder(tf.float32, [None, 1], name=’labels—)

training_ = tf.placeholder(tf.bool, name=’training’)

# Define Embeddings

embedding = tf.Variable(tf.random_uniform((vocab_size, embed_size), -1, 1))

embed = tf.nn.embedding_lookup(embedding, inputs_)

注意CNN如何將輸入作為一個(gè)完整的句子來處理,而不是像LSTM一樣逐字地處理。對于CNN,我們將句子中所有單詞索引的張量傳遞給我們的詞嵌入查找表,并針對句子將返回的矩陣用作我們網(wǎng)絡(luò)的輸入。

現(xiàn)在,我們已經(jīng)擁有了輸入句子的嵌入表達(dá),我們構(gòu)建了卷積層。在我們的CNN中,我們將使用一維卷積,而不是通常用于視覺任務(wù)的二維卷積。我們將只定義一個(gè)高度,而不是為我們的卷積核定義一個(gè)高度和一個(gè)寬度,寬度總是嵌入維度。與圖像在CNN中的表現(xiàn)方式相比,這是非常直觀的。當(dāng)我們處理圖像時(shí),每個(gè)像素都是一個(gè)分析單位,這些像素存在于我們輸入圖像的兩個(gè)維度上。對于我們的句子,每個(gè)單詞都是一個(gè)分析單位,用我們的詞嵌入維度(我們的輸入矩陣的寬度)表示,所以單詞只存在于我們的”行”這一單一維度中。

我們可以使用盡量多的一維卷積核,而且我們喜歡不同的大小。圖1顯示了大小為2的卷積核(紅框輸入)和大小為3的卷積核(黃框輸入)。我們還為每個(gè)圖層定義了統(tǒng)一數(shù)量的卷積核數(shù)量(與我們對于二維卷積圖像采用相同的方式),這將是卷積的輸出維數(shù)。我們使用relu激活函數(shù),并為我們的輸出添加一個(gè)時(shí)間軸上的max-pooling (極大值池化),使每次卷積時(shí),從每個(gè)卷積核中獲得最大輸出,每個(gè)卷積核中提取單獨(dú)的模型特征。

# Define Convolutional Layers with Max Pooling

convs = []

for filter_size in filter_sizes:

conv = tf.layers.conv1d(inputs=embed, filters=128, kernel_size=filter_size, activation=tf.nn.relu)

pool = tf.layers.max_pooling1d(inputs=conv, pool_size=seq_len-filter_size+1, strides=1)

convs.append(pool)

我們可以將這些卷積層看作是“并行的” ,即一個(gè)卷積層不會(huì)再把輸入送進(jìn)下一層,它們都接受相同的輸入,得到獨(dú)立的輸出,我們對其拼接,得到結(jié)果。

# Concat Pooling Outputs and Flatten

pool_concat = tf.concat(convs, axis=-1)

pool_flat = tf.layers.Flatten(pool_concat)

然后,我們現(xiàn)在用一個(gè)Sigmoid函數(shù)激活來構(gòu)建一個(gè)全連接層,以便用我們拼接的卷積輸出預(yù)測。 請注意,如果問題是多于兩類的分類問題,我們也可以在這里使用tf.nn.softmax激活函數(shù)。 我們在這里還包括一個(gè)Dropout層來對模型進(jìn)行正則化,讓模型獲得更好的泛化性能。

drop = tf.layers.Dropout(inputs=pool_flat, rate=keep_prob, training=training_)

dense = tf.layers.Dense(inputs=drop, num_outputs=1, activation_fn=tf.nn.sigmoid)

我們可以使用model_fn將這些代碼封裝到一個(gè)自定義的tf.Estimator中,制作一個(gè)簡單的用于模型訓(xùn)練,模型評估和做預(yù)測的API。

現(xiàn)在我們就有了“用于文本分類的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)”。

與任何模型間比較相似的是,CNN和RNN之間在文本分類方面互有勝負(fù)。盡管RNN似乎是語言的一種更為自然的選擇,但是CNN被證明訓(xùn)練速度比RNN快5倍,并且在特征檢測非常重要的文本上表現(xiàn)良好。然而,當(dāng)對輸入序列的長期依賴性是重要因素時(shí),RNN變體通常優(yōu)于CNN。

最終,不同研究領(lǐng)域的語言問題會(huì)有所不同,因此在您的庫中使用多種技術(shù)是非常重要的。這只是我們在不同研究領(lǐng)域成功應(yīng)用趨勢性技術(shù)的一個(gè)例子。雖然卷積神經(jīng)網(wǎng)絡(luò)傳統(tǒng)上一直是計(jì)算機(jī)視覺世界的明星,但是我們開始看到將它們應(yīng)用于序列數(shù)據(jù)時(shí),會(huì)有更多突破。

這篇文章是O’Reilly和TensorFlow的合作。在此查看我們的編輯獨(dú)立性聲明。

Garrett Hoffman

Garrett Hoffman是StockTwits公司的高級數(shù)據(jù)科學(xué)家,他主要致力于使用數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)來了解社會(huì)動(dòng)態(tài),并開發(fā)了一種研發(fā)工具,超過100萬投資者都在使用。Garrett擁有數(shù)學(xué)和計(jì)算機(jī)科學(xué)方面的技術(shù)背景,但是從以人為本的角度來解決數(shù)據(jù)問題最讓人興奮 - 使用我們已知或可以從復(fù)雜系統(tǒng)中學(xué)到的知識來驅(qū)動(dòng)最優(yōu)化的決策、經(jīng)驗(yàn)以及成果。

冰箱貼詩歌(來源: Steve Johnson)