机器学习 day04(二)

自然语言处理

自然语言处理是语言学的一个分支,侧重于对人类语言的词法、语法、语句等的研究。在计算机领域,主要用来研究,如何让计算机处理、生成甚至理解人类的语言,并且多种语言的传统学习任务也逐将被机器所代替。

一. sklearn 的特征提取

1.使用DictVectorizeier对字典的数据特征进行抽取与向量化
  1. 模块导入
from  sklearn.feature_extraction import DictVectorizer
  1. 创建DictVectorizer模型
dvc = DictVectorizer()
  1. 创建一个列表l,列表中的元素为字典
    在这里插入图片描述
  2. 用dvc 来进行训练
    在这里插入图片描述

在该数据中,city和landmark都是字符串类型的数据,不可以参与到运算,因此把city这一个属性
拆成了6个,把landmark一个属性拆成了6个,每个属性代表city挥着landmark的一个取值, 如果是具体的数字, 类型则不变

  1. 把矩阵转成数组,使用 toarray() 方法
    在这里插入图片描述
    查看每个属性列的含义
    在这里插入图片描述
2. 使用CountVectorizer并且不去掉停用词条的条件下,对文本进行向量化
  1. 导入数据集模块
from sklearn import datasets
  1. 从datasets中下载新闻文本
    由于是在线下载,数据量比较大,耗时可能会有点长,且界面会比以往略有卡顿
    在这里插入图片描述

  2. 取出特征和标签
    在这里插入图片描述

  3. 分离测试集与训练集
    在这里插入图片描述
    查看一下训练特征的数据
    在这里插入图片描述
    一般情况下不建议直接查看,因为数据量大,耗时且容易卡顿,
    使用 len() 查看数据长度(也就是数据量),有15076条数据

  4. 创建CountVectorizer模型
    在这里插入图片描述

  5. 训练并转换x_train
    在这里插入图片描述

  6. 转化x_test
    在这里插入图片描述

  7. 将稀疏矩阵转为数组
    在这里插入图片描述

CountVectorizier模型,在进行训练的时候,首先会统计训练集上总共有多少种词汇,对每一种词汇都是一个特征(例如:上例中所有的训练数据中有155283种词汇,每一个词都是一个特征,一句话中如果出现了n次某种词汇,就会把该词汇对应的属性设置为n)

3.用TfidVectorizier来进行去掉停用词的情况下的特征提取

什么叫停用词呢?就是这个词语,在这句话中没有什么含义,那么这个词的特征就不出现了,这个特征就为0处理,这样会比上面不去掉停用词更加智能

  1. 创建 TfidfVectorizer 模型
    在这里插入图片描述

  2. 训练并转换x_train,转化x_test
    在这里插入图片描述

二. NLTK

模块安装

pip install nltk
1.词袋法

用sklearn中的CountVectorizier和TfidVectorizier来进行特征提取

这两种方法的提取:就是把整个数据集上的所有的语句中的词汇设置成特征,然后将每一句话的单词出现的次数映射对应的词汇上

  1. 先创建三句话,类型都为string类型
    在这里插入图片描述
  2. 创建CountVectorizer模型
    在这里插入图片描述
  3. 将第一句话和第二句话组合起来
    在这里插入图片描述
  4. 进行特征提取,提取词汇
    在这里插入图片描述
    这个特征有什么特点呢?
    这里一共有11个单词,对应稀疏矩阵中2x11中的11
    稀疏矩阵由两句话组成,对应x11中的2
    第一句话中 “The cat is walking in the bderoom” 没有across这个单词,所以稀疏矩阵第一行第一列的元素用0表示,而对应的bedroom这个单词,第一行第一列中为1,恰好第一句话中有这个单词
2.用NLTK处理
  1. 导入模块
import nltk
  1. 用NLTK来做词语的切分
    在这里插入图片描述
    分别对三句话做了词语的切分

  2. 寻找每一句话的词根
    3.1 初始化一个Stemmer对象,寻找原始词根
    在这里插入图片描述
    3.2 分别对以上三句话寻找原始词根
    在这里插入图片描述

  3. 对每一个词汇进行标注,在使用之前首先要下载如下内容
    由于是在线下载,可能会耗费些时间

在这里插入图片描述
调用一下tag.pos_tag()这个函数
在这里插入图片描述

三 . 向量词(Word2Vec)技术

词袋法,可以视作向量化技术,通过这种技术,可以对文本之间的内容进行一定度量. 如果对于两段文字来说,词袋法就表现的无能为力

查看新闻news的data
在这里插入图片描述

  1. 导入模块
from bs4 import BeautifulSoup
import re
import nltk

如果没有安装bs4模块,使用命令pip下载

  1. 用nltk在线下载词法分析包
    在这里插入图片描述
    这个包的下载过程会有点耗时,因为内容很多
    下载之后,可以根据路径查看一下
    语法分析包有很多,一般情况下只分析英文,这里的news的内容也是英文的

在这里插入图片描述

  1. 定义一个函数,用于将每条新闻中的句子逐一剥离出来,并且返回一个列表
    在这里插入图片描述
  2. 将每条新闻都用定义的函数转化

在这里插入图片描述
5) 创建向量词转化模型
在这里插入图片描述

sentances参数, 要转化成向量词的语句
workers参数, 转化的时候用多少个cpu内核
size参数, 词向量的维度
min_count参数, 保证被考虑的词汇的频度
window参数, 定义训练词向量的上下文窗口大小
注意: 这个模型被创建出来以后就可以根据我们指定的参数来训练

model 的创建就伴随着训练,训练完以后,model中包含了一个300维的向量,
15w多种词汇量最终会根据相关程度合并到到300个维度中

  1. 利用训练好的模型来寻找和money相关的10个词汇
    在这里插入图片描述
    和money相关最大的词为effort 相关系数为0.62…

在不是用语言学字典的前提下,词向量技术仍然根据上下文信息,来查找词汇之间相似性;这一技术,不仅节省的大量的专业人员的操作,而且可以作为一个模型的基本应用,也可以用到更加复杂的自然语言处理中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值