国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

textCNN論文與原理——短文本分類

自然語(yǔ)言處理愛(ài)好者 ? 來(lái)源:菊子皮 ? 作者:菊子皮 ? 2020-12-31 10:08 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

之前書寫了使用pytorch進(jìn)行短文本分類,其中的數(shù)據(jù)處理方式比較簡(jiǎn)單粗暴。自然語(yǔ)言處理領(lǐng)域包含很多任務(wù),很多的數(shù)據(jù)向之前那樣處理的話未免有點(diǎn)繁瑣和耗時(shí)。在pytorch中眾所周知的數(shù)據(jù)處理包是處理圖片的torchvision,而處理文本的少有提及,快速處理文本數(shù)據(jù)的包也是有的,那就是torchtext[1]。下面還是結(jié)合上一個(gè)案例:【深度學(xué)習(xí)】textCNN論文與原理——短文本分類(基于pytorch)[2],使用torchtext進(jìn)行文本數(shù)據(jù)預(yù)處理,然后再使用torchtext進(jìn)行模型分類。

關(guān)于torchtext的基本使用除了可以參考官方文檔,也可以看看這篇文章:TorchText用法示例及完整代碼[3]。

下面就開始看看該如何進(jìn)行處理吧。

1 數(shù)據(jù)處理

首先導(dǎo)入包:

from torchtext import data

我們處理的語(yǔ)料中,主要涉及兩個(gè)內(nèi)容:文本,文本對(duì)應(yīng)的類別。下面使用torchtext構(gòu)建這兩個(gè)字段:

# 文本內(nèi)容,使用自定義的分詞方法,將內(nèi)容轉(zhuǎn)換為小寫,設(shè)置最大長(zhǎng)度等 TEXT = data.Field(tokenize=utils.en_seg, lower=True, fix_length=config.MAX_SENTENCE_SIZE, batch_first=True) # 文本對(duì)應(yīng)的標(biāo)簽 LABEL = data.LabelField(dtype=torch.float)

其中的一些參數(shù)在一個(gè)config.py文件中,如下:

# 模型相關(guān)參數(shù) RANDOM_SEED = 1000 # 隨機(jī)數(shù)種子 BATCH_SIZE = 128 # 批次數(shù)據(jù)大小 LEARNING_RATE = 1e-3 # 學(xué)習(xí)率 EMBEDDING_SIZE = 200 # 詞向量維度 MAX_SENTENCE_SIZE = 50 # 設(shè)置最大語(yǔ)句長(zhǎng)度 EPOCH = 20 # 訓(xùn)練測(cè)輪次 # 語(yǔ)料路徑 NEG_CORPUS_PATH = ‘。/corpus/neg.txt’ POS_CORPUS_PATH = ‘。/corpus/pos.txt’

utils.en_seg是自定義的文本分詞函數(shù),如下:

def en_seg(sentence): “”“ 簡(jiǎn)單的英文分詞方法, :param sentence: 需要分詞的語(yǔ)句 返回分詞結(jié)果 ”“” return sentence.split()

當(dāng)然也可以書寫更復(fù)雜的,或者使用spacy。下面就是書寫讀取文本數(shù)據(jù)到torchtext對(duì)象的數(shù)據(jù)了,便于使用torchtext中的方法,如下:

def get_dataset(corpus_path, text_field, label_field, datatype): “”“ 構(gòu)建torchtext數(shù)據(jù)集 :param corpus_path: 數(shù)據(jù)路徑 :param text_field: torchtext設(shè)置的文本域 :param label_field: torchtext設(shè)置的文本標(biāo)簽域 :param datatype: 文本的類別 torchtext格式的數(shù)據(jù)集以及設(shè)置的域 ”“” fields = [(‘text’, text_field), (‘label’, label_field)] examples = [] with open(corpus_path, encoding=‘utf8’) as reader: for line in reader: content = line.rstrip() if datatype == ‘pos’: label = 1 else: label = 0 # content[:-2]是由于原始文本最后的兩個(gè)內(nèi)容是空格和。,這里直接去掉,并將數(shù)據(jù)與設(shè)置的域?qū)?yīng)起來(lái) examples.append(data.Example.fromlist([content[:-2], label], fields)) return examples, fields

現(xiàn)在就可以獲取torchtext格式的數(shù)據(jù)了,如下:

# 構(gòu)建data數(shù)據(jù) pos_examples, pos_fields = dataloader.get_dataset(config.POS_CORPUS_PATH, TEXT, LABEL, ‘pos’) neg_examples, neg_fields = dataloader.get_dataset(config.NEG_CORPUS_PATH, TEXT, LABEL, ‘neg’) all_examples, all_fields = pos_examples + neg_examples, pos_fields + neg_fields # 構(gòu)建torchtext類型的數(shù)據(jù)集 total_data = data.Dataset(all_examples, all_fields)

有了上面的數(shù)據(jù),下面就可以快速地為準(zhǔn)備模型需要的數(shù)據(jù)了,如切分,構(gòu)造批次數(shù)據(jù),獲取字典等,如下:

# 數(shù)據(jù)集切分 train_data, test_data = total_data.split(random_state=random.seed(config.RANDOM_SEED), split_ratio=0.8) # 切分后的數(shù)據(jù)查看 # # 數(shù)據(jù)維度查看 print(‘len of train data: %r’ % len(train_data)) # len of train data: 8530 print(‘len of test data: %r’ % len(test_data)) # len of test data: 2132 # # 抽一條數(shù)據(jù)查看 print(train_data.examples[100].text) # [‘never’, ‘engaging’, ‘,’, ‘utterly’, ‘predictable’, ‘a(chǎn)nd’, ‘completely’, ‘void’, ‘of’, ‘a(chǎn)nything’, ‘remotely’, # ‘interesting’, ‘or’, ‘suspenseful’] print(train_data.examples[100].label) # 0 # 為該樣本數(shù)據(jù)構(gòu)建字典,并將子每個(gè)單詞映射到對(duì)應(yīng)數(shù)字 TEXT.build_vocab(train_data) LABEL.build_vocab(train_data) # 查看字典長(zhǎng)度 print(len(TEXT.vocab)) # 19206 # 查看字典中前10個(gè)詞語(yǔ) print(TEXT.vocab.itos[:10]) # [‘《unk》’, ‘《pad》’, ‘,’, ‘the’, ‘a(chǎn)’, ‘a(chǎn)nd’, ‘of’, ‘to’, ‘。’, ‘is’] # 查找‘name’這個(gè)詞對(duì)應(yīng)的詞典序號(hào), 本質(zhì)是一個(gè)dict print(TEXT.vocab.stoi[‘name’]) # 2063 # 構(gòu)建迭代(iterator)類型的數(shù)據(jù) train_iterator, test_iterator = data.BucketIterator.splits((train_data, test_data), batch_size=config.BATCH_SIZE, sort=False)

這樣一看,是不是減少了我們書寫的很多代碼了。下面就是老生常談的模型預(yù)測(cè)和模型效果查看了。

2 構(gòu)建模型并訓(xùn)練

模型的相關(guān)理論已在前文介紹,如果忘了可以回過(guò)頭看看。模型還是那個(gè)模型,如下:

import torch from torch import nn import config class TextCNN(nn.Module): # output_size為輸出類別(2個(gè)類別,0和1),三種kernel,size分別是3,4,5,每種kernel有100個(gè) def __init__(self, vocab_size, embedding_dim, output_size, filter_num=100, kernel_list=(3, 4, 5), dropout=0.5): super(TextCNN, self).__init__() self.embedding = nn.Embedding(vocab_size, embedding_dim) # 1表示channel_num,filter_num即輸出數(shù)據(jù)通道數(shù),卷積核大小為(kernel, embedding_dim) self.convs = nn.ModuleList([ nn.Sequential(nn.Conv2d(1, filter_num, (kernel, embedding_dim)), nn.LeakyReLU(), nn.MaxPool2d((config.MAX_SENTENCE_SIZE - kernel + 1, 1))) for kernel in kernel_list ]) self.fc = nn.Linear(filter_num * len(kernel_list), output_size) self.dropout = nn.Dropout(dropout) def forward(self, x): x = self.embedding(x) # [128, 50, 200] (batch, seq_len, embedding_dim) x = x.unsqueeze(1) # [128, 1, 50, 200] 即(batch, channel_num, seq_len, embedding_dim) out = [conv(x) for conv in self.convs] out = torch.cat(out, dim=1) # [128, 300, 1, 1],各通道的數(shù)據(jù)拼接在一起 out = out.view(x.size(0), -1) # 展平 out = self.dropout(out) # 構(gòu)建dropout層 logits = self.fc(out) # 結(jié)果輸出[128, 2] return logits

為了方便模型訓(xùn)練,測(cè)試書寫了兩個(gè)函數(shù),當(dāng)然也和之前的相同,如下:

def binary_acc(pred, y): “”“ 計(jì)算模型的準(zhǔn)確率 :param pred: 預(yù)測(cè)值 :param y: 實(shí)際真實(shí)值 返回準(zhǔn)確率 ”“” correct = torch.eq(pred, y).float() acc = correct.sum() / len(correct) return acc def train(model, train_data, optimizer, criterion): “”“ 模型訓(xùn)練 :param model: 訓(xùn)練的模型 :param train_data: 訓(xùn)練數(shù)據(jù) :param optimizer: 優(yōu)化器 :param criterion: 損失函數(shù) 該論訓(xùn)練各批次正確率平均值 ”“” avg_acc = [] model.train() # 進(jìn)入訓(xùn)練模式 for i, batch in enumerate(train_data): pred = model(batch.text) loss = criterion(pred, batch.label.long()) acc = binary_acc(torch.max(pred, dim=1)[1], batch.label) avg_acc.append(acc) optimizer.zero_grad() loss.backward() optimizer.step() # 計(jì)算所有批次數(shù)據(jù)的結(jié)果 avg_acc = np.array(avg_acc).mean() return avg_acc def evaluate(model, test_data): “”“ 使用測(cè)試數(shù)據(jù)評(píng)估模型 :param model: 模型 :param test_data: 測(cè)試數(shù)據(jù) 該論訓(xùn)練好的模型預(yù)測(cè)測(cè)試數(shù)據(jù),查看預(yù)測(cè)情況 ”“” avg_acc = [] model.eval() # 進(jìn)入測(cè)試模式 with torch.no_grad(): for i, batch in enumerate(test_data): pred = model(batch.text) acc = binary_acc(torch.max(pred, dim=1)[1], batch.label) avg_acc.append(acc) return np.array(avg_acc).mean()

涉及相關(guān)包的話,就自行導(dǎo)入即可。下面就是創(chuàng)建模型和模型訓(xùn)練測(cè)試了。好緊張,又到了這個(gè)環(huán)節(jié)了。

# 創(chuàng)建模型 text_cnn = model.TextCNN(len(TEXT.vocab), config.EMBEDDING_SIZE, len(LABEL.vocab)) # 選取優(yōu)化器 optimizer = optim.Adam(text_cnn.parameters(), lr=config.LEARNING_RATE) # 選取損失函數(shù) criterion = nn.CrossEntropyLoss() # 繪制結(jié)果 model_train_acc, model_test_acc = [], [] # 模型訓(xùn)練 for epoch in range(config.EPOCH): train_acc = utils.train(text_cnn, train_iterator, optimizer, criterion) print(“epoch = {}, 訓(xùn)練準(zhǔn)確率={}”.format(epoch + 1, train_acc)) test_acc = utils.evaluate(text_cnn, test_iterator) print(“epoch = {}, 測(cè)試準(zhǔn)確率={}”.format(epoch + 1, test_acc)) model_train_acc.append(train_acc) model_test_acc.append(test_acc) # 繪制訓(xùn)練過(guò)程 plt.plot(model_train_acc) plt.plot(model_test_acc) plt.ylim(ymin=0.5, ymax=1.01) plt.title(“The accuracy of textCNN mode”) plt.legend([‘train’, ‘test’]) plt.show()

模型最后的結(jié)果如下:

模型訓(xùn)練過(guò)程

這個(gè)和之前結(jié)果沒(méi)多大區(qū)別,但是在數(shù)據(jù)處理中卻省去更多的時(shí)間,并且也更加規(guī)范化。所以還是有時(shí)間學(xué)習(xí)一下torchtext咯。

3 總結(jié)

torchtext支持的自然語(yǔ)言處理處理任務(wù)還是比較多的,并且自身還帶有一些數(shù)據(jù)集。最近還在做實(shí)體識(shí)別任務(wù),使用的算法模型是bi-lstm+crf。這個(gè)任務(wù)的本質(zhì)就是序列標(biāo)注,torchtext也是支持這種類型數(shù)據(jù)的處理的,后期有時(shí)間的話也會(huì)做相關(guān)的介紹,記得關(guān)注哦。對(duì)啦,本文的全部代碼和語(yǔ)料,我都上傳到github上了:https://github.com/Htring/NLP_Applications[4],后續(xù)其他相關(guān)應(yīng)用代碼也會(huì)陸續(xù)更新,也歡迎star,指點(diǎn)哦。

原文標(biāo)題:textCNN論文與原理——短文本分類(基于pytorch和torchtext)

文章出處:【微信公眾號(hào):自然語(yǔ)言處理愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • python
    +關(guān)注

    關(guān)注

    57

    文章

    4876

    瀏覽量

    90025
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5598

    瀏覽量

    124396

原文標(biāo)題:textCNN論文與原理——短文本分類(基于pytorch和torchtext)

文章出處:【微信號(hào):NLP_lover,微信公眾號(hào):自然語(yǔ)言處理愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    機(jī)器學(xué)習(xí)特征工程:分類變量的數(shù)值化處理方法

    編碼是機(jī)器學(xué)習(xí)流程里最容易被低估的環(huán)節(jié)之一,模型沒(méi)辦法直接處理文本形式的分類數(shù)據(jù),尺寸(Small/Medium/Large)、顏色(Red/Blue/Green)、城市、支付方式等都是典型的分類
    的頭像 發(fā)表于 02-10 15:58 ?329次閱讀
    機(jī)器學(xué)習(xí)特征工程:<b class='flag-5'>分類</b>變量的數(shù)值化處理方法

    Linux Shell文本處理神器合集:15個(gè)工具+實(shí)戰(zhàn)例子,效率直接翻倍

    在 Linux 系統(tǒng)中,文本是數(shù)據(jù)交互的 “通用語(yǔ)言”—— 日志文件、配置文件、數(shù)據(jù)報(bào)表、程序輸出幾乎都以文本形式存在。手動(dòng)編輯文本不僅繁瑣,還容易出錯(cuò),而掌握 Shell 文本處理工
    的頭像 發(fā)表于 02-03 15:42 ?1471次閱讀
    Linux Shell<b class='flag-5'>文本</b>處理神器合集:15個(gè)工具+實(shí)戰(zhàn)例子,效率直接翻倍

    詳解DBC的Signal與JSON文本結(jié)合

    為了優(yōu)化CAN數(shù)據(jù)發(fā)送與接收的操作流程,更改以前手動(dòng)輸入狀態(tài)對(duì)應(yīng)數(shù)據(jù)的模式,采用下拉列表選擇內(nèi)容,但這需要用到超出DBC原有承載能力的信息。因此,將JSON與其結(jié)合,采用JSON格式文本寫入Signal的Comment屬性,將Comment屬性的字符串通過(guò)JSON文本拓展
    的頭像 發(fā)表于 01-06 10:57 ?297次閱讀
    詳解DBC的Signal與JSON<b class='flag-5'>文本</b>結(jié)合

    小鵬汽車與北京大學(xué)研究論文成功入選AAAI 2026

    近日,AAAI 2026公布了論文錄用結(jié)果,該會(huì)議是人工智能領(lǐng)域的國(guó)際頂級(jí)會(huì)議之一。據(jù)悉,AAAI 2026共收到23,680份論文投稿,其中4,167篇論文被錄用,錄用率僅為17.6%。
    的頭像 發(fā)表于 01-04 11:22 ?615次閱讀
    小鵬汽車與北京大學(xué)研究<b class='flag-5'>論文</b>成功入選AAAI 2026

    萬(wàn)里紅文本生成算法通過(guò)國(guó)家網(wǎng)信辦備案

    近日,國(guó)家互聯(lián)網(wǎng)信息辦公室發(fā)布了第十四批深度合成服務(wù)算法備案信息,北京萬(wàn)里紅科技有限公司(以下簡(jiǎn)稱:萬(wàn)里紅)自主研發(fā)的“萬(wàn)里紅文本生成算法”正式通過(guò)備案。該算法致力于通過(guò)自動(dòng)化的方式,提升知識(shí)問(wèn)答、RAG分類、預(yù)測(cè)、文檔生成的準(zhǔn)確率,確保信息的安全性和合規(guī)性,為用戶提供及
    的頭像 發(fā)表于 11-14 09:06 ?678次閱讀

    Nullmax端到端軌跡規(guī)劃論文入選AAAI 2026

    11月8日,全球人工智能頂會(huì) AAAI 2026 公布論文錄用結(jié)果,Nullmax 研發(fā)團(tuán)隊(duì)的端到端軌跡規(guī)劃論文成功入選。該論文創(chuàng)新提出一種由粗到精的軌跡預(yù)測(cè)框架——DiffRefiner,能夠?qū)崿F(xiàn)更為靈活、精準(zhǔn)的軌跡預(yù)測(cè)。
    的頭像 發(fā)表于 11-12 10:53 ?854次閱讀

    產(chǎn)品分類管理API接口

    ? 產(chǎn)品分類管理是現(xiàn)代電商、庫(kù)存系統(tǒng)和內(nèi)容管理平臺(tái)的核心功能,它通過(guò)API接口實(shí)現(xiàn)高效的分類創(chuàng)建、查詢、更新和刪除操作。本文將逐步介紹產(chǎn)品分類管理API的設(shè)計(jì)原理、關(guān)鍵功能和實(shí)現(xiàn)方法,幫助您構(gòu)建可靠
    的頭像 發(fā)表于 07-25 14:20 ?462次閱讀
    產(chǎn)品<b class='flag-5'>分類</b>管理API接口

    飛書富文本組件庫(kù)RichTextVista開源

    近日,飛書正式將其自研的富文本組件庫(kù) RichTextVista(簡(jiǎn)稱“RTV”)開源,并上線OpenHarmony 三方庫(kù)中心倉(cāng)。該組件以領(lǐng)先的性能、流暢的渲染體驗(yàn)與高度的開放性,為鴻蒙生態(tài)提供了更高效的富文本解決方案。
    的頭像 發(fā)表于 07-16 16:47 ?1002次閱讀

    飛書開源“RTV”富文本組件 重塑鴻蒙應(yīng)用富文本渲染體驗(yàn)

    近日,飛書正式將其自研的富文本組件庫(kù)?RichTextVista(簡(jiǎn)稱“RTV”)開源,并上線OpenHarmony?三方庫(kù)中心倉(cāng)。該組件以領(lǐng)先的性能、流暢的渲染體驗(yàn)與高度的開放性,為鴻蒙生態(tài)提供了
    的頭像 發(fā)表于 07-11 15:20 ?640次閱讀
    飛書開源“RTV”富<b class='flag-5'>文本</b>組件 重塑鴻蒙應(yīng)用富<b class='flag-5'>文本</b>渲染體驗(yàn)

    格靈深瞳六篇論文入選ICCV 2025

    近日,國(guó)際頂級(jí)會(huì)議ICCV 2025(計(jì)算機(jī)視覺(jué)國(guó)際大會(huì))公布論文錄用結(jié)果,格靈深瞳團(tuán)隊(duì)共有6篇論文入選。
    的頭像 發(fā)表于 07-07 18:23 ?1551次閱讀

    《仿盒馬》app開發(fā)技術(shù)分享-- 分類模塊頂部導(dǎo)航列表彈窗(16)

    技術(shù)棧 Appgallery connect 開發(fā)準(zhǔn)備 上一節(jié)我們實(shí)現(xiàn)了分類頁(yè)面的頂部導(dǎo)航欄列表,并且實(shí)現(xiàn)了首頁(yè)金剛區(qū)跟首頁(yè)導(dǎo)航欄的聯(lián)動(dòng),這一節(jié)我們實(shí)現(xiàn)導(dǎo)航欄列表的彈窗功能,需要學(xué)習(xí)的知識(shí)點(diǎn)有自定義
    發(fā)表于 06-30 10:34

    基于STM32藍(lán)牙控制小車系統(tǒng)設(shè)計(jì)(硬件+源代碼+論文)下載

    基于STM32藍(lán)牙控制小車系統(tǒng)設(shè)計(jì)(硬件+源代碼+論文)推薦下載!
    發(fā)表于 05-29 21:45

    電子元器件的分類方式

    電子元器件可以按照不同的分類標(biāo)準(zhǔn)進(jìn)行分類,以下是一些常見(jiàn)的分類方式。
    的頭像 發(fā)表于 04-16 14:52 ?2958次閱讀

    把樹莓派打造成識(shí)別文本的“神器”!

    在許多項(xiàng)目中,RaspberryPi被用作監(jiān)控?cái)z像頭或執(zhí)行機(jī)器學(xué)習(xí)任務(wù)。在這些場(chǎng)景中,圖像中經(jīng)常包含應(yīng)用程序感興趣的文本信息。我們希望提取這些信息并將其轉(zhuǎn)換,以便通過(guò)程序分析文本
    的頭像 發(fā)表于 03-25 09:30 ?979次閱讀
    把樹莓派打造成識(shí)別<b class='flag-5'>文本</b>的“神器”!

    NVIDIA RTX 5880 Ada顯卡部署DeepSeek-R1模型實(shí)測(cè)報(bào)告

    DeepSeek-R1 模型在 4 張 NVIDIA RTX 5880 Ada 顯卡配置下,面對(duì)短文本生成、長(zhǎng)文本生成、總結(jié)概括三大實(shí)戰(zhàn)場(chǎng)景,會(huì)碰撞出怎樣的性能火花?參數(shù)規(guī)模差異懸殊的 70B
    的頭像 發(fā)表于 03-17 11:12 ?3088次閱讀
    NVIDIA RTX 5880 Ada顯卡部署DeepSeek-R1模型實(shí)測(cè)報(bào)告