NLP(理论基础)

小白一枚,看了很多天的NLP,也没看出什么头绪。代码不代码的我感觉只要用心去看,即使看不懂,一点一点的去啃,也能看个大概。最重要的是思想。

1、首先介绍一下NLP的基础知识

①分词

1)nltk安装(pip install nltk)

nltk就是一个工具包,里面有很多语料,很多模型。可以用来分词。

import nltk
sentence = “hello, world"
tokens = nltk.word_tokenize(sentence)
print tokens
#['hello', ‘,', 'world']

2)jieba安装(pip install jieba)

import jieba
seg_list = jieba.cut("我来到北京清华⼤学", cut_all=True)
print "Full Mode:", "/ ".join(seg_list) # 全模式
seg_list = jieba.cut("我来到北京清华⼤学", cut_all=False)
print "Default Mode:", "/ ".join(seg_list) # 精确模式
seg_list = jieba.cut("他来到了⽹易杭研⼤厦") # 默认是精确模式
print ", ".join(seg_list)
seg_list = jieba.cut_for_search("⼩明硕⼠毕业于中国科学院计算所,后在⽇本京都⼤学深造")
# 搜索引擎模式
print ", ".join(seg_list)

总结:中文分词和英文分词不同,虽然英文有空格,好分词,但是英文分词也会遇到一些问题(网络符号@qq.com,需要正则表达预处理,时态归一化等)

去除停止词:没有意义的词,有干扰。(停止词有个列表)(停止词去除会破坏句子的结构,看目的是干什么,如果是判断句子相似度,不能去除停止词)(停止词在搜索中不起作用,太多的停止词会干扰关键词)

流程:句子--->分词--->词性标注--->归一化--->去除停止词

②one-hot(独热编码)

上一步介绍了分词,这一步开始对分词进行编码

思路:统计特征词表,对应位置为1

缺点:稀疏、没有位置关系

③BOW(词袋模型)

BOW和one-hot很相似,都不考虑位置关系。构建一个词表,统计每个词出现的频数。

ont-hot:一个词的向量表示

BOW:一句话的向量表示

句子\词表weyouheworkhappyare

he he he,we are happy

103011

④TF-IDF(关键词提取)

BOW表示一句话的向量。统计每个词出现的频数。

TF-IDF的引入,单单看某一个词在一句话中的频率不足以说明问题,还需要看该词出现句子的频率。

举例子:一个文档有100个单词,其中单词baby出现了3次,那么TF(baby)=3/100=0.03

现如今我们有训练集1千万篇文章,baby出现的文章有1000篇。那么IDF(baby)=log(1000 0000/1000)=4

所以:TF-IDF(baby)=0.03*4=0.12

作用:过滤高频词,保留重要词语。

⑤传统NLP任务

1)、情感分析

第一种:基于词表,每个词都有对应的情感度,对于一句话只需要累加每个词的情感度即可。

第二种:基于ML,句子和标签,可以训练。句子的向量表示是基于词袋模型。

2)、文本相似度

文本相似度,只需要用词袋模型表示句子向量,然后余弦定理计算即可。

3)、关键词提取

统计每个词的TF-IDF的值,值越大,重要度越大。

4)、文本分类

文本分类,同理也是用向量表示句子。然后ML分类。(其实情感分析也属于简单的文本分类问题),这里的句子向量用到了TF-IDF。

总结:句子向量表示都没有考虑位置关系,基于词袋模型,统计词频。

⑥共现矩阵(SVD,LSA)

one-hot:(like编码)0 1 0 0 0 0 0 0

共现矩阵:(like编码)2 0 0 1 0 1 0 0

缺点:优化了词与词间的位置关系,但是存在的问题还是维度灾难

SVD奇异值分解,进行降维(如何降维,请查看)

⑦n-gram

利用条件概率,判断一句话出现的概率。搜狗输入法预测下一个字,也可以用于分词。

注意:容易弄混淆,n-gram完全是根据词表计算概率来着(实战,请查看)。

⑧语言模型

1)、NNLM(前N-1个词,预测下一个词,附属产物词向量)

2)、word2vec(CBOW、skip-gram)

3)、Bert

总结:NLP前期一直探索单词和句子的向量表示方式。如果能很好的表示。那么后续任务就很简单了。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值