python初步实现word2vec

一、前言

一开始看到word2vec环境的安装还挺复杂的,安了半天Cygwin也没太搞懂。后来突然发现,我为什么要去安c语言版本的呢,我应该去用python版本的,然后就发现了gensim,安装个gensim的包就可以用word2vec了,不过gensim只实现了word2vec里面的skip-gram模型。若要用到其他模型,就需要去研究其他语言的word2vec了。

 

二、语料准备

有了gensim包之后,看了网上很多教程都是直接传入一个txt文件,但是这个txt文件长啥样,是什么样的数据格式呢,很多博客都没有说明,也没有提供可以下载的txt文件作为例子。进一步理解之后发现这个txt是一个包含巨多文本的分好词的文件。如下图所示,是我自己训练的一个语料,我选取了自己之前用爬虫抓取的7000条新闻当做语料并进行分词。注意,词与词之间一定要用空格:


 


这里分词使用的是结巴分词。

这部分代码如下:

import jieba
f1 =open("fenci.txt")
f2 =open("fenci_result.txt", 'a')
lines =f1.readlines()  # 读取全部内容
for line in lines:
    line.replace('\t', '').replace('\n', '').replace(' ','')
    seg_list = jieba.cut(line, cut_all=False)
    f2.write(" ".join(seg_list))
 
f1.close()
f2.close()


还要注意的一点就是语料中的文本一定要多,看网上随便一个语料都是好几个G,而且一开始我就使用了一条新闻当成语料库,结果很不好,输出都是0。然后我就用了7000条新闻作为语料库,分词完之后得到的fenci_result.txt是20M,虽然也不大,但是已经可以得到初步结果了。

 

三、使用gensim的word2vec训练模型

相关代码如下:

from gensim.modelsimport word2vec
import logging
 
 
# 主程序
logging.basicConfig(format='%(asctime)s:%(levelname)s: %(message)s', level=logging.INFO)
sentences =word2vec.Text8Corpus(u"fenci_result.txt")  # 加载语料
model =word2vec.Word2Vec(sentences, size=200)  #训练skip-gram模型,默认window=5
 
print model
# 计算两个词的相似度/相关程度
try:
 
### Word2Vec 的自然语言处理使用方法 #### 1. 安装必要的库 为了使用 Word2Vec 进行自然语言处理,首先需要安装一些基本的 Python 库。常用的有 `gensim` 和 `nltk`。 ```bash pip install gensim nltk ``` #### 2. 准备数据集 Word2Vec 需要大量的文本数据来进行训练。可以从互联网获取公开的数据集或者准备自己的语料库。确保数据已经过预处理,比如去除停用词、标点符号等[^3]。 #### 3. 加载并预处理文本数据 加载文本文件到内存中,并对其进行分词和其他形式的清理工作: ```python import nltk from nltk.corpus import stopwords from nltk.tokenize import word_tokenize # 下载所需资源 nltk.download('punkt') nltk.download('stopwords') def preprocess(text): stop_words = set(stopwords.words('english')) tokens = word_tokenize(text.lower()) filtered_tokens = [token for token in tokens if token.isalnum() and token not in stop_words] return filtered_tokens ``` #### 4. 训练 Word2Vec 模型 利用 Gensim 提供的功能快速构建一个简单的 Word2Vec 模型实例: ```python from gensim.models import Word2Vec sentences = [["cat", "say", "meow"], ["dog", "bark"]] # 替换成实际经过预处理后的句子列表 model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4) # 获取某个单词对应的向量表示 vector = model.wv['cat'] print(vector) ``` 这里设置了几个重要参数: - `vector_size`: 表示每个词语嵌入空间中的维度数; - `window`: 上下文窗口宽度; - `min_count`: 忽略总频率低于此阈值的所有单词; - `workers`: 并行化程度,在多核 CPU 上提高速度[^2]。 #### 5. 测试与评估模型性能 完成上述步骤之后就可以测试所建立起来的语言模型了。可以通过查找最接近给定词汇的相关项来验证其有效性: ```python similar_words = model.wv.most_similar('king', topn=5) for word, score in similar_words: print(f"{word}: {score}") ``` 这会返回一系列按相似度排序的结果,帮助理解模型捕捉到了哪些语义关系。 #### 6. 调整超参优化表现 如果发现初步实验结果不够理想,则可以根据具体应用场景调整更多高级选项,如改变负采样数量(`negative`)、尝试不同的架构(CBOW vs Skip-Gram)。
评论 44
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值