fasttext 文本分類_4種常見的NLP實踐思路【特征提取+分類模型】

da75b0aa70657003c566489620707976.png

越來越多的人選擇參加算法賽事,為了提升項目實踐能力,同時也希望能拿到好的成績增加履歷的豐富度。期望如此美好,現實卻是:看完賽題,一點思路都木有。那么,當我們拿到一個算法賽題后,如何破題,如何找到可能的解題思路呢。

本文針對NLP項目給出了4種常見的解題思路,其中包含1種基于機器學習的思路和3種基于深度學習的思路。

一、數據及背景

https://tianchi.aliyun.com/competition/entrance/531810/information(阿里天池-零基礎入門NLP賽事)

二、數據下載及分析2.1 獲取數據

我們直接打開數據下載地址,看到的是這樣一個頁面:

3266f6655c3e0f4b8893eb760c254880.png

接著就三步走:注冊報名下載數據,查看數據前五行可以看到我們獲得的數據如下:

38bac8d4e76d74be9c779ba7a53f66c0.png

其中左邊的label是數據集文本對應的標簽,而右邊的text則是編碼后的文本,文本對應的標簽列舉如下:

e14eb3a4a2f1f6a26bdb5851c396501c.png

根據官方描述:賽題以匿名處理后的新聞數據為賽題數據,數據集報名后可見并可下載。賽題數據為新聞文本,并按照字符級別進行匿名處理。整合劃分出14個候選分類類別:財經、彩票、房產、股票、家居、教育、科技、社會、時尚、時政、體育、星座、游戲、娛樂的文本數據。賽題數據由以下幾個部分構成:訓練集20w條樣本,測試集A包括5w條樣本,測試集B包括5w條樣本。為了預防選手人工標注測試集的情況,我們將比賽數據的文本按照字符級別進行了匿名處理。

同時我們還應該注意到官網有給出結果評價指標,我們也需要根據這個評價指標衡量我們的驗證集數據誤差:

6c8fe26a814eeab24d58b95759879548.png

既然該拿到的我們都拿到了,我們接下來就開始構思我們都應該使用哪些思路來完成我們的預測。

2.2 常見思路

賽題本質是一個文本分類問題,需要根據每句的字符進行分類。但賽題給出的數據是匿名化的,不能直接使用中文分詞等操作,這個是賽題的難點。

因此本次賽題的難點是需要對匿名字符進行建模,進而完成文本分類的過程。由于文本數據是一種典型的非結構化數據,因此可能涉及到特征提取分類模型兩個部分。為了減低參賽難度,我們提供了一些解題思路供大家參考:

  • 思路1:TF-IDF + 機器學習分類器:直接使用TF-IDF對文本提取特征,并使用分類器進行分類。在分類器的選擇上,可以使用SVM、LR、或者XGBoost。
  • 思路2:FastText:FastText是入門款的詞向量,利用Facebook提供的FastText工具,可以快速構建出分類器。
  • 思路3:WordVec + 深度學習分類器:WordVec是進階款的詞向量,并通過構建深度學習分類完成分類。深度學習分類的網絡結構可以選擇TextCNN、TextRNN或者BiLSTM。
  • 思路4:Bert詞向量:Bert是高配款的詞向量,具有強大的建模學習能力。

三、基于機器學習的文本分類

3.1 TF-IDF+機器學習分類器(思路1)

3.1.1. 什么是TF-IDF?

TF-IDF(term frequency–inverse document frequency)是一種用于信息檢索與數據挖掘的常用加權技術,常用于挖掘文章中的關鍵詞,而且算法簡單高效,常被工業用于最開始的文本數據清洗。TF-IDF有兩層意思,一層是"詞頻"(Term Frequency,縮寫為TF),另一層是"逆文檔頻率"(Inverse Document Frequency,縮寫為IDF)。

當有TF(詞頻)和IDF(逆文檔頻率)后,將這兩個詞相乘,就能得到一個詞的TF-IDF的值。某個詞在文章中的TF-IDF越大,那么一般而言這個詞在這篇文章的重要性會越高,所以通過計算文章中各個詞的TF-IDF,由大到小排序,排在最前面的幾個詞,就是該文章的關鍵詞。

3.2.2. TF-IDF算法步驟

第一步,計算詞頻:

02ba0415caa0d0be3af95a95b7ca9fa4.png

考慮到文章有長短之分,為了便于不同文章的比較,進行"詞頻"標準化:

3173dec7b335134110ee7aa49f394afb.png

第二步,計算逆文檔頻率:

這時,需要一個語料庫(corpus),用來模擬語言的使用環境。

a251c7380b9fcd45d4651be8365b89ed.png

如果一個詞越常見,那么分母就越大,逆文檔頻率就越小越接近0。分母之所以要加1,是為了避免分母為0(即所有文檔都不包含該詞)。log表示對得到的值取對數。

第三步,計算TF-IDF:

f80f3021f9120efb7807afadb9982e1c.png

可以看到,TF-IDF與一個詞在文檔中的出現次數成正比,與該詞在整個語言中的出現次數成反比。所以,自動提取關鍵詞的算法就很清楚了,就是計算出文檔的每個詞的TF-IDF值,然后按降序排列,取排在最前面的幾個詞。

3.3.3. 優缺點

TF-IDF的優點是簡單快速,而且容易理解。缺點是有時候用詞頻來衡量文章中的一個詞的重要性不夠全面,有時候重要的詞出現的可能不夠多,而且這種計算無法體現位置信息,無法體現詞在上下文的重要性。如果要體現詞的上下文結構,那么你可能需要使用word2vec算法來支持。

四、基于深度學習的文本分類

4.1 FastText(思路2)

4.1.1 FastText的核心思想

將整篇文檔的詞及n-gram向量疊加平均得到文檔向量,然后使用文檔向量做softmax多分類。這中間涉及到兩個技巧:字符級N-gram特征的引入以及分層Softmax分類。

4.1.2 字符級N-gram特征

N-gram是基于語言模型的算法,基本思想是將文本內容按照子節順序進行大小為N的窗口滑動操作,最終形成窗口為N的字節片段序列。舉個例子:

我來到達觀數據參觀

相應的bigram特征為:我來 來到 到達 達觀 觀數 數據 據參 參觀

相應的trigram特征為:我來到 來到達 到達觀 達觀數 觀數據 數據參 據參觀

注意一點:n-gram中的gram根據粒度不同,有不同的含義。它可以是字粒度,也可以是詞粒度的。上面所舉的例子屬于字粒度的n-gram,詞粒度的n-gram看下面例子:

我 來到 達觀數據 參觀

相應的bigram特征為:我/來到 來到/達觀數據 達觀數據/參觀

相應的trigram特征為:我/來到/達觀數據 來到/達觀數據/參觀

n-gram產生的特征只是作為文本特征的候選集,你后面可能會采用信息熵、卡方統計、IDF等文本特征選擇方式篩選出比較重要特征。

4.1.3 分層Softmax分類

softmax函數常在神經網絡輸出層充當激活函數,目的就是將輸出層的值歸一化到0-1區間,將神經元輸出構造成概率分布,主要就是起到將神經元輸出值進行歸一化的作用。

下圖是一個分層Softmax示例:

3bf981621fdfd16cdf92b99212609de9.png

通過分層的Softmax,計算復雜度一下從|K|降低到log|K|。

4.2 Word2Vec+深度學習分類器(思路3)

4.2.1 Word2Vec

Word2vec,是一群用來產生詞向量的相關模型。這些模型為淺而雙層的神經網絡,用來訓練以重新建構語言學之詞文本。網絡以詞表現,并且需猜測相鄰位置的輸入詞,在word2vec中詞袋模型假設下,詞的順序是不重要的。訓練完成之后,word2vec模型可用來映射每個詞到一個向量,可用來表示詞對詞之間的關系,該向量為神經網絡之隱藏層。【百度百科】

Word2vec 是 Word Embedding 的方法之一。他是 2013 年由谷歌的 Mikolov 提出了一套新的詞嵌入方法。

4.2.2 優化方法

為了提高速度,Word2vec 經常采用 2 種加速方式:

1、Negative Sample(負采樣)

2、Hierarchical Softmax

4.2.3 優缺點

優點:

  • 由于 Word2vec 會考慮上下文,跟之前的 Embedding 方法相比,效果要更好(但不如 18 年之后的方法)
  • 比之前的 Embedding方 法維度更少,所以速度更快
  • 通用性很強,可以用在各種 NLP 任務中

缺點:

  • 由于詞和向量是一對一的關系,所以多義詞的問題無法解決。
  • Word2vec 是一種靜態的方式,雖然通用性強,但是無法針對特定任務做動態優化

4.3 Bert詞向量(思路4)

BERT(Bidirectional Encoder Representations from Transformers)詞向量模型,2018年10月在《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》這篇論文中被Google提出,在11種不同nlp測試中創出最佳成績,包括將glue基準推至80.4%(絕對改進7.6%),multinli準確度達到86.7% (絕對改進率5.6%)等。

4.1.1 特征

1、通過聯合調節所有層中的左右上下文來預訓練深度雙向表示

2、the first fine-tuning based representation model that achieves state-of-the-art performance on a large suite of sentence-level and token-level tasks, outperforming many systems with task-specific architectures

3、所需計算量非常大。Jacob 說:「OpenAI 的 Transformer 有 12 層、768 個隱藏單元,他們使用 8 塊 P100 在 8 億詞量的數據集上訓練 40 個 Epoch 需要一個月,而 BERT-Large 模型有 24 層、2014 個隱藏單元,它們在有 33 億詞量的數據集上需要訓練 40 個 Epoch,因此在 8 塊 P100 上可能需要 1 年?16 Cloud TPU 已經是非常大的計算力了。

4、預訓練的BERT表示可以通過一個額外的輸出層進行微調,適用于廣泛任務的state-of-the-art模型的構建,比如問答任務和語言推理,無需針對具體任務做大幅架構修改。

5、一詞多義問題

溫馨提醒:主頁置頂的有實用貼合集,歡迎大家積極參與和分享,你分享,我贈書,一起漲姿勢!

文章轉載自:Datawhale

如有侵權,可私信聯系刪稿

感謝關注和點贊

會定期分享你想了解的干貨知識。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454667.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454667.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454667.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Angular4學習筆記(六)- Input和Output

概述 Angular中的輸入輸出是通過注解Input和Output來標識,它位于組件控制器的屬性上方。 輸入輸出針對的對象是父子組件。 演示 Input 新建項目connInComponents:ng new connInComponents.新增組件stock:ng g component stock.在stock.component.ts中新增屬性stockN…

Python 常見加密方式和實現

Python 加密與解密小結 這篇文章主要介紹了Python 加密與解密,使用base64或pycrypto模塊 前言 據記載,公元前400年,古希臘人發明了置換密碼。1881年世界上的第一個電話保密專利出現。在第二次世界大戰期間,德國軍方啟用“恩尼格瑪”密碼機…

jenkins日志亂碼linux,Jenkins控制臺中亂碼問題解決

由于服務器環境及應用層各版本的不同、編碼方式的不同因此會有很多種情況會出現亂碼問題。由于Jenkins中的job運行的是獨立的一個shell環境,許多的環境變量與服務器中是不一樣的,因此在job中執行的命令也就會有所差異。因此可以在job中執行env命令&#…

13,反轉鏈表《劍指offer》

題目: 輸入一個鏈表,反轉鏈表后,輸出鏈表的所有元素。 思路: 反轉鏈表,對于片段 1--->2--->3循環操作; 要反轉鏈表需要兩步: 一,將2->next指向1 (如果不保存3那…

什么是面試的關鍵?資深HR告訴你!

求職指南、面試寶典、應聘手冊……到任何一個書店去轉轉,總能發現一兩本這樣的書,有關面試應聘的包裝技巧實在太多,既讓應聘者眼花繚亂、無所適從,也讓人事經理頭疼,總擔心會被應聘者的包裝所蒙騙。東方控股集團有限公…

windows商店_Windows記事本應用現在可以從Microsoft Store中獲得

早在2019年8月,微軟就宣布將把人們最常用的Windows記事本應用搬到應用商店,讓這款深受用戶喜愛的應用更新速度更快、響應更靈敏。12月晚些時候,微軟卻放棄了這一計劃,也沒有給出太多理由。但現在,這一計劃已經完成&…

.net core linux 編譯,.NET Core 源碼編譯的問題解析

引言: .NET Core 源碼編譯https://github.com/dotnetgit clone https://github.com/dotnet/runtime.git一:Windows 編譯VS 2019 16.6(不要安裝預覽版)Win 10 專業版,最新版本 (1903/2004)長路徑支持:組策略(gpedit.msc) > 計算…

jmeter 壓測duobbo接口,施壓客戶端自己把自己壓死了

jmeter 壓測duobbo接口,jmeter代碼不合理,導致每執行一次請求,會調用一次消耗內存的實例化。導致越壓越慢,請求發不出去。這個時候需要考慮修改代碼了。 截圖中,tps越來越少。 原來初始化的代碼放在 runTest中執行。修…

oracle pl/sql 包

包用于在邏輯上組合過程和函數,它由包規范和包體兩部分組成。1)、我們可以使用create package命令來創建包,如:i、創建一個包sp_packageii、聲明該包有一個過程update_saliii、聲明該包有一個函數annual_income --聲明該包有一個存儲過程和一…

MySQL 之 explain

explain 介紹 explain顯示了MySQL如何使用索引來處理select語句以及連接表。可以幫助選擇更好的索引和寫出更優化的查詢語句。簡單講,它的作用就是分析查詢性能。explain 查詢SQL - 用于顯示SQL執行信息參數,根據參考信息可以進行SQL優化 示例&#x…

[置頂]微軟面試智力題

這個笑話反映了兩個公司不同的企業文化。很多人都知道微軟的企業文化是寬松和自由,給員工一個充分發揮創造力的空間,這也是微軟能吸引很多人才的原因之一。但是,要想進微軟工作可不容易,微軟在招聘工作上一點也不馬虎,…

背單詞軟件 單詞風暴 分享id_周一考研高效背單詞系列(一):利用單詞軟件如何背好單詞...

高效背單詞考研單詞作為考研路上的第一大難關,相信很多小伙伴都在這上面吃過不少苦,有同學更是看到密密麻麻的大綱詞匯就頭疼,但只要是學習就是有方法的,今天,我們開始推出高效背單詞系列——墨墨背單詞。另&#xff1…

linux c++ 編譯 庫,LINUX C/C++ 編譯庫關系

在LINUX 下安裝個啥,都要涉及到編譯,尤其是開源軟件. 那么編譯就涉及到C/C 和對應的庫. 我們理一理之間的關系有助于MYSQL8源碼編譯libc glibc libc libstdc eglibc GCC G CMakeGDB從libc說起。libc是Linux下原來的標準C庫,也就是當初寫hello world時包含的頭文件#…

Linux_學習_Day3_bash

Shell bash是外部程序:type/whichis bash。 shell, 子shell。可以利用bash打開另一個bash。即打開一個子shell。并且每個進程是獨立存在的。對于子shell而言,bash并不認知其他bash的存在。 執行了多次bash,要退出只需exit。用pst…

mysql 之 優化 (收集于網絡)

(以下內容均來自于網絡,如果有版權限制,請聯系我0.0) Mysql存儲千億級的數據,是一項非常大的挑戰。Mysql單表可以存儲10億級的數據,只是這個時候性能非常差,項目中大量的實驗證明,M…

hadoop-09-安裝資源上傳

hadoop-09-安裝資源上傳 在/software/www/html 下面上傳 ambari HDP HDP-UTILS-1.1.0.21 文件,之后解壓;

easyui 收費_收費班長喻玉華三尺崗亭獻青春

- 2020 第四期 人物訪談報道 -拼搏人生最美勵志先鋒人物專訪2013年,22歲的她來到巴南高速這個大家庭中,成為恩陽收費站一名普通的收費員。懷著對事業的執著追求與熱愛,經過兩年不懈的努力,獲得了領導和同事的認可和喜愛。2015年5月…

編程技術面試的五大要點

(寫在前面的話:本文最初發表于《程序員》雜志2011年10月刊,并收錄到《劍指Offer——名企面試官精講典型編程題》一書中。) 近年來找工作一直是一個很熱門的話題。我們要想找到心儀的工作,難免需要經過很多輪面試。編程…

訪問linux服務主機,如何把Linux配置為日志服務主機。

如網絡設備很多,可把同類的設備配置為相同的設備號例:more switch.log | grep X.X.X.X //查看某一設備的日志審核和記錄系統的事件是非常重要的。如果僅僅把系統事件作為日志記錄下來,而不去查看,還是無濟于事。可用webadmin管理和…

WSARecv() 函數使用解析

詳情參考:https://msdn.microsoft.com/en-us/library/windows/desktop/ms741688(vvs.85).aspx 簡述 The WSARecv function receives data from a connected socket or a bound connectionless socket. The WSARecv function provides some additional features comp…