注意
由於目前這個倉庫專案過多,不易維護。因此,後續將各種任務獨立開來,分別建立倉庫,做很多比較實驗,方便使用者挑選模型。有需要的,可以跳轉指定倉庫,連結如下:
- 文字分類倉庫
- 語意匹配倉庫
- 文字生成倉庫
- 其他倉庫正在快馬加鞭的更新...
目錄
- Chatbot
- 1. Bert_chatbot: 類似UniLM的方式
- 2. seq2seq_luong: 編碼器為兩層gru網絡,解碼器為一層gru網絡,在編碼器和解碼器中間,加入了luong注意力。
- 3. transformer_chatbot: 標準的transformer模型
- Distillation
- 1. DynaBert: 華為的工作,主要是用剪枝的方式來裁剪bert的某些結構。
- 2. rnn_distill_bert: 用一層lstm網路去蒸餾bert模型,只加入了軟標籤損失。
- 3. three_layer_self-attention_to_distill_bert: 看名字大概都知道啥意思了,就是寫了三層transformer的encoder,然後去蒸餾bert模型
- 4. tiny_bert: 華為的工作,tiny_bert的蒸餾方式是除了加入軟標籤損失,還加入了中間層的均方誤差損失
- Embedding
- 1. skipgram-word2vec: 使用skipgram的方式得到詞向量
- 2. bert: 直接訓練bert, 從頭訓練, 也可以使用此程式碼進行再訓練
- 3. albert: 直接訓練albert,從頭訓練, 也可以使用此程式碼進行再訓練
- 4. NPLM: 傳統方法
- NER
- 1. Bert_CRF_Ner: bert模型加條件隨機場進行序列標註任務
- 2. Bert_Softmax_Ner: 直接使用bert模型進行序列標註
- 3. BiLSTM_CRF_Ner: 使用雙向的lstm網路和crf進行序列標註任務
- NMT
- 1. GRU_attention: 編碼器和解碼器都是gru網絡,中間加入一個普通的注意力機制(直接的加權和)
- 2. Transformers_NMT: 標準的transformer結構做機器翻譯
- Pretrain_Model
- 1. bert-pretrain: bert模型的再訓練,先透過get_train_data.py進行資料預處理,包含15%的單字進行mask等操作,然後在進行訓練。
- 2. wobert-pretrain: wobert的預訓練模型由蘇神給出,這裡的再訓練可以加入自己構建的詞表,然後修改了bert的分詞方式。
- Reading_comprehension
- 1. BERT_MRC: 使用bert去做機器閱讀理解任務。這裡長預料採用直接階段的方式。
- 2. BiDAF: 雙向注意力流機制的機器閱讀理解模型
- 3. DocQA: 傳統的模型
- 4. Match_LSTM: 傳統的模型,單純的rnn結構。
- 5. QANet: 也是一個比較傳統的模型,但是這個模型是第一個拋棄rnn結構的mrc模型,這個模型也是第一個將self-attention機制引入mrc任務中的。
- 6. RNet: 傳統的模型
- 7. Recurrence-hotpot-baseline: 首次產生用rnn結構處理多跳推理的問題,在hotpotqa資料集中,除了包含答案的預測,還有支撐事實的預測,以及相關段落的預測。
- 8. albert_mrc: 使用albert預訓練模型去做mrc任務
- 9. electra_bert: 使用electra預訓練模型去做mrc任務
- 10. mrc_baseline: 如果做mrc任務,建議先看這個程式碼,這裡麵包含了mrc注意的各種細節,如長文本的處理(滑動視窗), 答案的排序,對抗訓練等等。
- 11. roberta_mrc: 使用roberta預訓練模型去做mrc任務
- 12. transformer+rnn+attention: 這個專案是做生成式的閱讀理解,直接採用的是seq2seq的方式,編碼器採用的是transformer的encoder, 解碼器採用的gru的結構,中間還加入了一層普通的注意力機制。
- 13. transformer_reading: 這個專案也是做生成式閱讀理解,採用的是標準的transformer結構。
- Slot_Filling
- 1. JointBert: 涉及到意圖分類和槽分類。直接以bert對輸入進行編碼,以「CLS」向量進行意圖分類。以每個token的最終編碼向量進行槽分類。
- Text_Classification
- 1. DPCNN: 深層的捲積網路+殘差的連結使得此模型比以往的CNN結構都好,且複雜度也不高。
- 2. FastBert: 採用自蒸餾的方式加快模型的推理。主要應用在分類任務。
- 3. FastText: 由facebook提出,是一種高效率的文字分類模型。
- 4. XLNet: 1)透過最大化所有可能的因式分解順序的對數似然,學習雙向語境資訊;2)用自回歸本身的特徵克服BERT 的缺點。此外,XLNet 也融合了目前最優自迴歸模型Transformer-XL 的想法。
- 5. all_layer_out_concat: 從名字上就可以看出,本項目是將文本經過bert-style模型進行編碼,然後將每層的cls向量拿出來,進行一個注意力計算,然後進行分類。
- 6. bert+bceloss+average_checkpoint: 該項目將分類任務的損失函數改成了BCELoss,另外,加入的權重平均(將多個checkpoint進行平均)
- 7. capsule_text_classification: GRU+Capsule進行文字分類
- 8. longformer_classification: 使用預訓練模型longformer進行文字分類。對於長文本的分類,可以試試這個模型。
- 9. multi_label_classify_bert: 使用bert模型進行多標籤分類。裡麵包含三個模型: bert(model.py)、bert後兩層池化(model2.py)、bert+TextCNN(model3.py)。
- 10. roberta_classification: 使用roberta預訓練模型進行文字分類。
- 11. transformer_xl: 直接使用transformer_xl進行文字分類,長文字分類,可以試試此模型。
- 12. wobert+focal_loss: wobert預訓練模式有蘇神提供,在分類任務中加入了focal loss解決類別不平衡的問題。
- 13. TextCNN: 對文本進行不同尺度的捲積,然後拼接進行文本分類。
- 14. BILSTM+Attention: 雙向的LSTM網路加普通的注意力進行文本分類。
- Text_Clustering
- 1. LDA聚類
- 2. DBSCAN
- 3. Kmeans
- Text_Corrector
- 1. bert_for_correction: 只是簡單的嘗試,在對應的語料上進行了再訓練,輸入一個有錯字的句子,然後對每個token的編碼向量進行分類。
- Text_Generation
- 1. GPT2_SummaryGen: 使用GPT2進行摘要的生成
- 2. GPT2_TitleGen: 文章標題的生成
- 3. Simple-GPT2: 自己實現的GPT2模型
- Text_Ranking
- 1. BM25: 計算query與所有待排序文字的BM25值,然後依照這個值進行排序。
- 2. DC_Bert_Ranking: 雙塔+互動。首先將query和context分別編碼,此處的權重不共享,然後將query和context的編碼混合,再通過幾層交互的transformer-encoder。
- 3. DPR_Ranking:Facebook的文字排序模型
- 4. MT_Ranking: 用bert-style模型進行編碼,然後用cls進行分類,依正樣本的分數排序
- 5. ReRank: 含模型蒸餾
- Text_Similarity
- 1. ABCNN: 先將兩個句子進行詞嵌入,然後進行池化,得到兩個句子的向量,接著計算兩個向量的差值,最後對這個差值向量進行不同尺度的捲積,然後進行分類。
- 2. BiMPM: 模型分為四部分: 詞嵌入、上下文編碼(bilstm)、四種Matching、Aggregation Layer。
- 3. DecomposableAttention:這篇論文的核心就是alignment,即詞與詞的對應關係,文中的alignment用在了兩個地方,一個attend部分,是用來計算兩個句子之間的attention關係,另一個是compare部分,將兩個句子之間的單字比較,每次的處理都是以字為單位的,最後用前饋神經網路去做預測。很明顯可以看到,這篇文章提到的模型並沒有使用到詞在句子中的時序關係,更多的是強調兩句話的詞之間的對應關係(alignment)
- 4. ESIM: 短文本匹配利器。 ESIM 牛逼在它的inter-sentence attention,就是程式碼中的soft_align_attention,這一步驟讓要比較的兩句話產生了交互作用。以前類似Siamese 網路的結構,往往中間都沒有交互,只是在最後一層求個餘弦距離或其他距離。
- 5. RE2: RE2 這個名稱來自於該網路三個重要部分的合體:Residual vectors;Embedding vectors;Encoded vectors。
- 6. SiaGRU: 雙塔結構,對兩個sentence分別用GRU編碼,然後計算兩個句子編碼向量的差值,最後用這個差值向量進行分類。
- 7. SimCSE: 對比學習,技巧:不同的樣本不同的Dropout
- 8. BM25: 直接計算兩個文本的BM25值,代表其相似程度。
- 9. TF_IDF: 直接計算兩個文字的TF_IDF值,代表其相似程度。
- 10. NEZHA_Coattention: 採用的是雙塔結構,將兩個句子分別輸入到NEZHA模型中,然後將輸入做差,再與原來的表示拼接,接著送到一個全連接網絡中進行分類。還有一個模型,就是得到兩個句子的表示後,我們自己實作了一層transformer-encoder,進行表示資訊的融合,最後再進行分類。
- 11. Bert_Whitening: 方法由蘇劍林提出,無需訓練,直接將每個句子的bert輸出統一到標準正交基底的下
- data_augmentation
- 1. eda: 使用nlpcda工具包進行資料增廣。如: 等價實體替換、隨機同義詞替換、隨機刪除字元、位置交換、同音詞替換。
- 2. 回譯-百度: 使用百度翻譯進行文本的回譯。
- 3. 回譯-google: 使用google翻譯進行文本的回譯。
- relation_extraction
- 1. lstm_cnn_information_extract: lstm+cnn
- 2. relation_classification: 關係分類, bilstm+普通注意力
NLP_pytorch_project
Chatbot
1. Bert_chatbot: 類似UniLM的方式
- python train.py # 訓練程式碼
- python infernece.py # 模型的推理
2. seq2seq_luong: 編碼器為兩層gru網絡,解碼器為一層gru網絡,在編碼器和解碼器中間,加入了luong注意力。
- python train.py # 訓練程式碼
- python inference.py # 模型的推理
3. transformer_chatbot: 標準的transformer模型
- python train.py # 訓練程式碼
- python chat.py # 可以進行聊天訓練資料採用的是青雲對話語料
Distillation
1. DynaBert: 華為的工作,主要是用剪枝的方式來裁剪bert的某些結構。
- python train_teacher_model.py # 訓練老師模型
- python train_tailor_model.py # 對老師模型剪枝
2. rnn_distill_bert: 用一層lstm網路去蒸餾bert模型,只加入了軟標籤損失。
- python train_bert.py # 訓練老師模型bert
- python train_distill.py # 蒸餾用lstm學習bert的輸出
3. three_layer_self-attention_to_distill_bert: 看名字大概都知道啥意思了,就是寫了三層transformer的encoder,然後去蒸餾bert模型
- python train_bert.py # 訓練老師模型bert
- python train_distill.py # 蒸餾
4. tiny_bert: 華為的工作,tiny_bert的蒸餾方式是除了加入軟標籤損失,還加入了中間層的均方誤差損失
- python train.py # 訓練老師模型bert
- python train_distill_v2.py # 蒸餾
Embedding
1. skipgram-word2vec: 使用skipgram的方式得到詞向量
- Python 001-skipgram-word2vec.py
2. bert: 直接訓練bert, 從頭訓練, 也可以使用此程式碼進行再訓練
3. albert: 直接訓練albert,從頭訓練, 也可以使用此程式碼進行再訓練
4. NPLM: 傳統方法
NER
1. Bert_CRF_Ner: bert模型加條件隨機場進行序列標註任務
- python run_ner_crf.py # 模型的訓練
- python inference.py # 模型的推理
2. Bert_Softmax_Ner: 直接使用bert模型進行序列標註
- python train.py # 模型的訓練
- python inference.py # 模型的推理
3. BiLSTM_CRF_Ner: 使用雙向的lstm網路和crf進行序列標註任務
NMT
1. GRU_attention: 編碼器和解碼器都是gru網絡,中間加入一個普通的注意力機制(直接的加權和)
2. Transformers_NMT: 標準的transformer結構做機器翻譯
Pretrain_Model
1. bert-pretrain: bert模型的再訓練,先透過get_train_data.py進行資料預處理,包含15%的單字進行mask等操作,然後在進行訓練。
- python get_train_data.py # 資料預處理
- python run_pretrain.py # 再訓練
2. wobert-pretrain: wobert的預訓練模型由蘇神給出,這裡的再訓練可以加入自己構建的詞表,然後修改了bert的分詞方式。
- python process_pretrain_data.py # 資料預處理
- python run_pretrain.py # 再訓練
Reading_comprehension
1. BERT_MRC: 使用bert去做機器閱讀理解任務。這裡長預料採用直接階段的方式。
2. BiDAF: 雙向注意力流機制的機器閱讀理解模型
- python data_process.py # 先對資料預處理
- python train_bidaf.py # 模型的訓練
3. DocQA: 傳統的模型
- python data_process.py # 先對資料預處理
- python train_DocQA.py # 模型的訓練
4. Match_LSTM: 傳統的模型,單純的rnn結構。
- python data_process.py # 先對資料預處理
- python train_Match_Lstm.py # 模型的訓練
5. QANet: 也是一個比較傳統的模型,但是這個模型是第一個拋棄rnn結構的mrc模型,這個模型也是第一個將self-attention機制引入mrc任務中的。
- python data_process.py # 資料預處理
- python train.py # 模型的訓練
6. RNet: 傳統的模型
- python data_process.py # 資料預處理
- python train_RNet.py # 模型的訓練
7. Recurrence-hotpot-baseline: 首次產生用rnn結構處理多跳推理的問題,在hotpotqa資料集中,除了包含答案的預測,還有支撐事實的預測,以及相關段落的預測。
- python data_process.py # 資料預處理
- python train.py # 模型的訓練
8. albert_mrc: 使用albert預訓練模型去做mrc任務
- python train_update.py # 訓練模型
- python inference.py # 單一資料的推理
- python inference_all.py # 所有資料的推理
9. electra_bert: 使用electra預訓練模型去做mrc任務
- python run_cail.py # 訓練模型
- python evaluate.py # 模型的評估
10. mrc_baseline: 如果做mrc任務,建議先看這個程式碼,這裡麵包含了mrc注意的各種細節,如長文本的處理(滑動視窗), 答案的排序,對抗訓練等等。
11. roberta_mrc: 使用roberta預訓練模型去做mrc任務
12. transformer+rnn+attention: 這個專案是做生成式的閱讀理解,直接採用的是seq2seq的方式,編碼器採用的是transformer的encoder, 解碼器採用的gru的結構,中間還加入了一層普通的注意力機制。
- python train.py # 模型的訓練
- python inference.py # 模型的推理
13. transformer_reading: 這個專案也是做生成式閱讀理解,採用的是標準的transformer結構。
- python train.py # 模型的訓練
- python inference.py # 模型的推理
Slot_Filling
1. JointBert: 涉及到意圖分類和槽分類。直接以bert對輸入進行編碼,以「CLS」向量進行意圖分類。以每個token的最終編碼向量進行槽分類。
Text_Classification
1. DPCNN: 深層的捲積網路+殘差的連結使得此模型比以往的CNN結構都好,且複雜度也不高。
- python get_data_to_examples.py # 預處理數據
- python examples_to_features.py # 將對應的example轉為feature
- python train.py # 模型的訓練
2. FastBert: 採用自蒸餾的方式加快模型的推理。主要應用在分類任務。
- sh train_stage0.sh # 訓練老師模型bert
- sh train_stage1.sh # 自蒸餾
- sh infer_sigle.sh # 自適應的推理單一樣本
3. FastText: 由facebook提出,是一種高效率的文字分類模型。
- python step1_get_data_to_examples.py # 取得數據
- python step2_examples_to_features.py # 將文字資料轉為id序列
- python train.py # 模型訓練
4. XLNet: 1)透過最大化所有可能的因式分解順序的對數似然,學習雙向語境資訊;2)用自回歸本身的特徵克服BERT 的缺點。此外,XLNet 也融合了目前最優自迴歸模型Transformer-XL 的想法。
5. all_layer_out_concat: 從名字上就可以看出,本項目是將文本經過bert-style模型進行編碼,然後將每層的cls向量拿出來,進行一個注意力計算,然後進行分類。
- python train.py # 模型訓練
- Python inference.py # 模型推理
6. bert+bceloss+average_checkpoint: 該項目將分類任務的損失函數改成了BCELoss,另外,加入的權重平均(將多個checkpoint進行平均)
- python run_classify.py # 模型訓練
- python run_average_checkpoints.py # 權重平均
7. capsule_text_classification: GRU+Capsule進行文字分類
8. longformer_classification: 使用預訓練模型longformer進行文字分類。對於長文本的分類,可以試試這個模型。
9. multi_label_classify_bert: 使用bert模型進行多標籤分類。裡麵包含三個模型: bert(model.py)、bert後兩層池化(model2.py)、bert+TextCNN(model3.py)。
- python train.py # 模型訓練
- python inference.py # 模型預測
10. roberta_classification: 使用roberta預訓練模型進行文字分類。
11. transformer_xl: 直接使用transformer_xl進行文字分類,長文本分類,可以試試此模型。
12. wobert+focal_loss: wobert預訓練模式有蘇神提供,在分類任務中加入了focal loss解決類別不平衡的問題。
- python run_classify.py # 模型訓練
13. TextCNN: 對文本進行不同尺度的捲積,然後拼接進行文本分類。
- python 001-TextCNN.py # 模型訓練
14. BILSTM+Attention: 雙向的LSTM網路加普通的注意力進行文本分類。
- python 002-BILSTM+Attention.py # 模型訓練
Text_Clustering
1. LDA聚類
- python train_LDA_cluster.py # 聚類
2. DBSCAN
- python train_dbscan_cluster.py # 聚類
3. Kmeans
- python train_kmeans_cluster.py # 聚類
Text_Corrector
1. bert_for_correction: 只是簡單的嘗試,在對應的語料上進行了再訓練,輸入一個有錯字的句子,然後對每個token的編碼向量進行分類。
- python run_pretrain_bert.py # 再訓練
- bert_corrector.py # 糾錯
Text_Generation
1. GPT2_SummaryGen: 使用GPT2進行摘要的生成
- python train.py # 模型訓練
- python inferface.py # 模型推理
2. GPT2_TitleGen: 文章標題的生成
- python train.py # 模型訓練
- python inference.py # 模型推理
3. Simple-GPT2: 自己實現的GPT2模型
- python train.py # 模型訓練
- python inference.py # 模型推理
Text_Ranking
1. BM25: 計算query與所有待排序文字的BM25值,然後依照這個值進行排序。
2. DC_Bert_Ranking: 雙塔+互動。首先將query和context分別編碼,此處的權重不共享,然後將query和context的編碼混合,再通過幾層交互的transformer-encoder。
- python train.py # 模型訓練
- python inference.py # 模型推理
3. DPR_Ranking:Facebook的文字排序模型
4. MT_Ranking: 用bert-style模型進行編碼,然後用cls進行分類,依正樣本的分數排序
- python train.py # 模型訓練
- python inference.py # 模型推理
5. ReRank: 含模型蒸餾
- python train.py # 模型訓練
- python train_distill.py # 模型蒸餾
Text_Similarity
1. ABCNN: 先將兩個句子進行詞嵌入,然後進行池化,得到兩個句子的向量,接著計算兩個向量的差值,最後對這個差值向量進行不同尺度的捲積,然後進行分類。
2. BiMPM: 模型分為四部分: 詞嵌入、上下文編碼(bilstm)、四種Matching、Aggregation Layer。
3. DecomposableAttention:這篇論文的核心就是alignment,即詞與詞的對應關係,文中的alignment用在了兩個地方,一個attend部分,是用來計算兩個句子之間的attention關係,另一個是compare部分,將兩個句子之間的單字比較,每次的處理都是以字為單位的,最後用前饋神經網路去做預測。很明顯可以看到,這篇文章提到的模型並沒有使用到詞在句子中的時序關係,更多的是強調兩句話的詞之間的對應關係(alignment)
4. ESIM: 短文本匹配利器。 ESIM 牛逼在它的inter-sentence attention,就是程式碼中的soft_align_attention,這一步驟讓要比較的兩句話產生了交互作用。以前類似Siamese 網路的結構,往往中間都沒有交互,只是在最後一層求個餘弦距離或其他距離。
5. RE2: RE2 這個名稱來自於該網路三個重要部分的合體:Residual vectors;Embedding vectors;Encoded vectors。
6. SiaGRU: 雙塔結構,對兩個sentence分別用GRU編碼,然後計算兩個句子編碼向量的差值,最後用這個差值向量進行分類。
7. SimCSE: 對比學習,技巧:不同的樣本不同的Dropout
8. BM25: 直接計算兩個文本的BM25值,代表其相似程度。
9. TF_IDF: 直接計算兩個文字的TF_IDF值,代表其相似程度。
10. NEZHA_Coattention: 採用的是雙塔結構,將兩個句子分別輸入到NEZHA模型中,然後將輸入做差,再與原來的表示拼接,接著送到一個全連接網絡中進行分類。還有一個模型,就是得到兩個句子的表示後,我們自己實作了一層transformer-encoder,進行表示資訊的融合,最後再進行分類。
11. Bert_Whitening: 方法由蘇劍林提出,無需訓練,直接將每個句子的bert輸出統一到標準正交基底的下
- python run_bert_whitening.py # 直接對資料集進行驗證計算斯皮爾曼係數
data_augmentation
1. eda: 使用nlpcda工具包進行資料增廣。如: 等價實體替換、隨機同義詞替換、隨機刪除字元、位置交換、同音詞替換。
2. 回譯-百度: 使用百度翻譯進行文本的回譯。
- python 002-run_contrslate_data_aug.py
3. 回譯-google: 使用google翻譯進行文本的回譯。
- python 003-google_trans_data_aug.py
relation_extraction
1. lstm_cnn_information_extract: lstm+cnn
- python train.py # 模型訓練
- python inference.py # 模型推理
2. relation_classification: 關係分類, bilstm+普通注意力
- python data_helper.py # 資料預處理
- python train.py # 模型訓練
Star History