【2020-07-16】Word2Vec

gensim的 Word2Vec参数

Word2Vec(sentences=None,# 可以是一个list,对于大语料集,建议使用BrownCorpus,Text8Corpus或·ineSentence构建。 size=100,# 是指特征向量的维度,默认为100。大的size需要更多的训练数据,但是效果会更好. 推荐值为几十到几百。 alpha=0.025, # 学习速率 window=5, # 表示当前词与预测词在一个句子中的最大距离是多少 min_count=5, # 可以对字典做截断. 词频少于min_count次数的单词会被丢弃掉, 默认值为5 max_vocab_size=None, # 设置词向量构建期间的RAM限制。如果所有独立单词个数超过这个,则就消除掉其中最不频繁的一个。每一千万个单词需要大约1GB的RAM。设置成None则没有限制 sample=0.001, # 高频词汇的随机降采样的配置阈值,默认为1e-3,范围是(0,1e-5) seed=1, # 用于随机数发生器。与初始化词向量有关。 workers=3, # workers参数控制训练的并行数。 min_alpha=0.0001, sg=0,#sg: 用于设置训练算法,默认为0,对应CBOW算法;sg=1则采用skip-gram算法。 hs=0,#如果为1则会采用hierarchica softmax技巧。如果设置为0(default),则negative sampling会被使用。 negative=5, # 如果>0,则会采用negativesampling,用于设置多少个noise words cbow_mean=1, # 如果为0,则采用上下文词向量的和,如果为1(default)则采用均值。只有使用CBOW的时候才起作用。 hashfxn=, # hash函数来初始化权重。默认使用python的hash函数 iter=5, # 迭代次数,默认为5 null_word=0, trim_rule=None, # 用于设置词汇表的整理规则,指定那些单词要留下,哪些要被删除。可以设置为None(min_count会被使用)或者一个接受()并返回RU·E_DISCARD,uti·s.RU·E_KEEP或者utils.RUlE_DEFAUlT的函数。 sorted_vocab=1,# 如果为1(default),则在分配word index 的时候会先对单词基于频率降序排序。 batch_words=10000# 每一批的传递给线程的单词的数量,默认为10000 )

简单实现
# 加载文本 # 加载文本 with open ("data/data_for_test/tmp_all.txt","r") as f: data=https://www.it610.com/article/f.readlines()file=[] for i in range(1,len(data)): file.append(data[i].split('\t')) df=pd.DataFrame(file,columns=['number','content']) # 数据预处理 # 略

# 训练模型with open('corpus_all.txt', 'a', encoding='utf-8') as f: for i in range(len(corpus)): words = corpus[i].split() for word in words: f.write(word + ' ') f.write('\n') with open('corpus_all.txt', 'a', encoding='utf-8') as f: for i in range(len(corpus)): words = corpus[i].split() for word in words: f.write(word + ' ') f.write('\n') # 语料 sentences=LineSentence('corpus_all.txt') # 模型 model = Word2Vec(sentences, min_count=1, iter=1000)model.save("w2v_all.mod")

# 观察输出 model=Word2Vec.load(path) # 加载 model.wv.vocab # 模型内的词 model.wv.n_similarity(words, candidate) #计算相似度 y = model.most_similar('XXX', topn=20)# 寻找最相似的topn y2=model.similarity(u"XXX", u"YYY") # 两个文本的相似度 model.wv['XXX']#查看指定词的向量表示 model.doesnt_match("XXXX".split())#选出集合中不同类的词语

语言模型: CBOW【根据上下文的词语,预测当前词语】、Skip-gram【根据当前词语,预测上下文】
【2020-07-16】Word2Vec
文章图片
网络结构 【【2020-07-16】Word2Vec】降低复杂度:Hierarchical Softmax【层次softmax】 、Negative Sampling【负采样】

    推荐阅读