小白使用Bert跑分類模型


小白使用Bert跑分類模型

2019.3.18 Monday - 3.19 Tuesday
網上使用Bert跑文本分類的教程很多:
Blog:https://blog.csdn.net/u012526436/article/details/84637834

Github地址:https://github.com/google-research/bert

很神奇的一點,點擊直接下載速度超級慢,但是右鍵保存下載速度很快。

Run_classifier.py
1.main函數入口中,flags.mark_flag_as_required()。TF定義了tf.flags用於支持接受命令行傳遞參數,相當於接受args。該方法則是在程序運行前將某些命令行參數加入到“必備參數”的字典中,以判斷解析完的參數是否滿足這些必備要求。
2.Tf.logging.set_verbosity() : 五個不同級別的日志消息。DEBUG, INFO, WARN, ERROR AND FATAL, 設置為哪個級別TensorFlow則輸出與該級別相對應的所有日志消息以及所有級別的嚴重級別。默認設置為Warn, 但是在跟蹤模型訓練時,可以將級別調整為INfo, 這將提供適合操作正在進行的其他反饋。
3.導入上一級模塊的包:

parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, parentdir)
from data_helpers import *

4.Tf.app.flags.define_string() 定義一個用於接收string類型數值的變量。三個參數:1. 變量名稱 2. 默認值 3. 用法描述
5.warmup_proportion:warm up 步數的比例,比如說總共學習100步,warmup_proportion=0.1表示前10步用來warm up,warm up時以較低的學習率進行學習(lr = global_step/num_warmup_steps * init_lr),10步之后以正常(或衰減)的學習率來學習。
6.https://www.cnblogs.com/jiangxinyang/p/10241243.html 里面的分類方法都可以嘗試一下!
7. Bert 的 封裝性很強,調用一下estimator的train和evaluate函數就搞定了。黑盒的好處是我們可以拿來用,壞處是用了之后調來調去發現這破盒子啥玩意都輸出不來,只能破罐子破摔拆盒子才行。這樣就有點麻煩了。我的二分類數據結果F值總是0, 也就是訓練了半天什么東西都沒學得。

  • 進行簡單調參,lr, batch, epoch, max_length都調了調,我習慣調地差距很大,如果結果有強烈的變化,說明這個按鈕是管用的!然而所有的按鈕都“壞掉了”。
  • 數據輸入部分的問題,為了跑的更快,我從訓練集中先只截取了幾千條用於訓練,因為Bert有一個max_length參數,當embedding的維度超過最大長度時會進行自動截斷。我認為是把我訓練集中的句子都一半一半地輸進去導致結果為0的。於是做了個對照組,可以先把短的數據(小於512)挑出,保證數據的正負例均衡度沒有那么差,放進去看看效果有什么不同。然而結果並沒有什么不同。
    Len :70776
    Positive : 21653
    Negative : 49123
  • 最后想是不是迭代次數不夠多,我在代碼中加入了顯示train_loss的步驟,3個epoch+train_batch=16, loss始終沒有收斂的跡象。
  • batch調為32的時候服務器都會OOM,看來是跑不動這些個十幾萬的數據了。初步分析我認為是文本進行特征提取的步驟出現的問題。BERT的具體原理我也不是很懂。還是再跑幾個簡單的分類模型好了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM