NLP-文本张量表示

三种常用文本张量

  • one-hot编码

    • 又称独热编码,将每个词表示成具有n个元素的向量,这个词向量中只有一个元素是1,其他元素都是0
    • from sklearn.externals import joblib
      from keras.preprocessing.text import Tokenizer
      
      # 例如:
      vocab = {'苹果''菠萝'}
      t = Tokenizer(num_words=None, char_level=False)
      t.fit_on_texts(vocab)
      for token in vocab:
          zeros_list = [0]*len(vocab)
          token_index = t.texts_to_sequebces([token])[0][0] - 1
          zero_list[token_index] = 1
          print(token, "one_hot: ", zero_list)
         
      # 使用joblib工具保存映射器
      tokenizer_path = './Tokenizer'
      joblib.dump(t, tokenizer_path)
      
      # onehot编码器的使用
      t = joblib.load(tokenizer_path)
      t.texts_to_sequebces([token])[0][0] - 1
      
  • word2vec

    • 通过神经网络模型,将网络参数作为词汇的向量表示,包含CBOW和skipgram两种训练模式
      • CBOW:先知道前后字符,预测中间字符 (先指定窗口:3)
      • skipgram:先知道中间的字符,预测前后字符 (先指定窗口:3)
    • # fasttext工具进行word2vec
          # 1.获取训练数据
          # 2.训练词向量, 默认使用skipgram
          model = fasttext.train_unsupervised(data_path)
          model.get_word_vector(content)
          # 3.模型超参数设定
          model = fasttext.train_unsupervised(data_path, mode='cbow', thread=8)
          # 4.模型效果检验
          model.get_nearest_neighbors(content)
          # 5.模型的保存与重加载
          model.save_model('model.bin')
          model = fasttext.load_model('model.bin')
      
  • word Embedding

    • 通过一定的方式将词汇映射到指定维度(一般将高维度向低维度)的空间.
    • import torch
      import json
      from torch.utils.tensorboard import SummaryWriter
      writer = SummaryWriter()
      # 100个词汇表示成50维的向量
      embedded = torch.randn(100, 50)
      # 导入100个中文词汇
      meta = list(map(lambda x: x.strip(), fileinput.fileInput("./vocab100.csv")))
      writer.add_embedding(embedded, metadata=meta)
      writer.close()
      
  • 三种方法对比:

    • one-hot简单,容易理解,但割裂了词与词之间的联系,在长度过大时,很占内存
    • Word2vec(特指skipgram和CBOW)会考虑上下文,速度更快;但word2vec是词与向量一一对应关系,对于多义词不好处理,且word2vec是静态生成,对特定任务通用性不强
    • word embedding是word2vec的一种表达方式,能处理多义词,通用性更好,且是动态变化的,适用于深度学习,速度相比word2vec较慢,
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值