wordvector to sentence vector

wordvector已经通过word2vec训练出来了,可是如何通过WV得到SV(Sentence Vector)?

 

思路1:

直接将句子的向量叠加取平均:效果很不好,每个词没有考虑权重,获取的向量会平均的靠近每一个词

 

思路2:

方法同上,可是使用关键词算法,对不同的词给与不同的权重:还没有测试,可是我一直对于短文本,关键词的常见算法很不放心。比如TF-IDF的权重,本身也只是一个假设,并不是真的意义上可以说明这个词很关键,并量化。只有到其他方法都不行,我才会考虑这个方法。

 

思路3:

使用gensim的doc2vec,也是参照了Mikolov2014年的文章“Distributed Representations of Sentences and Documents”.

花了一个早上学会了使用这个包,可是这个的实现实在是很难用,有关的使用案例又非常少,而且我也没有足够的时间去学习这篇文章,最后测试的结果并不好,所以此方法暂且按下不表。

 

思路4:

知乎上知友提供了一个思路,是一个浙大数学系的人在BAT工作的时候,他们探讨并最后确定实践的方案,据说效果非常好。

链接稍后附上,原理是:

我们word2vec训练出来的模型,构成了一个比如10000词的词典,而在词袋模型中,我们通常是用一个词是否出现、或者出现几次,构成一个稀疏矩阵。

如果一个句子是:我 爱 北京 天安门

在word2vec训练下,与‘我’相似的的TOPN个词,分别有相似度对应,把这几个词的相似度,放到这个稀疏矩阵对应的位置上。相当于,我们从word2vec训练后,得到的信息A,把这个信息放到稀疏矩阵里。

 

这个思路其实非常巧妙,实现也容易。实现之后,对于520个问题的相似度(采用余弦相似度)匹配,发现TOP250对,都是非常准确的。相似度基本在0.3以上(相似度1为完全相同)的基本是很相似的问句。   (因为做了one hot映射,所以相似度-不同的词数的曲线,会前几个骤减,)

到了这部,我们已经可以结合word2vec和one-hot映射得到句子向量,并根据句子向量得到相似度,可是我们依然无法解决长短句难以相似的问题。

首先,一个很长的句子,如果包含了大量的信息,明显是无法直接和短句子进行相似度匹配的,所以我们需要对特征进行提取。

 

改进思路:加入句法分析,使用分析得到的标签提取关键词,如果这样提取的效果不好,最后还是得尝试使用关键词算法。

 

转载于:https://www.cnblogs.com/yjybupt/p/9904831.html

### 密集向量在机器学习和自然语言处理中的应用 密集向量(Dense Vector),也称为稠密向量,在机器学习和自然语言处理领域扮演着重要角色。这些向量的特点在于它们几乎所有的元素都是非零值,这与稀疏向量形成对比。 #### 特征表示 在自然语言处理中,词向量作为一种将词语映射为实数向量的方法被广泛应用[^2]。这种低维度的向量能够捕捉到词语之间的语义关系,从而让计算机更高效地理解和处理文本数据。例如,“国王”减去“男人”,再加上“女人”的操作可能会得到接近于“女王”的向量表达形式。 对于整个文档或句子来说,也可以通过平均其组成单词对应的词向量来获得一个固定长度的特征向量作为该文本片段的整体表征。这种方法不仅适用于简单的分类任务,还可以扩展至更为复杂的上下文理解场景。 #### 应用实例 考虑一个情感分析的任务,给定一段评论文字,目标是判断这段话的情感倾向——正面还是负面。利用预训练好的词嵌入模型(如Word2Vec、GloVe等),可以先获取每个词汇项所对应的位置坐标;接着计算整句话里所有位置坐标的均值以构建最终输入给下游预测算法使用的密集型特征矩阵: ```python import numpy as np def get_sentence_vector(sentence, word_vectors): words = sentence.split() vectors = [word_vectors[word] for word in words if word in word_vectors] if not vectors: return None avg_vector = np.mean(vectors, axis=0) return avg_vector.tolist() # 假设我们有一个预先加载好并存储在一个字典里的词向量集合`pretrained_word_vectors` sentence = "I love this product!" vector_representation_of_the_sentence = get_sentence_vector(sentence, pretrained_word_vectors) print(vector_representation_of_the_sentence[:10]) # 打印前十个分量查看部分结果 ``` 上述代码展示了如何基于已有的词向量资源快速转换任意字符串成可供后续建模环节消费的形式化描述方式之一种实现思路。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值