word2vec&doc2vec词向量模型

网上看到一篇写的很好的文章, word2vec&doc2vec词向量模型

原文链接:https://www.cnblogs.com/maybe2030/p/5427148.html#top

### Word2Vec 结合 TF-IDF 在自然语言处理中的应用 在自然语言处理领域,Word2Vec 和 TF-IDF 的结合可以提供一种强大的文本表示方式。这种组合不仅能够捕捉词语之间的语义关系,还能反映词语的重要性。 #### 优势互补 - **Word2Vec** 提供了基于上下文的词向量表示,使得相似含义的词在向量空间中距离较近[^1]。 - **TF-IDF** 则强调了词语在整个文档集合中的重要性,特别是那些既能频繁出现在特定文档内又不常见于其他文档的词[^2]。 当两者结合起来时,可以通过加权的方式增强对关键术语的理解力,从而改进诸如情感分析、主题建模等任务的效果。 #### 实现方法概述 为了实现这一目标,通常会先训练一个标准的 Word2Vec 模型获取每个单词对应的低维稠密向量;接着计算各个词汇项针对不同文件下的 TF-IDF 权重值作为其权重系数;最后利用这些权重调整原始 word embedding 向量得到最终优化后的嵌入表达形式。 以下是 Python 中使用 Gensim 库的一个简单例子: ```python from gensim.models import TfidfModel, Word2Vec from gensim.corpora.dictionary import Dictionary import numpy as np # 假设已有预处理过的句子列表 corpus dictionary = Dictionary(corpus) corpus_bow = [dictionary.doc2bow(text) for text in corpus] tfidf_model = TfidfModel(corpus_bow) def get_weighted_word_vectors(sentences): weighted_vecs = [] wv_model = Word2Vec(sentences=sentences, vector_size=100, window=5, min_count=1, workers=4) for sentence in sentences: sent_tfidf_weights = dict(tfidf_model[dictionary.doc2bow(sentence)]) vec_sum = np.zeros(wv_model.vector_size) weight_sum = 0 for token in set(sentence): index = dictionary.token2id.get(token) if index is not None and index in sent_tfidf_weights: tfidf_wt = sent_tfidf_weights[index] try: vec_sum += (wv_model.wv[token]*tfidf_wt).reshape(-1,) weight_sum += abs(tfidf_wt) except KeyError: continue if weight_sum != 0: normalized_vector = vec_sum / weight_sum else: normalized_vector = vec_sum weighted_vecs.append(normalized_vector.tolist()) return weighted_vecs ``` 上述代码片段展示了如何创建并应用 TF-IDF 加权机制至已有的 Word2Vec embeddings 上面。这里需要注意的是,在实际操作过程中可能还需要考虑更多细节问题比如停用词过滤、分词策略的选择等等[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值