命名实体识别NER遗留问题----模型构建
深度學習模型預測實質:訓練保存的模型里面參數 整個只有一套參數 不僅保存了訓練數據全部的正確信息,而且同字多義的情況下通過其同行的詞來判斷,雖然參數都是一套但是因為輸入的值不同導致計算的結果不同
導致最終結果的不同請類比線性回歸
1.解碼過程再了解
2.A我B A有多個A,B可能多個B 這里會出現矩陣相乘
3.重新完全訓練一個新模型
不能調試的文件
windows可以嘗試使用docker for windows 再使用pycharm使用docker里面的環境 看下是否能解決您這個問題
不能整除的時候會丟棄部分數據 不足1個batch的時候會自動關閉數據并行
最好是 先判斷有幾個樣例 然后給它補一些重復的樣例 讓樣例數能整除
1.具體的詞嵌入過程問題
2.softmax的具體過程
3.多頭合并成一個頭的過程
4.norm層的實現
5.升維的作用是什么
6.返回好像沒什么用
7.訓練數據是按段劃分好,還是按固定長度好,還是按行好
根據具體情況來看? 新聞這種有自己格式的直接用其現有格式
電子病歷這種沒有格式的 用換行符?這樣避免同一個實體被分到
不同的區域(行)里面
size mismatch for hidden2tag.weight: copying a param with shape torch.Size([9, 128]) from checkpoint, the shape in current model is torch.Size([11, 128]).
size mismatch for hidden2tag.bias: copying a param with shape torch.Size([9]) from checkpoint, the shape in current model is torch.Size([11]).
size mismatch for crf.transitions: copying a param with shape torch.Size([11, 11]) from checkpoint, the shape in current model is torch.Size([13, 13]).
解決:直接新建立一個符合要求的array,替換不滿足的array 就好
score = torch.sum(self.transitions[pad_start_tags, pad_stop_tags]) + torch.sum(features[r, tags])
RuntimeError: index 11 is out of bounds for dim with size 11
0%| | 0/2 [00:13<?, ?it/s]
索引從零開始
all: attention和FFN層參數都共享
ffn: 只共享FFN層參數
attention: 只共享attention層參數
None: 無參數共享
https://github.com/brightmart/albert_zh
albert 樣本權重數據
Missing key(s) in state_dict:
“word_embeddings.encoder.layer_shared.intermediate.0.dense.weight”,
“word_embeddings.encoder.layer_shared.intermediate.0.dense.bias”,
albert 的sharetype 由 all 改成 attention時候 attention的參數缺少的問題
Unexpected key(s) in state_dict: “word_embeddings.encoder.layer_shared.intermediate.dense.weight”,
albert 的sharetype 由 all 改成 attention時候 原來所有的attention各自不同的參數
縮減為一層的參數就需要去掉了
1.更改別人網絡需要注意的問題
1.1 標簽的更
1.2標簽對應輸出維度的更改
1.3最大長度的更改
1.4 json文件的更改
1.5
tensorflow2 ner 問題
1.為什么自帶的數據 沒有長度的問題,
2.自己的數據則有長度問題
3.只能在別人給的預訓練模型上面做fine tuning 才有效果
即使你改變網絡結構和參數 然后再 fine tuning 因為
任意給值的參數已經沒有意義了 另外 如此小的數據量 已經無法
在飽和的訓練的參數 所以 想自己更改網絡結構和參數值來
創造新的效果這條路是行不通的 除非在新的結構和參數上面
重新利用大量數據集來訓練一個完整的模型
postln:后 layernorm?
preln:前layernorm?
albert lstm ner
forward
D:\myenv\albert_lstm_ner\Lib\site-packages\torch\nn\modules\module.py
D:\code12temp\pytorch\albert_lstm_crf_ner\src\lstm_crf\model.py
為了應用原來的網絡參數,可以構建的時候保留原來完整的網絡,之后后面不調用就行了
預訓練模型里面的字是英文,funn tunning 的是中文,loss 還能減少,把新的中文學到了,但是因為詞匯表沒有中文的表示 所以無法預測?
沒有解決辦法,即使把中文追加到原來英文的詞匯表中 效果還是不好 所有最終的解決方案還是 通過中文來預訓練一個模型
修改字典大小之后 因為刪除了很多原來的英文字符 是的再fine tunning的時候,這些字符就不認識了 其對應的參數就不起作用
其所表示的整個句子的關系結構 就不能傳遞到 驗證數據了?
命名實體識別速度的提升
max len 的提升最明顯
然后優先提升 cpu_num,再是batch size,預測階段可以設的多些
然后是
最后把 訓練數據的每一行再提升 比如從原來的每行128 提升到256
問題
I1227 16:11:17.490773 16284 parallel_executor.cc:421] The number of CPUPlace, which is used in ParallelExecutor, is 8. And the Program will be copied 8 copies
I1227 16:11:18.218856 16284 build_strategy.cc:363] SeqOnlyAllReduceOps:0, num_trainers:1
I1227 16:11:18.244881 16284 parallel_executor.cc:285] Inplace strategy is enabled, when build_strategy.enable_inplace = True
I1227 16:11:18.286856 16284 parallel_executor.cc:315] Cross op memory reuse strategy is enabled, when build_strategy.memory_optimize = True or garbage collection strategy is disabled, which is not recommended
你們具體的應用場景是怎樣的呢?QPS要求是多少呢?如果從框架層面進一步改進的話需要投入的成本會比較大 這個需要評估你們的需求了
還是先看下能不能從數據預處理階段下手吧 把一些沒用的符號都去掉 還要繼續提升的話就得走C++了 成本會大很多了
就是對電子病歷的敏感信息進行識別并替換 數據量可能會比較多 領導的要求估計要 QPS 50
hi 我把數據改成每行256個字符之后 準確率一直震蕩不能收斂 您覺得是什么原因
勁風的味道 2019/12/30 11:03:05
這里還只是在訓練集上的表現
勁風的味道 2019/12/30 11:03:25
數據都是之前一樣的數據
原因:實體截斷的太多了 對吧
最好的解決方案 既保證長度 又保證實體的完整性
您好 能簡單的解釋一下 pyreader 的作用嗎
13:58:32
PaddleHub-金宣-百度 2019/12/30 13:58:32
pyreader是一個異步文本預處理工具 數據讀取和模型訓練過程是異步進行的
14:00:34
勁風的味道 2019/12/30 14:00:34
嗯嗯 厲害了 把異步加入到了里面 另外對于數據并行只能是對于多gpu而言是吧 如果我不用gpu的話 數據并行其實是沒有用的 我的理解對嗎
PaddleHub-金宣-百度 2019/12/30 14:01:08
如果是多核就有用
勁風的味道 2019/12/30 14:01:41
在bert 的時候 我也是嘗試過把異步處理加入到里面 因為輸出格式無法處理而放棄了 你們卻做到了 /強
使用pyreader的話 輸入的樣本數得是 batch_size的整數倍
小于總行數的 batch size 整數倍的最大整數
多核心數據并行
異步數據準備
paddle ernie 速度提升重點改進
1.模型蒸餾,相當于過濾,把模型中有用的信息過濾出來.在準確率降低很小的情況下
減少了參數量,提高了速度
2.最大處理長度 即使采用矩陣運算仍是
相當費cpu和內存.之前設置的512,調整為128后,速度提升明顯,
3.多核心數據并行預測的時候只對內存讀操作 cpu并行讀數據,并行讀參數,并行計算矩陣乘法 模型參數是多核共享的
4.異步是數據準備不用等模型預測完上一批數據就開始準備下一批數據
5.batch size(一次處理數據的多少)的調整
20200102
現在要求輸入的樣本數必須是 batch_size*CPU_NUM的整數倍 如果不足的話可以在數據集中補一些重復樣例
數據并行造成的預測輸出順序的亂序問題 通過
根據guid進行了重排序 得到了解決
在構建自己的數據集的時候guid最好是連續整數
13:55:41
PaddleHub-金宣-百度 2020/1/2 13:55:41
預測時候還是老辦法 我們自動給predict的data加了guid
總結
以上是生活随笔為你收集整理的命名实体识别NER遗留问题----模型构建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux sh 改 cmd
- 下一篇: 超详细中文预训练模型ERNIE使用指南-