自然语言处理

本文介绍了自然语言处理(NLP)中的数据收集、分词工具和语义分析。数据收集可通过已有语料库或使用爬虫获取。在分词方面,文章提到了Jieba、SnowNLP、LTP和HanNLP等工具,并介绍了维特比算法在分词中的应用。语义分析包括词语和句子的相似度计算,以及词向量表示如词袋模型和word2vec。
摘要由CSDN通过智能技术生成

NIP

发展
在这里插入图片描述
nlp分类
在这里插入图片描述
研究热点

在这里插入图片描述

数据收集

在文本挖掘之前,我们需要得到文本数据,文本数据的获取方法一般有两种:使用别人做好的语料库和自己用爬虫去在网上去爬自己的语料数据。
对于第一种方法,常用的文本语料库在网上有很多,如果大家只是学习,则可以直接下载下来使用,但如果是某些特殊主题的语料库,比如“机器学习”相关的语料库,则这种方法行不通,需要我们自己用第二种方法去获取。
对于第二种使用爬虫的方法,开源工具有很多,通用的爬虫一般使用beautifulsoup。但是我们我们需要某些特殊的语料数据,比如上面提到的“机器学习”相关的语料库,则需要用主题爬虫(也叫聚焦爬虫)来完成。这个一般使用ache。 ache允许我们用关键字或者一个分类算法来过滤出我们需要的主题语料,比较强大。

Pipeline

在这里插入图片描述

Word Segmentation (分词)

Word Segmentation Tools

  • Jieba分词 https://github.com/fxsjy/jieba SnowNLP
  • https://github.com/isnowfy/snownlp LTP http://www.ltp-cloud.com/
  • HanNLP https://github.com/hankcs/HanLP/
    原理
    在这里插入图片描述
    在这里插入图片描述
    维特比算法与分词

为了简化原理描述,我们本节的讨论都是以二元模型为基础。

对于一个有很多分词可能的长句子,我们当然可以用暴力方法去计算出所有的分词可能的概率,再找出最优分词方法。但是用维特比算法可以大大简化求出最优分词的时间。

大家一般知道维特比算法是用于隐式马尔科夫模型HMM解码算法的,但是它是一个通用的求序列最短路径的方法,不光可以用于HMM,也可以用于其他的序列最短路径算法,比如最优分词。

维特比算法采用的是动态规划来解决这个最优分词问题的,动态规划要求局部路径也是最优路径的一部分,很显然我们的问题是成立的。首先我们看一个简单的分词例子:“人生如梦境”。它的可能分词可以用下面的概率图表示:
在这里插入图片描述
在这里插入图片描述

Incorporate Semantic (考虑语义)
语义分析包含词语语义分析和句子语义分析:
一、词语语义分析:
词语相似度:两个词语在不同的上下文中可以互相替换使用,而不改变文本的句法语义结构的程度。在不同的上下文中,可以互相替换且不改变文本的句法语义结构的可能性越大,二者的相似度就越高。对词语相似度影响最大的是词的语义。
**词语距离:**与词语相似度反相关,距离为0,相似度为1;距离无穷大,相似度为0。
在这里插入图片描述
其中α是一个可调节参数,表示当相似度为0.5时的词语距离。
词语相关性:反映两个词语互相关联的程度,两个词语在同一个语境中"共现"的可能性。

词语相似性——词语之间的聚合特点,词语相关性——词语之间的组合特点。A与B相似度高,则"A与C的相关性"和"A与B的相关性"也很接近;A、B都与其余词语的相关程度很接近,则A与B的相似度很高。

相关性计算方法:利用外部知识(词典)构建"语义分类树形图",节点间路径长。或概念层次树的深度、概念层次树的区域密度。
二、句子语义分析:

**句子相似度:**计算不同句子(语义)相似程度。应用包括多文档自动摘要、自动问答。从语句的分析深度区分,有两种方法:基于向量空间模型的方法、对语句进行完全的句法与语义分析。
(1)基于向量空间模型的方法:把句子看成词的线性序列,利用句子的表层信息——组成句子的词的词频、词性等信息,不考虑句子整体结果的相似性。每个词可以通过tf-idf算出词频,一句话即转化成一个向量,一篇文章就转化成一个向量空间
(2)对语句进行完全的句法与语义分析:比较句子的生成句法和语义,并在此基础上进行相似度计算。

利用语义依存结构,计算句子的相似度。有效搭配对:只考虑关键成分。

在这里插入图片描述

在这里插入图片描述马尔科夫网,最大熵模型,条件随机场(CRF)
1)HMM的三个基本问题的参数估计与计算
2)什么是熵
3)EM算法(应用十分广泛,好好理解)
4)HMM的应用
5)层次化马尔科夫模型与马尔科夫网络
提出原因,HMM存在两个问题
6)最大熵马尔科夫模型
优点:与HMM相比,允许使用特征刻画观察序列,训练高效
缺点: 存在标记偏置问题
7)条件随机场及其应用(概念,模型过程,与HMM关系)
参数估计方法(GIS算法,改进IIS算法)
CRF基本问题:特征选取(特征模板)、概率计算、参数训练、解码(维特比)
应用场景:
词性标注类问题(现在一般用RNN+CRF)
中文分词(发展过程,经典算法,了解开源工具jieba分词)
中文人名,地名识别
8) CRF++

[1]、拼写纠错

Spell Correction (拼写错误纠正)

在这里插入图片描述
在这里插入图片描述

2、拼写纠错

## 编辑距离的计算
# 基于动态规划的解法
def edit_dist(str1, str2):
    
    # m,n分别字符串str1和str2的长度
    m, n = len(str1), len(str2)
    
    # 构建二位数组来存储子问题(sub-problem)的答案 
    dp = [[0 for x in range(n+1)] for x in range(m+1)] 
      
    # 利用动态规划算法,填充数组
    for i in range(m+1): 
        for j in range(n+1): 
  
            # 假设第一个字符串为空,则转换的代价为j (j次的插入)
            if i == 0: 
                dp[i][j] = j    
              
            # 同样的,假设第二个字符串为空,则转换的代价为i (i次的插入)
            elif j == 0:
                dp[i][j] = i
            
            # 如果最后一个字符相等,就不会产生代价
            elif str1[i-1] == str2[j-1]: 
                dp[i][j] = dp[i-1][j-1] 
  
            # 如果最后一个字符不一样,则考虑多种可能性,并且选择其中最小的值
            else: 
                dp[i][j] = 1 + min(dp[i][j-1],        # Insert 
                                   dp[i-1][j],        # Remove 
                                   dp[i-1][j-1])      # Replace 
  
    return dp[m][n] 
## 生成指定编辑距离的单词
def generate_edit_one(str):
    """
    给定一个字符串,生成编辑距离为1的字符串列表。
    """
    letters    = 'abcdefghijklmnopqrstuvwxyz'
    splits = [(str[:i], str[i:])for i in range(len(str)+1)]
    inserts = [L + c + R for L, R in splits for c in letters]
    deletes = [L + R[1:] for L, R in splits if R]
    replaces = [L + c + R[1:] for L, R in splits if R for c in letters]
    
    #return set(splits)
    return set(inserts + deletes + replaces)

print (len(generate_edit_one("apple")))

def generate_edit_two(str):
    """
    给定一个字符串,生成编辑距离不大于2的字符串
    """
    return [e2 for e1 in generate_edit_one(str) for e2 in generate_edit_one(e1)]

print (len(generate_edit_two("apple")))

拼写纠错博客https://norvig.com/spell-correct.html

Words Filtering

1、Filtering Words
对于NLP的应⽤用,我们通常先把停⽤用词、出现频率很 低的词汇过滤掉

2、Removing Stop Words

在英文里,比如 “the”, “an”, “their”这些都可以作 为停⽤用词来处理。但是,也需要考虑自己的应用场景

Words Normalization

1、Stemming: one way to normalize

2、lemmation

word represention

用向量的形式表示自然语言中的词的方法。

One-hot Representation:维灾,词汇鸿沟(词义关系丢失)。
词袋模型 (Bag-of-word Model)
方法1: 词袋模型(按照词语出现的个数)
方法2:词袋模型(tf-idf方法)
在这里插入图片描述
在这里插入图片描述
Distributed Representation(Word Embedding):通过模型训练出的低维分布式向量表示词,相似词向量距离相近。
NNLM模型:
在这里插入图片描述
在这里插入图片描述
**word2vec模型:**用于生成词向量的计算模型,可以很好的度量不同词之间的相似性。将训练出来的向量映射到高维空间,就可以看出词汇之间的关系。具体实现包含CBOW模型和Skip-gram模型,在数据量比较小的情况使用CBOW模型效果较好,在数据量非常大的时候使用Skip-gram模型效果更好。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

文本预处理(代码参考) https://www.kaggle.com/shashanksai/text-preprocessing-using-python

拼写纠错 https://web.stanford.edu/class/cs124/lec/spelling.pdf
Edit Distance https://www.geeksforgeeks.org/edit-distance-dp-5/
DP练习题 https://people.cs.clemson.edu/~bcdean/dp_practice/
Porter Stemmer https://tartarus.org/martin/PorterStemmer/java.txt
tf-idf介绍(技术博客)https://www.cnblogs.com/pinard/p/6693230.html
Porter Stemming (网页版介绍)http://facweb.cs.depaul.edu/mobasher/classes/csc575/papers/porter-algorithm.html

参考:
1、https://www.cnblogs.com/pinard/p/6744056.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值