使用torchtext將文本轉爲ID表示

使用torchtext將文本轉爲ID表示


此文詳細介紹瞭如何使用torchtext加載文本數據並且轉爲由ID表示的數據。


概覽圖:

process

torchtext 加載文本數據

def get_dataset(path, text_field, label_field):

    train, dev = data.TabularDataset.splits(
        # 支持 json, dict, csv, tsv 文件格式
        path=path, format='csv', skip_header=True,
        train='train.csv', validation='test.csv',
        fields=[
            ('index', None),
            ('label', label_field),
            ('text', text_field)
        ]
    )
    return train, dev

使用torchtext 進行數據預處理

def word_cut(text):
    # 此處傳入的是句子
    # 去除異常符號,數字等操作可以在分詞之前操作
    return [word for word in text.split(' ')]
text_field.tokenize = word_cut # 文本分詞,可以使用其他分詞技術先進行數據預處理之後再加載

def preprocess(text):
    # 去除停止詞,同義詞替換等操作
    pass
text_field.preprocessing  = preprocess # 預處理程序,tokenize之後numericalizing之前執行

def postprocess(text):
    pass
text_field.postprocessing  = postprocess # 該函數在numericalizing之後但數據類型未轉成tensor之前

構建詞彙表

# 可以選擇根據當前數據進行詞彙表的構建;也可以根據預訓練好的模型進行詞彙表的構建(第二種效果更好)
# 預訓練模型一般非常大,直接下載他人訓練好的即可,例如ELMo模型
# 構建詞彙表後,word將全部由ID替代
text_field.build_vocab(train_dataset, dev_dataset)
if args.static and args.pretrained_name and args.pretrained_path:
    vectors = Vectors(name=args.pretrained_name, cache=args.pretrained_path)
    text_field.build_vocab(train_dataset, dev_dataset, vectors=vectors)
else:
    text_field.build_vocab(train_dataset, dev_dataset)

batch分割

train_iter, dev_iter = data.Iterator.splits(
    (train_dataset, dev_dataset),
    batch_sizes=(batch_size, len(dev_dataset)),
    sort_key=lambda x: len(x.text),
    **kwargs)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章