自然语言处理(NLP)入门(3)——文本预处理

**数据和特征决定了机器学习的上限,而模型和算法只是无线逼近这个上限。**正是因为数据处理的重要性,在NLP算法的工作中,大部分的时间是与数据打交道,文本预处理更是重中之重!

文本预处理

  • 方法:

    • 文本处理的基本方法

      • 分词
        • 作用: 为了更好的进行语言语义的理解(why)
        • 工具: jieba 安装: pip install jieb
          • jieba特性:
            • 多种分词模式
              • 精确模式(how)
                • jieba.cut(content, cut_all=False)—> 生成器
                • jieba.lcut(content, cut_all=False)—> 列表
              • 全模式
                • jieba.cut(content, cut_all=True)—> 生成器
                • jieba.lcut(content, cut_all=True)—> 列表
              • 搜索引擎模式
                • jieba.cut_for_search(content)> 生成器
                • jieba.lcut_for_search(content)—> 列表
            • 中文繁体分析
            • 用户自定义的模式
              • 自定义字典: 格式: 词语 词频[可省略] 词性[可省略]
              • 加载自定义字典: jieba.load_userdict(自定义字典文件)
      • 词性标注**[POS]**
        • 作用: 为了计算机更好的理解自然语言, 处理更高阶的NLP任务自动问答, 机器翻译等任务
      • 命名实体识别[NER] eg: 马云 创办了阿里巴巴
        • 实质是一个NLP任务类型
        • 命名实体: 人名, 地名, 机构名等专有名称
    • 文本张量表示方法

      • One-hot编码 0 1 001 010 100

        • 定义了词汇映射器[词—>数字]
        • one-hot编码的保存 joblib.dump()
        • 优点: 操作简单, 容易理解
        • 缺点:词和词之间的联系少,大语料集上, 占用的内容大
      • Word2vec(what)—(why)

        • 第一种模式: CBOW: 词袋模式—> 两边(输入)到中间(输出)

        • 第二种模式: skipgram—> 中间(输入)到两边(输出)

        • fasttext工具进行词向量的训练(how)

          • 安装:

            • 第一种方式的安装: pip install fasttext(简洁版)

            • 第二种方式安装: (建议使用这种方式)

              $ git clone https://github.com/facebookresearch/fastText.git
              $ cd fastText
              # 使用pip安装python中的fasttext工具包
              $ sudo pip install .
              
          • 训练词向量(how)

            • 步骤:
                1. 获取训练数据集 enwik9
                2. 训练词向量
                  1. 训练api: Fasttext.train_unsupervised(data)
                  2. 查看词向量: model.get_word_vector(词)
                3. 模型参数的设定
                  1. 模型的训练类型
                  2. epoch
                  3. lr
                  4. thread等等
                4. 模型检验
                  1. model.get_nearest_neighbors(词)
                5. 模型的保存和重加载
                  1. 模型的保存: model.save_model(模型的名字)
                  2. 模型的重加载: new_model = fasttext.load_model(模型的名字)
      • Word Embedding

        • 广义上说: word2vec
        • 狭义的word Embedding: 就是网络中的embedding层, 最后是输入所有词汇的向量表示组成的矩阵
    • 文本语料的数据分析—> 绘制图像

      • 标签数量的分析

        • 目的: 查看各个类别之前的数量关系, 确定样本是否均衡
      • 句子的长度进行分析—绘制柱状图

        • 目的: 指导对句子长度进行截断或是补齐
        • 散点图的绘制目的: 为了方便人工审核, 异常数据
      • 词频的统计和关键词词云

        • 不同词汇的统计

          # 不同词汇总数的统计  --> embedding上   one-hot
          set(chain(*map(lambda x: jieba.lcut(x), train_data["sentence"])))
          
        • 词云的绘制

          • 训练集上绘制正样本的词云
          • 训练集上绘制负样本的词云
          • 验证集上绘制正样本的词云
          • 验证集上绘制负样本的词云
    • 文本特征处理

      • n_gram特征

        • 定义: 在文本序列中, n个词或字相邻且共现即n_gram特征 n: 1 2 3 4 5

        • 作用 为了增加更多的语义信息, 是语句有更多元化的语义表示

        • 如何实现

          set(zip(*[input_list[i:] for i in range(ngram_range)]))
          
      • 文本长度的规范 处理成一定的长度

        • 原因: 网络需要等尺寸大小的语句序列.

        • 前期要进行的处理: 进行句子长度的分析(绘制图像), 然后确定要规范的句子长度

          • Eg: 语句 现象的阐述, 后面的结论
        • How 怎么做

          # 在此api函数中, 可以根据业务需求, 进行前面截断补齐或是后面截断补齐的选择
          sequence.pad_sequences(x_train, cutlen, padding='post', truncating='post')
          
    • 数据增强方法

      • 回译增强法

        • 第一种方式 pip install itranslate
        import itranslate
        
        text = ["酒店设施非常不错", "这家酒店服务好,价格便宜"]
        ko_result = itranslate.itranslate(text, from_lang='zh-cn', to_lang='ko')
        print(text)
        print("翻译成韩文:", ko_result)
        cn_result = itranslate.itranslate(ko_result, from_lang='ko', to_lang='zh-cn')
        print('回译成中文:', cn_result)
        
      • 第二种方式: google接口 pip install google_trans_new

        • 如果发生错误: json解析错误 修改源码: google_trans_new.py文件中151行

          # 151行  修改源码
          # response = (decoded_line + ']')
          # 导致json解析错误
          # 修改成
          # response = decoded_line
          # 即可
          

你可能感兴趣的:(nlp,pytorch,python,人工智能)