在日常生活中新聞具備有多的信息,在AINWIN互聯(lián)網(wǎng)輿情企業(yè)風(fēng)險(xiǎn)事件的識(shí)別和預(yù)警 比賽中參賽選手需要根據(jù)新聞識(shí)別主體和新聞?lì)愋汀=裉煲黄饋?lái)看看Kaggle學(xué)術(shù)活動(dòng)知識(shí)點(diǎn):使用BERT完成NLP任務(wù)!
比賽官網(wǎng)(報(bào)名即可下載數(shù)據(jù)集):http://ailab.aiwin.org.cn/competitions/48
比賽給定了的1w條左右的訓(xùn)練數(shù)據(jù),以及部分企業(yè)主體名稱的匯總。接下來(lái)我們看如何一步一步完成本場(chǎng)比賽的。比賽思路對(duì)比賽要求進(jìn)行分析后,
可以將賽題任務(wù)具體劃分為:
任務(wù)1:企業(yè)主體抽取:抽取出新聞中主要的企業(yè)名稱,并與完整的企業(yè)名稱進(jìn)行對(duì)應(yīng);(NER任務(wù))
任務(wù)2:新聞?lì)愋头诸悾焊鶕?jù)新聞的內(nèi)容將新聞的類型進(jìn)行具體分類;
(文本分類任務(wù))完成思路:
將任務(wù)1和任務(wù)2,分開(kāi)完成;將任務(wù)1和任務(wù)2,一起用Bert建模;
任務(wù)1:使用TFIFD完成對(duì)文本進(jìn)行分詞:
import?jieba
def?strcut(s):
seg_list = jieba.cut(s)
return ' '.join(list(seg_list))
train_title?=?train_data['NEWS_TITLE'].apply(strcut)
TFIDF + 線性模型:
from?sklearn.feature_extraction.text?import?TfidfVectorizer
tfidf?=?TfidfVectorizer(ngram_range=(1,1))
train_title_ttidf?=?tfidf.fit_transform(train_title)
驗(yàn)證集分類精度約89%。
任務(wù)1:使用BERT分類進(jìn)行token處理:
from?transformers?import?BertTokenizer
tokenizer?=?BertTokenizer.from_pretrained('bert-base-chinese')
train_encoding?=?tokenizer(list(tr_x),?truncation=True,?padding=True,?max_length=128)
val_encoding?=?tokenizer(list(val_x),?truncation=True,?padding=True,?max_length=128)
讀取模型并定義優(yōu)化器:
import?torch
from?transformers?import?AutoModelForSequenceClassification,?AdamW,?get_linear_schedule_with_warmup
device?=?torch.device("cuda:0"?if?torch.cuda.is_available()?else?"cpu")
model.to(device)
optim?=?AdamW(model.parameters(),?lr=5e-5)
total_steps?=?len(train_loader)?*?1
任務(wù)2:使用正則匹配通過(guò)公司主體與數(shù)據(jù)集中字符串匹配:
for?row?in?train_data.iloc[:100].iterrows():
match1 = company_name[company_name['name'].apply(lambda x: x in row[1].NEWS_TITLE)]
if match1.shape[0] > 0:
match1.loc[:, 'name_len'] = match1['name'].apply(len)
match1 = match1.sort_values(by='name_len')
match1 = match1.iloc[-1]['name']
else:
match1 = ''
match2 = company_name[company_name['name_short'].apply(lambda x: x in row[1].NEWS_TITLE)]
if match2.shape[0] > 0 and match1 == '':
match2.loc[:, 'name_len'] = match2['name_short'].apply(len)
match2 = match2.sort_values(by='name_len')
match2 = match2.iloc[-1]['name']
else:
match2 = ''
識(shí)別結(jié)果:
標(biāo)題:?東陽(yáng)光(600673.SH):控股股東一致行動(dòng)人宜昌東陽(yáng)光藥業(yè)質(zhì)押2500萬(wàn)股
主體標(biāo)簽:?宜昌東陽(yáng)光藥業(yè)股份有限公司
主體識(shí)別結(jié)果:?宜昌東陽(yáng)光藥業(yè)股份有限公司
標(biāo)題:?千億市值蒸發(fā)超九成,康美藥業(yè)財(cái)務(wù)造假坑了誰(shuí)?
主體標(biāo)簽:?康美藥業(yè)股份有限公司
主體識(shí)別結(jié)果:?康美藥業(yè)股份有限公司
任務(wù)2:BERT 序列標(biāo)注加載BERT序列標(biāo)注模型:
import?torch
from?transformers?import?BertForTokenClassification,?AdamW,?get_linear_schedule_with_warmup
model?=?BertForTokenClassification.from_pretrained('bert-base-chinese',?num_labels=7)
device?=?torch.device("cuda:1"?if?torch.cuda.is_available()?else?"cpu")
model.to(device)
識(shí)別結(jié)果:
標(biāo)題:山東省政府辦公廳就平邑縣玉榮商貿(mào)有限公司石膏礦坍塌事故發(fā)出通報(bào)
機(jī)構(gòu):?山東省政府辦公廳
機(jī)構(gòu):?平邑縣玉榮商貿(mào)有限公司
標(biāo)題:[新聞直播間]黑龍江:龍煤集團(tuán)一煤礦發(fā)生火災(zāi)事故
位置:?黑龍江
機(jī)構(gòu):?龍煤集團(tuán)
代碼&數(shù)據(jù)比賽報(bào)名地址:http://ailab.aiwin.org.cn/competitions/48
文章完整代碼:https://github.com/datawhalechina/competition-baseline
掃碼獲取備賽計(jì)劃,考前查缺補(bǔ)漏、重點(diǎn)沖刺
【免費(fèi)領(lǐng)取】相關(guān)真題及解析,還有一對(duì)一學(xué)術(shù)活動(dòng)規(guī)劃!


? 2025. All Rights Reserved. 滬ICP備2023009024號(hào)-1