【NLP】词袋模型(bag of words model)和词嵌入模型(word embedding model)

这篇具有很好参考价值的文章主要介绍了【NLP】词袋模型(bag of words model)和词嵌入模型(word embedding model)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文作为入门级教程,介绍了词袋模型(bag of words model)和词向量模型(word embedding model)的基本概念。

先来初步理解一个概念和一个操作:
一个概念:词袋:一张由训练语料得到的词汇表(词典)
一个操作:在给出一篇文本后,需要把文本转换(编码)成数值,才能汇编成词典。用数值表示文本的方法有很多,例如最常见的One-Hot表示法,此外还有TF表示法、TF-IDF表示法。

1 词袋模型和编码方法

1.1 文本向量化

文本向量化就是指用数值向量来表示文本的语义,即,把人类可读的文本转化成机器可读形式。

如何转化成机器可读的形式?这里用到了信息检索领域的词袋模型,词袋模型在部分保留文本语义的前提下对文本进行向量化表示。

1.2 词袋及编码方法

我们先来看2个例句:

Jane wants to go to Shenzhen.
Bob  wants to go to Shanghai.

将所有词语装进一个袋子里,不考虑其词法和语序的问题,即每个词语都是独立的。例如上面2个例句,就可以构成一个词袋,袋子里包括Jane、wants、to、go、Shenzhen、Bob、Shanghai。假设建立一个数组(或词典)用于映射匹配:

[Jane, wants, to, go, Shenzhen, Bob, Shanghai]

那么上面两个例句就可以用以下两个向量表示,对应的下标与映射数组的下标相匹配,其值为该词语出现的次数

# 词典的key值:[Jane, wants, to, go, Shenzhen, Bob, Shanghai]
1 [1,1,2,1,1,0,0]
2 [0,1,2,1,0,1,1]

这两个词频向量就是词袋模型,可以很明显的看到语序关系已经完全丢失。

1 one-hot编码

步骤如下:
假设我有一堆需要编码的文本:
【NLP】词袋模型(bag of words model)和词嵌入模型(word embedding model)
1.构建词袋:
这里词语的顺序可以随机:
【NLP】词袋模型(bag of words model)和词嵌入模型(word embedding model)
2. 对于每一个单词,我们观察该词语是否出现,出现就为1,没有出现就是0,得到文本向量,规则如下:
【NLP】词袋模型(bag of words model)和词嵌入模型(word embedding model)

【NLP】词袋模型(bag of words model)和词嵌入模型(word embedding model)

2 TF编码

TF表示法的数值计算规则为:词语序列中出现的词语其数值为词语在所在文本中的频次,词语序列中未出现的词语其数值为0。用数学式子表达为:
【NLP】词袋模型(bag of words model)和词嵌入模型(word embedding model)
同样地:
【NLP】词袋模型(bag of words model)和词嵌入模型(word embedding model)
可以发现,相比one-hot,tf还体现了词语出现的频次。

3 TF-IDF表示法

TF-IDF表示法的数值计算规则为:词语序列中出现的词语其数值为词语在所在文本中的频次乘以词语的逆文档频率,词语序列中未出现的词语其数值为0。用数学式子表达为:
【NLP】词袋模型(bag of words model)和词嵌入模型(word embedding model)
同样地:
【NLP】词袋模型(bag of words model)和词嵌入模型(word embedding model)【NLP】词袋模型(bag of words model)和词嵌入模型(word embedding model)词袋模型的TF-IDF表示法除了考虑都有哪些词在文本中出现外,还考虑了词语出现的频次以及词语在所有文本上的频率倒数。用出现词语的频次来突出文本主题,用出现词语的逆文档频率来突出文档的独特性,进而表示文本的语义。

2 词嵌入模型

相比不考虑语序的词袋模型,词嵌入模型是考虑词语位置关系的一种模型。通过大量语料的训练,将每一个词语映射到高维度(几千、几万维以上)的向量当中,通过求余弦的方式,可以判断两个词语之间的关系,例如例句中的Jane和Bob在词向量模型中,他们的余弦值可能就接近1,因为这两个都是人名,Shenzhen和Bob的余弦值可能就接近0,因为一个是人名一个是地名。

现在常用word2vec构成词嵌入模型,它的底层采用基于CBOW和Skip-Gram算法的神经网络模型。

2.1 CBOW模型

CBOW模型的训练输入是某一个特征词的上下文相关的词对应的词向量,而输出就是这特定的一个词的词向量。比如上面的第一句话,将上下文大小取值为2,特定的这个词是"go",也就是我们需要的输出词向量,上下文对应的词有4个,前后各2个,这4个词是我们模型的输入。由于CBOW使用的是词袋模型,因此这4个词都是平等的,也就是不考虑他们和我们关注的词之间的距离大小,只要在我们上下文之内即可。

这样我们这个CBOW的例子里,我们的输入是4个词向量,输出是所有词的softmax概率(训练的目标是期望训练样本特定词对应的softmax概率最大),对应的CBOW神经网络模型输入层有4个神经元,输出层有词汇表大小个神经元。隐藏层的神经元个数我们可以自己指定。这样当我们有新的需求,要求出某4个词对应的最可能的输出中心词时,我们可以通过一次DNN前向传播算法并通过softmax激活函数找到概率最大的词对应的神经元即可。

2.2 Skip-Gram模型

Skip-Gram模型和CBOW的思路是反着来的,即输入是特定的一个词的词向量,而输出是特定词对应的上下文词向量。还是上面的例子,我们的上下文大小取值为2, 特定的这个词"go"是我们的输入,而这4个上下文词是我们的输出。

这样我们这个Skip-Gram的例子里,我们的输入是特定词, 输出是softmax概率排前4的4个词,对应的Skip-Gram神经网络模型输入层有1个神经元,输出层有词汇表大小(4)个神经元。隐藏层的神经元个数我们可以自己指定。这样当我们有新的需求,要求出某1个词对应的最可能的4个上下文词时,我们可以通过一次DNN前向传播算法得到概率大小排前4的softmax概率对应的神经元所对应的词即可。

词嵌入模型突出特点:在词嵌入模型中,词向量与词向量之间有这非常特殊的特性。例如现在存在国王、男生、女人、皇后四个词向量,那么一个完善的词向量模型,就存在“国王-男人+女人=皇后”这样的关系。

两种模型对比

词袋模的One-Hot表示法、TF表示法、TF-IDF表示法的数值计算规则都没有考虑词语之间的共现关系。比如“的”字的后边只能接名词性词语,“地”字的后边只能接动词性词语。显然词袋模型无法表示词语之间的共现关系,也就是说词袋模型认为一个词出现的可能性与其他词出现的可能性无关,词语的出现是相互独立的

词袋模型最大的缺陷是向量的维度高,维度高造成了后续相似度或者文本分类的计算量非常大,同时数据稀疏也导致了相似度区分不明显。由于词袋模型表示的文本向量的每个维度都代表一个词语,因此可以用聚类后簇中心向量的具有较大值的维度对应的词语来作为簇的关键词。.

词嵌入模型是浅层神经网络的副产品,在用浅层神经网络做文本分类时,发现在得到分类结果的同时,输入矩阵刚好可以用来表示词语,由于词语是用上下文来表达的,因此在一定程度上反映了词语的语义,但这并不是机器真正明白了词语的意义,而只是相似的词语之间向量相似度大而已。

它的优点
1.不需要人工参与可以得到,大厂推出了各种词向量库,词汇量一般都是百万级。
2.可以表达一个词语的向量,这是前几年办不到的。
3. 文本的表示维度降下来了,一般只需100到300维之间。

缺点也很明显:
1.强烈依赖分词特别是未登录词识别技术,也就是说新出现的词没有对应向量。2.不是真正明白词语意思,对一词多义无能为力,只能表达最通用的语义。
3.有些词在语义上没有近义关系,但因为经常出现在相同的上下文中,向量的相似度也很大。有些概念抽象的词(特别时文本类别名称词),按照相似度检索到的近义词之间不具有语义相关性。
5. 每个维度不再对应一个特征词语,后续排查分类badcase时不方便。

3 示例

这里需要用到sklearn包。Sklearn的特征抽取模块可以从原始数据中抽取特征。目前该模块提供了图像和文本特征抽取类。文本的特征抽取类可以从原始文本中抽取出词语特征,特征数据格式满足所有机器学习算法对输入数据格式的要求。请注意特征抽取与特征选择的区别。特征抽取是将文本数据转换成机器学习模型可读的形式(即本文所说的文本向量化)而特征选择是一种应用于数值特征的机器学习技术。

用sklearn对下边的文本进行词袋模型向量化表示:

完整代码:

from sklearn.feature_extraction.text import CountVectorizer

texts = ['Chinese Bejing Chinese',
         'Chinese Chinese Shanghai',
         'Chinese Macao',
         'Tokyo Japan Chinese']

# One-Hot 编码进行文本向量化
cv = CountVectorizer(binary=True)
document_vec = cv.fit_transform(texts)
# 查看词袋和对应向量值
print(cv.get_feature_names())
print(document_vec.toarray())

# TF 编码进行文本向量化 CountVectorizer()默认就是TF编码法
cv = CountVectorizer()
document_vec = cv.fit_transform(texts)
print(document_vec.toarray())

# TF-IDF(未平滑)编码进行文本向量化
from sklearn.feature_extraction.text import TfidfVectorizer
tv = TfidfVectorizer(use_idf=True, smooth_idf=False, norm=None)
tv_fit = tv.fit_transform(texts)
print(tv.get_feature_names())
print(tv_fit.toarray())

# TF-IDF(平滑)编码进行文本向量化
tv = TfidfVectorizer(use_idf=True, smooth_idf=True, norm=None)
tv_fit = tv.fit_transform(texts)
print(tv.get_feature_names())
print(tv_fit.toarray())

结果:
【NLP】词袋模型(bag of words model)和词嵌入模型(word embedding model)
【NLP】词袋模型(bag of words model)和词嵌入模型(word embedding model)

【NLP】词袋模型(bag of words model)和词嵌入模型(word embedding model)
【NLP】词袋模型(bag of words model)和词嵌入模型(word embedding model)

参考:
https://www.cnblogs.com/chenyusheng0803/p/10978883.html

https://zhuanlan.zhihu.com/p/70314114文章来源地址https://www.toymoban.com/news/detail-426444.html

到了这里,关于【NLP】词袋模型(bag of words model)和词嵌入模型(word embedding model)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2.自然语言处理NLP:词映射为向量——词嵌入(word embedding)

    1. 什么是词嵌入(word2vec) : 把词映射为向量(实数域)的技术 2. 为什么不采用one-hot向量: one-hot词向量无法准确表达不同词之间的相似度,eg:余弦相似度,表示夹角之间的余弦值,无法表达不同词之间的相似度。 3. word2vec主要包含哪两个模型 跳字模型: 基于某个词生成

    2024年02月06日
    浏览(50)
  • NLP-词袋模型

    词袋模型是自然语言处理中常用的一种文本表示方法,用于将文本转换为数值型向量,以便于计算机进行处理和分析。在词袋模型中,文本被看作是一个由词语组成的集合,而每个词语都是独立的,不考虑它们在文本中的顺序和语境关系。因此,词袋模型将文本表示为一个固

    2024年02月19日
    浏览(33)
  • 【NLP】如何实现快速加载gensim word2vec的预训练的词向量模型

    通过以下代码,实现加载word2vec词向量,每次加载都是几分钟,效率特别低。 (1)方案一 第一次加载后保存为能够快速加载的文件,第二次加载就能快读读取。 (2)方案二 第一次加载后,只将使用到的词向量以表格的形式保存到本地,第二次读取就不需要加载全部word2ve

    2024年03月14日
    浏览(45)
  • NLP自然语言处理理论解释(单词分布式表示,共现矩阵,word2vec,CBOW模型详解)

    自然语言处理:一种能让计算机理解人类语言的技术,换而言之自然语言处理的目标就是让计算机理解人说的话, 单词的含义 让计算机理解语言,首先要理解我们的单词,有三种方法,1.基于同义词词典,2.基于计数方法,3.基于推理的方法(word2vec)。 单词分布式表示 大家都

    2024年02月03日
    浏览(48)
  • NLP——分布式语义 Distributional Semantics:Word Vectors;Word2Vec

    传统的词汇数据库(Lexical Database),如WordNet,是自然语言处理中一种常见的资源,用于提供词汇的定义、词义关系(如同义词、反义词)和词汇层次结构(如上下位词)。虽然这些资源在许多任务中都非常有用,但它们也存在一些限制,这促使了分布式语义的发展。以下是

    2024年02月08日
    浏览(46)
  • 【NLP】Word2Vec原理和认识

            Word2Vec是NLP领域的最新突破。Tomas Mikolov是捷克计算机科学家,目前是CIIRC(捷克信息学,机器人和控制论研究所)的研究员,是word2vec研究和实施的主要贡献者之一。词嵌入是解决NLP中许多问题不可或缺的一部分。它们描绘了人类如何向机器理解语言。您可以将它

    2024年02月12日
    浏览(36)
  • NLP实战:使用Word2vec实现文本分类

    目录 一、数据预处理 1、加载数据 2. 构建词典 3.生成数据批次和迭代器 二、模型构建 1.搭建模型 2.初始化模型 3.定义训练与评估函数 三、训练模型 1. 拆分数据集并运行模型 2. 测试指定数据 🍨 本文为[🔗365天深度学习训练营]内部限免文章(版权归 *K同学啊* 所有) 🍖 作者

    2024年02月10日
    浏览(42)
  • 【NLP】Word2vec概念和演进史

            “万物都有一种模式,它是我们宇宙的一部分。它具有对称、优雅和优雅——这些品质你总能在真正的艺术家捕捉到的作品中找到。” ~ 沙丘 (1965)         对于word2vec,它不是一个或一种算法,而是一系列思想和算法的综合。本文通过有限篇幅,试图穿越思想跨

    2024年02月11日
    浏览(43)
  • LeetCode --- 1880. Check if Word Equals Summation of Two Words 解题报告

    The  letter value  of a letter is its position in the alphabet  starting from 0  (i.e.  \\\'a\\\' - 0 ,  \\\'b\\\' - 1 ,  \\\'c\\\' - 2 , etc.). The  numerical value  of some string of lowercase English letters  s  is the  concatenation  of the  letter values  of each letter in  s , which is then  converted  into an integer. For example, if  s = \\\"acb\\\" , we

    2024年02月13日
    浏览(42)
  • B. Ten Words of Wisdom

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output In the game show \\\"Ten Words of Wisdom\\\", there are n� participants numbered from 11 to n�, each of whom submits one response. The i�-th response is ai�� words long and has quality bi��. No two responses have the same quality, and

    2024年02月13日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包