gensim提取一个句子的关键词_gensim训练词向量后,提取每个词的词向量

本文介绍了如何使用gensim训练词向量模型,展示了加载、相似度分析和内部结构的探索,包括词列表、词向量矩阵和向量获取方法。

 

本文链接:https://blog.youkuaiyun.com/weixin_39677419/article/details/114170729

gensim在NLP中使用非常方便,几行代码就可以训练处一个词向量,本文记录gensim训练词向量的过程,以及对训练得到的词向量文件进行读取,分析等过程。

以下是使用gensim训练词向量的代码。

gensim.models Word2Vec

gensim.models.word2vec LineSentence

sentences = LineSentence()

model = Word2Vec(sentences====)

model.save()简单的几行代码,规定了词向量尺寸,滑窗等参数,就得到了一个词向量文件“gensim_128”,

接下来我们读取这个“gensim_128”词向量文件gensim.models Word2Vec

model = Word2Vec.load()得到model后,就可以做一些相关性比较了,gensim已经高度集成,使用起来也非常方便。gensim.models Word2Vec

model = Word2Vec.load()

items = model.wv.most_similar()

iitem (items):

(iitem[]item[])

(* )

items = model.wv.most_similar(=[]=[])

iitem (items):

(iitem[]item[])

(* )

(model.wv.doesnt_match([]))

(* )

(model.wv.similarity())这和我想要的还有点不一样,虽然使用起来方便,但是model内部到底有些什么?128维的词向量,到底是什么样子的?我能不能直接获得这些向量,从而编写一些算法做一些特定的处理。

其实,除了查看官方文档,我通常还会用debug模式,查看变量内部到底由什么组成,进而熟悉它的功能,必要的时候,还可以查看源码,更加了解内部的过程。15f63eb351316bd4cf88f25bd8bb5c50.png红色框内的变量就是读取的model的全部信息通过debug查看,可以看到model.wv.index2word对应的是词列表model.wv.index2word1d536eb79877071e5250a627dbe47aa7.png词列表通过debug查看,可以看到model.wv.vectors对应的是词向量(model.wv.vectors.shape)

(model.wv.vectors)0f6a4700d8c6fc728f23b28c9a890178.png词向量词向量是一个(687674, 128)的二维矩阵,这和我们之前训练词向量时,设置的size=128是一致的,而687674是指该词向量模型中,含有687674个不重复的词。

我们已经获取了词向量,词向量对应的单词顺序,和上面model.wv.index2word对应的词列表顺序是一致的。

我们可以通过下面的方式,抽取特定单词的词向量。word = vec = model.wv.vectors[model.wv.vocab[word].index]

(vec.shape)

(vec)fff682e51cec0d1c571819a3cd02d84a.png抽取词向量获取了词向量后,就可以编写算法完成后面的过程啦。

在Python中,预处理TREC_data_medical数据集通常涉及以下几个步骤: 1. **数据加载**: 使用`pandas`库加载CSV文件,如果文件很大可以考虑分块读取。 ```python import pandas as pd chunksize = 10000 # 根据内存大小调整 data_chunks = [] for chunk in pd.read_csv('trec_data_medical.csv', chunksize=chunksize): data_chunks.append(chunk) ``` 2. **清理文本**: 使用`nltk`、`re`等库去除停用、标点符号,转换为小写。 ```python import nltk from nltk.corpus import stopwords nltk.download('stopwords') stop_words = set(stopwords.words('english')) def preprocess_text(text): text = text.lower() text = re.sub(r'\d+', '', text) # 移除数字 words = [word for word in nltk.word_tokenize(text) if word not in stop_words] return ' '.join(words) # 对所有数据行应用预处理函数 processed_data = [ preprocess_text(row['text']) for chunk in data_chunks for row in chunk ] ``` 3. **构建语料库**: 将预处理后的文本创建成`gensim`能接受的文档对象。 ```python from gensim.corpora import Dictionary dictionary = Dictionary(processed_data) documents = [dictionary.doc2bow(doc.split()) for doc in processed_data] ``` 4. **训练词向量模型**: 使用`gensim`的`Word2Vec`模型进行训练。 ```python from gensim.models import Word2Vec model = Word2Vec( documents, vector_size=50, # 50维词向量 window=5, # 窗口大小 min_count=1, # 要出现至少一次的才会被保留 workers=4, # 并行计算 epochs=5 # 训练轮数 ) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值