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】基于預(yù)訓(xùn)練的中文NLP工具介紹:ltp 和 fastHan

        共 6850字,需瀏覽 14分鐘

         ·

        2022-03-15 15:48


        • 1. 簡(jiǎn)介

        • 2. ltp

          • 2.1 工作流程

          • 2.2 demo

          • 2.3 詞典分詞

          • 2.4 詞性標(biāo)注集

          • 2.5 模型算法

        • 3. fastHan

          • 3.1 模型結(jié)構(gòu)

          • 3.2 demo

          • 3.3 詞典分詞

          • 3.4 微調(diào)模型

          • 3.5 詞性標(biāo)注集

        • 4. 速度對(duì)比實(shí)驗(yàn)


        1. 簡(jiǎn)介

        今天給大家介紹兩個(gè)中文自然語(yǔ)言處理工具:ltp 和 fastHan,兩者都支持基本的中文自然語(yǔ)言處理任務(wù),包括中文分詞、詞性標(biāo)注、命名實(shí)體識(shí)別和依存句法分析等。ltp 是由哈工大社會(huì)計(jì)算與信息檢索研究中心(HIT-SCIR)開(kāi)源,基于 pytorch 與 transformers 實(shí)現(xiàn)的語(yǔ)言技術(shù)平臺(tái),其內(nèi)核為基于 Electra 的聯(lián)合模型。

        paper:?N-LTP:?An?Open-source?Neural?Language?Technology?Platform?for?Chinese?
        link:?https://arxiv.org/pdf/2009.11616.pdf
        code:?https://github.com/HIT-SCIR/ltp

        fastHan 是由復(fù)旦大學(xué)自然語(yǔ)言處理實(shí)驗(yàn)室邱錫鵬組研發(fā),基于 fastNLP 與 pytorch 實(shí)現(xiàn)的中文自然語(yǔ)言處理工具,其內(nèi)核為基于 BERT 的聯(lián)合模型。

        paper:?fastHan:?A?BERT-based?Multi-Task?Toolkit?for?Chinese?NLP
        link:?https://arxiv.org/pdf/2009.08633v2.pdf
        code:?https://github.com/fastnlp/fastHan

        2. ltp

        2.1 工作流程

        如上為 N-LTP 的工作流程,輸入為中文語(yǔ)料庫(kù),輸出為相對(duì)豐富和快速的分析結(jié)果,包括詞法分析(中文分詞、詞性標(biāo)注和命名實(shí)體識(shí)別),依存句法分析和語(yǔ)義分析(語(yǔ)義依存分析和語(yǔ)義角色標(biāo)注)等。

        上圖展示了 N-LTP 的基本模型結(jié)構(gòu),主要由一個(gè)共享編碼器和幾個(gè)處理不同任務(wù)的解碼器組成。整個(gè)框架共享一個(gè)編碼器,用于利用在所有任務(wù)中共享的知識(shí)。每個(gè)任務(wù)分別使用各自的任務(wù)解碼器。所有任務(wù)通過(guò)一個(gè)聯(lián)合學(xué)習(xí)機(jī)制同時(shí)進(jìn)行優(yōu)化。此外,還引入了知識(shí)蒸餾技術(shù),以鼓勵(lì)多任務(wù)模型性能超越其單任務(wù)教師模型。

        2.2 demo

        使用 pip 安裝 ltp:

        pip?install?ltp

        快速使用:

        from?ltp?import?LTP
        model?=?LTP()
        #?默認(rèn)加載?small?模型
        #?model?=?LTP(path="small")
        #?path?可以為下載下來(lái)的包含ltp.model和vocab.txt的模型文件夾
        #?也可以接受一些已注冊(cè)可自動(dòng)下載的模型名:
        #?base/base1/base2/small/tiny/GSD/GSD+CRF/GSDSimp/GSDSimp+CRF
        sent_list?=?['俄羅斯總統(tǒng)普京決定在頓巴斯地區(qū)開(kāi)展特別軍事行動(dòng)。']

        #?中文分詞
        seg,?hidden?=?model.seg(sent_list)
        #?詞性標(biāo)注
        pos?=?model.pos(hidden)
        #?命名實(shí)體識(shí)別
        ner?=?model.ner(hidden)
        #?語(yǔ)義角色標(biāo)注
        srl?=?model.srl(hidden)
        #?依存句法分析
        dep?=?model.dep(hidden)
        #?語(yǔ)義依存分析
        sdp?=?model.sdp(hidden)

        部分分析結(jié)果:

        seg:
        [['俄羅斯',?'總統(tǒng)',?'普京',?'決定',?'在',?'頓巴斯',?'地區(qū)',?'開(kāi)展',?'特別',?'軍事',?'行動(dòng)',?'。']]
        pos:
        [['ns',?'n',?'nh',?'v',?'p',?'ns',?'n',?'v',?'a',?'n',?'v',?'wp']]
        ner:
        [[('Ns',?0,?0),?('Nh',?2,?2),?('Ns',?5,?6)]]

        詞性標(biāo)注結(jié)果中的每個(gè)元素表示分詞結(jié)果中相應(yīng)的單詞詞性,命名實(shí)體識(shí)別結(jié)果中的每個(gè)元素為一個(gè)三元組,分別表示實(shí)體類(lèi)型、單詞開(kāi)始編號(hào)和單詞結(jié)束編號(hào)。

        2.3 詞典分詞

        LTP 允許用戶使用 init_dict 函數(shù)和 add_words 函數(shù)添加自定義詞典:

        #?model.init_dict(user_dict_path)
        model.add_words(['俄羅斯總統(tǒng)',?'頓巴斯地區(qū)'])
        seg,?_?=?model.seg(sent_list)
        seg:
        [['俄羅斯總統(tǒng)',?'普京',?'決定',?'在',?'頓巴斯地區(qū)',?'開(kāi)展',?'特別',?'軍事',?'行動(dòng)',?'。']]

        2.4 詞性標(biāo)注集

        LTP 使用的是 863 詞性標(biāo)注集,其各個(gè)詞性含義如下表。

        TagDescriptionExampleTagDescriptionExample
        aadjective美麗niorganization name保險(xiǎn)公司
        bother noun-modifier大型, 西式nllocation noun城郊
        cconjunction和, 雖然nsgeographical name北京
        dadverbnttemporal noun近日, 明代
        eexclamationnzother proper noun諾貝爾獎(jiǎng)
        gmorpheme茨, 甥oonomatopoeia嘩啦
        hprefix阿, 偽ppreposition在, 把
        iidiom百花齊放qquantity個(gè)
        jabbreviation公檢法rpronoun我們
        ksuffix界, 率uauxiliary的, 地
        mnumber一, 第一vverb跑, 學(xué)習(xí)
        ngeneral noun蘋(píng)果wppunctuation,。!
        nddirection noun右側(cè)wsforeign wordsCPU
        nhperson name杜甫, 湯姆xnon-lexeme萄, 翱



        zdescriptive words瑟瑟,匆匆

        LTP 中的 NER 模塊識(shí)別三種命名實(shí)體,分別如下:

        標(biāo)記含義
        Nh人名
        Ni機(jī)構(gòu)名
        Ns地名

        2.5 模型算法

        默認(rèn)加載的 small 模型各個(gè)模塊使用的算法如下,詳細(xì)介紹可參考原論文。

        • 分詞:Electra Small + Linear

        • 詞性:Electra Small + Linear

        • 命名實(shí)體:Electra Small + Adapted Transformer + Linear

        • 依存句法:Electra Small + BiAffine + Eisner

        • 語(yǔ)義依存:Electra Small + BiAffine

        • 語(yǔ)義角色:Electra Small + BiAffine + CRF

        3. fastHan

        3.1 模型結(jié)構(gòu)

        如上展示了 fastHan 的基本模型結(jié)構(gòu),其采用基于 BERT 的聯(lián)合模型在 13 個(gè)語(yǔ)料庫(kù)上進(jìn)行多任務(wù)學(xué)習(xí),可以處理中文分詞、詞性標(biāo)注、命名實(shí)體識(shí)別和依存句法分析四項(xiàng)基本任務(wù)。

        fastHan 有 base 和 large 兩個(gè)版本,large 模型使用 BERT 的前 8 層,base 模型使用 Theseus 策略將 large 模型的 8 層壓縮至 4 層。base 版本在總參數(shù)量 150MB 的情況下在各項(xiàng)任務(wù)上均有不錯(cuò)表現(xiàn),large 版本則接近甚至超越 SOTA 模型。

        3.2 demo

        使用 pip 安裝 fastHan:

        pip?install?fastHan

        快速使用:

        from?fastHan?import?FastHan
        model?=?FastHan()
        #?默認(rèn)加載base模型
        #?使用large模型如下
        #?model?=?FastHan(model_type="large")
        model.set_device(0)
        sent_list?=?['俄羅斯總統(tǒng)普京決定在頓巴斯地區(qū)開(kāi)展特別軍事行動(dòng)。']

        #?中文分詞
        seg?=?model(sent_list)
        #?詞性標(biāo)注
        pos?=?model(sent_list,?target="POS")
        #?命名實(shí)體識(shí)別
        ner?=?model(sent_list,?target="NER",?return_loc=True)
        #?依存句法分析
        dep?=?model(sent_list,?target="Parsing")

        分析結(jié)果:

        seg:
        [['俄羅斯',?'總統(tǒng)',?'普京',?'決定',?'在',?'頓巴斯',?'地區(qū)',?'開(kāi)展',?'特別',?'軍事',?'行動(dòng)',?'。']]
        pos:
        [[['俄羅斯',?'NR'],?['總統(tǒng)',?'NN'],?['普京',?'NR'],?['決定',?'VV'],?['在',?'P'],?['頓巴斯',?'NR'],?['地區(qū)',?'NN'],?['開(kāi)展',?'VV'],?['特別',?'JJ'],?['軍事',?'NN'],?['行動(dòng)',?'NN'],?['。',?'PU']]]
        ner:
        [[['俄羅斯',?'NS',?0],?['普京',?'NR',?5],?['頓巴斯',?'NS',?10]]]
        dep:
        [[['俄羅斯',?2,?'nn',?'NR'],?['總統(tǒng)',?3,?'nn',?'NN'],?['普京',?8,?'xsubj',?'NR'],?['決定',?0,?'root',?'VV'],?['在',?8,?'prep',?'P'],?['頓巴斯',?7,?'nn',?'NR'],?['地區(qū)',?5,?'pobj',?'NN'],?['開(kāi)展',?4,?'ccomp',?'VV'],?['特別',?11,?'amod',?'JJ'],?['軍事',?11,?'nn',?'NN'],?['行動(dòng)',?8,?'dobj',?'NN'],?['。',?4,?'punct',?'PU']]]

        當(dāng)設(shè)置 return_loc=True 時(shí),結(jié)果會(huì)返回單詞的第一個(gè)字符在原始輸入句子中的位置。

        3.3 詞典分詞

        fastHan 允許用戶使用 add_user_dict 函數(shù)添加自定義詞典,該詞典會(huì)影響模型在分詞任務(wù)中的權(quán)重分配。進(jìn)行分詞任務(wù)時(shí),首先利用詞典和正向、反向最大匹配法進(jìn)行分詞,并將詞典方法的分詞結(jié)果乘上權(quán)重系數(shù)融入到深度學(xué)習(xí)模型的結(jié)果中。add_user_dict 函數(shù)的參數(shù)可以是由單詞組成的列表,也可以是文件路徑(文件中的內(nèi)容是由 '\n' 分隔開(kāi)的詞)。

        用戶可使用 set_user_dict_weight 函數(shù)設(shè)置自定義詞典中的單詞權(quán)重系數(shù)(若不設(shè)置,默認(rèn)為 0.05)。

        model.add_user_dict(["俄羅斯總統(tǒng)",?"頓巴斯地區(qū)"])
        #?自定義詞典中的單詞權(quán)重系數(shù)默認(rèn)為0.05
        model.set_user_dict_weight()
        seg1?=?model(sent_list,?use_dict=True)
        #?自定義詞典中的單詞權(quán)重系數(shù)設(shè)置為1.0
        model.set_user_dict_weight(1.0)
        seg2?=?model(sent_list,?use_dict=True)
        seg1:
        [['俄羅斯',?'總統(tǒng)',?'普京',?'決定',?'在',?'頓巴斯',?'地區(qū)',?'開(kāi)展',?'特別',?'軍事',?'行動(dòng)',?'。']]

        seg2:
        [['俄羅斯總統(tǒng)',?'普京',?'決定',?'在',?'頓巴斯地區(qū)',?'開(kāi)展',?'特別',?'軍事',?'行動(dòng)',?'。']]

        3.4 微調(diào)模型

        用戶可以使用 finetune 函數(shù)在新的數(shù)據(jù)集上進(jìn)行微調(diào):

        from?fastHan?import?FastHan
        model?=?FastHan(model_type='base')
        model.set_device(0)
        #?traindata?file?path
        cws_data?=?'train.dat'
        model.finetune(data_path=cws_data,?task='CWS',?save=True,?save_url='finetuned_model')

        微調(diào)時(shí)需要將用于訓(xùn)練的數(shù)據(jù)按格式放到一個(gè)文件里。對(duì)于中文分詞任務(wù),要求每行一條句子,每個(gè)詞用空格分隔開(kāi):

        上海?浦東?開(kāi)發(fā)?與?法制?建設(shè)?同步
        俄羅斯總統(tǒng)?普京?決定?在?頓巴斯地區(qū)?開(kāi)展?特別?軍事?行動(dòng)?。

        對(duì)于命名實(shí)體識(shí)別任務(wù),要求使用 B-M-E-S-O 標(biāo)注的 NT/NS/NR 輸入格式:

        札?B-NS
        幌?E-NS
        雪?O
        國(guó)?O
        廟?O
        會(huì)?O
        。O

        主?O
        道?O
        上?O
        的?O
        雪?O

        ...

        對(duì)于詞性標(biāo)注和依存句法解析任務(wù),要求按照 CTB9 的格式與標(biāo)簽集。

        3.5 詞性標(biāo)注集

        fastHan 使用 CTB 詞性標(biāo)注集,其各個(gè)詞性含義如下表。

        標(biāo)簽描述含義標(biāo)簽描述含義
        ADadverbs副詞MMeasure word(including classifiers)量詞,例子:“個(gè)”
        ASAspect marker體態(tài)詞,體標(biāo)記(例如:了,在,著,過(guò))MSPSome particles例子:“所”
        BA把 in ba-const“把”、“將”的詞性標(biāo)記NNCommon nouns普通名詞
        CCCoordinating conjunction并列連詞,“和”NRProper nouns專(zhuān)有名詞
        CDCardinal numbers數(shù)字,“一百”NTTemporal nouns時(shí)序詞,表示時(shí)間的名詞
        CSSubordinating conj從屬連詞(例子:若,如果,如…)ODOrdinal numbers序數(shù)詞,“第一”
        DEC的 for relative-clause etc“的”詞性標(biāo)記ONOnomatopoeia擬聲詞,“哈哈”
        DEGAssociative聯(lián)結(jié)詞“的”PPreposition (excluding 把 and 被)介詞
        DERin V-de construction, and V-de-R“得”PNpronouns代詞
        DEVbefore VPPUPunctuations標(biāo)點(diǎn)
        DTDeterminer限定詞,“這”SBin long bei-construction例子:“被,給”
        ETCTag for words, in coordination phrase等,等等SPSentence-final particle句尾小品詞,“嗎”
        FWForeign words例子:ISOVAPredicative adjective表語(yǔ)形容詞,“紅”
        IJinterjetion感嘆詞VCCopula系動(dòng)詞,“是”
        JJNoun-modifier other than nouns
        VE有 as the main verb“有”
        LBin long bei-construction例子:被,給VVOther verbs其他動(dòng)詞
        LCLocalizer定位詞,例子:“里”


        fastHan 中的 NER 模塊識(shí)別三種命名實(shí)體,分別如下:

        標(biāo)記含義
        NR人名
        NT機(jī)構(gòu)名
        NS地名

        4. 速度對(duì)比實(shí)驗(yàn)

        筆者在 GPU 上(torch1.7 + cuda10.2 + cudnn7.6.5)對(duì)比了 ltp 和 fastHan 的處理速度。從中文維基百科中抽取了 10098 條長(zhǎng)度為 128 左右的句子,分別使用 ltp-tiny、ltp-small、ltp-base 和 fastHan-base、fastHan-large 模型進(jìn)行處理,batch size 設(shè)置為 64,統(tǒng)計(jì)不同任務(wù)的處理速度如下表所示:

        modelcws_speed (句/s)pos_speed (句/s)ner_speed (句/s)
        ltp-tiny613614596
        ltp-small451450413
        ltp-base189186178
        fastHan-base199194194
        fastHan-large144143145

        可以看出,ltp-tiny 和 ltp-small 模型的處理速度顯著快于 fastHan,fashHan-base 的處理速度略快于 ltp-base,fastHan-large 的處理速度最慢。通常情況下,ltp-small 的性能已經(jīng)非常不錯(cuò),對(duì)處理速度要求高的場(chǎng)景建議使用 ltp 默認(rèn)的 small 模型。

        往期精彩回顧




        瀏覽 229
        點(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>
            超碰午夜在线观看 | 天天射综合 | 欧美成人版H性爽997777 | 亚洲综合大香蕉 | 超碰不卡 | 师尊双性精跪趴灌满h微博 | 日本老熟妇 | 日韩丝袜在线 | 五月天无码AV | 天天操天天日天天 |