gensim的 Word2Vec參數(shù)
Word2Vec(sentences=None,# 可以是一個list鹰祸,對于大語料集,建議使用BrownCorpus,Text8Corpus或·ineSentence構(gòu)建沉帮。
size=100,# 是指特征向量的維度,默認(rèn)為100。大的size需要更多的訓(xùn)練數(shù)據(jù),但是效果會更好. 推薦值為幾十到幾百夕玩。
alpha=0.025, # 學(xué)習(xí)速率
window=5, # 表示當(dāng)前詞與預(yù)測詞在一個句子中的最大距離是多少
min_count=5, # 可以對字典做截斷. 詞頻少于min_count次數(shù)的單詞會被丟棄掉, 默認(rèn)值為5
max_vocab_size=None, # 設(shè)置詞向量構(gòu)建期間的RAM限制。如果所有獨立單詞個數(shù)超過這個惊豺,則就消除掉其中最不頻繁的一個燎孟。每一千萬個單詞需要大約1GB的RAM。設(shè)置成None則沒有限制
sample=0.001, # 高頻詞匯的隨機降采樣的配置閾值尸昧,默認(rèn)為1e-3揩页,范圍是(0,1e-5)
seed=1, # 用于隨機數(shù)發(fā)生器。與初始化詞向量有關(guān)烹俗。
workers=3, # workers參數(shù)控制訓(xùn)練的并行數(shù)爆侣。
min_alpha=0.0001,
sg=0,#sg: 用于設(shè)置訓(xùn)練算法,默認(rèn)為0幢妄,對應(yīng)CBOW算法兔仰;sg=1則采用skip-gram算法。
hs=0, #如果為1則會采用hierarchica softmax技巧蕉鸳。如果設(shè)置為0(default)乎赴,則negative sampling會被使用。
negative=5, # 如果>0,則會采用negativesampling潮尝,用于設(shè)置多少個noise words
cbow_mean=1, # 如果為0榕吼,則采用上下文詞向量的和,如果為1(default)則采用均值勉失。只有使用CBOW的時候才起作用羹蚣。
hashfxn=<built-in function hash>, # hash函數(shù)來初始化權(quán)重。默認(rèn)使用python的hash函數(shù)
iter=5, # 迭代次數(shù)戴质,默認(rèn)為5
null_word=0,
trim_rule=None, # 用于設(shè)置詞匯表的整理規(guī)則,指定那些單詞要留下,哪些要被刪除充择∠可以設(shè)置為None(min_count會被使用)或者一個接受()并返回RU·E_DISCARD,uti·s.RU·E_KEEP或者utils.RUlE_DEFAUlT的函數(shù)。
sorted_vocab=1, # 如果為1(default),則在分配word index 的時候會先對單詞基于頻率降序排序。
batch_words=10000 # 每一批的傳遞給線程的單詞的數(shù)量,默認(rèn)為10000
)
簡單實現(xiàn)
# 加載文本
# 加載文本
with open ("data/data_for_test/tmp_all.txt","r") as f:
data=f.readlines()
file=[]
for i in range(1,len(data)):
file.append(data[i].split('\t'))
df=pd.DataFrame(file,columns=['number','content'])
# 數(shù)據(jù)預(yù)處理
# 略
# 訓(xù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')
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 # 模型內(nèi)的詞
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【根據(jù)上下文的詞語输莺,預(yù)測當(dāng)前詞語】、Skip-gram【根據(jù)當(dāng)前詞語裸诽,預(yù)測上下文】
降低復(fù)雜度:Hierarchical Softmax【層次softmax】 嫂用、Negative Sampling【負(fù)采樣】