使用Pytorch實施自然語言推斷的ESIM模型
該存儲庫包含了Chen等人“增強自然語言推斷的LSTM的LSTM”中列出的順序模型的實現。 2016年。
下圖說明了模型架構的高級視圖。

該模型是在我在日內瓦大學碩士論文的背景下實施的。
要使用此存儲庫中定義的模型,首先需要按照軟件包官方頁面上描述的步驟在計算機上安裝Pytorch(僅在使用Windows時才需要此步驟)。然後,要安裝運行模型所需的依賴項,只需執行命令pip install --upgrade .從克隆的存儲庫中(在根部,最好是在虛擬環境中)。
位於此存儲庫的腳本/文件夾中的fetch_data.py腳本可用於下載一些NLI數據集和驗證的單詞嵌入。默認情況下,腳本獲取SNLI語料庫和Glove 840B 300D嵌入。可以通過簡單地將其URL作為參數傳遞給腳本(例如Multnli數據集)來下載其他數據集。
腳本的用法如下:
fetch_data.py [-h] [--dataset_url DATASET_URL]
[--embeddings_url EMBEDDINGS_URL]
[--target_dir TARGET_DIR]
其中target_dir是必須保存下載數據的目錄的路徑(默認為../ data/ )。
對於Multinli,需要從Kaggle手動下載匹配和錯配的測試集,並在MultinLi_1.0數據集文件夾中復制的相應.txt文件。
在可以在ESIM模型中使用下載的語料庫和嵌入式之前,需要對它們進行預處理。可以使用此存儲庫的腳本/預處理文件夾中的PY py腳本進行預處理_*。 preprocess_snli.py腳本可用於預處理snli, preprocess_mnli.py進行preprocess multinli和preprocess_bnli.py ,以預先處理破壞NLI(BNLI)數據集。請注意,調用腳本fot fot fot bnli時,應該先對SNLI數據進行預處理,以便可以在BNLI上使用它的詞數。
腳本的用法如下(用SNLI , MNLI或BNLI替換 *):
preprocess_*.py [-h] [--config CONFIG]
其中config是定義用於預處理的參數的配置文件的路徑。默認配置文件可以在此存儲庫的“配置/預處理文件夾”中找到。
腳本/培訓文件夾中的py腳本_*。可用於在某些培訓數據上訓練ESIM模型並在某些驗證數據中驗證它。
腳本的用法是以下(替換為snli或mnli ):
train_*.py [-h] [--config CONFIG] [--checkpoint CHECKPOINT]
其中config為配置文件(默認文件位於配置/培訓文件夾中), checkpoint是可選的檢查點,可以從中恢復培訓。檢查點是由腳本創建的,每個訓練時期之後,名稱為esim _*。 pth.tar ,其中'*'指示時代的數字。
腳本/測試文件夾中的測試_*。 PY腳本可用於在某些測試數據上測試驗證的ESIM模型。
要在SNLI上進行測試,請使用test_snli.py腳本如下:
test_snli.py [-h] test_data checkpoint
其中test_data是通往一些預處理測試集的途徑, checkpoint是通往train_snli.py腳本產生的檢查點的途徑(訓練時期後創建的檢查點之一,或者在培訓期間看到的最佳模型,該檢查點保存在數據/snli/snli/snli/best.pth.tar -best.pth.tar- the Esim the Esim itsim the lift and liftar and liftar the lif。不能用於恢復培訓,因為它不包含優化器的狀態)。
test_snli.py腳本也可以在SNLI上預處理的模型上使用Breaking NLI數據集。
要在Multinli上進行測試,請使用test_mnli.py腳本如下:
test_mnli.py [-h] [--config CONFIG] checkpoint
其中config是一個配置文件(默認文件在配置/測試中可用),並且checkpoint是由train_mnli.py腳本產生的檢查點。
test_mnli.py腳本對Multinli匹配和不匹配的測試集進行了預測,並將其保存在.CSV文件中。為了獲得與模型預測相關聯的分類精度,它產生的.CSV文件需要提交給Multinli的Kaggle競賽。
該存儲庫的數據/檢查點/SNLI文件夾中提供了對SNLI進行預訓練的模型。該模型接受了在配置/提供的默認配置文件中定義的參數。要進行測試,只需執行python test_snli.py ../../preprocessed/SNLI/test_data.pkl ../../data/checkpoints/best.pth.tar來自腳本/testing文件夾。
驗證的模型在SNLI數據集上實現了以下性能:
| 分裂 | 準確性 (%) |
|---|---|
| 火車 | 93.2 |
| 開發 | 88.4 |
| 測試 | 88.0 |
結果與Chen等人在論文中提出的結果一致。
在Breaking NLI數據集上,由Glockner等人出版。正如本文報導的那樣,2018年,該模型的精度達到了65.5% 。
在Multinli上,該模型達到以下準確性:
| 分裂 | 匹配 | 不匹配 |
|---|---|---|
| 開發 | 77.0% | 76.8% |
| 測試 | 76.6% | 75.8% |
這些結果略高於Williams等人報導的結果。在他們的Multinli論文中。