Eric_nlp
Eric_nlp
**原因:** 在使用make_vocab,並改好model_config個字詞數量後;會遇到[UNK]是因為,在train.py的時候,bert會先幫你做分詞(切開字or詞),就是關於--segment參數,有兩種方式,如果用segment會先分開,但以bert分詞的邏輯,絕對不會跟你字典一模一樣,舉例來說:「這醬油瓶好大」,他可能會先預切成:「這醬_油瓶_好大」_(實際分隔是用空白,因為空白會被吃掉用底線示意)_;而你用make_vocab產生的字典,只有「"這" , "醬油瓶" , "好大"」,因此bert在分詞完,正要抓字典的時候,發現沒有「這醬」跟「油瓶」,他就會顯示:[UNK] [UNK] 好大。 然後你就覺得奇怪明明字典就有為何他會顯示UNK,因為bert預切的邏輯跟vocab_user的邏輯不同,所以造成這種問題。 那第二種就是不開啟segment(以詞為單位),那他就會全部切成單字,那麼你就需要一個字庫是把所有內容段開的,沿用上面例子,預切出來的分詞是:「這_醬_油_瓶_好_大」,每個字單獨,那字典就要擺著有每個字單獨的,那麼train都抓的到單字(而非[UNK]),這時你在generate的時候就不會產生[UNK]了。 **以下是我目前的知識:** (方法) **一、 (在bert分詞後,開始訓練前,顯示出分詞的結果--抽樣5句)** 在分詞後、抓字典,檢查有沒有[UNK] train.py,你可以去改寫 build_files 的function, 在for迴圈外創一個 show = [] 的 list 然後在sublines後面加一個show.append(random.choice(sublines)),最後在print('Tokenized Data Sample')後加一個print('\n'.join([' '.join(s) for s...
> > 同樣遇到了這個問題,是詞庫導致的,默認使用的是`cache/vocab_small.txt`,裡面13317個單詞,包括各種符號,當樣本量小的時候,結果就會有很多亂碼。可以根據自己的data,生成vocab文件(當然這樣的話,單詞來源受限於樣本了)步驟如下: > > > > * 生成vocab_user.txt文件 > > > > ``` > > cd cache/ > > bash make_vocab.sh > > ``` > > > > >...