1樓:洋蔥
肯定是需要的,而且BERT的輸入嚴格來說不是按字,而且按照token,這個token是BERT自帶的tokenization的結果,中文漢字會切分為單個的字元,英文或數字串行會按照一定的規則新增##來降低詞表大小。
2樓:傅聰
需要有個remap的過程、比如訓練時候從BIO標註轉換成模型輸出labels可以這樣做:
import
numpy
asnp
# tokenize後的token與訓練資料的label index不一致
text
='年齡: 18 - 24 歲'
entities=[[
4,11,
'NUM_RANGE'
]]tokens=[
'[CLS]'
,'年'
,'齡'
,':'
,'18'
,'-'
,'24'
,'歲'
,'[SEP]'
]labels=np
.zeros
(len
(tokens
))all_entities=[
'O',
'NUM_RANGE'
]entity2id
=entity_B
=entity_I
=offset=0
fori
,token
inenumerate
(tokens[1
:-1]):
# 不計算 [CLS] [SEP]
stemed_token
=token[2
:]if
token[:2
]=='##'
else
tokenst=
text
[offset:].
find
(stemed_token)if
st<0:
raise
ValueError(f
"token:
不在text: 中")
st+=
offset
offset
+=len
(stemed_token)if
stin
entity_B
:labels[i
+1]=
entity2id
[entity_B[st
]]*2+
1# B-
entity_B
.pop(st
)[entity_I
.pop(st
+idx
)for
idxin
range(1
,len
(stemed_token
))]elif
stin
entity_I
:labels[i
+1]=
entity2id
[entity_I[st
]]*2+
2# I-
[entity_I
.pop(st
+idx
)for
idxin
range
(len
(stemed_token
))]針對tokenize邊界與訓練資料邊界不一致等等的其他問題就根據實際情況取捨了。
3樓:Honda
分詞,分字都可以。一般情況下分字就可以了。如果是中英文混合的,英文按照bert的標準分詞,wordpiece 分詞即可..
關於base64的中文編碼?
basic13 先問是不是,再問為什麼。並非所有的中文的base64編碼都是以5開頭的,比如 耀 以6開頭,還有 以4開頭。不過呢,中文大部分是以5開頭的。要了解為什麼會如此,可以先從base64編碼的原理說起。Base64大致上是在將原始資料按照3位元組的24個bit切分,每6個bit一組,每組前...
請問Phabricator如何支援中文搜尋?
Jimmy 讓Phabricator支援中文的全文搜尋 https huang.sh 2016 11 E8 AE 如果你的MySQL是5.7.6或者更高版本,登入到Phabricator所使用的MySQL資料庫上,執行如下SQL語句。USE phabricator search DROP INDEX...
關於備考CMA,中文,報班還是自學?
金魚不冒泡 我這個人學習的自覺性其實不算低的 自認為 之前自己是有自學過一段時間的,但學習起來動力不足,而且感覺學的內容不系統,最終還是選擇了報班,報班的費用對學生來說確實不低,但我覺得價效比這個事情也是需要考慮到的,我覺得自學除非自己能力,自制力身份強,不然還是老老實實報班吧,錢花的是有一定道理的...