日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

用最新NLP库Flair做文本分类

發(fā)布時(shí)間:2024/8/23 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用最新NLP库Flair做文本分类 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

介紹

文本分類(lèi)是一種監(jiān)督機(jī)器學(xué)習(xí)方法,用于將句子或文本文檔歸類(lèi)為一個(gè)或多個(gè)已定義好的類(lèi)別。它是一個(gè)被廣泛應(yīng)用的自然語(yǔ)言處理方法,在垃圾郵件過(guò)濾、情感分析、新聞稿件分類(lèi)以及與許多其它業(yè)務(wù)相關(guān)的問(wèn)題中發(fā)揮著重要作用。

目前絕大多數(shù)最先進(jìn)的方法都依賴(lài)于一種被稱(chēng)為文本嵌入的技術(shù)。它將文本轉(zhuǎn)換成高維空間中的數(shù)值表示方式。它可以將文檔、語(yǔ)句、單詞、字符(取決于我們所嵌入的形式)表示為這個(gè)高維空間中的一個(gè)向量。

Flair之所以對(duì)NLP來(lái)說(shuō)是一個(gè)令人興奮的消息,是因?yàn)閆alando Research最近發(fā)表的一篇論文《Contextual String Embeddings for Sequence Labelling(用于序列標(biāo)注的上下文相關(guān)字符串的嵌入)》,其中涵蓋了一種始終優(yōu)于以前最先進(jìn)方案的方法。該算法在Flair中得到了完整的支持和實(shí)現(xiàn),可以用來(lái)構(gòu)建文本分類(lèi)器。

1、準(zhǔn)備

安裝Flair需要Python 3.6,如果你還沒(méi)有,請(qǐng)點(diǎn)擊這里查看安裝向?qū)АH缓髨?zhí)行pip命令安裝即可:

pip install flair

上面的命令將安裝運(yùn)行Flair所需的所有依賴(lài)包,當(dāng)然也包括了PyTorch。

2、使用一個(gè)預(yù)訓(xùn)練的分類(lèi)模型

最新的0.4版本包含了兩個(gè)預(yù)訓(xùn)練的模型,還有一個(gè)基于IMDB數(shù)據(jù)集上訓(xùn)練的情感分析模型和“攻擊性語(yǔ)言檢測(cè)”模型(當(dāng)前僅支持德語(yǔ))。

使用、下載和存儲(chǔ)模型都被整合到了一個(gè)單一的方法中,這使得使用預(yù)訓(xùn)練模型的整個(gè)過(guò)程都非常簡(jiǎn)單。

要使用情感分析模型,只需執(zhí)行以下代碼片段:

fromflair.models import TextClassifier from flair.data import Sentenceclassifier = TextClassifier.load('en-sentiment')sentence = Sentence('Flair is pretty neat!') classifier.predict(sentence)# print sentence with predicted labels print('Sentence above is: ', sentence.labels)

當(dāng)?shù)谝淮芜\(yùn)行時(shí),Flair將下載情感分析模型,默認(rèn)情況下將其存儲(chǔ)到home目錄下的.flair子目錄中,這大概得需要幾分鐘。

上面的代碼首先加載必需的庫(kù),然后將情感分析模型加載到內(nèi)存中(必要時(shí)先進(jìn)行下載),接下來(lái)可以預(yù)測(cè)句子“Flair is pretty neat!”的情感數(shù)值,按0到1的區(qū)間賦值。最后命令的輸出結(jié)果是:

The sentence above is: [Positive (1.0)]

就是這么簡(jiǎn)單!例如,現(xiàn)在你可以將上述代碼合并在一個(gè)REST API中,并提供一個(gè)與Google的云自然語(yǔ)言API的情感分析類(lèi)似的服務(wù),當(dāng)在有大量請(qǐng)求的生產(chǎn)環(huán)境中使用時(shí),這種分析的成本將會(huì)非常的高。

3、訓(xùn)練一個(gè)自定義文本分類(lèi)器

要訓(xùn)練一個(gè)自定義的文本分類(lèi)器,我們首先需要一個(gè)標(biāo)注過(guò)的數(shù)據(jù)集。Flair的分類(lèi)數(shù)據(jù)集格式基于Facebook的FastText格式。格式要求在每行的開(kāi)頭定義一個(gè)或多個(gè)標(biāo)簽,以前綴__label__開(kāi)頭。格式如下:

__label__<class_1><text> __label__<class_2><text>

在本文中,我們將利用Kaggle的Spam Detection數(shù)據(jù)集通過(guò)Flair構(gòu)建一個(gè)垃圾/非垃圾的分類(lèi)器。這個(gè)數(shù)據(jù)集比較適合我們的學(xué)習(xí)任務(wù),因?yàn)樗銐蛐?#xff0c;并且僅包含5572行的數(shù)據(jù),可以在一個(gè)CPU上只花幾分鐘就可以完成一個(gè)模型的訓(xùn)練。

3.1?預(yù)處理-構(gòu)建數(shù)據(jù)集

我們首先從Kaggle上的這個(gè)鏈接下載數(shù)據(jù)集來(lái)獲得spam.csv文件。然后,在與數(shù)據(jù)集相同的目錄中,我們運(yùn)行下面的預(yù)處理代碼片段,該代碼將執(zhí)行一些預(yù)處理,并將數(shù)據(jù)集拆分為訓(xùn)練集、開(kāi)發(fā)集和測(cè)試集三個(gè)部分。

確保安裝了Pandas。如果還沒(méi)有,請(qǐng)先運(yùn)行命令:

pip install pandasimport pandas as pd data = pd.read_csv("./spam.csv", encoding='latin-1').sample(frac=1).drop_duplicates()data = data[['v1', 'v2']].rename(columns={"v1":"label", "v2":"text"})data['label'] = '__label__' + data['label'].astype(str)data.iloc[0:int(len(data)*0.8)].to_csv('train.csv', sep='\t', index = False, header = False) data.iloc[int(len(data)*0.8):int(len(data)*0.9)].to_csv('test.csv', sep='\t', index = False, header = False) data.iloc[int(len(data)*0.9):].to_csv('dev.csv', sep='\t', index = False, header = False);

上面的代碼將從數(shù)據(jù)集中刪除一些重復(fù)數(shù)據(jù),并對(duì)其進(jìn)行無(wú)序處理(隨機(jī)化行),并按照80/10/10的比例將數(shù)據(jù)拆分為訓(xùn)練集、開(kāi)發(fā)集和測(cè)試集。

如果運(yùn)行成功,你將會(huì)得到FastText格式的三個(gè)數(shù)據(jù)文件:train.csv、test.csv和dev.csv,它們可以與Flair一起使用。

3.2?訓(xùn)練自定義文本分類(lèi)模型

請(qǐng)?jiān)谏蓴?shù)據(jù)集的目錄中運(yùn)行以下代碼片段用以訓(xùn)練模型:

fromflair.data_fetcher import NLPTaskDataFetcher from flair.embeddings import WordEmbeddings, FlairEmbeddings, DocumentLSTMEmbeddings from flair.models import TextClassifier from flair.trainers import ModelTrainer from pathlib import Pathcorpus = NLPTaskDataFetcher.load_classification_corpus(Path('./'), test_file='test.csv', dev_file='dev.csv', train_file='train.csv')word_embeddings = [WordEmbeddings('glove'), FlairEmbeddings('news-forward-fast'), FlairEmbeddings('news-backward-fast')]document_embeddings = DocumentLSTMEmbeddings(word_embeddings, hidden_size=512, reproject_words=True, reproject_words_dimension=256)classifier = TextClassifier(document_embeddings, label_dictionary=corpus.make_label_dictionary(), multi_label=False)trainer = ModelTrainer(classifier, corpus)trainer.train('./', max_epochs=10)

第一次運(yùn)行上述代碼時(shí),Flair將會(huì)自動(dòng)下載需要的所有嵌入模型,這可能需要幾分鐘,然后接下來(lái)的整個(gè)培訓(xùn)過(guò)程還需要大約5分鐘。

程序首先將所需的庫(kù)和數(shù)據(jù)集加載到一個(gè)corpus對(duì)象中。

接下來(lái),我們創(chuàng)建一個(gè)嵌入列表,包含兩個(gè)Flair上下文的字符串嵌入和一個(gè)GloVe單詞嵌入。然后將此列表作為文檔嵌入對(duì)象的輸入。堆疊和文檔嵌入是Flair中最有趣的概念之一,提供了將不同的嵌入整合在一起的方法。你可以同時(shí)使用傳統(tǒng)的單詞嵌入(如GloVe, word2vec, ELMo)和Flair上下文的字符串嵌入。在上面的例子中,我們使用了一種基于LSTM(Long Short-Term Memory,長(zhǎng)短期記憶網(wǎng)絡(luò))的方法,將單詞和上下文的字符串嵌入結(jié)合起來(lái)以生成文檔嵌入。想要了解更多,請(qǐng)點(diǎn)擊這里。

最后,上述代碼進(jìn)行模型訓(xùn)練并生成了final-model.pt和best-model.pt兩個(gè)文件,它們表示我們存儲(chǔ)的訓(xùn)練模型。

3.3?用訓(xùn)練過(guò)的模型進(jìn)行預(yù)測(cè)

我們現(xiàn)在可以從同一目錄通過(guò)運(yùn)行以下代碼,使用導(dǎo)出的模型來(lái)生成預(yù)測(cè)結(jié)果:

fromflair.models import TextClassifier from flair.data import Sentenceclassifier = TextClassifier.load_from_file('./best-model.pt')sentence = Sentence('Hi. Yes mum, I will...')classifier.predict(sentence)print(sentence.labels)

這段代碼會(huì)輸出“[ham(1.0)]”,這意味著該模型100%確定我們的示例消息不是垃圾郵件。

與其它框架相比表現(xiàn)如何?

與Facebook的FastText甚至谷歌的AutoML自然語(yǔ)言平臺(tái)不同,使用Flair進(jìn)行文本分類(lèi)仍然是一項(xiàng)底層的工作。我們可以通過(guò)設(shè)置諸如學(xué)習(xí)率、批量大小、退火因子(anneal factor)、損失函數(shù)、優(yōu)化選擇等參數(shù)來(lái)完全控制文本嵌入和訓(xùn)練的方式…為了獲得最佳表現(xiàn),需要調(diào)整這些超參數(shù)。Flair為我們提供了一個(gè)有名的超參數(shù)調(diào)優(yōu)庫(kù)Hyperopt的封裝器,我們可以使用它來(lái)對(duì)超參數(shù)進(jìn)行調(diào)優(yōu)以獲得最佳的性能。

在本文中,為了簡(jiǎn)單起見(jiàn),我們使用了默認(rèn)的超參數(shù)。在大多數(shù)默認(rèn)參數(shù)下,我們的Flair模型在10個(gè)訓(xùn)練周期后獲得了0.973的f1-score。

為了進(jìn)行對(duì)比,我們使用FastText和AutoML自然語(yǔ)言平臺(tái)訓(xùn)練了一個(gè)文本分類(lèi)模型。首先我們使用默認(rèn)參數(shù)運(yùn)行FastText,并獲得了0.883的f1-score,這意味著模型在很大程度上優(yōu)于FastText。然而,FastText只需要幾秒鐘的訓(xùn)練時(shí)間,而我們訓(xùn)練的Flair模型則需要5分鐘。

我們將結(jié)果與在谷歌的AutoML自然語(yǔ)言平臺(tái)上獲得的結(jié)果進(jìn)行了比較。平臺(tái)首先需要20分鐘來(lái)解析數(shù)據(jù)集。之后,我們開(kāi)始了訓(xùn)練過(guò)程,這幾乎花了3個(gè)小時(shí)完成,但卻獲得了99.211的f1-score——這比我們自己訓(xùn)練的模型稍微好一點(diǎn)。

?


原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的用最新NLP库Flair做文本分类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。