xmnlp v0.3.0 更新:使用及原理介紹

2021-03-01 xmnlp
封面與正文無關自從 19 年畢業正式工作後,已經好久沒更新過這個公眾號,在帳號被凍結之際,更新一篇。新的一年,計劃多更新一下文章,就當做總結反思吧。

今天這篇文章主要介紹一下大學期間維護的一個 NLP 工具庫 —— xmnlp 的更新。xmnlp 的上一次 release 還停留在 19 年的 11 月,現在回過頭來看之前的代碼,真的覺得好幼稚。

由於疫情,今天過年足不出「滬」,期間沒什麼事情做就想著更新一下 xmnlp,於是乎升級到 v0.3.0。這次更新幾乎把所有的模型都升級了,使用了近年來比較熱門的技術。以下是 ChangeLog:

•重構詞法分析:一個深度模型統一分詞、詞性標註、命名體識別;調用接口不變;去除繁體的支持;去除自定義詞典的支持。•重構文本糾錯:基於人民日報語料構造負樣本,使用 RoBERTa finetune 識別錯誤詞,並使用 Mask Language Model 的特性進行正確詞的預測。•重構情感分類:基於開源電商評論語料,使用 RoBERTa 進行微調。•其他:所有模型只提供 Infer 接口,不再提供訓練接口。

新版本不再支持 Python2 了 (R.I.P),由於模型有點大(單個模型 40M 左右)於是乎把模型獨立了出來,需要下載模型然後進行模型地址的配置才能使用。此次升級的模型均支持 tensorflow serving 進行獨立部署。

接下來簡單介紹一下這次升級主要更新的模塊,以及背後的原理。

詞法分析

之前的版本是基於 HMM 實現的,只提供了分詞和詞性標註兩種功能,這次加入了 NER (Named-Entity Recognition, 命名體識別),基於 RoBERTa Tiny 進行 finetune ,統一了分詞、詞性標註、NER。NER 支持識別地點(Location),人物(Person),機構(Organization),時間(Time),職業(Job)和電子郵件(Email)。語料使用了開源的 2014 版人民日報語料。接口使用方式和之前版本基本保持一致。以 NER 為例,以下是使用示例:

>>> import xmnlp>>> text = "現任美國總統是拜登。">>> print(xmnlp.ner(text))[('美國', 'LOCATION', 2, 4), ('總統', 'JOB', 4, 6), ('拜登', 'PERSON', 7, 9)]

文本糾錯

先前版本是基於簡單的統計模型和樹結構,糾錯能力很弱,幾乎為 0 (尷尬)。這次升級也是基於 RoBERTa 進行 finetune 識別錯詞的位置,提升了錯詞識別的準確率。語料的構造是比較重要的一環,首先要有質量高錯誤率小的正樣本,這裡選用了 2014 版人民日報語料;負樣本的構造也比較簡單,隨機選擇文中 N 個錯詞進行替換,替換方式主要有兩種:1. 拼音相同詞替換(xmnlp 支持拼音識別) 2. 形近字替換。記錄下替換詞的位置作為後續模型學習的 ground-truth。通過模型訓練可以學到錯詞所在的位置。

識別出了錯詞,一般還需要給出正確詞的建議,這一模塊本次升級並沒有重點關注,只是利用了 MASK 語言模型的特性,把錯詞給 MASK 掉,然後進行 MASK 部分詞的預測。

文本糾錯還是中文信息處理中比較難的任務了,由於個人時間有限,並沒有做過多的優化,只提供簡單的錯詞識別能力。其他的能力,比如:多字、漏字、行文通暢度識別等還不具備。當然後續版本會慢慢支持其他的功能。

以下是使用示例:

>>> import xmnlp>>> text = "不能適應體育專業選拔人材的要求">>> print(xmnlp.checker(text)){(11, '材'): [('才', 1.58528071641922), ('材', 1.0009655653266236), ('裁', 1.0000178480604518), ('員', 0.35814568400382996), ('士', 0.011077565141022205)]}

情感分析

個人認為情感分析是一種業務價值比較高的技術,比如,電商場景下通過分析用戶評論的情感傾向來制定店鋪的負反饋策略。情感分析背後的主要技術還是文本分類。文本分類是 NLP 中很基礎的任務了,本人在業務場景中多次用到了這項技術,學術層面上也有相關的工作,後續文章會介紹下我們在 AAAI2021 上關於文本分類相關的研究。

回到 xmnlp,之前的版本使用了樸素貝葉斯,這次換成了 RoBERTa finetune,語料還是開源的電商評論語料。樸素貝葉斯方法的準確率在 85% 左右,升級後在測試集上的準確率在 96% 左右。以下是簡單的示例:

>>> import xmnlp>>> text = "這本書真不錯,下次還要買">>> print(xmnlp.sentiment(text))(0.02727833203971386, 0.9727216958999634)>>> text = "垃圾書一本">>> print(xmnlp.sentiment(text))(0.9930351972579956, 0.006964794360101223)

結果返回的是一個元組,表示 (負向情感的概率,正向情感的概率)

到此這次升級涉及的部分差不多就講完了。更多功能及細節,敬請關注 Github👉:https://github.com/SeanLee97/xmnlp#outline

本人目前在國內某 top 網際網路公司搬磚(打工),坐標上海,從事 NLP 相關工作。xmnlp 只是一款個人維護的面向通用場景的工具,如果你有業務相關的 NLP 需求,且面臨落地問題的,可以 Email 至:xmlee97@gmail.com ,在能力範圍內,本人可以提供有償的諮詢和落地服務。

相關焦點

  • Electron 3.0.0 發布,升級 Chrome、Node 與 V8
    Electron 3.0.0 發布了,Electron 是 GitHub 發布的跨平臺桌面應用開發工具,支持 Web 技術開發桌面應用
  • Apache Kylin v3.0.0-alpha 正式發布
    Apache Kylin v3.0.0-alpha 正式發布!歡迎大家下載使用。
  • 了解vue3.0的異步更新原理
    今天我們簡單了解下vue3.0的異步更新原理,了解一下effect,watchEffect的特點以及最主要queueFlush函數的實現(函數名字本意就是:排隊刷新)effect特點import { effect, reactive } from '.
  • 《文明6》v1.0.0.56最新下載 更新內容中文翻譯一覽
    導 讀 《文明6》v1.0.0.56更新內容有些什麼,今天已經發布了一個新的更新席德·梅爾的文明6,版本號為
  • JPress v3.0 alpha.1 發布
    Press v3.0 alpha.1 發布了, v3.0 比 v2.0 主要是增加了支付的能力,感謝大家的關注,讓 JPress
  • Yearning v0.0.3發布,新增 6 項功能及若干改進
    Yearning  SQL審核平臺 v0.0.3版本發布啦更新內容如下:優化:
  • RegularJS v0.3.0 發布,JavaScript MVC 框架
    RegularJS v0.3.0 發布,此版本是 v0.0.1 版本以來最大的更新版本,引入了一些新特性:
  • 日文遊戲亂碼轉換器下載 Locale Emulator v1.3.0.0
    名稱:最新日文遊戲亂碼轉換工具   運行環境:Win 7、Win 8、Win 8.1      工具介紹:
  • 《逃離塔科夫》4月25日更新了什麼 0.12.5版本更新內容介紹
    6 | 帝國時代4 | 看門狗軍團 | 對馬之魂 | 亦春秋 | 聖女之歌3 | 妖精的尾巴 當前位置:攻略首頁 > 單機遊戲攻略 > 逃離塔科夫 > 正文 《逃離塔科夫》4月25日更新了什麼 0.12.5版本更新內容介紹
  • Cocos2d-JS v3.0 Final 發布,終於來了!
    和腳本的熱更新!          Cocos2d-JS v3.0 改善了所有平臺的工作流。而且,Cocos2d-JS 的 JavaScript 友好 APIs 幫助你更好的開發遊戲,使得非常容易編碼,測試和發布。同時 Cocos2d-JS v3.0 還有很多新特性:編輯器支持,資產管理器,對象池 JS 到 Objective-C/JAVA 反射等等。
  • DRYCC Workflow v1.3.0 版本發布
    自從微軟收購了DEIS團隊,它已經停止更新,所以我們決定努力建立一個全新的開放的開發者社區,我們邀請所有人加入我們,幫助建立下一代PaaS雲服務。DRYCC工作流是一個開源的平臺即服務(PaaS),它為任何kubernetes集群添加了一個開發人員友好的層,使應用程式的部署和管理變得容易。
  • 銳捷資深網絡工程師(RCNP v5.0)技術培訓
    銳捷網絡RCNP v5.0新修訂版本的認證課程,主要定位於適應從事大中型智慧園區網絡的規劃、建設、運維與維護,具有一定網絡基礎的專業技術人員,幫助他們在高級交換、高級路由、網絡出口、網絡安全、無線區域網建設以及網絡硬體設備的故障排錯等領域全面提升。
  • Redmi Note 8獲MIUI V12.0.3.0 穩定版更新
    玩懂手機網資訊,日前,小米終於為紅米 Redmi Note 8 系列機型推送了 MIUI 12 的穩定版更新,更新後的版本號為 MIUI V12.0.3.0 QCOCNXM 穩定版,大小為 2.3G。本次更新的內容主要是,安卓跨版本升級,升級為Android 10,更新了谷歌安全補丁,和部分系統優化等。
  • frp 0.22.0 及 0.23.0 更新解讀
    frp 0.22.0 及 0.23.0 更新解讀本文主要是配合changelog從代碼層面來解讀這次的更新。frp作者於今天下午發布了 0.23.0 版本,就在這時我還在寫0.22.0 的更新解讀,還沒寫完,於是現在文章 的標題變成了0.22.0 和 0.23.0 的更新解讀了。
  • 堡壘之夜9月28日遊戲更新崩潰怎麼辦 v6.0遊戲崩潰解決方法介紹
    堡壘之夜9月28日遊戲更新崩潰怎麼辦 v6.0遊戲崩潰解決方法介紹 堡壘之夜國服V6.0版本已經更新上線,相信不少玩家都開始了新的賽季徵程。
  • Linux Lab 發布 v0.3,簡化操作接口並發布首份中文手冊
    快來看看:如果您想學習 Linux 0.11 內核和 Linux X86 彙編語言,也可以訪問另外兩套 Lab,即 Linux 0.11 Lab 和 CS630 Qemu Lab。版本更新Linux Lab 先後於 6 月 29 日和 10 月 30 日發布了 v0.1 和 v0.2 正式版。
  • F2etest v3.0.0 正式發布,零成本自動化測試方案
    F2etest v3.0.0 正式發布了,經過我們沒日沒夜的持續開發,我們F2etest v3.0.0終於正式發布了。
  • Dcat Admin v2.0.0-beta 發布 - 全新擴展系統
    時隔多日,Dcat Admin 終於迎來了 2.0 的第一個版本,下面簡單介紹一下主要變化,歡迎大家安裝體驗,如果有問題會即時修復~安裝composer require dcat/laravel-admin:v2.0.0-beta -vvv 有什麼變化?
  • Windows Terminal Preview v0.4 發布
    Windows Terminal Preview 0.4 已經發布,更新內容如下:設置更新Profiles.json 移到 LocalState 文件夾Profiles.jsonTab Title 自定義在 v0.3 版本中,引入了「tabTitle」設置,它允許用戶用自定義字符串文本覆蓋選項卡標題。在 0.4 版中,這個功能進行了更改,默認情況下,選項卡標題將設置為配置文件名稱,而不是可執行文件的路徑。如果想更改默認標題,對「tabTitle」設置將能替換選項卡中配置文件的名稱。
  • AE插件:超強三維粒子插件破解版+使用教程Rowbyte Plexus v3.0.10 Win/Mac 免費下載
    AE插件:超強三維粒子插件破解版+使用教程Rowbyte Plexus v3.0.10 Win/Mac 免費下載,漢化在進行中,敬請期待!Rowbyte Plexus v3.0.10帶來了大量的更新,增加了許多過去所欠缺的功能,包括運動模糊,深度圖層遮擋,提高OBJ文件的導入,對象面板,聲音效果器等等作者很高興地宣布Plexus的一個全新的主版本。