词向量表示和句向量、文章向量计算方法

article/2025/9/21 17:04:21

本文介绍一种计算句向量和文章向量的方法及参考代码,自然语言处理的第一步即是要进行文本的向量化,包括获得词向量,句向量或者文章向量,以便输入各种机器学习模型或者深度学习模型。

词向量

可以笼统的认为词向量是文本向量的基本单位,句向量、文章向量都可以由构成文章的词向量转化计算得到。
关于词的表示,比如one-hot编码,词袋模型,分布式编码等等。相关资料有很多,此处引用相关资料:

1 词的独热表示:One-hot Representation
采用稀疏方式 存储,简单易实现
灯泡:[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0]、灯管:[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0]
维度过大词汇鸿沟现象:任意两个词之间都是孤立的。光从这两个向量中看不出两个词是否有关系,哪怕”灯泡”和”灯管”这两个词是同义词也不行
2 词袋模型: 类似用词频等表示,比如tf-idf或textrank计算的权重来表示词,不会考虑单词的语义及它们在文档中的顺序
3 词的分布式表示:Distributed representation
传统的独热表示( one-hot representation)仅仅将词符号化,不包含任何语义信息
Distributed representation 最早由 Hinton在 1986 年提出。它是一种低维实数向量,这种向量一般长成这个样子: [0.792, −0.177, −0.107, 0.109, −0.542, …]
最大的贡献就是让相关或者相似的词,在距离上更接近了

句向量和文章向量计算方法

方法1:前面提到的词袋模型方式,可以用tf-idf直接生成句向量或文章向量

代码示例:直接用sklearn的TfidfVectorizer工具来获得所需向量

from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer()
# cutWordList是文章分词后得到的列表,tf_matrix即是得到的文章或者句子的向量
tf_matrix = vectorizer.fit_transform(cutWordList).toarray()

实际上是文章的每个词,计算得到tf-idf值,然后放到一个array里得到的向量,由此也可以用词的textrank权值,统一按由大到小的顺序放在一个array得到一篇文章的向量

方法2 根据前面提到的词嵌入模式得到词向量

基于词向量的固定表征:word2vec、fastText、glove。 基于词向量的动态表征:elmo、GPT、bert。
动态词向量相较于静态词向量,更加充分利用了上下文信息,所以可以解决一词多义的问题。在工程实践上其优越性也得到了证明(BERT 在多个 NLP 任务中也表现优异)。参考阅读:[embedding 技术实践总结]。(https://zhuanlan.zhihu.com/p/143763320)这块我的理解是网络在训练的时候,随机初始化词向量,然后将词向量作为网络参数来进行训练,故此成为动态词向量

可以用一些开源的静态词向量如glove训练的中文词向量来做,如下是一份预训练词向量文件预览:
在这里插入图片描述
实际是训练好的几万个常用词的词向量,这样一个文本文件。项目中直接加载进来使用即可。
代码示例:
如下是对词向量文件进行读取,获取词的词向量以便使用

def get_embeddings_index(embeddings_model_file):dir_path = os.path.dirname(os.path.abspath(__file__))#dir_path = os.path.dirname(dir_path)local_path = os.path.join(dir_path, embeddings_model_file)word_embeddings = {}count = 0with open(local_path, encoding='utf-8') as f:for line in f:count += 1if count > 1:values = line.split()word = values[0]try:embedding = np.asarray(values[1:], dtype=np.float64)except BaseException as e:#print(e)embedding = np.asarray(values[2:], dtype=np.float64)word_embeddings[word] = embeddingelse:print('词向量信息:%s' % line)return word_embeddings

接着就可以用词向量来构建句向量或者文章向量了,此处以句向量的构建为例

def get_sentence_vector(words_list,embedding_dim=300):'''获取内容的向量:param sentence: 句子:param embedding_dim:  向量维度:return: 一个句子的特征维度'''global embeddings_index#embeddings_index = get_all_sentences_vector_mul.embeddings_indexsent_matrix = np.zeros((len(words_list), embedding_dim),dtype = np.float64) #初始化空矩阵for i in range(len(words_list)):if words_list[i]:embedding_vector = embeddings_index.get(words_list[i])if embedding_vector is not None and len(embedding_vector)>=embedding_dim: #使用的词向量库 有的词长短不一致if embedding_vector.shape != embedding_dim:sent_matrix[i] = embedding_vector#字向量构造句向量,向量点乘,然后取范数,先是构造1x8的全1矩阵,与8x300的向量做点积,相当于每个词向量中对应元素相加(300列,每列一个词向量的浮点值),即词向量叠加组成句向量,除以该句向量的模,做个单位化d =  np.dot(np.ones((1,len(words_list)),dtype = np.float64),sent_matrix)norm= np.linalg.norm(d, axis=1, keepdims=True)   # 向量的2范数,相当于向量的莫vector = d/norm   #向量除以向量模,相当于单位化return vector[0]

得到句向量之后就可以进行各种操作了,比如进行聚类或者进行相似度计算

文章余弦相似度计算示例

可以直接看代码示例:一个计算余弦相似度的接口,传入两个句向量或者文章向量后,计算返回两个句子或者两篇文章的余弦相似度值。

def cos_sim(vector_a, vector_b):"""计算两个向量之间的余弦相似度:param vector_a: 向量 a:param vector_b: 向量 b:return: sim"""vector_a = np.mat(vector_a)vector_b = np.mat(vector_b)num = float(vector_a * vector_b.T)denom = np.linalg.norm(vector_a) * np.linalg.norm(vector_b)sim = num / denomreturn sim

其他

一些深度学习模型进行文本分类或者其他NLP任务如摘要提取,通常是动态计算文章向量,比如用bert+rnn等进行文本分类,因为Bert等模型对输入格式有要求,所以需要特殊处理来得到相应向量,输入模型。


http://chatgpt.dhexx.cn/article/frQlULtR.shtml

相关文章

词袋模型和词向量模型

在自然语言处理和文本分析的问题中,词袋(Bag of Words, BOW)和词向量(Word Embedding)是两种最常用的模型。更准确地说,词向量只能表征单个词,如果要表示文本,需要做一些额外的处理。…

中文词向量的训练

最近在做毕设,需要对中文进行向量化表示,现有的最全中文词向量预训练向量有:最全中文词向量 part 1:以上链接中的词向量介绍: 格式 预先训练好的向量文件是文本格式。每行包含一个单词和它的向量。每个值由空格分隔。第一行记录…

如何训练一个词向量

现在在NLP领域,词向量是一切自然语言处理的基础,有了词向量我们就可以进行数据分析,文本聚类分类的一系列操作了。接下来我们就开始学习如何训练词向量,之前我们有介绍关于 word2vec 的博文 word2vec算法理解和数学推导&#xff0…

词向量训练

词向量训练 一、 实验目的 掌握课堂所讲词向量的基本概念和训练方法。加强对pytorch、tensorflow等深度学习框架的使用能力。 二、 实验要求 任选课上讲的一种词向量模型进行实现即可,如是其他模型则请写明模型结构,作业压缩文件中也提供给大家相关的…

语言模型+词向量

文章目录 统计语言模型神经语言模型词向量(浅层) 统计语言模型 语言模型基本概念 弗莱德里克贾里尼克提出用数学的方法描述语言规律(语言模型) 语言模型基本思想: 用句子 S w 1 , w 2 , . . . , w n Sw_{1},w_{2},..…

学习笔记:深度学习(5)——词向量的相关概念

学习时间:2022.04.21 自然语言处理(Natural Language Processing,NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机…

深度学习之词向量

一、词向量 自上世纪90年代开始,特征空间模型就应用于分布式语言理解中,在当时许多模型用连续性的表征来表示词语,包括潜在语义分析LSA、隐含狄利克雷分布LDA主题模型。Bengio et al.在2003年首先提出了词向量的概念,当时是将其与…

自然语言处理——使用词向量(腾讯词向量)

向量化是使用一套统一的标准打分,比如填写表格:年龄、性别、性格、学历、经验、资产列表,并逐项打分,分数范围[-1,1],用一套分值代表一个人,就叫作向量化,虽然不能代表全部,但至少是…

词向量Word2Vec(深度细致分析)

本文以博客园刘建平Pinard对于word2vec的解释为基础,同时参考了其他相关博客的分析并加入了自己的理解,希望站在巨人的肩膀上进行一定的学习输出。至于本片文章的属性,个人认为是伪原创吧,有需要的同学可以自行转到相应的链接。 w…

一、词向量模型

因为计算机不能理解词语,所以我们需要用词向量表示一个词。 词向量有一个发展历程:从one-hot到word embedding。 1 one-hot 设词典的大小为n(词典中有n个词),假如某个词在词典中的位置为k,则设立一个n维向…

词向量算法

https://www.cnblogs.com/the-wolf-sky/articles/10192363.html https://blog.csdn.net/weixin_37947156/article/details/83146141 基于神经网络的表示一般称为词向量、词嵌入(word embdding)或分布式表示。 神经网络的词向量和其他分布式类似,都基于分布式表达…

词向量(Word Embedding)

一、词的表示 在自然语言处理任务中,首先需要考虑词如何在计算机中表示。通常,有两种表示方式:one-hot representation和distribution representation。简而言之,词向量技术是将词转化成为稠密向量,并且对于相似的词&…

二、词向量

目录 一、什么是词向量 二、词向量的离散表示 1、one-hot编码 2、 Bag of Words表示 3、TF-IDF表示 4、 Bi-gram和N-gram 5、离散表示的问题: 三、词的分布式表示(Distributed representation) 1、Skip-Gram模型 2、代码 一、什么是…

【NLP】词向量

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

第四章(1):词向量定义与意义

第四章(1):词向量定义与意义 目录 第四章(1):词向量定义与意义前言1. 词的表示1.1 离散表示1.1.1 One-Hot独热编码1.1.2 ngram特征表示1.2 分布式表示2. 意义前言 在自然语言处理的领域中,每个单词都可以被表示为一个向量,这些向量叫做“词向量”。换句话说,每个单词…

什么是词向量?(NPL入门)

什么是词向量? 我们组实训选择的主题是与自然语言识别相关的,那么就不得不学习和了解一下自然语言识别中非常重要和基础的。于是我对于自己对词向量的学习进行了以下的总结。 简而言之,词向量技术是将词转化成为稠密向量,并且对…

词向量表示

目录 1、语言表示 1.1、分布假说 1.2、语言模型 2、词向量表示 2.1、词向量表示之one-hot 2.2、词带模型之 (Bag of Words) 2.3、词的分布式表示 2.3.1 基于矩阵的分布式表示 2.3.2 基于聚类的分布式表示 2.4基于神经网络的分布式表示 2.4.1、…

词向量简介

最近深度学习技术有了突飞猛进的发展,为语音识别、图像识别、自然语言处理(NLP)提供了强大的工具,为这些领域今后的快速发展提供了新的契机。 深度学习为自然语言处理带来的最令人兴奋的突破是词向量(word embedding&…

词向量

词向量是自然语言处理中重要的基础,有利于我们对文本、情感、词义等等方向进行分析,主要是将词转化为稠密向量,从而使得相似的词,其词向量也相近。 一、词向量的表示 词向量的表示通常有两种方式,一种是离散的&#x…

【深度学习】NLP基础--词向量(从One-hot到Word2Vec)

1.什么是词向量 在自然语言处理中,面临的首要问题是如何让模型认识我们的文本信息,比如向模型中输入‘我爱北京天安门’,那模型是如何认识文本的?词,是自然语言处理中基本单位,将数据输入到模型中&#xff…