【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】降低复杂度:Hierarchical Softmax【层次softmax】 、Negative Sampling【负采样】
推荐阅读
- 宽容谁
- 我要做大厨
- 增长黑客的海盗法则
- 画画吗()
- 2019-02-13——今天谈梦想()
- 远去的风筝
- 三十年后的广场舞大爷
- 叙述作文
- 20190302|20190302 复盘翻盘
- 学无止境,人生还很长