【NLP】基于GloVe词向量的迁移学习
??作者 | Kourosh Alizadeh
編譯 | VK
來源 | Towards Data Science
在過去,我在為我的一個項目訓練詞向量,但我一直在碰壁。我在研究哲學史上的文本,試圖找到可以揭示作者如何使用一個詞的向量。但我一直得到這樣的結(jié)果:
如果你斜視得很厲害,也許這是有道理的。畢竟,愛確實與完美有關(guān),對吧?
但是相似性分數(shù)很小,我們不想為了讓結(jié)果有意義而瞇著眼睛看。
為了解決這個問題,我試著調(diào)整超參數(shù),但結(jié)果甚至比這更差。
但后來我靈機一動。我將使用GloVe預訓練好的詞向量作為基線,而不是單獨在我的數(shù)據(jù)集上訓練數(shù)據(jù)。這意味著基本上我的機器已經(jīng)知道基本的英語了,然后只需要微調(diào)以更準確地匹配我的數(shù)據(jù)。
這個過程比我預期的要困難一些,而且我找不到任何完整的教程,所以我想我應(yīng)該寫一個。這個過程基本上有三個步驟,我將按順序介紹它們。如果你只想得到一個結(jié)果,可以跳到最后查看筆記本。
本教程需要Gensim Word2Vec庫。
步驟1:加載向量
要訓練GloVe嵌入,你需要將嵌入加載到你的系統(tǒng)中。你可以在這里下載:https://nlp.stanford.edu/projects/glove/
一旦你有了一個文件,你可以用下面的代碼來加載它。
glove_file?=?datapath('YOUR_DATAPATH_HERE') tmp_file?=?get_tmpfile("test_word2vec.txt")_?=?glove2word2vec(glove_file,?tmp_file)glove_vectors?=?KeyedVectors.load_word2vec_format(tmp_file)這實際上是從GloVe網(wǎng)站獲取的.txt文件,并以Gensim Word2Vec庫的適當格式加載它。此時,你可以執(zhí)行通常的相似性搜索來測試是否所有內(nèi)容都正確加載。
正如你所看到的,GloVe嵌入比我們之前得到的更有意義。
步驟2:建立一個玩具模型來更新
在這一步中,你基本上不需要使用GloVe就可以從數(shù)據(jù)構(gòu)建Word2Vec模型。此模型使你能夠捕獲新詞,并構(gòu)建包含特定數(shù)據(jù)集的詞匯表,如果你處理的文本不僅僅是普通英語,這將非常有用。
#?為了讓它工作,輸入將是一個標識的列表 #?因為我的數(shù)據(jù)是在一個數(shù)據(jù)幀中,我選擇了適當?shù)膕eries documents?=?df[df['school']?==?'rationalism']['sent_tokenized']#?然后列進列表 sentences?=?[sentence?for?sentence?in?documents]#?清理句子 stopwords?=?[YOUR_STOPWORDS_HERE] cleaned_sentences?=?[] for?sentence?in?sentences:cleaned?=?[word.lower()?for?word?in?sentence]cleaned?=?[word?for?word?in?cleaned?if?word?not?in?stopwords]cleaned_sentences.append(cleaned)#?在你的數(shù)據(jù)集中建立一個word2vec模型 base_model?=?Word2Vec(size=300,?min_count=5) base_model.build_vocab(cleaned_sentences) total_examples?=?base_model.corpus_count很好,現(xiàn)在你有了一個蹩腳的模型可以作為基礎(chǔ)。
步驟3:再訓練
在這里,你將獲取現(xiàn)有模型,添加GloVe詞匯表和起始權(quán)重,并在數(shù)據(jù)集上重新訓練它。
#?添加GloVe的詞匯和權(quán)重 base_model.build_vocab([list(glove_vectors.vocab.keys())],?update=True)#?訓練你的數(shù)據(jù) base_model.train(cleaned_sentences,?total_examples=total_examples,?epochs=base_model.epochs) base_model_wv?=?base_model.wv結(jié)果將是一組新的單詞向量,它們使用GloVe的原始權(quán)重,但現(xiàn)在也在你自己的數(shù)據(jù)上調(diào)整了。下面是一個結(jié)果示例:
你可能不太了解理性主義哲學,但相信我,這是非常有道理的。他們的主要焦點之一是上帝,我們可以看到,在討論上帝的愛時,幾乎所有這些都是有意義的——上帝愛我們是因為他是好人,他的恩典是愛的表現(xiàn),他給我們自由是因為他愛我們,等等。
另一個更好的測試方法是,在你的特定數(shù)據(jù)集中運行。most_similar來檢驗?zāi)愕男孪蛄亢驮瓉淼腉loVe向量。下面是我得到的結(jié)果的一個例子:
你可以看到,在哲學語料庫中,“哲學”與科學和形而上學相聯(lián)系,而在基本語料庫中,沒有這種聯(lián)系。
這很有道理。形而上學在英語口語中(與占星術(shù)和超自然有關(guān))和哲學(是一個主要的分支領(lǐng)域)有著截然不同的含義。
所以當哲學家談?wù)撜軐W時,形而上學總是在討論中,但是當普通人談?wù)撜軐W時,他們幾乎不會把它與形而上學聯(lián)系起來。哲學家也認為自己是科學的,或者在與自然科學的對話中,一般公眾通常看不到哲學和科學之間的緊密聯(lián)系。
額外步驟:將所有內(nèi)容整合在一起
好,太好了!現(xiàn)在,你有了一個漂亮的詞嵌入,可以用它來生成對語料庫的見解,也可以用在深度學習或其他應(yīng)用程序中。
剩下的就是在一個單一的函數(shù)中把所有的函數(shù)集合起來:
def?train_glove(source,?glove_vectors,?threshold=10,?stopwords=[],min_count=20):#?隔離數(shù)據(jù)幀的相關(guān)部分documents?=?df[df['source']?==?source]['sent_tokenized']#?格式化要使用的系列sentences?=?[sentence?for?sentence?in?documents]#?如果需要,刪除停止詞stopwords?=?[]cleaned?=?[]for?sentence?in?sentences:cleaned_sentence?=?[word.lower()?for?word?in?sentence]cleaned_sentence?=?[word?for?word?in?sentence?if?word?not?in?stopwords]cleaned.append(cleaned_sentence)#?這些后續(xù)步驟不在我們最初的描述中,因為它們對任務(wù)來說不是必要的#?如果這些短語足夠常見的話,它們可以讓你得bigrams,甚至是trigrams#?獲取bigramsbigram?=?Phrases(cleaned,?min_count=min_count,?threshold=threshold,?delimiter=b'?')bigram_phraser?=?Phraser(bigram)bigramed_tokens?=?[]for?sent?in?cleaned:tokens?=?bigram_phraser[sent]bigramed_tokens.append(tokens)#?獲取trigramstrigram?=?Phrases(bigramed_tokens,?min_count=min_count,?threshold=threshold,?delimiter=b'?')trigram_phraser?=?Phraser(trigram)trigramed_tokens?=?[]for?sent?in?bigramed_tokens:tokens?=?trigram_phraser[sent]trigramed_tokens.append(tokens)#?創(chuàng)建一個玩具模型來更新model?=?Word2Vec(size=300,?min_count=5)model.build_vocab(trigramed_tokens)total_examples?=?model.corpus_count#?添加GloVe的詞匯和權(quán)重model.build_vocab([list(glove_vectors.vocab.keys())],?update=True)#?訓練我們的數(shù)據(jù)model.train(trigramed_tokens,?total_examples=total_examples,?epochs=model.epochs)model_wv?=?model.wv#?刪除模型以節(jié)省內(nèi)存,并返回詞向量進行分析del?modelreturn?model_wv如果你想看到實際的結(jié)果,你可以查看Philosophy數(shù)據(jù)項目的單詞使用分析頁面:http://philosophydata.com/w2v.html。
代碼地址:https://github.com/kcalizadeh/phil_nlp
感謝閱讀!
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統(tǒng)計學習方法》的代碼復現(xiàn)專輯 AI基礎(chǔ)下載機器學習的數(shù)學基礎(chǔ)專輯黃海廣老師《機器學習課程》課件合集 本站qq群851320808,加入微信群請掃碼:總結(jié)
以上是生活随笔為你收集整理的【NLP】基于GloVe词向量的迁移学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【深度学习】深度学习的三个主要步骤!
- 下一篇: 如何实现RTSP/RTMP流接入到RTS