【NLP学习笔记】3-基于机器学习的文本分类

数据读取和分析

Introduction

这次的训练主要是利用机器学习完成文本分类,常见的机器学习分类方法有svm支持向量机、随机森林、决策树算法。本节内容主要完成下列两个目标:

  • TF-IDF的原理和使用
  • 使用sklearn的机器学习模型完成文本分类

Task

1、文本表示方法(one hot/词袋/tf-idf/n-grams)

  • 词嵌入:词嵌入将不定长的文本转换到定长的空间内,从而转化文本。
  • One-hot :将每一个单词使用一个离散的向量表示。具体将每个字/词编码一个索引,然后根据索引进行赋值。如
#1
句子1:我 爱 北 京 天 安 门
句子2:我 喜 欢 上 海
#2
{'我': 1, '爱': 2, '北': 3, '京': 4, '天': 5,'安': 6, '门': 7, '喜': 8, '欢': 9, '上': 10, '海': 11}
#311个字符转化为一个11维度的向量(sparse vector)
我:[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
爱:[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
...
海:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
  • 词袋:也称为Count Vectors,每个文档的字/词可以使用其出现次数来进行表示。
#1
句子1:我 爱 北 京 天 安 门
转换为 [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0]
这里比如只统计句子17个字符
#2
句子2:我 喜 欢 上 海
转换为 [1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1]
这里比如只统计句子24个字符+句子11个字符
#3
依然是转化为11维的向量

上述实现可由下:

from sklearn.feature_extraction.text import CountVectorizer
corpus = [
    'This is the first document.',
    'This document is the second document.',
    'And this is the third one.',
    'Is this the first document?',
]
vectorizer = CountVectorizer()
vectorizer.fit_transform(corpus).toarray()
  • N-gram:N-gram与Count Vectors类似,不过加入了相邻单词组合成为新的单词,并进行计数。
句子1:我爱 爱北 北京 京天 天安 安门
句子2:我喜 喜欢 欢上 上海

*TF-IDF 这个就是由语料词库和文档词库中和选取的tf-idf值比较高的词汇。其中计算语料库中文档总数除以含有该词语的文档数量,然后再取对数就是逆文档频率。

2、基于机器学习的文本分类(RidgeClassifier)

实现:利用RidgeClassifier

  • Count Vectors + RidgeClassifier
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import RidgeClassifier
from sklearn.metrics import f1_score

dir = "/Users/titan/Desktop/dict/"
file_desc = "".join([dir, "train_set.csv.csv"]) 
train_df = pd.read_csv('file_desc', sep='\t', nrows=15000) #读取15000行数据
vectorizer = CountVectorizer(max_features=3000)
train_test = vectorizer.fit_transform(train_df['text'])

clf = RidgeClassifier()
clf.fit(train_test[:10000], train_df['label'].values[:10000])

val_pred = clf.predict(train_test[10000:])
print(f1_score(train_df['label'].values[10000:], val_pred, average='macro'))
# 0.74
  • TF-IDF + RidgeClassifier
import pandas as pd

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import RidgeClassifier
from sklearn.metrics import f1_score

dir = "/Users/titan/Desktop/dict/"
file_desc = "".join([dir, "train_set.csv.csv"]) 
train_df = pd.read_csv('file_desc', sep='\t', nrows=15000) 
tfidf = TfidfVectorizer(ngram_range=(1,3), max_features=3000)
train_test = tfidf.fit_transform(train_df['text'])

clf = RidgeClassifier()
clf.fit(train_test[:10000], train_df['label'].values[:10000])

val_pred = clf.predict(train_test[10000:])#测试
print(f1_score(train_df['label'].values[10000:], val_pred, average='macro'))
# 0.87
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习个人笔记完整版v5.24-a4 机器学习是一门研究如何通过计算机模拟人类学习过程的学科。通过机器学习的方法,计算机可以通过数据和算法自动地从经验中学习,提高其性能。 在机器学习中,常用的学习方法包括监督学习、无监督学习和强化学习。监督学习通过给定一组已知输入和输出的训练数据,构建一个函数模型,以预测新的输入对应的输出。无监督学习则是通过对训练数据进行聚类或降维等处理,来发现数据中的潜在结构。而强化学习是通过智能体与环境的交互,通过试错学习来获得最大的奖励。 机器学习的算法和模型也有很多种,如线性回归、决策树、支持向量机、神经网络等。线性回归是一种简单而常用的模型,通过拟合一个线性函数来预测连续型变量。决策树则是一种通过一系列判定条件来进行分类的模型。而支持向量机是一种通过在不同类别间构建一个最优超平面来分类的模型。神经网络则是一种模拟生物神经系统的计算模型,通过多层次的神经元相互连接来进行学习和预测。 机器学习的应用场景非常广泛,包括自然语言处理、计算机视觉、推荐系统等。在自然语言处理方面,机器学习可以用于文本分类、情感分析等任务。而在计算机视觉领域,机器学习可以用于图像分类、目标检测等任务。在推荐系统中,机器学习可以通过对用户行为数据的分析,为用户提供个性化的推荐。 总的来说,机器学习是一门非常有前景和潜力的学科。通过不断地学习和实践,我们可以掌握各种机器学习的方法和技巧,为解决各种实际问题提供有效的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值