• Pytorch_非结构化数据语音图像文本


    非结构化数据

    结构化
        结构化数据通常驻留在关系数据库(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
  • 相关阅读:
    大话字符串逆序
    Class文件结构全面解析(上)
    怎么把CAT客户端的RootMessageId记录到每条日志中?
    阅读JDK源码后,我有了优化它的冲动!
    CAT客户端如何从Apollo中读取配置?
    Sublime Text 3许可证
    通俗易懂地给女朋友讲:线程池的内部原理
    五分钟后,你将学会在SpringBoot项目中如何集成CAT调用链
    分布式监控CAT服务端的本地部署
    如何优雅的设置线程池的大小?
  • 原文地址:https://www.cnblogs.com/ytwang/p/15846979.html
Copyright © 2020-2023  润新知