NLP(自然语言处理) 之 【文本处理的流程】

NLP(自然语言处理) 之 【文本处理的流程】

今天女朋友问了句“你是想和我谈恋爱还是想学NLP?”
这就不能细品了啊……再看下去恐怕就是“你根本不喜欢我,你和我在一起就是为了学英语!”的下场了
所以NLP我不会深入学习了(本来还以为可以看看深度学习的说……


0.原始文本(raw data)

可能是网页文本/新闻/报告……


1.分词(Word Segmentation)

  • 英文分词:一般通过标点或者空格即可进行分词;
  • 中文分词

常用分词工具

  1. 最常用的:Jieba分词
1
2
3
4
5
6
7
8
9
10
11
12
13
# 通过python使用Jieba分词
import jieba

# 默认情况下“菜鸟学院”会被分成两个词,因为Jieba分词的词库中没有“菜鸟学院”
rst1 = jieba.cun("菜鸟学院专注于程序员教育", cut_all=False)
print("rst1: " + "/".join(rst1))
# 菜鸟/学院/专注/于/程序员/教育

# 将“菜鸟学院”加入词库中,Jieba分词就可以识别了
jieba.add_word("菜鸟学院")
rst1 = jieba.cun("菜鸟学院专注于程序员教育", cut_all=False)
print("rst1: " + "/".join(rst1))
# 菜鸟学院/专注/于/程序员/教育
  1. SnowNLP
  2. 哈工大:LTP
  3. HanLP
  4. ……

底层算法 —— 【贪心】

  1. 前向最大匹配(forward-max matching)算法

    假设我们有一个句子:我们经常有意见分歧
    词典:["我们","经常","有","有意见","意见","分歧"]
    匹配窗口大小max-length = 5,取值不能太大,否则算法复杂度过高,一般考虑词典库中的平均长度即可。

    【第1轮匹配】:
    我们经常有【x】
    我们经常【x】
    我们经【x】
    我们
    【第2轮匹配】:
    经常有意见【x】
    经常有意【x】
    经常有【x】
    经常
    【第3轮匹配】:
    有意见分歧【x】
    有意见分【x】
    有意见
    【第4轮匹配】:
    分歧
    【结果】:
    我们/经常/有意见/分歧

  2. 后向最大匹配(backward-max matching)算法

    假设我们有一个句子:我们经常有意见分歧
    词典:["我们","经常","有","有意见","意见","分歧"]
    匹配窗口大小max-length = 5,取值不能太大,否则算法复杂度过高,一般考虑词典库中的平均长度即可。

    【第1轮匹配】:
    有意见分歧【x】
    意见分歧【x】
    见分歧【x】
    分歧
    【第2轮匹配】:
    经常有意见【x】
    常有意见【x】
    有意见
    【第3轮匹配】:
    我们经常【x】
    们经常【x】
    经常
    【第4轮匹配】:
    我们
    【结果】:
    我们/经常/有意见/分歧

  3. 双向最大匹配算法:整合前向和后向的结果

最大匹配算法 的 缺点

  1. 不能细分,由于使用的是贪心,所以只能求局部最优解
  2. 时间复杂度随max-length指数增长
  3. 只停留在Morphology层面,不能考虑语义的通顺性,无法解决歧义,没有考虑上下文

优化

基于动态规划(DPViterbi算法


2.拼写纠错(Spell Correction)

  • 方案:编辑距离(edit distance) —— 输入一个单词,最少通过多少次insert/delete/replace后可以转为给定单词
  • 原理:动态规划(DP

如何获得候选单词?

  1. 遍历所有词典中的单词,找出与输入单词编辑距离最短的单词后返回

    时间复杂度是O(N),工程量非常大,不可取

  2. 对于每个输入单词,生成编辑距离为12的单词,然后通过过滤返回最优结果

    优点:不依赖于词典大小
    如何过滤?
    对于给定字符串s和可能成为正确结果的字符串c过滤的目的是使得P(c|s)最大,通过贝叶斯定理可得P(c|s)=P(s|c).P(c)/P(s),即返回P(s|c).P(c)最大的候选词


3.清洗(Cleaning)

  • 去除无用标签,比如<HTML>
  • 去除特殊符号,比如!
  • 去除停用词,比如a/and
  • 大写转小写

4.标准化(Normalization)

一般应用在英文中,将多个单词合并为一个单词:

  • apple/apples合并
  • go/going/gone/went合并

5.特征提取(Feature Extraction)

将字符串转为向量,比如tf-idf/word2vec


6.建模(Modeling)

一般是通过AI算法,比如:相似度算法、分类算法

-------------本文结束感谢您的阅读-------------

本文标题:NLP(自然语言处理) 之 【文本处理的流程】

文章作者:DragonBaby308

发布时间:2019年11月14日 - 21:51

最后更新:2019年11月18日 - 23:13

原始链接:http://www.dragonbaby308.com/nlp-text-processing/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

急事可以使用右下角的DaoVoice,我绑定了微信会立即回复,否则还是推荐Valine留言喔( ఠൠఠ )ノ
0%