乾貨 | ​NLP數據處理工具——torchtext

  • 2019 年 10 月 7 日
  • 筆記

本文為 AI 研習社社區用戶 @Dendi 獨家投稿內容,歡迎掃描底部社區名片訪問 @Dendi 的主頁,查看更多內容。

01.概述

在處理NLP任務時除了需要優秀的神經網路還需要方便、高效的數據預處理工具。今天介紹一款優秀的NLP數據處理工具torchtext

NLP常見的數據預處理工作如下:

  1. Load File:數據文件載入;
  2. Tokenization:分詞;
  3. Create Vocabulary:創建字典;
  4. Indexify:將詞與索引進行映射;
  5. Word Vectors:創建或載入詞向量;
  6. Padding or Fix Length:按長度對文本進行補齊或截取;
  7. Dataset Splits:劃分數據集(如將數據集劃分問訓練集、驗證集、測試集);
  8. Batching and Iterators:將數據集按固定大小劃分成Batch;

使用torchtext完成以上工作:

  • 使用 torchtext.data.Field 定義樣本各個欄位的處理流程(分詞、數據預處理等);
  • 使用 torchtext.data.Exampletorchtext.data.Field 處理成一條樣本;
  • 使用 torchtext.data.Datasettorchtext.data.Example 處理成數據集,也可對數據集進行劃分等工作;
  • 使用 torchtext.data.Iteratorstorchtext.data.Dataset 按照 batch_size 組裝成 Batch 供模型訓練使用;
  • 使用 torchtext.data.vocabtorchtext.data.Vectors 創建詞典、詞和索引的一一對應、下載或使用預訓練的詞向量等;

02.安裝

  • 使用如下命令安裝:pip install torchtext

03.文檔

  • 官方教程:https://torchtext.readthedocs.io/en/latest/index.html

04.主要的Package

  1. torchtext.data
    • torchtext.data.Dataset:數據集;
    • torchtext.data.Example:樣本;
    • torchtext.data.Fields:樣本的屬性(如:content、label);
    • torchtext.data.Iterators:將數據集封裝成Batch,並提供迭代器;
  2. tochtext.vocab
    • torchtext.vocab.Vocab:詞典相關;
    • torchtext.vocab.Vectors:詞向量相關;

05.實踐

  • 05-1.Field

API

class torchtext.data.Field(

重要的參數:

  1. sequential:是否是可序列化數據(類似於字元串數據),默認值是 True
  2. user_vocab:是否使用 Vocab 對象,如果取 False,則該欄位必須是數值類型;默認值是True
  3. tokenize:是一個 function 類型的對象(如 string.cutjieba.cut 等),用於對字元串進行分詞;
  4. batch_first:如果該屬性的值取 True,則該欄位返回的 Tensor 對象的第一維度是 batch 的大小;默認值是False
  5. fix_length:該欄位是否是定長,如果取 None 則按同 batch 該欄位的最大長度進行pad;

重要函數:

  1. build_vocab:為該Field創建Vocab

Code Demo

數據集(第一個欄位是 label , 第二個欄位是 content ):

0 我不退我也不買。我就看戲

程式碼:

# 分詞函數
  • 05-2.Example

API

class torchtext.data.Example:

該類有5個類函數,可以從 csvjsondictlisttree等數據結構中創建Example,常用的是 fromlist

  • 05-3.Dataset

API

class torchtext.data.Dataset(examples, fields, filter_pred=None)

重要參數:

  1. examples:Example對象列表;
  2. fields:格式是List(tuple(str, Field)),其中 strField 對象的描述;

Code Demo

# 讀取數據
  • 05-4.Vocab

API

class torchtext.vocab.Vocab(

重要參數:

  1. countercollections.Counter 類型的對象,用於保存數據(如:單詞)的頻率;
  2. 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)

重要參數:

  1. name:保存word vectors的文件;
  2. catch:word vectors文件的快取目錄,默認是.vector_cache
  3. url:如果快取文件夾中不存在 word vectors文件,則去該url下載;
  4. unk_init:是一個function 類型的對象,用來初始化詞典中不存在的詞向量;默認是Tensor.zero_
  5. max_vecotrsint類型的數據,限制詞典的大小;

Code Demo

# 使用預訓練詞向量

結果:

06.結語

torchtext 是一個很好用的文本處理工具,本文只是介紹了torchtext常用的功能,可以查看官方文檔進一步學習。

* 封面圖來源:https://www.developereconomics.com/nlp-wit-luis-api-ai