[Brendan Shillingford,Yannis Assael,Chris Dyer]
對於此實用性,您將獲得部分完整的Ipython筆記本電腦,這是一個基於交互式Web的Python計算環境,使我們可以混合文本,代碼和交互式圖。
我們將使用Python軟件包gensim中包含的Word2Vec實現來培訓有關TED Talk和Wikipedia數據的Word2Vec模型。訓練模型後,我們將分析和可視化學習的嵌入。
在實驗室工作站上,克隆實用的存儲庫並運行. install-python.sh在終端中. install-python.sh shell腳本,以使用Python 3安裝Anaconda,以及此實用性所需的包裝。
在存儲庫目錄中運行ipython notebook ,然後在瀏覽器中打開practical.ipynb筆記本。
用於下載數據集和預處理的代碼已預先編寫以節省時間。但是,預計考慮到原始數據,您需要在將來的實踐中執行這樣的任務。閱讀並確保您理解。通常,一個人使用nltk之類的庫來簡化此任務,但是我們在這裡沒有這樣做,而是選擇通過Python的re模塊使用正則表達式。
列出最常見的單詞及其事件的列表。看看前40個單詞。您可能需要使用sklearn.feature_extraction.text模塊的CountVectorizer類或collections模塊的Counter類。
取上前1000個單詞,並繪製其計數的直方圖。筆記本中已經給出了交互式直方圖的繪圖代碼。
Handin:顯示頻率分佈直方圖。
現在我們有了一個處理過的句子列表,讓我們運行Word2Vec培訓。首先在https://radimrehurek.com/gensim/models/word2vec.html上讀取Word2Vec的Gensim文檔,以找出如何使用Word2Vec類。學習嵌入min_count=10以便忽略很少的單詞。培訓過程應花費不到半分鐘。
如果您訓練有素的Word2Vec實例稱為model_ted ,則應該能夠使用len(model_ted.vocab)檢查詞彙大小,該詞彙大小應大約為14427。嘗試使用most_similar()方法返回“男人”和“計算機”最相似單詞的列表。
Handin:找到一些有趣和/或令人驚訝的最近鄰居的單詞。
Handin:在T-SNE圖中找到一個有趣的簇。
可選的是,對於熱情的學生:嘗試使用Gensim文檔中所述的索引操作員手動檢索兩個單詞向量,然後計算其餘弦距離(回想一下,它被定義為np.dot()和np.linalg.norm()感興趣,有關詳細信息,請參見Numpy文檔。將此與Gensim功能計算的距離進行比較。
我們為Wikitext-2數據集提供了下載/預處理代碼(類似於上一個代碼)。該代碼使用數據的隨機子樣本,因此它的大小與TED談話數據相當。
重複與上述相同的分析,但在此數據集上。
HANDIN:找到幾個單詞,與最近的鄰居相似。
Handin:在T-SNE圖中找到一個有趣的簇。
HANDIN:與TED Talk Data學到的數據相比,在數據上學習的嵌入在數據上有明顯的差異?
如果您有額外的時間,請嘗試在嵌入式上執行K-均值聚類(例如使用sklearn.cluster.kmeans ),調整簇數,直到您獲得有趣或有意義的群集為止。
請參閱上面的粗體“ Handin: ”部分。在紙上或口頭上,向實用的演示者展示您對這些的反應以簽約。