赞
踩
首先简要说明一下我对这几种方法的个人体会。在对文本的预处理过程中,我们首先要使用build_vocab()生成一个词汇表,而这个方法的具体作用是将这个方法的参数传递给Class Vocab()来具体实例化一个对象,在实例化的过程中,需要用到预先处理好的词向量,这个词向量一般都由Vectors()给出。下面来分别介绍一下:
Vectors:其官方文档如下
其参数列表为:
name:包含向量的文件的名称
cache:缓存词向量的目录
url:如果在内存中没找到词向量,就去该参数给定的地址下载
unk_init:默认情况下,将词汇表外单词向量初始化为零向量;
max_vertors:可用于限制加载的预训练向量的数量。大多数预训练向量集都是按词频降序排序的。因此,在整个集合不适合内存的情况下,或者由于其他原因不需要,传递max_vectors可以限制加载集合的大小。
首先我们要清楚什么是词向量,对此我的简单理解为:词向量技术是将词转化成为稠密向量,并且对于相似的词,其对应的词向量也相近。也就是把我们的日常语言向量化。
我个人理解他的作用为导入预先设定好的词向量,在接下来同Vocab的用法中再详细介绍。
Vocab函数
其官方文档定义为:Defines a vocabulary object that will be used to numericalize a field.(定义将用于对字段进行数值化的词汇表对象。)
其初始化参数为
counter:计数器对象,保存在数据中找到的每个值的频率。
max_size:取出词汇表中前该值的数据。
min_freq:取出词汇表中大于等于该值的数据
vectors:同Vectors
unk_init:同Vectors
vectors_cache:同Vectors
对Vectors和Vocab的综合应用来看,我的个人理解是:通过Vocab在预先设置好的词汇表中(由Vectors导入)对文本数据进行向量化,然后按照Vocab的参数对数据集进行一系列操作。
build_vocab函数
其作用为将参数传入Vocab的构造函数。
BucketIterator函数
其官方文档定义为:Defines an iterator that batches examples of similar lengths together.(定义一个迭代器,该迭代器将相似长度的示例批处理在一起。)
我的个人理解是,将单词转化为模型可以进行运算的数值型对象。下面附上我的实验结果
从实验结果分析来看,对训练集数据使用build_vocab()函数后,构造了Vocab对象。训练集的内容并没有发生改变,在定义好数据加载器后其内容仍然没有发生改变。但是我们可以观察到当BucketIterator()函数执行过后,其生成的批数据中已经将单词转换为数值,对其原理笔者尚未梳理清楚,欢迎各位有同样困惑或者清楚该知识点的读者朋友多加指导!
- ## 使用训练集构建单词表,并不指定预训练好的词项量(词汇数值化)
- TEXT.build_vocab(traindata,max_size=1000,vectors = None)
- print(traindata[0].text)
- ## 将训练数据集定义为数据加载器,便于对模型进行优化
- train_iter = data.BucketIterator(traindata,batch_size = 4)
- print(traindata[0].text)
- test_iter = data.BucketIterator(testdata,batch_size = 4)
- for step, batch in enumerate(train_iter):
- if step > 0:
- break
- ## 针对一个batch 的数据,可以使用batch.label获得数据的类别标签
- print(batch)
- print("数据的类别标签:",batch.label)
- ## batch.text是文本对应的编码向量
- print("数据的尺寸:",batch.text.shape)
- print(batch.text[0])
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。