做者|Felix Laumann
編譯|VK
來源|Towards Data Sciencegit
NER是信息提取的一個子任務,它試圖定位並將非結構化文本中提到的指定實體劃分爲預約義的類別,如人名、組織、位置、醫療代碼、時間表達式、數量、貨幣。github
咱們建立了咱們本身的小型測試數據集,其中11個示例來自谷歌的Taskmaster 2數據集,該數據集於2020年2月剛剛發佈。咱們將此數據集視爲NER解決方案中將來研究和產品的基準數據集。咱們用該數據集來探索TextSpace。機器學習
這個數據集中的句子可能在長度和包含的信息上有所不一樣,可是咱們選擇了其中包含大量實體的句子,所以咱們能夠根據最新的NER解決方案來區分優劣。咱們測試集中的句子來自不一樣的領域,由於咱們想看看咱們在這篇文章中比較的解決方案有多靈活。請注意,這些示例中使用了Dialogflow聊天機器人,所以咱們也但願Dialogflow在這些例子上可以執行得很好。性能
咱們將首先詳細地看兩個例子,最後會有一個總結。學習
讓咱們以一個想要預訂航班的用戶的句子爲例:測試
"So, I would like to fly out sometime tonight and fly back in the evening in 4 days. From I’m looking to go to Denver. I’m flying out of San Francisco."網站
IBM的MAX命名實體標記器執行得並很差,它只返回屬於時間和位置類別的單詞。不幸的是,它甚至在第二句的開頭將"I"錯誤地歸類爲一個事件。ui
與此相比,StanfordNLP NER模型的性能要好得多。找到全部可能的實體,甚至返回正確的日期。然而,有一個小錯誤發生了,那就是沒有意識到"in the evening in 4 days"是屬於一塊兒的。它把"evening"劃分爲今天的晚上,而不是四天裏的晚上。this
spaCy NER模型的性能與IBM相同,只返回屬於時間、日期或位置類別的單詞。它沒有顯示StanfordNLP的確切日期。spa
在本例中,咱們的解決方案TextSpace執行得很是好,它提取了全部可能的具備確切日期的實體,相似於StanfordNLP。可是,TextSpace也會返回一個時間週期的時間間隔,它不是很具體,例如"evening"或"tonight"。這裏第一個是地點:
和時間:
不幸的是,TextSpace也不認可"evening"和"4 days"屬於一塊兒,並返回當天的晚上,就像StanfordNLP所作的那樣。
咱們使用Dialogflow聊天機器人預訂,咱們能夠獲得平庸的結果。它能正確識別日期和時間、出發城市和到達城市,但卻徹底忽略了"in 4 days"。很是使人失望,由於咱們使用了谷歌數據集和Dialogflow的特定於域的聊天機器人來預測。
接下來,咱們用下面的句子來比較這四種解決方案:
"I would like to book a room in the Park Hyatt Aviara Resort and it costs $279 per night. It’s rated 4.8 stars. It offers an 18-hole golf course, an outdoor pool & tennis courts plus a spa & fine dining."
咱們再次從IBM的MAX實體標記器開始。咱們想要入住的酒店被認爲是一個地點,而"&"被錯誤地認爲是一個組織。例如,徹底忽略了"$279"的價格。與前面的機票預訂示例同樣,性能至關差。
StanfordNLP作了更好的工做,發現"279美圓"是錢,停留的時間和star的數量。不幸的是,咱們的酒店也被歸類爲一個地點,而不是一個組織,它可能對某些應用程序起做用,但當用戶但願自動轉發到酒店網站時,這可能不起做用。它也不認可279美圓的價格屬於"per night",而將"night"做爲日期返回。
咱們使用Dialogflow預先訓練過的酒店預訂機器人,這讓咱們天然地指望它的結果至少和StanfordNLP發現的同樣好。不幸的是,狀況並不是如此,甚至連"$279"的價格也沒有找到。它正確地將"Hyatt"歸類爲場地連鎖,但錯誤地將其商業名稱歸類爲"Resort and it costs $279"。日期也沒有找到了。
正如前面的例子所示,spaCy的表現也一樣糟糕。咱們的酒店"Park Hyatt Aviara Resort"被歸類爲設施(FAC),這並不徹底正確,但"279"被正確歸類爲金錢。不幸的是,"spa & fine"被錯誤地視爲一個組織。
TextSpace在這五個解決方案中表現最好。它發現"Hyatt"做爲一個組織,其貨幣價值爲"279美圓",跳過"night",由於它知道279美圓是每晚的價格,能找到全部的數字。
正如所承諾的,咱們如今比較全部這五個解決方案在咱們的測試集的11個例子的表現來衡量。衡量方法很直接:咱們知道哪些句子對應的劃分方式,咱們計算分類的相關信息。例如,在句子"So, I would like to fly out sometime tonight and fly back in the evening in 4 days. From I’m looking to go to Denver. I’m flying out of San Francisco."。若是一個解決方案將"tonight"和"in the evening in 4 days"劃分爲正確的日期和時間範圍,將"Denver"和"San Francisco"做爲地點或城市,那麼該解決方案將實現100%的精確度和召回率。換句話說,全部潛在的實體都被發現了,而且都被正確地分類了。當其中一個單詞被漏掉,好比"evening in 4 days",只有3/4的單詞是正確的,召回率爲75%。另外,若是一個詞被錯誤分類,好比"I"是一個組織,那麼準確率將降低到4/5,即80%。若是找到日期,可是隻返回"time"或"date",而沒有精確的日期或時間,咱們將減去0.5。
與其餘四種解決方案相比,TextSpace的NER表現最好,緊隨其後的是StanfordNLP。IBM的MAX實體標記器整體上使人失望。
下面是這些柱狀圖上的數字:
若是你想重現這些結果,如下是咱們使用的11個英文句子:
有關實現的更多細節,請參見咱們的GitHub存儲庫:https://github.com/kumar-shridhar/NER-Benchmarks。
歡迎關注磐創AI博客站:
http://panchuang.net/
sklearn機器學習中文官方文檔:
http://sklearn123.com/
歡迎關注磐創博客資源彙總站:
http://docs.panchuang.net/