• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 入門NLP-4-基于深度學習的文本分類1-fastText

    標簽: nlp  自然語言處理  深度學習  機器學習  神經網絡  

    綜述

    在這里不太不關注fastText的原理,重點放在怎么使用,歡迎一起討論。

    數據

    數據集來自天池比賽,可自行下載或者聯系我: 鏈接

    fastText簡介及使用

    fastText 架構原理

    fastText 模型輸入一個詞的序列(一段文本或者一句話),輸出這個詞序列屬于不同類別的概率。
    序列中的詞和詞組組成特征向量,特征向量通過線性變換映射到中間層,中間層再映射到標簽。
    fastText 在預測標簽時使用了非線性**函數,但在中間層不使用非線性**函數。
    fastText 模型架構和 Word2Vec 中的 CBOW 模型很類似。不同之處在于,fastText 預測標簽,而 CBOW 模型預測中間詞。
    在這里插入圖片描述

    fastText的安裝

    FastText可以快速的在CPU上進行訓練,最好的實踐方法就是官方開源的版本: https://github.com/facebookresearch/fastText/tree/master/python

    • pip安裝
    pip install fasttext
    

    或者

    git clone https://github.com/facebookresearch/fastText.git
    cd fastText
    sudo pip install .
    
    • 也可以使用 setuptools 安裝
    git clone https://github.com/facebookresearch/fastText.git
    cd fastText
    python setup.py install
    

    當時我在服務器上安裝時,使用的是pip安裝,安裝失敗,原因是使用原服務器的pip,不是root賬號不能安裝成果,所以我使用自己虛擬環境的pip,成功了。

    fastText的使用

    在使用fastText的時候,要把數據設置成API規定的格式。

    import pandas as pd
    from sklearn.metrics import f1_score
    
    # 轉換為FastText需要的格式
    train_df = pd.read_csv('../data/train_set.csv', sep='\t', nrows=15000)
    train_df['label_ft'] = '__label__' + train_df['label'].astype(str)
    train_df[['text','label_ft']].iloc[:-5000].to_csv('train.csv', index=None, header=None, sep='\t')
    
    import fasttext
    model = fasttext.train_supervised('train.csv', lr=1.0, wordNgrams=2, 
                                      verbose=2, minCount=1, epoch=25, loss="hs")
    
    val_pred = [model.predict(x)[0][0].split('__')[-1] for x in train_df.iloc[-5000:]['text']]
    print(f1_score(train_df['label'].values[-5000:].astype(str), val_pred, average='macro'))
    # 0.82
    

    在上述代碼中,首先pd.read_csv()讀取文本data和label,然后重新設置格式:一行有兩列分別是’text’和’label_ft’,其中text是文本或者序列詞的index,label的格式是’label’ + train_df[‘label’].astype(str)。
    然后用fasttext.train_supervised()構建模型并訓練,使用model.predict(x)預測并保存在val_pred中。

    當然,fasttext也有很多其他的接口
    如可以使用 fasttext.skipgram 和 fasttext.cbow 功能:

    import fasttext
    # skipgram model
    model = fasttext.skipgram('data.txt','model')
    print model.words # 字典中的詞匯列表
     
    # CBOW model
    model = fasttext.cbow('data.txt','model')
    print model.words
    

    獲取詞匯表外單詞的向量,已經訓練過的模型可以用來計算詞匯表外的詞匯向量。

    # 單詞 'king' 的詞向量
    print model['king']
    

    總結

    FastText在文本分類任務上,是優于TF-IDF的:

    • FastText用單詞的Embedding疊加獲得的文檔向量,將相似的句子分為一類;
    • FastText學習到的Embedding空間維度比較低,可以快速進行訓練;

    要知道fasttext,不過是 word2vec中 cbow + h-softmax的靈活使用,其靈活體現在兩個方面:

    • 模型的輸出層:word2vec的輸出層,對應的是每一個term,計算某term的概率最大;而fasttext的輸出層對應的是分類的label。不過不管輸出層對應的是什么內容,起對應的vector都不會被保留和使用;
    • 模型的輸入層:word2vec的輸出層,是 context window 內的term;而fasttext 對應的整個sentence的內容,包括term,也包括 n-gram的內容;

    兩者本質的不同,體現在 h-softmax的使用:

    • Wordvec的目的是得到詞向量,該詞向量 最終是在輸入層得到,輸出層對應的 h-softmax也會生成一系列的向量,但最終都被拋棄,不會使用;
    • fasttext則充分利用了h-softmax的分類功能,遍歷分類樹的所有葉節點,找到概率最大的label(一個或者N個);
    版權聲明:本文為u014331829原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/u014331829/article/details/107621057

    智能推薦

    天池NLP賽事-新聞文本分類(四)——基于深度學習的文本分類1-FastText

    系列文章 天池NLP賽事-新聞文本分類(一) —— 賽題理解 天池NLP賽事-新聞文本分類(二) —— 數據讀取和數據分析 天池NLP賽事-新聞文本分類(三)——基于機器學習的文本分類 天池NLP賽事-新聞文本分類(四)——基于深度學習的文本分類1-FastText 目錄 四、基于深度學習的文本分類1-...

    NLP入門——天池新聞文本分類(4)基于深度學習文本分類1

    NLP入門——天池新聞文本分類(4)基于深度學習的文本分類 基于深度學習的文本分類 學習目標 文本表示方法 Part2 之前的文本表示方法的缺陷 FastText 基于FastText的文本分類 使用交叉驗證集調參 本章作業 基于深度學習的文本分類 深度學習的模型既可以提供特征提取的功能,也可以完成分類。 學習目標 學習FastText的使用和基礎原理 學會使用驗證集進行模...

    阿里天池NLP入門——新聞文本分類(4)基于深度學習的文本分類1

    基于深度學習的文本分類 與傳統機器學習不同,深度學習既提供特征提取功能,也可以完成分類的功能。從本章開始我們將學習如何使用深度學習來完成文本表示。 學習目標 1.學習FastText的使用和基礎原理 2.學會使用驗證集進行調參 文本表示方法 Part2 現有文本表示方法的缺陷 在上一章節,我們介紹幾種文本表示方法: One-hot Bag of Words N-gram TF-IDF 也通過skl...

    Datawhale - 入門NLP之新聞文本分類 - task4 基于深度學習的文本分類1

    文章目錄 學習目標 fasttext 使用驗證集調參 小結 使用深度學習來完成文本表示。 學習目標 學習FastText的使用和基礎原理 學會使用驗證集進行調參 fasttext astText是一種典型的深度學習詞向量的表示方法,它非常簡單通過Embedding層將單詞映射到稠密空間,然后將句子中所有的單詞在Embedding空間中進行平均,進而完成分類操作。 所以FastText是一個三層的神...

    零基礎入門NLP-Task4基于深度學習的文本分類1

    介紹 Fast Text Fast Text是一種典型的深度學習詞向量的表示方法,它非常簡單通過Embedding層將單詞映射到稠密空間,然后將句子中所有的單詞在Embedding空間中進行平均,進而完成分類操作。 首先進行fast text的安裝 方法一:電腦在本地的cmd輸入 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple fas...

    猜你喜歡

    DataWhale零基礎入門NLP賽事系列——Task4基于深度學習得文本分類fasttext

    1. fasttext在windows下的安裝 不知道多少小伙伴跟我遇到過一樣類似的問題,直接pip install fasttext會報錯。所以我們需要先下載一個.whl的包。下載地址:fasttext 我的python是3.7的,選了如上圖所示的 測試一下,在cmd里輸入 不報錯即可。 2. fasttext對數據格式的要求 我們的訓練集數據格式:label,text 但是,fasttexta...

    task4 基于深度學習的文本分類1-fastText

    task4 基于深度學習的文本分類1-fastText 學習目標 1.學習FastText的使用和基礎原理 2.學會使用驗證集進行調參 文本表示方法 FastText FastText是一種典型的深度學習詞向量的表示方法,它非常簡單通過Embedding層將單詞映射到稠密空間,然后將句子中所有的單詞在Embedding空間中進行平均,進而完成分類操作。 所以FastText是一個三層的神經網絡,輸...

    hive 導出數據之一列多行,轉為一行多列

    需求:提取數據 說明:原數據是一列多行,需要轉化為一行多列 待查詢表為:temp_05 待查詢數據為: 待查詢數據如圖: 需要提取的數據表頭如下: 預定日期 昨日價格 前天價格 2018-02-01 2018-02-02 2018-02-03 2018-02-04 可用提數 SQL 數據如圖: 以下為嘗試過程 數據如圖: 數據如圖: 數據如圖: 數據如圖:...

    asp.net做一個簡易的聊天室

    要求: 結果: 關鍵代碼: Default.aspx Default.aspx.cs Default2.aspx Default2.aspx.cs Default3.aspx Default3.aspx.cs Default4.aspx...

    動態SQL和多表關聯-筆記

    《動態SQL與多表關聯》筆記 學習目標 能夠使用動態SQL完成SQL拼接 能夠使用resultMap完成多表查詢 能夠使用一對一查詢 能夠使用一對多查詢 (注:多對多其實就是兩個一個多) 映射文件:為什么要resultMap 目標 定義結果映射 使用結果映射 回顧 在mybatis中有2種配置文件: 核心配置文件,如:sqlMapConfig.xml 實體類映射文件,如:UserMapper.xm...

    精品国产乱码久久久久久蜜桃不卡