NLP常用工具包

?做一次按NLP項目常見工具的使用拆解

1. tokenizer

from torchtext.data.utils import get_tokenizertokenizer = get_tokenizer('basic_english')
text_sample = "We're going on an adventure! The weather is really nice today."
tokens = tokenizer(text_sample)
print(tokens)

['we', "'", 're', 'going', 'on', 'an', 'adventure', '!', 'the', 'weather', 'is', 'really', 'nice', 'today', '.']

2. vocab

from torchtext.vocab import build_vocab_from_iterator
from torchtext.data.utils import get_tokenizer# 創建分詞器
tokenizer = get_tokenizer('basic_english')# 測試數據
test_sentences = ["The quick brown fox jumps over the lazy dog.","Hello world! This is a test for building vocabulary.",
]vocab = build_vocab_from_iterator((tokenizer(sentence) for sentence in test_sentences),specials=['<unk>', '<pad>'],min_freq=1  # 設置最小頻率為1
)vocab.set_default_index(vocab['<unk>'])print("詞表大小:", len(vocab))
print("'fox'的索引:", vocab['fox'])

詞表大小: 21? ?

'fox'的索引: 10

3. Dataloader(示例1)

import torch
from torch.nn.utils.rnn import pad_sequence
from torch.utils.data import Dataset, DataLoader
from torchtext.vocab import build_vocab_from_iterator
from torchtext.data.utils import get_tokenizer# 1. 創建分詞器
tokenizer = get_tokenizer('basic_english')# 2. 測試數據
train_sentences = ["The quick brown fox jumps over the lazy dog.","Hello world! This is a test for building vocabulary.",# 你可以在這里添加更多訓練句子
]
test_sentences = ["The quick brown fox jumps over the lazy dog.","Hello world! This is a test for building vocabulary.",
]# 3. 構建詞表
vocab = build_vocab_from_iterator((tokenizer(sentence) for sentence in train_sentences),specials=['<unk>', '<pad>'],min_freq=1
)
vocab.set_default_index(vocab['<unk>'])print("詞表大小:", len(vocab))
print("'fox'的索引:", vocab['fox'])# 4. 自定義 Dataset
class TextDataset(Dataset):def __init__(self, sentences, vocab, tokenizer):self.sentences = sentencesself.vocab = vocabself.tokenizer = tokenizerdef __len__(self):return len(self.sentences)def __getitem__(self, idx):tokens = self.tokenizer(self.sentences[idx])indices = [self.vocab[token] for token in tokens]return torch.tensor(indices, dtype=torch.long)# 5. 創建 Dataset 實例
train_dataset = TextDataset(train_sentences, vocab, tokenizer)
test_dataset  = TextDataset(test_sentences, vocab, tokenizer)# 6. DataLoader 與 Padding Collate 函數def collate_fn(batch):# batch 是一個 list of tensorsreturn pad_sequence(batch, batch_first=True, padding_value=vocab['<pad>'])train_loader = DataLoader(train_dataset, batch_size=2, shuffle=True, collate_fn=collate_fn)
test_loader  = DataLoader(test_dataset, batch_size=2, shuffle=False, collate_fn=collate_fn)# 7. 測試 DataLoader 輸出
print("\n=== Train Batch Indices ===")
for batch in train_loader:print(batch)breakprint("\n=== Test Batch Indices ===")
for batch in test_loader:print(batch)break

=== Train Batch Indices ===
tensor([[11, 20, ?4, 18, 12, ?5, 17, ?9, ?7, 19, ?2],
? ? ? ? [ 3, 16, ?6, 10, 13, 15, ?3, 14, ?8, ?2, ?1]])

=== Test Batch Indices ===
tensor([[ 3, 16, ?6, 10, 13, 15, ?3, 14, ?8, ?2, ?1],
? ? ? ? [11, 20, ?4, 18, 12, ?5, 17, ?9, ?7, 19, ?2]])

4. Dataloader(示例2)?

import torch
from torch.nn.utils.rnn import pad_sequence
from torch.utils.data import Dataset, DataLoader
from torchtext.vocab import build_vocab_from_iterator
from torchtext.data.utils import get_tokenizer# 1. 創建分詞器
tokenizer = get_tokenizer('basic_english')# 2. 帶標簽的訓練與測試數據 (句子, 標簽)
train_data = [("The quick brown fox jumps over the lazy dog.", 1),  # 正面情感("Hello world! This is a test for building vocabulary.", 0),  # 負面情感# 可添加更多 (sentence, label)
]
test_data = [("The quick brown fox jumps over the lazy dog.", 1),("Hello world! This is a test for building vocabulary.", 0),
]# 3. 構建詞表,只基于訓練數據中的句子
vocab = build_vocab_from_iterator((tokenizer(sentence) for sentence, _ in train_data),specials=['<unk>', '<pad>'],min_freq=1
)
vocab.set_default_index(vocab['<unk>'])print("詞表大小:", len(vocab))
print("'fox'的索引:", vocab['fox'])# 4. 自定義 Dataset,返回 (indices_tensor, label_tensor)
class TextDataset(Dataset):def __init__(self, data, vocab, tokenizer):self.data = dataself.vocab = vocabself.tokenizer = tokenizerdef __len__(self):return len(self.data)def __getitem__(self, idx):sentence, label = self.data[idx]tokens = self.tokenizer(sentence)indices = [self.vocab[token] for token in tokens]return torch.tensor(indices, dtype=torch.long), torch.tensor(label, dtype=torch.long)# 5. Padding 與 collate_fn
def collate_fn(batch):sequences, labels = zip(*batch)padded_seqs = pad_sequence(sequences, batch_first=True, padding_value=vocab['<pad>'])labels_tensor = torch.stack(labels)return padded_seqs, labels_tensor# 6. 創建 DataLoader
train_dataset = TextDataset(train_data, vocab, tokenizer)
test_dataset  = TextDataset(test_data, vocab, tokenizer)train_loader = DataLoader(train_dataset, batch_size=2, shuffle=True, collate_fn=collate_fn
)
test_loader = DataLoader(test_dataset, batch_size=2, shuffle=False, collate_fn=collate_fn
)# 7. 測試輸出
print("\n=== Train Batch ===")
for seq_batch, label_batch in train_loader:print("Sequences:", seq_batch)print("Labels:   ", label_batch)breakprint("\n=== Test Batch ===")
for seq_batch, label_batch in test_loader:print("Sequences:", seq_batch)print("Labels:   ", label_batch)break

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

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

相關文章

在 Vue 的template中使用 Pug 的完整教程

在 Vue 的template中使用 Pug 的完整教程 引言 什么是 Pug&#xff1f; Pug&#xff08;原名 Jade&#xff09;是一種高效的網頁模板引擎&#xff0c;通過縮進式語法和簡潔的寫法減少 HTML 的冗長代碼。Pug 省略了尖括號和閉合標簽&#xff0c;使用縮進定義結構&#xff0c;…

【Android基礎回顧】四:ServiceManager

Android 中的 ServerManager 是 Android 框架中一個用于管理系統服務的核心機制。它是 Binder IPC 的一部分&#xff0c;用于在客戶端和服務端之間建立聯系&#xff0c;廣泛應用于系統服務&#xff08;如 ActivityManager、WindowManager 等&#xff09;的注冊與獲取。 1 Serv…

【Android基礎回顧】一:Binder機制是什么?有什么用?

Android中的Binder機制是Android系統中最核心和最基礎的進程間通訊機制。 1 什么是進程間通訊機制(IPC)&#xff1f; 眾所周知&#xff0c;Android系統基于Linux開發&#xff0c;Linux系統里面本來就有進程間通訊機制。 1.1 Linux的IPC(Inter-Process Communication)概覽 它…

Go語言爬蟲系列教程5:HTML解析技術以及第三方庫選擇

Go語言爬蟲系列教程5&#xff1a;HTML解析技術以及第三方庫選擇 在上一章中&#xff0c;我們使用正則表達式提取網頁內容&#xff0c;但這種方法有局限性。對于復雜的HTML結構&#xff0c;我們需要使用專門的HTML解析庫。在這一章中&#xff0c;我們將介紹HTML解析技術以及如何…

AtCoder 第408?場初級競賽 A~E題解

A Timeout 【題目鏈接】 原題鏈接:A - Timeout 【考點】 模擬 【題目大意】 長老會在 s 秒后睡去,進過 n 次叫醒,長老最后能否是保持清醒。 【解析】 模擬每一次拍擊叫醒的過程,查看本次時間距上次時間是否大于 s。注意:第一次拍擊叫醒應和 0 秒相減。 【難度】 …

Unity VR/MR開發-VR設備與適用場景分析

視頻講解鏈接&#xff1a;【XR馬斯維】VR/MR設備與適用場景分析&#xff1f;【UnityVR/MR開發教程--入門】_游戲熱門視頻

MyBatis 查詢功能實現全流程

一、創建maven項目 配置好相應的jdk 二、在數據庫建立相應的表格 1.因為Mybatis實際是對sql表的一系列操作&#xff0c;所以我們新建一個數據庫 2.在查詢界面運行下面指令創建一個user表 CREATE TABLE user (id int(11) NOT NULL AUTO_INCREMENT,username varchar(32) NOT NU…

tcp/udp

tcp/udp協議概述 傳輸層協議基本概念 傳輸層協議建立在網絡層和會話層之間&#xff0c;為應用層實體提供端到端的通信功能&#xff0c;確保數據包的順序傳送及數據的完整性。它利用網絡層提供的服務&#xff0c;并通過傳輸層地址&#xff08;端口號&#xff09;提供給高層用戶…

k8s集群安裝坑點匯總

前言 由于使用最新的Rocky9.5,導致kubekey一鍵安裝用不了&#xff0c;退回Rocky8麻煩機器都建好了&#xff0c;決定手動安裝k8s&#xff0c;結果手動安裝過程中遇到各種坑&#xff0c;這里記錄下&#xff1b; k8s安裝 k8s具體安裝過程可自行搜索&#xff0c;或者deepseek; 也…

深入解析 Dotnet-Boxed.Framework:提升 .NET 開發效率的利器

在現代 .NET 開發中&#xff0c;框架和工具的選擇對項目的開發效率和長期維護至關重要。Dotnet-Boxed.Framework 是一個開源框架&#xff0c;旨在簡化開發流程&#xff0c;提高生產力。它通過一組實用的工具和自動化功能&#xff0c;幫助開發者快速構建高質量的應用程序。本文將…

如何輕松地將文件從 PC 傳輸到 iPhone?

傳統上&#xff0c;您可以使用 iTunes 將文件從 PC 傳輸到 iPhone&#xff0c;但現在&#xff0c;使用 iTunes 已不再是唯一的選擇。現在有多種不同且有效的方法可以幫助您傳輸文件。在今天的指南中&#xff0c;您可以找到 8 種使用或不使用 iTunes 傳輸文件的方法&#xff0c;…

Kafka深度解析與原理剖析

文章目錄 一、Kafka核心架構原理1. **分布式協調與選舉**2. **ISR、OSR與HW機制**3. **高性能存儲設計**4. **刷盤機制 (Flush)**5. **消息壓縮算法**二、高可用與消息可靠性保障1. **數據高可用策略**2. **消息丟失場景與規避**3. **順序消費保證**三、Kafka高頻面試題精析1. …

【教學類】20250605立體紙盤(3邊形-22邊形,角度5、10……40,45)

背景需求 在《自助餐》活動中&#xff0c; 【教學類-53-01】20240918自助餐餐盤-CSDN博客文章瀏覽閱讀984次&#xff0c;點贊29次&#xff0c;收藏11次。【教學類-53-01】20240918自助餐餐盤https://blog.csdn.net/reasonsummer/article/details/142340542?spm1011.2415.300…

GC1809:高性能24bit/192kHz音頻接收芯片解析

1. 芯片概述 GC1809 是數字音頻接收芯片&#xff0c;支持IEC60958、S/PDIF、AES3等協議&#xff0c;集成8選1輸入切換、低抖動時鐘恢復和24bit DAC&#xff0c;適用于家庭影院、汽車音響等高保真場景。 核心特性 高精度&#xff1a;24bit分辨率&#xff0c;動態范圍105dB&…

Next.js 中間件鑒權繞過漏洞 CVE-2025-29927

前言:CVE-2025-29927 是一個影響 Next.js 的嚴重漏洞&#xff0c;源于開發者信任了客戶端請求中攜帶的 X-Middleware-Rewrite 頭部字段。攻擊者可以手動構造該頭部&#xff0c;實現繞過中間件邏輯&#xff0c;訪問本應受保護的資源或 API。 影響版本&#xff1a;Next.js < …

第1章 數據分析簡介

第1章 數據分析簡介 1.1 數據分析 當今世界對信息技術依賴日深,每天產生和存儲海量數據,來源于自動檢測系統、傳感器、科學儀器,以及銀行取錢、買東西、寫博客、發微博等日常行為。 數據與信息在形式上不同:數據是無形式可言的字節流,難理解其本質;信息是對數據集處理后…

邊緣計算網關賦能沸石轉輪運行故障智能診斷的配置實例

一、項目背景 在環保行業&#xff0c;隨著國家對大氣污染治理要求的不斷提高&#xff0c;VOCs廢氣處理成為了眾多企業的重要任務。沸石轉輪作為一種高效的VOCs治理設備&#xff0c;被廣泛應用于石油化工、汽車制造、印刷包裝等主流行業。這些行業生產規模大、廢氣排放量多&…

20250602在Ubuntu20.04.6下修改壓縮包的日期和時間

rootrootrootroot-X99-Turbo:~$ ll -rwxrwxrwx 1 rootroot rootroot 36247187308 5月 23 10:23 Android13.0地面站.tgz* rootrootrootroot-X99-Turbo:~$ touch 1Android13.0地面站.tgz rootrootrootroot-X99-Turbo:~$ ll -rwxrwxrwx 1 rootroot rootroot 36247187308 6月…

windows無法安裝到這個磁盤,選中的磁盤采用gpt分區儀式

解決辦法&#xff1a; 我才用的是一個網友分享的微軟官方解決辦法&#xff0c;成功了&#xff0c;但是不知道會不會i有什么影響。將所有分區刪掉&#xff0c;這時磁盤變成為分配的空間。我個人是兩塊固態&#xff0c;一塊m.2&#xff0c;一塊sata&#xff1b;所以我直接將500g…

使用Composer創建公共類庫

概述 如果多個項目中存在使用相同類庫、模塊的情況&#xff0c;此時可以考慮將類庫或者模塊單獨抽取出來&#xff0c;形成獨立類庫&#xff0c;通過composer 來進行依賴管理&#xff0c;這樣可以更方便維護&#xff0c;大大提升開發效率。 優勢 可以對特定模塊進行統一維護和…