1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        NLP賽事數(shù)據(jù)分析和提分總結(jié)!

        共 13185字,需瀏覽 27分鐘

         ·

        2021-05-10 19:24

        賽題名稱:互聯(lián)網(wǎng)輿情企業(yè)風(fēng)險(xiǎn)事件的識(shí)別和預(yù)警

        賽題鏈接:http://ailab.aiwin.org.cn/competitions/48

        1

        賽題背景

        近些年來(lái),資本市場(chǎng)違約事件頻發(fā),財(cái)務(wù)造假、董事長(zhǎng)被抓、股權(quán)質(zhì)押爆倉(cāng)、城投非標(biāo)違約等負(fù)面事件屢屢出現(xiàn)。而在大數(shù)據(jù)和人工智能技術(shù)加持下,各種新興的金融風(fēng)險(xiǎn)控制手段也正在高速發(fā)展,其中通過(guò)采集互聯(lián)網(wǎng)上的企業(yè)輿情信息來(lái)挖掘潛在風(fēng)險(xiǎn)事件是一種較為有效的方式。但這些風(fēng)險(xiǎn)信息散落在互聯(lián)網(wǎng)上的海量資訊中,若能從中及時(shí)識(shí)別出涉及企業(yè)的風(fēng)險(xiǎn)事件,并挖掘出潛在的風(fēng)險(xiǎn)特征,將使得銀行、證券等金融機(jī)構(gòu)在風(fēng)險(xiǎn)監(jiān)控領(lǐng)域中更及時(shí)、全面和直觀地掌握客戶風(fēng)險(xiǎn)情況,大幅提升識(shí)別和揭示風(fēng)險(xiǎn)的能力。而風(fēng)險(xiǎn)事件以文本的形式存在,需要采用人工智能方法進(jìn)行自然語(yǔ)言理解,實(shí)現(xiàn)風(fēng)險(xiǎn)事件的高精度智能識(shí)別。

        2

        賽題任務(wù)

        從給定的互聯(lián)網(wǎng)信息中提取、識(shí)別出企業(yè)主體名稱,以及標(biāo)記風(fēng)險(xiǎn)標(biāo)簽。選手預(yù)測(cè)標(biāo)簽對(duì)應(yīng)格式為(新聞ID,主體全稱,對(duì)應(yīng)風(fēng)險(xiǎn)標(biāo)簽)。

        注:

        1)每篇互聯(lián)網(wǎng)信息可能會(huì)涉及零到多個(gè)主體(公司),每篇互聯(lián)網(wǎng)信息中對(duì)每個(gè)主體只預(yù)測(cè)一個(gè)風(fēng)險(xiǎn)標(biāo)簽;

        2)賽事會(huì)提供一份主體(公司)的全稱清單(其范圍大于待預(yù)測(cè)名單),新聞中提及的主體可能為其簡(jiǎn)稱或別名或主體相關(guān)的自然人(如其董事長(zhǎng)、總經(jīng)理等),選手提交答案時(shí)需要統(tǒng)一識(shí)別并將他們映射至主體全稱輸出在最終的結(jié)果文件中。主體全稱的映射關(guān)系需選手自行處理。

        3)請(qǐng)注意在訓(xùn)練集中存在一類「無(wú)」標(biāo)簽,其指的是對(duì)應(yīng)的新聞內(nèi)容中不包含需識(shí)別的金融風(fēng)險(xiǎn)事件。對(duì)于測(cè)試集中此類情況,選手模型在輸出時(shí)只需準(zhǔn)確打上「無(wú)」的標(biāo)簽,對(duì)應(yīng)主體標(biāo)記為「/」即可。即輸出的為:"新聞 ID,/ ,無(wú)"。

        4)測(cè)試集(需選手利用模型進(jìn)行預(yù)測(cè))的數(shù)據(jù)中會(huì)包含一些噪音數(shù)據(jù),比如在主體(公司)的全稱清單之外的輿情等,選手同樣需要對(duì)其預(yù)測(cè),不計(jì)入自動(dòng)評(píng)分。

        3

        評(píng)價(jià)方式

        統(tǒng)一評(píng)審階段 將選手預(yù)測(cè)結(jié)果和答案進(jìn)行對(duì)比計(jì)算出F1值,F(xiàn)1越大約好

        F1計(jì)算公式為:

        P = 預(yù)測(cè)對(duì)的標(biāo)簽總數(shù) / 預(yù)測(cè)出的標(biāo)簽數(shù)
        R = 預(yù)測(cè)對(duì)的標(biāo)簽總數(shù) / 需要預(yù)測(cè)的總標(biāo)簽數(shù)
        F1 = 2 * P * R /(P+R)
        4

        數(shù)據(jù)描述

        數(shù)據(jù)集文件如下:

        ├── data
        │   ├── RISKLABEL_Training
        │   │   ├── 1_元數(shù)據(jù)格式.docx
        │   │   ├── 2_公司實(shí)體匯總_20210414_A1.xlsx
        │   │   ├── 3_訓(xùn)練集匯總_20210414_A1.xlsx
        │   │   ├── readme.txt
        │   │   ├── result.csv
        │   │   └── ~$_元數(shù)據(jù)格式.docx
        │   └── T1_ID
        │       ├── readme.txt
        │       └── result.csv

        列名數(shù)據(jù)類型能否為空備注
        NEWS_BASICINFO_SIDNUMBER(22)NOT NULL新聞ID
        NEWS_TITLEVARCHAR2(3000)新聞標(biāo)題
        ABSTRACTVARCHAR2(4000)摘要
        CONTENTCLOB正文
        AUTHORVARCHAR2(1000)作者
        SRC_URLVARCHAR2(1000)下載源地址
        SOURCE_TYPEVARCHAR2(100)文章類型01-新聞;02-論壇;03-博客;04-微博;05-平媒;06-微信;07-視頻;08-長(zhǎng)微博;09-APP;10-評(píng)論;99-其他
        PUBLISH_SITEVARCHAR2(100)來(lái)源
        FIRST_WEBVARCHAR2(100)首發(fā)網(wǎng)站名稱
        CHANNELVARCHAR2(100)網(wǎng)站頻道
        NOTICE_DTDATE發(fā)布時(shí)間
        COMPANY_NMVARCHAR2(300)企業(yè)名稱
        LABELVARCHAR2(60)業(yè)務(wù)標(biāo)簽主板/創(chuàng)業(yè)板/中小板/債券退市
        債務(wù)逾期
        實(shí)控人變更
        破產(chǎn)重整
        股票質(zhì)押率過(guò)高
        被政府職能部
        處罰
        被監(jiān)管機(jī)構(gòu)罰款或查處
        被采取監(jiān)管措施
        重大訴訟仲裁
        信息披露違規(guī)等
        5

        數(shù)據(jù)統(tǒng)計(jì)分析

        公眾號(hào)ChallengeHub后臺(tái),回復(fù)”互聯(lián)網(wǎng)輿情“可獲取完整baseline代碼

        首先加載看下數(shù)據(jù)內(nèi)容:


        接下來(lái)我們對(duì)數(shù)據(jù)集中出現(xiàn)的實(shí)體與文本進(jìn)行分析,著重思考比賽思路以及賽題提分點(diǎn)。

        def statics(data):
            stats = []
            for col in data.columns:
                stats.append((col, data[col].nunique(), data[col].isnull().sum() * 100 / data.shape[0],
                              data[col].value_counts(normalize=True, dropna=False).values[0] * 100, data[col].dtype))

            stats_df = pd.DataFrame(stats, columns=['Feature''Unique_values''Percentage_of_missing_values',
                                                    'Percentage_of_values_in_the_biggest category''type'])
            stats_df.sort_values('Percentage_of_missing_values', ascending=False, inplace=True)
            return stats_df

        實(shí)體長(zhǎng)度分布

        統(tǒng)計(jì)每個(gè)實(shí)體的長(zhǎng)度

        stats = entities_df['entity_len'].value_counts().rename_axis('unique_entity_len').reset_index(name='counts')
        fig = px.bar(stats, x='unique_entity_len', y='counts')
        fig.show()

        可以看出,實(shí)體最小長(zhǎng)度為4,平均長(zhǎng)度為13,最大長(zhǎng)度為35,過(guò)長(zhǎng)實(shí)體是我們需要解決的難點(diǎn)之一,我們可以通過(guò)將過(guò)長(zhǎng)實(shí)體進(jìn)行拆分標(biāo)注,然后預(yù)測(cè)的時(shí)候根據(jù)是否相鄰進(jìn)行組合,也可以通過(guò)指針網(wǎng)絡(luò)解決crf在過(guò)長(zhǎng)實(shí)體識(shí)別時(shí)出現(xiàn)span斷裂的問(wèn)題。

        企業(yè)實(shí)體名稱多樣性

        大部分企業(yè)實(shí)體都是以“公司”,“有些股份公司”,“集團(tuán)"結(jié)尾的,另外也存在一些含有括號(hào)的實(shí)體:

        entities_df[
            (entities_df['公司名'].str.contains('('))|
            (entities_df['公司名'].str.contains(')'))|
            (entities_df['公司名'].str.contains('\('))|
            (entities_df['公司名'].str.contains('\)'))
         ]
        # 英文括號(hào)為0

        例如:


        除此之外還有一些其他名稱比較靈活組合的實(shí)體

        文本長(zhǎng)度分析

        新聞標(biāo)題的長(zhǎng)度分布

        新聞標(biāo)題最小長(zhǎng)度為6,最大長(zhǎng)度為120,平均長(zhǎng)度為28。

        新聞內(nèi)容的長(zhǎng)度分布

        train_df['content_len']=train_df['CONTENT'].apply(lambda x:len(x))
        train_df['content_len'].describe()

        可以看到的是新聞內(nèi)容存在過(guò)長(zhǎng)文本,并且嚴(yán)重超過(guò)了現(xiàn)有模型的輸入長(zhǎng)度

        count    11685.000000
        mean      3324.683098
        std       6741.110801
        min          4.000000
        25%         31.000000
        50%        979.000000
        75%       2807.000000
        max      32767.000000
        Name: content_len, dtype: float64

        通過(guò)查看文本,我們可以看到,新聞內(nèi)容中存在大量html代碼標(biāo)簽,我們可以通過(guò)正則表達(dá)式reBeautifulSoup進(jìn)行去除無(wú)關(guān)標(biāo)簽

        # 方式1
        import re
        pattern = re.compile(r'<[^>]+>',re.S)
        result = pattern.sub('', train_df['CONTENT'][11683])
        print("".join(result.split()))
        # 方式2
        from bs4 import BeautifulSoup
        cleantext = BeautifulSoup(train_df['CONTENT'][11683], "lxml").text
        cleantext

        處理前后的文本對(duì)比


        清洗文本之后,文本長(zhǎng)度縮減一半:

        train_df['content_len'].describe()

        count    11685.000000
        mean      3324.683098
        std       6741.110801
        min          4.000000
        25%         31.000000
        50%        979.000000
        75%       2807.000000
        max      32767.000000
        Name: content_len, dtype: float64
        train_df['new_content_len'].describe()

        count    11685.000000
        mean       890.949679
        std       1328.754384
        min          0.000000
        25%         31.000000
        50%        424.000000
        75%       1298.000000
        max      31840.000000
        Name: new_content_len, dtype: float64

        業(yè)務(wù)標(biāo)簽數(shù)量分布

        train_df['LABEL'].value_counts()
        無(wú)                  3042
        實(shí)控人變更               811
        信息披露違規(guī)              800
        重大訴訟仲裁              800
        股票質(zhì)押率過(guò)高             799
        主板/創(chuàng)業(yè)板/中小板/債券退市     799
        被政府職能部門處罰           799
        債務(wù)逾期                798
        被監(jiān)管機(jī)構(gòu)罰款或查處          796
        被采取監(jiān)管措施             796
        破產(chǎn)重整                796
        安全事故                326
        環(huán)境污染                323
        Name: LABEL, dtype: int64

        從上面可以看出,不存在金融事件樣本“無(wú)”所占比列最多,有3042個(gè)樣本;其次是“信息披露違規(guī) ”和“重大訴訟仲裁”,都是800個(gè)樣本,出現(xiàn)次數(shù)最少的兩個(gè)類別是“安全事故”和“環(huán)境污染 ”。


        另外我們從業(yè)務(wù)標(biāo)簽字面我們可以看到的是大部分業(yè)務(wù)標(biāo)簽界限還是比較清晰的,但是“被監(jiān)管機(jī)構(gòu)罰款或查處 ”和“被采取監(jiān)管措施”這兩個(gè)類別的界限還是比較模糊的,這個(gè)也是我們提分的一個(gè)地方:


        6

        基于預(yù)訓(xùn)練模型的多任務(wù)學(xué)習(xí)


        基于bert_multitask_learning進(jìn)行標(biāo)簽分類和實(shí)體識(shí)別的聯(lián)合任務(wù)訓(xùn)練,首先構(gòu)建輸入,

        import bert_multitask_learning
        from bert_multitask_learning.preproc_decorator import preprocessing_fn
        from bert_multitask_learning.params import BaseParams
        @preprocessing_fn
        def toy_cls(params: BaseParams, mode: str):
            "Simple example to demonstrate singe modal tuple of list return"
            if mode == bert_multitask_learning.TRAIN:
                toy_input = ['this is a test' for _ in range(10)]
                toy_target = ['a' if i <=5 else 'b' for i in range(10)]
            else:
                toy_input = ['this is a test' for _ in range(10)]
                toy_target = ['a' if i <=5 else 'b' for i in range(10)]
            return toy_input, toy_target

        @preprocessing_fn
        def toy_seq_tag(params: BaseParams, mode: str):
            "Simple example to demonstrate singe modal tuple of list return"
            if mode == bert_multitask_learning.TRAIN:
                toy_input = ['this is a test'.split(' 'for _ in range(10)]
                toy_target = [['a''b''c''d'for _ in range(10)]
            else:
                toy_input = ['this is a test'.split(' 'for _ in range(10)]
                toy_target = [['a''b''c''d'for _ in range(10)]
            return toy_input, toy_target

        processing_fn_dict = {'toy_cls': toy_cls, 'toy_seq_tag': toy_seq_tag}

        創(chuàng)建多任務(wù)實(shí)例并進(jìn)行實(shí)例

        from bert_multitask_learning import train_bert_multitask, eval_bert_multitask, predict_bert_multitask
        problem_type_dict = {'toy_cls''cls''toy_seq_tag''seq_tag'}

        problem = 'toy_cls&toy_seq_tag'
        # train
        model = train_bert_multitask(
            problem=problem,
            num_epochs=1,
            problem_type_dict=problem_type_dict,
            processing_fn_dict=processing_fn_dict,
            continue_training=True
        )

        模型驗(yàn)證與預(yù)測(cè)

        eval_dict = eval_bert_multitask(problem=problem,
                            problem_type_dict=problem_type_dict, processing_fn_dict=processing_fn_dict,
                            model_dir=model.params.ckpt_dir)
        print(eval_dict)
        # predict
        fake_inputs = ['this is a test'.split(' 'for _ in range(10)]
        pred, model = predict_bert_multitask(
            problem=problem,
            inputs=fake_inputs, model_dir=model.params.ckpt_dir,
            problem_type_dict=problem_type_dict,
            processing_fn_dict=processing_fn_dict, return_model=True)
        for problem_name, prob_array in pred.items():
            print(f'{problem_name} - {prob_array.shape}')

        完整教程可以查看官網(wǎng):https://jayyip.github.io/bert-multitask-learning/tutorial.html

        7

        提分點(diǎn)

        企業(yè)實(shí)體提取:

        • 實(shí)體出現(xiàn)位置
        • 實(shí)體存在不是公司 集團(tuán)結(jié)尾
        • 實(shí)體中存在括號(hào)
        • 實(shí)體可能為空 與 業(yè)務(wù)標(biāo)簽有關(guān)系 LABEL
        • 過(guò)長(zhǎng)實(shí)體 嵌套連續(xù)實(shí)體解決

        比賽中可能用到的NER Trick

        • Q1、如何快速有效地提升NER性能?

        如果1層lstm+crf,這么直接的打開方式導(dǎo)致NER性能達(dá)不到業(yè)務(wù)目標(biāo),這一點(diǎn)也不意外(這是萬(wàn)里長(zhǎng)征的第一步~)。這時(shí)候除了badcase分析,不要忘記一個(gè)快速提升的重要手段:規(guī)則+領(lǐng)域詞典。

        在垂直領(lǐng)域,一個(gè)不斷積累、不斷完善的實(shí)體詞典對(duì)NER性能的提升是穩(wěn)健的,基于規(guī)則+詞典也可以快速應(yīng)急處理一些badcase;對(duì)于通?領(lǐng)域,可以多種分詞工具和多種句法短語(yǔ)?具進(jìn)行融合來(lái)提取候選實(shí)體,并結(jié)合詞典進(jìn)行NER。

        • Q2、如何構(gòu)建引入詞匯信息(詞向量)的NER?

        將詞向量引入到模型中,一種簡(jiǎn)單粗暴的做法就是將詞向量對(duì)齊到相應(yīng)的字符,然后將字詞向量進(jìn)行混合,但這需要對(duì)原始文本進(jìn)行分詞(存在誤差),性能提升通常是有限的。我們知道中文NER通常是基于字符進(jìn)行標(biāo)注的,這是由于基于詞匯標(biāo)注存在分詞誤差問(wèn)題。但詞匯邊界對(duì)于實(shí)體邊界是很有用的,我們?cè)撛趺窗烟N(yùn)藏詞匯信息的詞向量“恰當(dāng)”地引入到模型中呢?

        • Q3、如何解決NER實(shí)體span過(guò)長(zhǎng)的問(wèn)題?

        如果NER任務(wù)中某一類實(shí)體span比較長(zhǎng)(?如醫(yī)療NER中的?術(shù)名稱是很長(zhǎng)的),直接采取CRF解碼可能會(huì)導(dǎo)致很多連續(xù)的實(shí)體span斷裂。除了加入規(guī)則進(jìn)行修正外,這時(shí)候也可嘗試引入指針網(wǎng)絡(luò)+CRF構(gòu)建多任務(wù)學(xué)習(xí)解決。

        指針網(wǎng)絡(luò)會(huì)更容易捕捉較長(zhǎng)的span,不過(guò)指針網(wǎng)絡(luò)的收斂是較慢的,可以對(duì)CRF和指針網(wǎng)絡(luò)設(shè)置不同學(xué)習(xí)率,或者設(shè)置不同的loss權(quán)重。

        • Q4、如何客觀看待BERT在NER中的作用?

        在競(jìng)賽任務(wù)中,BERT很有用!我們可以選取不同的預(yù)訓(xùn)練語(yǔ)?模型在底層進(jìn)行特征拼接。具體地,可以將char、bigram和BERT、XLNet等一起拼接喂入1層lstm+crf中。語(yǔ)?模型的差異越?,效果越好。如果需要對(duì)語(yǔ)言模型finetune,需要設(shè)置不同的學(xué)習(xí)率。

        業(yè)務(wù)標(biāo)簽識(shí)別:

        • 被采取監(jiān)管措施 vs 被監(jiān)管機(jī)構(gòu)罰款或查處
        • 統(tǒng)計(jì)特征:其他新聞字段統(tǒng)計(jì),html標(biāo)簽分析
        8

        資料推薦


        • 天池中藥說(shuō)明書實(shí)體識(shí)別挑戰(zhàn)冠軍方案開源 https://github.com/z814081807/DeepNER
        • 2020阿里云tianchi零基礎(chǔ)入門NLP比賽: rank4選手總結(jié) https://github.com/MM-IR/rank4_NLP_textclassification
        • 刷爆3路榜單,信息抽取冠軍方案分享:嵌套NER+關(guān)系抽取+實(shí)體標(biāo)準(zhǔn)化 https://zhuanlan.zhihu.com/p/326302618
        • 流水的NLP鐵打的NER:命名實(shí)體識(shí)別實(shí)踐與探索 https://zhuanlan.zhihu.com/p/166496466
        • 工業(yè)界如何解決NER問(wèn)題?12個(gè)trick,與你分享~ https://zhuanlan.zhihu.com/p/152463745
        • 中文NER的正確打開方式: 詞匯增強(qiáng)方法總結(jié) (從Lattice LSTM到FLAT) https://zhuanlan.zhihu.com/p/142615620




        ONE


        關(guān)注公眾號(hào)ChallengeHub,回復(fù)”互聯(lián)網(wǎng)輿情“獲取完整代碼和更多案例分析


        掃碼關(guān)注我們

        一個(gè)致力于分享AI知識(shí)的Hub

        整理不易,點(diǎn)三連
        瀏覽 210
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            亚洲 日韩 中文字幕 | 泰剧大尺度床戏无遮挡 | 国产传媒18精品A片午夜 | 黄色成人网站在线观看免费 | 操逼大黄片 | 中文字幕久久精品无码不卡 | 欧美成人精品一级一级 | 狠狠色最新网址 | 久久有码 | 欧美日产国产精品 |