python nlp
text cleaning pipeline
【总结】
- 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 基础知识