透過智慧詞彙提升語言模型效能
該計畫旨在探索使用詞性標籤和命名實體對十億單字語料庫進行預處理,以創建「更聰明」的詞彙表。與單獨使用語料庫中的前 N 個單字相比,使用這些技術可以獲得更好的困惑度分數。
有關處理及其對可獲得的困惑度分數的影響的完整說明,請參閱使用更聰明的詞彙來提高語言模型表現。
該項目包括腳本
此項目設計為就地使用,無需安裝 pip。只需從 GitHub 下載原始程式碼,設定配置選項並按順序執行編號的腳本即可。請注意,此程式碼是為研究人員設計的,因此需要檢查正在執行的腳本中的程式碼並根據需要修改選項以獲得特定結果。
主目錄中的腳本以數字為前綴,以指示執行它們的順序。在運行每個腳本之前,請務必將其打開並設定任何配置參數以獲得您想要的結果。
多個腳本使用的全域設定選項在./configs/config.py 中設定。在運行下面的任何腳本之前,請務必進入此檔案並修改資料的路徑。
00_StanfordCoreNLPServer.py :使用設定檔./configs/snlp_server.py啟動Stanford Core NLP解析器。伺服器運行時腳本會阻塞。如果您願意,可以手動啟動伺服器。該腳本只是為了方便起見。
10_ExtractUniqueSents.py :在解析之前從十億字語料庫中提取唯一的句子。文件頂部附近有一些有關如何下載和設定原始語料庫的說明。
12_STParseBWCorpus.py :透過史丹佛解析器運行所有獨特的句子。請注意,此步驟需要相當長的時間(可能是一整天),並且可以從多核心處理器中受益匪淺。請參閱文件中有關運行時的註釋。
14_RemoveDuplicates.py :是否第二次遍歷資料以刪除解析/規範化後出現的重複句子。
20_CreateEnglishDictionary.py :智慧詞彙創建所需。
22_CreateVocab.py :此腳本建立各種類型的詞彙表。文件中存在一個大的 if/elif 區塊,供使用者選擇要建立的詞彙類型。
24_IndexVocab.py :建立用於訓練語言模型的索引語料庫資料。這裡同樣有一個很大的 if/elif 區塊,需要由使用者設定來選擇要使用的詞彙類型。
30_TrainBasicLM.py :設定並運行模型的訓練。這裡再次有一個語句塊,允許使用者選擇要訓練的詞彙。此外,使用者需要選擇具有模型配置參數的檔案。模型設定參數儲存在 config 目錄中,檔案名稱為 L1_2048_512.py。
32_TestPerplexity :針對經過訓練的模型執行困惑度測試。在腳本底部選擇要測試的模型。
34_NextWordPrediction.py :允許使用者輸入句子的第一部分並呼叫模型來預測下一個單字。配置在腳本的主要部分中使用哪個模型。
部分程式碼改編自薩爾大學的語言模型工具包。請參閱 TF-NNLM-TK。
該程式碼部分基於 TensorflowPTB-LM 範例模型。