gensim库word2vec使⽤
下载gensim库
pip install gensim -i pypi.douban/simple
读取训练数据并使⽤jieba分词,可以准备⾃⼰想要训练的语料,
import os
import jieba
# 读取训练数据
pos_file_list = os.listdir('data/pos')
neg_file_list = os.listdir('data/neg')
pos_file_list = [f'data/pos/{x}' for x in pos_file_list]
neg_file_list = [f'data/neg/{x}' for x in neg_file_list]
pos_neg_file_list = pos_file_list + neg_file_list
# 分词
for file in pos_neg_file_list:
with open(file, 'r', encoding='utf-8') as f:
text = f.read().strip() # 去读⽂件,并去除空格
text_cut = jieba.cut(text) # 使⽤jieba进⾏分词
result = ' '.join(text_cut) # 把分词结果⽤空格组成字符串
with open('', 'a', encoding='utf-8') as fw:
fw.write(result) # 把分好的词写⼊到新的⽂件⾥⾯
pass
pass
pass
准备好分词后的⽂件,在⼀般的NLP处理中,会需要去停⽤词。由于word2vec的算法依赖于上下⽂⽂,⽽上下⽂有可能就是停⽤词。因此对于word2vec,我们可以不⽤去停⽤词
现在我们可以直接读分词后的⽂件到内存。这⾥使⽤了word2vec提供的LineSentence类来读⽂件,然后套⽤word2vec的模型
读取分好的词,进⾏训练
dels import word2vec
sentences = word2vec.LineSentence('')
model = word2vec.Word2Vec(sentences, hs=1, min_count=1, window=3, size=100)
保存模型
model.save('model') # 保存模型
model = word2vec.Word2Vec.load('model') # 加载模型
⽤途
出某⼀个词向量最相近的词集合
for val in model.wv.similar_by_word("酒店", topn=10):
print(val[0], val[1])
pass
查看两个词的相近程度
print(model.wv.similarity('酒店', '宾馆'))
出不同类的词
word_list = ['宾馆', '酒店', '饭店', '服务']
print(model.wv.doesnt_match(word_list))
参数解释:
⽤gensim函数库训练Word2Vec模型有很多配置参数
max_vocab_size=None,sample=0.001,seed=1,workers=3,min_alpha=0.0001,sg=0,hs=0,negative=5,
cbow_mean=1,hashfxn=,iter=5,null_word=0,trim_rule=None, sorted_vocab=1,batch_words=10000)
参数:
sentences:可以是⼀个list,对于⼤语料集,建议使⽤BrownCorpus,Text8Corpus或LineSentence构建。
sg:⽤于设置训练算法,默认为0,对应CBOW算法;sg=1则采⽤skip-gram算法。
size:是指特征向量的维度,默认为100。⼤的size需要更多的训练数据,但是效果会更好. 推荐值为⼏⼗到⼏百。
window:表⽰当前词与预测词在⼀个句⼦中的最⼤距离是多少
alpha: 是学习速率
seed:⽤于随机数发⽣器。与初始化词向量有关。
min_count: 可以对字典做截断. 词频少于min_count次数的单词会被丢弃掉, 默认值为5
max_vocab_size: 设置词向量构建期间的RAM限制。如果所有独⽴单词个数超过这个,则就消除掉其中最不频繁的⼀个。每⼀千万个单词需要⼤约1GB的RAM。设置成None则没有限制。
sample: ⾼频词汇的随机降采样的配置阈值,默认为1e-3,范围是(0,1e-5)
workers参数控制训练的并⾏数。
hs: 如果为1则会采⽤hierarchical softmax技巧。如果设置为0(defaut),则negative sampling会被使⽤。
sortedlistnegative: 如果>0,则会采⽤negativesamping,⽤于设置多少个noise words
cbow_mean: 如果为0,则采⽤上下⽂词向量的和,如果为1(defaut)则采⽤均值。只有使⽤CBOW的时候才起作⽤。
hashfxn: hash函数来初始化权重。默认使⽤python的hash函数
iter:迭代次数,默认为5
trim_rule:⽤于设置词汇表的整理规则,指定那些单词要留下,哪些要被删除。可以设置为None(min_count会被使⽤)或者⼀个接受()并返回RU·E_DISCARD,uti·s.RU·E_KEEP或者uti·s.RU·E_DEFAU·T的函数。
sorted_vocab:如果为1(defaut),则在分配word index 的时候会先对单词基于频率降序排序。
batch_words:每⼀批的传递给线程的单词的数量,默认为10000
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论