非结构化数据
结构化
结构化数据通常驻留在关系数据库(RDBMS)
非结构化
文本、图片 图像和音频/视频信息
半结构化:XML、HTML、各类报表、
语音
torchaudio
语音格式:
将以下格式加载到Torch张量中
mp3,wav,aac,ogg,flac,avr,cdda,cvs/vms,
aiff,au,amr,mp2,mp4,ac3,avi,wmv,
mpeg,ircam和libsox支持的任何其他格式。
方向:
语音识别 +语音分离+语音合成+语音转换(变声器)
语音识别 自动语音识别技术(Automatic Speech Recognition)
语音合成 -- TTS是Text To Speech的缩写,即“从文本到语音”,
基本概念
音素、重音标注、音素发音时长、基频F0
声学模型 : 混合声学模型 端到端的声学模型
帧长、帧移
Token 声音的基本元素作为 Token 文字书写的最小单位作为 Token
语音处理工具包SpeechBrain
语音领域三大会议(INTERSPEECH’19, ICASSP’19, ASRU’19)
数据集
Librispeech 数据集开始,960 hours;
Timit 数据集相当于CV领域的mnist
图像
图像格式: jpg png 等
方向:
分类 目标检测 分割 追踪
基本概念:
位置 类别
组织形式
01. 一种是整个数据集都在一个文件下,内部再另附一个label文件,说明每个文件的状态
02. 数据集都在一个文件下,每个数据都有自己的label
03. 把不同种类的数据分为不同的文件夹存放起来,可以从文件夹或文件名得到label
数据集
Labelme:注释图像的大数据集
ImageNet
MS COCO
自带图像库的数据
torchvision.datasets.FashionMNIST
torchvision.transforms.ToTensor
Creating a Custom Dataset for your file
torch.utils.data.Dataset
torch.utils.data.DataLoader
文本
文本格式: 编码格式和文本格式
unicodeToAscii
文本NLP
方向:
文本分类: 商品的类目预测问题 情感分析
语言翻译
01.文本
02.词向量(word embedding)-- word2vec工具包 -- 解决了文本表示的问题
03.利用CNN/RNN等深度学习网络及其变体解决自动特征提取(即特征表达)
基本概念
分词 词表
词向量 embedding
词典 vocab vocabulary
Turning Names into Tensors
知名数据集
THUCNews数据集 今日头条新闻文本分类数据集
Stanford Sentiment Treebank:带有情感注释的标准情感数据集
Google Books Ngrams:Google 书籍中的词汇集合
常用的类
Field :用来定义字段以及文本预处理方法
Example : 用来表示一个样本,通常为“数据+标签”
TabularDataset : 用来从文件中读取数据,生成Dataset, Dataset是Example实例的集合
BucketIterator :迭代器,用来生成batch, 类似的有Iterator,Buckeiterator的功能较强大点,支持排序,动态padding等
1.字符串形式的文本,我们需要将其分词成词语列表
torchtext.data.data.TabularDataset
2.torchtext 中使用 torchtext.data.TabularDataset 来导入自己的数据集
TabularDataset 是 torchtext 内置的 Dataset 子类,其能够很方便的读取csv、json或tsv格式的文件
torchtext.datasets.WikiText2
torchtext.data.utils.get_tokenizer
torchtext.vocab.build_vocab_from_iterator
自定义 Dataset
一个dataloader需要以下内容:
把所有text编码成数字,然后用subsampling预处理这些文字。
保存vocabulary,单词count,normalized word frequency
每个iteration sample一个中心词
根据当前的中心词,返回context单词
根据中心词sample一些negative单词,返回单词的count
model
torch.nn.Embedding
torch.nn.Transformer
torch.nn.TransformerEncoder
torch.nn.TransformerEncoderLayer
示例代码
class WordEmbeddingDataset(tud.Dataset): # tud.Dataset父类
def __init__(self, text, word_to_idx, idx_to_word, word_freqs, word_counts):
''' text: a list of words, all text from the training dataset
word_to_idx: the dictionary from word to idx
idx_to_word: idx to word mapping
word_freq: the frequency of each word
word_counts: the word counts
'''
super(WordEmbeddingDataset, self).__init__() # 初始化模型
self.text_encoded = [word_to_idx.get(t, VOCAB_SIZE-1) for t in text] # 取出text里每个单词word_to_idx字典里对应的索引,不在字典里返回"<unk>"的索引,get括号里第二个参数应该写word_to_idx["<unk>"]
self.text_encoded = torch.LongTensor(self.text_encoded) # 变成Longtensor类型
self.word_to_idx = word_to_idx # 以下皆为保存数据
self.idx_to_word = idx_to_word
self.word_freqs = torch.Tensor(word_freqs)
self.word_counts = torch.Tensor(word_counts)
def __len__(self):
''' 返回整个数据集(所有单词)的长度
'''
return len(self.text_encoded)
def __getitem__(self, idx): # 这里__getitem__函数是个迭代器,idx代表了所有的单词索引
''' 这个function返回以下数据用于训练
- 中心词
- 这个单词附近的(positive)单词
- 随机采样的K个单词作为negative sample
'''
center_word = self.text_encoded[idx] # 中心词索引
pos_indices = list(range(idx-C, idx)) + list(range(idx+1, idx+C+1)) # 除中心词外,周围词的索引,比如idx=0时,pos_indices = [-3, -2, -1, 1, 2, 3]
pos_indices = [i%len(self.text_encoded) for i in pos_indices] # idx可能超出词汇总数,需要取余
pos_words = self.text_encoded[pos_indices] # 周围词索引,是正例单词
# 负例采样单词索引
# torch.multinomial:对self.word_freqs做 K * pos_words.shape[0](正确单词数量)次取值,输出的是self.word_freqs对应的下标
# 取样方式采用有放回的采样,并且self.word_freqs数值越大,取样概率越大
neg_words = torch.multinomial(self.word_freqs, K * pos_words.shape[0], True)
return center_word, pos_words, neg_words
###创建dataset和dataloader
dataset = WordEmbeddingDataset(text, word_to_idx, idx_to_word, word_freqs, word_counts)
dataloader = torch.utils.data.DataLoader(dataset, batch_size=BATCH_SIZE, shuffle=True, num_workers=4)
参考
pytorch练习(一)词向量 https://www.cnblogs.com/douzujun/p/13429912.html