1. 程式人生 > >NLP入門例項推薦(Tensorflow實現)

NLP入門例項推薦(Tensorflow實現)

自然語言處理(NLP)是機器學習的應用之一,用於分析、理解和生成自然語言,以便人類與計算機,人類與人類更好的交流。自然語言處理按照任務型別可以分為分類、匹配、翻譯、結構化預測、與序貫決策過程這五類。自然語言處理中的絕大多數問題皆可歸入下圖其中的一個[1]。這為我們學習自然語言處理提供了大的指導方向,讓我們可以心無旁騖的尋找、理解和復現論文。

這裡寫圖片描述

在近些年自然語言處理髮展的過程中,有如下趨勢[2]:
第一,傳統的基於句法-語義規則的理性主義方法受到質疑,大規模分散式處理真是文字成為自然語言處理的主要戰略目標。
第二,統計數學方法越來越受到重視,自然語言處理中越來越多地使用機器自動學習的方法來獲取語言知識。深度學習一枝獨秀,在很多領域超越傳統機器學習方法,成為state-of-the-art的方法。

實際上,在近年來的自然語言處理方向的頂會上,深度學習也往往佔據了大量的篇幅,自言語言處理方向成為模型與計算能力的較量。本專欄將聚焦深度學習方法在自然語言處理中的應用,給出多種任務的深度學習處理的方法,以期幫助入門者少走彎路,堅定地朝著大牛的方向前進。

本專欄的專案實現語言為Tensorflow。Tensorflow由google團隊開發,神經網路結構的程式碼的簡潔度,分散式深度學習演算法的執行效率,還有部署的便利性使它是當前最火的深度學習框架。Tensorflow對CNN和RNN(LSTM)等常見模型有很好的支援,並且當前計算機視覺和自然語言處理的論文在github上都會有模擬,也為入門tensorflow提供了極大的便利。下圖為Tensorflow與當前主流的深度學習框架對比:

這裡寫圖片描述

網上關於tensorflow的教程也很多,tensorflow的官方文件寫的很爛,但還是建議入門的同學先通讀完get_started。遇到不懂的函式還是首選官方文件,選擇version>=1.0。因為很多中文翻譯的文件或者網路上的部落格,版本還都停留在1.0之前,很多函式方法都已經進行了更新,所以還是會直接看官方文件進行學習效果更好。

感謝老師給我們寬鬆的學習環境,讓我們研二的幾個人可以學習自己感興趣的知識。所以這學期想找一些例項和競賽來練一下手。根據最近半年學習tensorflow的感受,列出了以下幾個在github上自然語言處理方向優秀的論文專案,並附上我個人對論文及專案的導讀。

總體來說,難度由淺入深,適合初學者入門。大部分專案都會按照論文、專案、和導讀三個部分,首先閱讀論文,其次在github上尋找開源實現,如果其中有不懂的問題就在網上找解決辦法,我想這也是大多數初學者適合的道路。在寫這篇入門例項推薦時,我也會把例項中涉及的程式碼風格進行統一,以方便記憶。目前涉及的模型主要有:

  1. Deep Neural Network(DNN)
  2. Convolution Neural Network(CNN)
  3. Recurrent Neural Network(RNN)以及LSTM
  4. Recurrent Convolution Neural Network(RCNN)
  5. sequence2sequence(Attention)
  6. Hierarchical Attention Networks(HAN)
  7. Dynamic Memory Networks(DMN)
  8. EntityNetwork

以下是我在剛開本篇專欄時的一些想法,現在看起來仍然覺得很有幫助,如果你對深度學習和自然語言處理方向感興趣,也趕快行動起來吧!

  1. 入門簡單,學習有瓶頸。入門Tensorflow確實挺簡單的,按照官方文件進行傻瓜式安裝,然後程式碼一拷,就能跑通最簡單的MNIST手寫數字識別。但是,你會發現MNIST的訓練集和測試集的讀取都是封裝在Tensorflow中的,所以很輕鬆就能得到需要的Tensor。但是,當我們需要自己讀入資料的時候,就會發生各種各樣的問題。所以在寫Tensorflow程式碼解決深度學習的問題時,初學者大部分都把時間花費在資料集的處理方面,而真正使用tensorflow構建網路卻並不是那麼困難。掌握了處理常規資料集的方法以後,我們需要做的就是坐在電腦前面一步一步地調參了。

  2. Tensor!Tensor!Tensor! 重要的事情說三遍。從Tensorflow的命名方式可以看出,Tensor在graph中進行流動,以此來進行神經網路的訓練。Tensor可以說是Tensorflow中最重要的概念了,同時也是Tensorflow中最容易出錯的地方了。對資料進行完處理以後,就要作為input輸入到Tensorflow中,在神經網路執行的每一步,都要對Tensor的shape瞭如指掌,否則就一定會出錯!所以這其實還是基本功的問題,強烈建議如果有不明白的就返回模型的原理進行回顧。

廢話就不多講了,判斷一個人有沒有理解一個模型的最簡單的方法,就是看他能不能寫出程式碼,並且講清楚自己的程式碼。因此在以後的文章中,我會貼出自己的程式碼和github地址,重點解析程式碼執行中容易出錯的地方,以及一些深度學習中調參的小trick。

共勉。

相關推薦

NLP入門例項推薦Tensorflow實現

自然語言處理(NLP)是機器學習的應用之一,用於分析、理解和生成自然語言,以便人類與計算機,人類與人類更好的交流。自然語言處理按照任務型別可以分為分類、匹配、翻譯、結構化預測、與序貫決策過程這五類。自然語言處理中的絕大多數問題皆可歸入下圖其中的一個[1]。這為我

關於訓練深度學習模型deepNN時,訓練精度維持固定值,模型不收斂的解決辦法tensorflow實現

一、背景 最近一直在做人臉表情的識別,用到的程式是之間的一篇文章中的程式:深度學習(一)——deepNN模型實現攝像頭實時識別人臉表情(C++和python3.6混合程式設計)。這裡我只進行了簡單的程式修改。 由於該程式是利用fer2013資料集做的,效果不是很好,人臉表情的識別精度僅有70

深度學習——tiny YOLO演算法實現實時目標檢測tensorflow實現

一、背景介紹 YOLO演算法全稱You Only Look Once,是Joseph Redmon等人於15年3月發表的一篇文章。本實驗目標為實現YOLO演算法,借鑑了一部分材料,最終實現了輕量級的簡化版YOLO——tiny YOLO,其優勢在於實現簡單,目標檢測迅速。 [1]文章連結:ht

深度學習——從零自己製作資料集到利用deepNN實現誇張人臉表情的實時監測tensorflow實現

一、背景介紹 這篇文章主要參考我的上一篇文章:深度學習(一)——deepNN模型實現攝像頭實時識別人臉表情(C++和python3.6混合程式設計)。由於上一篇文章的模型所採用的資料集為fer2013,前面也介紹過這個基於這個資料集的模型識別人臉表情的準確率大概在70%左右

CNN模型和RNN模型在分類問題中的應用Tensorflow實現

在這篇文章中,我們將實現一個卷積神經網路和一個迴圈神經網路語句分類模型。 本文提到的模型(rnn和cnn)在一系列文字分類任務(如情緒分析)中實現了良好的分類效能,並且由於模型簡單,方便實現,成為了競賽和實戰中常用的baseline。 cnn-text-classifica

什麼是過擬合 (Overfitting) 、解決方法、程式碼示例tensorflow實現

過於自負 在細說之前, 我們先用實際生活中的一個例子來比喻一下過擬合現象. 說白了, 就是機器學習模型於自信. 已經到了自負的階段了. 那自負的壞處, 大家也知道, 就是在自己的小圈子裡表現非凡, 不過在現實的大圈子裡卻往往處處碰壁. 所以在這個簡介裡, 我們把自負和過擬合畫上等號

程式碼,邏輯迴歸(logistic_regression)實現mnist分類TensorFlow實現

#logistic_regression by ffzhang import os os.environ['TF_CPP_MIN_LOG_LEVEL']='2' os.environ["CUDA_VISIBLE_DEVICES"]='2' import num

基於矩陣分解的電影推薦演算法使用Tensorflow實現

#!/usr/bin/env python # -*- coding:utf-8 -*- # 文中部分參考了: # https://blog.csdn.net/u012845311/article/details/77183491 # 改進:要劃分訓練集和測試集,並在進行模型

排序算法入門之希爾排序java實現

入門 介紹 插入 一次 變化 shells ngx i++ ava 希爾排序是對插入排序的改進。插入排序是前面元素已經有序了,移動元素是一個一個一次往後移動,當插入的元素比前面排好序的所有元素都小時,則需要將前面所有元素都往後移動。希爾排序有了自己的增量,可以理

排序算法入門之快速排序java實現

大小 ava 相對 其余 時間 個數 技術分享 算法 元素交換   快速排序也是一種分治的排序算法。快速排序和歸並排序是互補的:歸並排序將數組分成兩個子數組分別排序,並將有序的子數組歸並以將整個數組排序,會需要一個額外的數組;而快速排序的排序方式是當兩個子數組都有序

Spark入門1WordCount實現

article sco ack 系列 .text col lines count sta 1 package com.test 2 3 4 import org.apache.spark.{SparkConf, SparkContext} 5 6 7

tensorflow 入門例子example加預測

還是以前文的兩個例子,繼續加上預測邏輯。 迴歸演算法模型,用來預測連續數值,目標不是分類值而是數字。評估迴歸預測值與真實值是否一樣,需要度量兩者之間的距離。 分類演算法模型,基於數值型輸入,預測分類值,實際目標是1和0的序列,這種模型的損失函式,一般不容易理解模型好壞,所以通常是看

深度學習入門專案完整流程——圖片製作資料集、訓練網路、測試準確率TensorFlow+keras

首先將訓練的圖片和標籤製作成資料集,我用的是numpy庫裡的savez函式,可以將numpy陣列儲存為.npz檔案(無壓縮,所以檔案較大)。 import cv2 as cv import numpy as np import os import glob #調整影象的大小、製作資

WebService入門例項教程 兩個網址

https://www.cnblogs.com/AlanLee/archive/2017/06/02/6933073.html   http://www.iteye.com/topic/1135747     前言:朋友們開始以下教程前,請先看第五大

文字分類之CNN模型TensorFlow實現版本

前言 最近在琢磨文字分類相關的深度學習模型,也研讀了以下三篇使用卷積神經網路CNN實現的文字分類論文: (1)《Convolutional Neural Networks for Sentence Classification》 (2)《Character-level Convo

深度學習之TensorFlow使用CNN測試Cifar-10資料集Python實現

題目描述: 1. 對Cifar-10影象資料集,用卷積神經網路進行分類,統計正確率。 2.選用Caffe, Tensorflow, Pytorch等開 源深度學習框架之一,學會安裝這些框架並呼叫它們的介面。 3.直接採用這些深度學習框架針對Cifar-10資料集已訓練好的網路模型,只

李航統計學習方法之樸素貝葉斯法含python及tensorflow實現

樸素貝葉斯法 樸素貝葉斯法數學表示式 後驗概率最大化的含義        樸素貝葉斯是一個生成模型。有一個強假設:條件獨立性。我們先看下樸素貝葉斯法的思想,然後看下條件獨立性具體數學表示式是什麼樣的。

tensorflow——入門程式碼一minist master

一 檔案結構     並不是自己下載的程式碼,老師給的,看到readme.md猜測可能時github上下載的。先理一下這個檔案結構,最_pycache_檔案有什麼用(https://blog.csdn.net/index20001/article/details/735

tensorflow——入門程式碼二minist master

繼上篇,繼續視訊程式碼筆記。 一:placeholder(tensorflow) 具體不造有什麼用。 結果: 二:action function激勵函式(tensorflow) (目前:我自己理解為:1.壓縮,使其值(啟用值)位於0到1之間;2.表示了模型的

快速排序java實現例項

快速排序的核心思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。 下面是java寫的快速排序演算法: public class Searc