最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【整理】python nlp 基础知识

Python crifan 1498浏览 0评论
python nlp
【译文】基于Python的自然语言处理指南 – 知乎
text cleaning pipeline
nlp – Pipeline for text cleaning / processing in python – Stack Overflow
Text preprocessing steps and universal reusable pipeline
NLP: Text Data Cleaning and Preprocessing – Maria Dobko – Medium
How to Clean Text for Machine Learning with Python
Text preprocessing steps and universal pipeline | Kaggle
Amazon Fine Food Reviews | Kaggle
从Word Embedding到Bert模型——自然语言处理预训练技术发展史 | 机器之心
【总结】
  • NLP
    • Nature Language Processing=自然语音处理
    • 一句话:从文本中提取信息
      • 提取结构化的信息
        • 用数字表示特征值
          • 也就是:向量化=vectorize=矢量化 -》 vectorization
  • 背景
    • 业界统计:21%的数据是以结构化的形式出现的
      • 更多的数据是非结构化的
        • 所以需要用(NLP等)技术去变成、提取结构化的信息
          • 供后续其他用途
            • 举例
              • 机器学习ML 或 深度学习DL 的模型model 需要输入结构化的数据
                • 用NLP得到结构化的数据
    • 数据科学家大部分精力
      • 不是花在建模上
      • 而是花在处理数据上
        • 处理包括
          • cleaning清洗
          • exploring考察=分析
        • 不同处理方式得到的数据结果也很不同
  • 基础概念
    • 标记化:把文本转化为标记的过程
    • 标记:文本中出现的实体或词汇
    • 文本对象:词语、词组、句子、文章
  • 应用领域 应用举例
    • 聊天机器人=chat robot
    • 自动总结
    • 机器翻译:多种语言的
    • 命名实体识别
    • 情感分析
    • 给图片加标题=photo captioning
    • 自动提取关键词=Automatic Keyphrase extraction
  • 典型处理过程
    • 常被称为:文本预处理=文本清洗=Text Cleaning=文本特征化
    • 具体过程
      • Normalization=标准化
        • 将其转换成小写
          • 降低Token的稀疏性(Sparsity)
      • 清除标点符号
      • Tokenization分词
        • 分拆成词
      • 清除 Stop Words
        • 减少要处理的词汇量
      • 根据应用的不同
        • 可以选择同时进行 Stemming 和 Lemmatization
          • 将词还原成词根或词干
        • 常见的方法
          • 先进行 Lemmatization,再进行Stemming
  • 相关术语和过程:
    • Tokenization=标记化=分词
      • token=标记 ~= 实体
    • Cleaning=清洗
      • 目的:把句子拆成一个个单词
      • 过程:
        • 分割字符:去除空格等
        • 去除标点符号
        • 还原大小写
      • 特点
        • 和具体任务相关度很大
          • 不同任务,会用不同方法和工具,处理出不同的结果
            • 供后续使用
          • 所以
            • 清洗数据之前,要搞清楚你要实现的目的
            • 期间需要做很多权衡和取舍tradeoff
            • 尽量实现:简单就是美
              • Simpler text data=更简单的文本数据
              • simpler models=更简单的模型
              • smaller vocabularies=更少的词汇量
      • 方法
        • 手动裸写代码=Manual Tokenization
          • 相关函数
            • str
              • str.split
              • str.translate
              • str.maketrans
            • 正则re
        • 用第三方库
          • NLTK
    • Normalization=标准化:统一大小写
      • convert all words to one case
        • 例如:都转换为小写
          • 注意:
            • 有些特殊词含义可能会丢失
              • 比如
                • Apple是苹果公司
                • apple是作为常见的水果的苹果
    • Stop words=停用词
      • 英文:the、this、is、our、in、at
      • 中文:的、地、了、么…
    • Part-of-Speech Tagging=POS Tagging=词性标注
      • 词性:
        • 名词
        • 代词
        • 动词
        • 副词
    • Named Entity=命名实体
    • Lemmatization=词形还原
    • Stemming=词干提取
  • 常见的库
    • NLTK
      • Natural Language Toolkit
      • 用于
        • 处理文本
          • nltk.tokenize的word_tokenize()
      • 提供了
        • 一堆工具用于
          • 加载文本
          • 清洗文本
  • 常见的数据源,数据集
    • WordNet
  • NLP中文本清理方法演化
    • 最早:
      • 一堆单词的模型 BOW(bag-of-word) models +  单词编码word encoding
    • 现在
      • 单词嵌入word embedding
        • 把每个单词编码为一个向量
          • 记录其对于训练的单词的相对的含义
          • 好处
            • 自动把大小写、拼写、标点符号等自动编码为嵌入空间的相似性
              • 使得:清洗文本的工作量会适当减少
                • 比如
                  • 无需提取单词词干或去除标点符号去用于对比
        • 常见库
          • word2vec:
            • 作者Tomas Mikolov
            • a popular word embedding method
  • 预训练过程
    • 语言训练模型
      • ELMO=Embedding from Language Models
        • 语言模型预训练的鼻祖
          • 对应论文题目是Deep contextualized word representations
        • 两个关键词
          • deep
          • context
      • Bert
        • 两年 NLP 重大进展的集大成者
  • NLP处理过程期间优化
    • Rare word replacement
      • 将词频小于5的替换成一个特殊的Token <UNK>
        • Rare Word如同噪声
          • -》故此法降噪并减少字典的大小
    • Add <BOS>, <EOS>
      • 在句前,句后加入<BOS>和<EOS>
      • 这是个依赖具体模型(Model-Based)的处理策略
        • 因为现在都用RNN,RNN的结构对于结尾不敏感(Sensitive),所以要加
    • Long Sentence Cut-Off
      • 将句长超过L的变成L。这个也是Model-Based,因为RNN需要Unrolling
    • 很多操作不应考虑Test Set
      • 绝大多数人都是加Test set的,这是全然错误的。比如说做Rare Word replacement的时候,不应该统计Test Set的词频
    • BPE
      • bpe技术非常有效
    • Long Tail
      • 为防止<UNK>过多影响词频,可将<UNK>拆成<UNK1>,<UNK2>, ….,然后random-projection。<UNK>对结果影响很大
    • Misspelled
      • 对小的,质量不高的Dataset,考虑纠正错词。(将词替换成字典中最接近的词)
    • Char-Level
      • Rare Word还有Char-Level的处理方法,不需要<UNK>
    • ELMo
      • 今年开始直接ELMo就好了
    • Special Tokens
      • 要根据具体Task处理。比如,人名统一成<entity A>, <entity B>,从句子中抽取Structured信息等。
      • 这个一般都是Dict + 正则表达式直接算。少数用PoS, Parser等,效果普遍不如暴力规则。
      • 如果你用NN来提就是一篇Paper了。
    • Stop Words
      • 非常不推荐
        • 有的人喜欢删Stop Words(标点)
        • Stop Words是句子很重要的信息,起到天然的分割(segmentation)效果,而不用Model自己去学句子的分隔
        • 删了stop word基本上就相当于选择了Bag-Of-Words的方法,或者是类BOG的方法,像CNN Filter这种
        • 更不用说NLG中删了punctuations。比如万恶的MSCOCO caption evaluation api,竟然删PUNCTUATIONS,导致只在Caption这种短句中适用。eval长句子就是坑。
相关:
【整理】Lemmatization和Steaming的含义和区别

转载请注明:在路上 » 【整理】python nlp 基础知识

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
82 queries in 0.176 seconds, using 22.11MB memory