词袋模型:概念及python实现

简介: 词袋模型:概念及python实现

1. 基本概念


在对文本进行分类时,需要首先对文本进行向量会表示,常用到词袋模型。


词袋模型(Bow,Bag of Words)不考虑文本中词与词之间的上下文关系,仅仅只考虑所有词的权重(与词在文本中出现的频率有关),类似于将所有词语装进一个袋子里,每个词都是独立的,不含语义信息。


生成文本的词袋模型分为三步:


分词(tokenizing)

统计词频(counting)

特征标准化(normalizing)

词集模型(SoW,Set of Words)与词带模型类似,唯一的不同是仅考虑词是否在文本中出现,而不考虑词频。多数时候一般使用词袋模型。


比如语料库中有4个文本:


I come to China to travel

This is a car polupar in China

I love tea and Apple

The work is to write some papers in science


上述语料生成的词典共有21个单词:


‘a’,

‘and’,

‘apple’,

‘car’,

‘china’,

‘come’,

‘i’,

‘in’,

‘is’,

‘love’,

‘papers’,

‘polupar’,

‘science’,

‘some’,

‘tea’,

‘the’,

‘this’,

‘to’,

‘travel’,

‘work’,

‘write’


每个单词的One-Hot Representation如下:


image.png

上述文本的词袋模型表示如下:


image.png

词频归一化结果如下:

image.png

在大规模的文本处理中,由于特征的维度对应分词词汇表的大小,维度将会非常高,常使用Hash Trick的方法进行降维。

此外,词袋模型中的值也可以采用单词的TF-IDF值。


2. 代码实现


主要通过sklearn.feature_extraction.text中的CountVectorizer类实现。


CountVectorizer是常见的特征数值计算类(支持传入停止词),对于每个文本通过fit_transform方法计算每个单词在该文本中出现的频率,形成词频矩阵。

通过get_feature_names可查看所有文本关键字,通过toarray可查看到文本的词袋模型结果。


输入:列表,列表元素为字符串

输出:词频矩阵,矩阵元素a [ i ] [ j ] 表示j jj词在第i 个文本下的词频

scikit-learn的HashingVectorizer类实现了基于signed hash trick的算法。


代码如下:


from sklearn.feature_extraction.text import CountVectorizer  
corpus=["I come to China to travel", 
    "This is a car polupar in China",          
    "I love tea and Apple ",   
    "The work is to write some papers in science"] 
vectorizer=CountVectorizer()
print("词频统计:")
#输出4个文本的词频统计:左边的括号中的两个数字分别为(文本序号,词序号),右边数字为频次
print(vectorizer.fit_transform(corpus))
print("\n词袋模型:")
print(vectorizer.fit_transform(corpus).toarray())

输出如下:

20200705183616375.png

from sklearn.feature_extraction.text import HashingVectorizer 
vectorizerH=HashingVectorizer(n_features = 6,norm = None) #将19维词汇表哈希降维到6维
print("词频统计:")
print(vectorizerH.fit_transform(corpus))
print("\n词袋模型:")
print(vectorizerH.fit_transform(corpus).toarray())

输出如下:


20200705183719163.png



相关文章
|
2天前
|
机器学习/深度学习 TensorFlow API
Python深度学习基于Tensorflow(3)Tensorflow 构建模型
Python深度学习基于Tensorflow(3)Tensorflow 构建模型
11 2
|
5天前
|
机器学习/深度学习 自然语言处理 算法
Python遗传算法GA对长短期记忆LSTM深度学习模型超参数调优分析司机数据|附数据代码
Python遗传算法GA对长短期记忆LSTM深度学习模型超参数调优分析司机数据|附数据代码
|
11天前
|
机器学习/深度学习 数据采集 前端开发
【Python机器学习专栏】模型泛化能力与交叉验证
【4月更文挑战第30天】本文探讨了机器学习中模型泛化能力的重要性,它是衡量模型对未知数据预测能力的关键。过拟合和欠拟合影响泛化能力,而交叉验证是评估和提升泛化能力的有效工具。通过K折交叉验证等方法,可以发现并优化模型,如调整参数、选择合适模型、数据预处理、特征选择和集成学习。Python中可利用scikit-learn的cross_val_score函数进行交叉验证。
|
11天前
|
机器学习/深度学习 数据可视化 前端开发
【Python机器学习专栏】机器学习模型评估的实用方法
【4月更文挑战第30天】本文介绍了机器学习模型评估的关键方法,包括评估指标(如准确率、精确率、召回率、F1分数、MSE、RMSE、MAE及ROC曲线)和交叉验证技术(如K折交叉验证、留一交叉验证、自助法)。混淆矩阵提供了一种可视化分类模型性能的方式,而Python的scikit-learn库则方便实现这些评估。选择适合的指标和验证方法能有效优化模型性能。
|
11天前
|
机器学习/深度学习 算法 前端开发
【Python机器学习专栏】机器学习中的模型融合技术
【4月更文挑战第30天】模型融合,即集成学习,通过结合多个模型提升预测性能。常见方法包括:Bagging(如Random Forest)、Boosting(如AdaBoost、XGBoost)和Stacking。Python中可使用`scikit-learn`实现,例如BaggingClassifier示例。模型融合是机器学习中的强大工具,能提高整体性能并适应复杂问题。
|
11天前
|
机器学习/深度学习 Python
【Python 机器学习专栏】模型选择中的交叉验证与网格搜索
【4月更文挑战第30天】交叉验证和网格搜索是机器学习中优化模型的关键技术。交叉验证通过划分数据集进行多次评估,如K折和留一法,确保模型性能的稳定性。网格搜索遍历预定义参数组合,寻找最佳参数设置。两者结合能全面评估模型并避免过拟合。Python中可使用`sklearn`库实现这一过程,但需注意计算成本、过拟合风险及数据适应性。理解并熟练应用这些方法能提升模型性能和泛化能力。
|
11天前
|
机器学习/深度学习 数据可视化 TensorFlow
【Python 机器学习专栏】使用 TensorFlow 构建深度学习模型
【4月更文挑战第30天】本文介绍了如何使用 TensorFlow 构建深度学习模型。TensorFlow 是谷歌的开源深度学习框架,具备强大计算能力和灵活编程接口。构建模型涉及数据准备、模型定义、选择损失函数和优化器、训练、评估及模型保存部署。文中以全连接神经网络为例,展示了从数据预处理到模型训练和评估的完整流程。此外,还提到了 TensorFlow 的自动微分、模型可视化和分布式训练等高级特性。通过本文,读者可掌握 TensorFlow 基本用法,为构建高效深度学习模型打下基础。
|
11天前
|
算法 数据挖掘 Python
Python贝叶斯MCMC:Metropolis-Hastings、Gibbs抽样、分层模型、收敛性评估
Python贝叶斯MCMC:Metropolis-Hastings、Gibbs抽样、分层模型、收敛性评估
|
11天前
|
机器学习/深度学习 算法 数据挖掘
【Python 机器学习专栏】Python 中的线性回归模型详解
【4月更文挑战第30天】本文介绍了Python中的线性回归模型,包括基本原理、实现步骤和应用。线性回归假设因变量与自变量间存在线性关系,通过建立数学模型进行预测。实现过程涉及数据准备、模型构建、参数估计、评估和预测。常用的Python库有Scikit-learn和Statsmodels。线性回归简单易懂,广泛应用,但对异常值敏感且假设线性关系。其扩展形式如多元线性、多项式回归和正则化方法能适应不同场景。理解并运用线性回归有助于数据分析和预测。
|
11天前
|
Python
Python随机波动性SV模型:贝叶斯推断马尔可夫链蒙特卡洛MCMC分析英镑/美元汇率时间序列数据|数据分享
Python随机波动性SV模型:贝叶斯推断马尔可夫链蒙特卡洛MCMC分析英镑/美元汇率时间序列数据|数据分享