跨语言文本查重代码中的问题总结

一、一些代码中的问题

  1. 将一个列表 转化为空格隔开的字符串
第一种方法:test=['1','2','23']

           print(' '.join(test))
                    输出结果为:1 2 23

第二种方法:test=['1','2','23']

           for x in test:

           print(x,end=" ")
                   输出结果为:1 2 23

  1. 文件读写(去查菜鸟教程)
    Python3 File(文件) 方法
    python:write()/writelines()的区别
    python:read()/readline()/readlines()区别

  2. 注意文件编码问题:utf-8和gbk

  3. 如何打开.pkl文件,查看.pkl文件里的内容(Python3.6)

  4. 深度学习中常用函数

  • enumerate() 函数
  • Numpy中常用的保存与读取数据的方法
  • python列表操作:extend()和append()

二、pytorch中一些常见操作

1、维度的变化
  1. 减少维度
  • out=out[:,-1,:]
    lstm的输出形状(batch,seq_len, hidden_size*2)
    因为要接fc,所以使用out=out[:,-1,:],将seq_len这个维度去掉了。
  • squeeze()
    squeeze(arg)表示第arg维的维度值为1,则去掉该维度。否则tensor不变。
  1. 增加维度
    unsqueeze():
    unsqueeze(arg)与squeeze(arg)作用相反,表示在第arg维增加一个维度值为1的维度
  2. 检验模型是否正确模型
    用下面这三个逐步来检查模型前向传导的中间结果,并记录结果的维度和代表含义
 print("out:")
       print(out)
       print(out.size()) # 获取向量的维数和对应的维度
       time.sleep(1000) # 休眠以便观察

       一些情况下也可用:print(x.dtype) #获取张量里的数据类型
  1. 参考
    pytorch的英文API文档
    pytorch常用张量维度操作
    pytorch中tensor的squeeze()和unsqueeze()
    pytorch中降维的骚操作:out = out[:,-1,:]
2、数据要求和转换
  1. 对于数据的要求
  • 训练的批量样本数据输入值需要是long值的Tensor数据,而不是int值的Tensor数据
  • 在训练网络的过程中由于类型的冲突导致这种错误,主要是模型内部参数和输入类型不一致所导致的。主要有两个部分需要注意到:1.自己定义的变量要设置为一种数据类型;2.网络内部的变量类型也要统一。
  • 我自己碰到的:计算cosine_similarity函数的两个输入参数必须是同一类,不然会报错。
  1. 参考:
  • Pytorch:dtype不一致(expected dtype Double but got dtype Float)
  • pytorch中tensor张量数据类型的转化

三、一些关于深度学习的一些知识

1、中英文文本预处理
  • 英文采用nltk分词
    大写字母转换成小写字母 --> 去除标点符号 --> 分词 --> 去除停用词 --> 提取词干(在英文中有很多变形,比如cleaning/cleans/cleaned等等,这些和clean都是一个意思,这里我们要对其提取词干)
  • 中文采用jieba分词
    去除非中文部分(如标点符号) --> 中文分词 --> 去除停用词
  • 代码实现参考:
    python :中英文文本预处理
    NLP入门-- 文本预处理Pre-processing
  • 分词工具
    • 中文分词工具:
      下面排名根据 GitHub 上的 star 数排名:
      Hanlp Stanford分词 ansj分词器 哈工大LTP KCWS分词器 jieba(采用) IK 清华大学THULAC ICTCLAS
    • 英文分词工具:
      Keras Spacy Gensim NLTK(采用)
2、得到预训练词向量(跨语言词向量)

看论文附的代码

3、如何使用预训练词向量
  1. 实现过程和原理
  • 实现过程:先是进行一个对象初始化,然后加载预训练词向量,然后把预训练词向量copy进去。
  • 原理:我们知道预训练词向量肯定也是一个词向量矩阵对象,这里是通过单词获取词向量权重。我们要做的就是做到类似pytorch自带的那种权重初始化,得到一个单词-索引-权重对应的关系。预训练对象得到的是单词-权重。我们要得到的是索引-权重。
  1. 参考
  • 文本分类算法中的相关实现
  • tensorflow如何正确加载预训练词向量
  • pytorch中如何使用预训练词向量
4、数据集和迭代器构建
  1. Iteration, Batch, Epoch

深度学习 | 三个概念:Epoch, Batch, Iteration

  1. 训练集,验证集和测试集的作用
    见西瓜书

  2. 对于文本预处理、数据集的构建、迭代器
    建议可以尝试torchtext,一步到位
    torchtext入门教程,轻松玩转文本数据处理

5、模型构建

pytorch的英文API文档

  • [NLP] TextCNN模型原理和实现
  • LSTM神经网络输入输出究竟是怎样的?
  • 常见激活函数总结
  • 常见的损失函数(loss function)总结
6、模型训练

你可能感兴趣的:(跨语言文本查重代码中的问题总结)