乾貨 | NLP數據處理工具——torchtext
- 2019 年 10 月 7 日
- 筆記
本文為 AI 研習社社區用戶 @Dendi 獨家投稿內容,歡迎掃描底部社區名片訪問 @Dendi 的主頁,查看更多內容。
01.概述
在處理NLP任務時除了需要優秀的神經網路還需要方便、高效的數據預處理工具。今天介紹一款優秀的NLP數據處理工具torchtext。
NLP常見的數據預處理工作如下:
Load File
:數據文件載入;Tokenization
:分詞;Create Vocabulary
:創建字典;Indexify
:將詞與索引進行映射;Word Vectors
:創建或載入詞向量;Padding or Fix Length
:按長度對文本進行補齊或截取;Dataset Splits
:劃分數據集(如將數據集劃分問訓練集、驗證集、測試集);Batching and Iterators
:將數據集按固定大小劃分成Batch;
使用torchtext
完成以上工作:
- 使用
torchtext.data.Field
定義樣本各個欄位的處理流程(分詞、數據預處理等); - 使用
torchtext.data.Example
將torchtext.data.Field
處理成一條樣本; - 使用
torchtext.data.Dataset
將torchtext.data.Example
處理成數據集,也可對數據集進行劃分等工作; - 使用
torchtext.data.Iterators
將torchtext.data.Dataset
按照batch_size
組裝成Batch
供模型訓練使用; - 使用
torchtext.data.vocab
和torchtext.data.Vectors
創建詞典、詞和索引的一一對應、下載或使用預訓練的詞向量等; -
02.安裝
- 使用如下命令安裝:
pip install torchtext
03.文檔
- 官方教程:https://torchtext.readthedocs.io/en/latest/index.html
04.主要的Package
torchtext.data
torchtext.data.Dataset
:數據集;torchtext.data.Example
:樣本;torchtext.data.Fields
:樣本的屬性(如:content、label);torchtext.data.Iterators
:將數據集封裝成Batch,並提供迭代器;
tochtext.vocab
torchtext.vocab.Vocab
:詞典相關;torchtext.vocab.Vectors
:詞向量相關;
05.實踐
- 05-1.Field
API
class torchtext.data.Field(
重要的參數:
sequential
:是否是可序列化數據(類似於字元串數據),默認值是True
;user_vocab
:是否使用Vocab
對象,如果取False
,則該欄位必須是數值類型;默認值是True
;tokenize
:是一個function
類型的對象(如string.cut
、jieba.cut
等),用於對字元串進行分詞;batch_first
:如果該屬性的值取True
,則該欄位返回的Tensor
對象的第一維度是batch
的大小;默認值是False
;fix_length
:該欄位是否是定長,如果取None
則按同batch
該欄位的最大長度進行pad;
重要函數:
build_vocab
:為該Field
創建Vocab
;
Code Demo
數據集(第一個欄位是 label
, 第二個欄位是 content
):
0 我不退我也不買。我就看戲
程式碼:
# 分詞函數
- 05-2.Example
API
class torchtext.data.Example:
該類有5個類函數,可以從 csv
、json
、dict
、list
、tree
等數據結構中創建Example
,常用的是 fromlist
;
- 05-3.Dataset
API
class torchtext.data.Dataset(examples, fields, filter_pred=None)
重要參數:
examples
:Example對象列表;fields
:格式是List(tuple(str, Field))
,其中str
是Field
對象的描述;
Code Demo
# 讀取數據
- 05-4.Vocab
API
class torchtext.vocab.Vocab(
重要參數:
counter
:collections.Counter
類型的對象,用於保存數據(如:單詞)的頻率;vectors
:預訓練的詞向量,可以是torch.vocab.Vectors
類型,也可以是其他類型;
Code Demo
# 為 CONTENT 欄位創建詞向量
- 05-5.Vectors
API
class torchtext.vocab.Vectors(name, cache=None, url=None, unk_init=None, max_vectors=None)
重要參數:
name
:保存word vectors的文件;catch
:word vectors文件的快取目錄,默認是.vector_cache
;url
:如果快取文件夾中不存在 word vectors文件,則去該url下載;unk_init
:是一個function
類型的對象,用來初始化詞典中不存在的詞向量;默認是Tensor.zero_
;max_vecotrs
:int
類型的數據,限制詞典的大小;
Code Demo
# 使用預訓練詞向量
結果:

06.結語
torchtext
是一個很好用的文本處理工具,本文只是介紹了torchtext
常用的功能,可以查看官方文檔進一步學習。
* 封面圖來源:https://www.developereconomics.com/nlp-wit-luis-api-ai