Author Archive

將人工智能戰略落地的秘密

人工智能戰略建模與創建傳統業務戰略不同。本文旨在指導從業人員制定有針對性的人工智能戰略。這些見解基於我的個人經驗以及對大眾汽車,谷歌,人工智能基金等公司的全球人工智能領導者的專家訪談。

詞幹提取 – Stemming | 詞形還原 – Lemmatisation

一文看懂詞幹提取、詞形還原

詞幹提取和詞形還原是英文語料預處理中的重要環節。雖然他們的目的一致,但是兩者還是存在一些差異。

本文將介紹他們的概念、異同、實現算法等。

想要了解更多 NLP 相關的內容,請訪問  NLP專題 ,免費提供59頁的NLP文檔下載。

訪問 NLP 專題,下載 59 頁免費 PDF

 

詞幹提取和詞形還原在 NLP 中在什麼位置?

詞幹提取是英文語料預處理的一個步驟(中文並不需要),而語料預處理是 NLP 的第一步,下面這張圖將讓大家知道詞幹提取在這個知識結構中的位置。

詞幹提取和詞形還原在 NLP 中在什麼位置

 

什麼是詞幹提取和詞形還原?

詞幹提取 – Stemming

詞幹提取是去除單詞的前後綴得到詞根的過程。

大家常見的前後詞綴有「名詞的複數」、「進行式」、「過去分詞」…

詞幹提取

詞形還原 – Lemmatisation

詞形還原是基於詞典,將單詞的複雜形態轉變成最基礎的形態。

詞形還原不是簡單地將前後綴去掉,而是會根據詞典將單詞進行轉換。比如「drove」會轉換為「drive」。

詞形還原

為什麼要做詞幹提取和詞形還原?

比如當我搜索「play basketball」時,Bob is playing basketball 也符合我的要求,,但是 play 和 playing 對於計算機來說是 2 種完全不同的東西,所以我們需要將 playing 轉換成 play。

詞幹提取和詞形還原的目的就是將長相不同,但是含義相同的詞統一起來,這樣方便後續的處理和分析。

 

詞幹提取和詞形還原的 4 個相似點

詞幹提取和詞形還原的 4 個相似點

  1. 目標一致。詞幹提取和詞形還原的目標均為將詞的屈折形態或派生形態簡化或歸併為詞幹(stem)或原形的基礎形式,都是一種對詞的不同形態的統一歸併的過程。
  2. 結果部分交叉。詞幹提取和詞形還原不是互斥關係,其結果是有部分交叉的。一部分詞利用這兩類方法都能達到相同的詞形轉換效果。如「dogs」的詞幹為「dog」,其原形也為「dog」。
  3. 主流實現方法類似。目前實現詞幹提取和詞形還原的主流實現方法均是利用語言中存在的規則或利用詞典映射提取詞幹或獲得詞的原形。
  4. 應用領域相似。主要應用於信息檢索和文本、自然語言處理等方面,二者均是這些應用的基本步驟。

 

詞幹提取和詞形還原的 5 個不同點

詞幹提取和詞形還原的 5 個不同點

  1. 在原理上,詞幹提取主要是採用「縮減」的方法,將詞轉換為詞幹,如將「cats」處理為「cat」,將「effective」處理為「effect」。而詞形還原主要採用「轉變」的方法,將詞轉變為其原形,如將「drove」處理為「drive」,將「driving」處理為「drive」。
  2. 在複雜性上,詞幹提取方法相對簡單,詞形還原則需要返回詞的原形,需要對詞形進行分析,不僅要進行詞綴的轉化,還要進行詞性識別,區分相同詞形但原形不同的詞的差別。詞性標註的準確率也直接影響詞形還原的準確率,因此,詞形還原更為複雜。
  3. 在實現方法上,雖然詞幹提取和詞形還原實現的主流方法類似,但二者在具體實現上各有側重。詞幹提取的實現方法主要利用規則變化進行詞綴的去除和縮減,從而達到詞的簡化效果。詞形還原則相對較複雜,有複雜的形態變化,單純依據規則無法很好地完成。其更依賴於詞典,進行詞形變化和原形的映射,生成詞典中的有效詞。
  4. 在結果上,詞幹提取和詞形還原也有部分區別。詞幹提取的結果可能並不是完整的、具有意義的詞,而只是詞的一部分,如「revival」詞幹提取的結果為「reviv」,「ailiner」詞幹提取的結果為「airlin」。而經詞形還原處理後獲得的結果是具有一定意義的、完整的詞,一般為詞典中的有效詞。
  5. 在應用領域上,同樣各有側重。雖然二者均被應用於信息檢索和文本處理中,但側重不同。詞幹提取更多被應用於信息檢索領域,如Solr、Lucene等,用於擴展檢索,粒度較粗。詞形還原更主要被應用於文本挖掘、自然語言處理,用於更細粒度、更為準確的文本分析和表達

 

3 種主流的詞幹提取算法

3 種主流的詞幹提取算法

Porter

這種詞幹算法比較舊。它是從20世紀80年代開始的,其主要關注點是刪除單詞的共同結尾,以便將它們解析為通用形式。它不是太複雜,它的開發停止了。

通常情況下,它是一個很好的起始基本詞幹分析器,但並不建議將它用於複雜的應用。相反,它在研究中作為一種很好的基本詞幹算法,可以保證重複性。與其他算法相比,它也是一種非常溫和的詞幹算法。

「推薦」Snowball

種算法也稱為 Porter2 詞幹算法。它幾乎被普遍認為比 Porter 更好,甚至發明 Porter 的開發者也這麼認為。Snowball 在 Porter 的基礎上加了很多優化。Snowball 與 Porter 相比差異約為5%。

Lancaster

Lancaster 的算法比較激進,有時候會處理成一些比較奇怪的單詞。如果在 NLTK 中使用詞幹分析器,則可以非常輕鬆地將自己的自定義規則添加到此算法中。

詞形還原的實踐方法

詞形還原是基於詞典的,每種語言都需要經過語義分析、詞性標註來建立完整的詞庫,目前英文詞庫是很完善的。

Python 中的 NLTK 庫包含英語單詞的詞彙數據庫。這些單詞基於它們的語義關係鏈接在一起。鏈接取決於單詞的含義。特別是,我們可以利用 WordNet。

import nltk
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
print(lemmatizer.lemmatize("blogs"))
#Returns blogimport nltk
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
print(lemmatizer.lemmatize("blogs"))
#Returns blog

 

總結

詞幹提取和詞形還原都是將長相不同,但是含義相同的詞統一起來,這樣方便後續的處理和分析。

他們是英文語料預處理中的一個環節。

詞幹提取和詞形還原的 4 個相似點:

  1. 目標一致
  2. 部分結果一致
  3. 主流實現方式類似
  4. 應用領域相似

詞幹提取和詞形還原的 5 個不同點:

  1. 原理上不同
  2. 詞形還原更加複雜
  3. 具體實現方式的側重點不同
  4. 呈現結果有區別
  5. 應用領域上,側重點不完全一致

3 種詞幹提取的主流算法:

  1. Porter
  2. Snowball
  3. Lancaster

英文的詞形還原可以直接使用 Python 中的 NLTK 庫,它包含英語單詞的詞彙數據庫。

 

百度百科+維基百科

詞幹提取

百度百科版本

在詞法學和信息檢索里,詞幹提取是去除詞綴得到詞根的過程(得到單詞最一般的寫法)。對於一個詞的形態詞根,詞幹並不需要完全相同;相關的詞映射到同一個詞幹一般能得到滿意的結果,即使該詞幹不是詞的有效根。從1968年開始在計算機科學領域出現了詞幹提取的相應算法。很多搜索引擎在處理詞彙時,對同義詞採用相同的詞幹作為查詢拓展,該過程叫做歸併。詞幹提取項目一般涉及到詞幹提取算法或詞幹提取器。

查看詳情

維基百科版本

在語言形態學和信息檢索中,詞幹化是將變形(或有時衍生)詞語減少到詞幹,詞根或詞形的過程 – 通常是書面形式。莖不必與該詞的形態根相同; 通常,相關的單詞映射到同一個詞幹就足夠了,即使這個詞幹本身並不是一個有效的詞根。自20世紀60年代以來,已經在計算機科學中研究了詞幹化的算法。許多搜索引擎將具有相同詞幹的單詞視為同義詞作為一種查詢擴展,一個叫做混淆的過程。

查看詳情

 

詞形還原

維基百科版本

語言學中的Lemmatisation(或 詞形還原)是將單詞的變形形式組合在一起的過程,因此它們可以作為單個項目進行分析,由單詞的引理或字典形式標識。

在計算語言學中,lemmatisation是基於其預期含義確定單詞的引理的算法過程。與詞幹化不同,詞彙化取決於正確識別句子中的預期詞性和詞語的含義,以及圍繞該句子的較大語境,例如鄰近句子甚至整個文檔。因此,開發有效的lemmatisation算法是一個開放的研究領域。

查看詳情

分詞 – Tokenization

一文看懂分詞

分詞是 NLP 的基礎任務,將句子,段落分解為字詞單位,方便後續的處理的分析。

本文將介紹分詞的原因,中英文分詞的3個區別,中文分詞的3大難點,分詞的3種典型方法。最後將介紹中文分詞和英文分詞常用的工具。

想要了解更多 NLP 相關的內容,請訪問  NLP專題 ,免費提供59頁的NLP文檔下載。

訪問 NLP 專題,下載 59 頁免費 PDF

 

什麼是分詞?

分詞是 自然語言理解 – NLP 的重要步驟。

分詞就是將句子、段落、文章這種長文本,分解為以字詞為單位的數據結構,方便後續的處理分析工作。

什麼是分詞?

 

為什麼要分詞?

1.將複雜問題轉化為數學問題

在 機器學習的文章 中講過,機器學習之所以看上去可以解決很多複雜的問題,是因為它把這些問題都轉化為了數學問題。

而 NLP 也是相同的思路,文本都是一些「非結構化數據」,我們需要先將這些數據轉化為「結構化數據」,結構化數據就可以轉化為數學問題了,而分詞就是轉化的第一步。

為什麼要分詞?

2.詞是一個比較合適的粒度

詞是表達完整含義的最小單位。

字的粒度太小,無法表達完整含義,比如」鼠「可以是」老鼠「,也可以是」鼠標「。

而句子的粒度太大,承載的信息量多,很難復用。比如」傳統方法要分詞,一個重要原因是傳統方法對遠距離依賴的建模能力較弱。」

詞是合適的粒度

3. 深度學習時代,部分任務中也可以「分字」

深度學習時代,隨着數據量和算力的爆炸式增長,很多傳統的方法被顛覆。

分詞一直是 NLP 的基礎,但是現在也不一定了,感興趣的可以看看這篇論文:《Is Word Segmentation Necessary for Deep Learning of Chinese Representations?》。

Is Word Segmentation Necessary for Deep Learning of Chinese Representations?

不過在一些特定任務中,分詞還是必要的。如:關鍵詞提取、命名實體識別等。

 

中英文分詞的3個典型區別

中英文分詞的3個典型區別

區別1:分詞方式不同,中文更難

英文有天然的空格作為分隔符,但是中文沒有。所以如何切分是一個難點,再加上中文裏一詞多意的情況非常多,導致很容易出現歧義。下文中難點部分會詳細說明。

 

區別2:英文單詞有多種形態

英文單詞存在豐富的變形變換。為了應對這些複雜的變換,英文NLP相比中文存在一些獨特的處理步驟,我們稱為詞形還原(Lemmatization)和詞幹提取(Stemming)。中文則不需要

詞性還原:does,done,doing,did 需要通過詞性還原恢復成 do。

詞幹提取:cities,children,teeth 這些詞,需要轉換為 city,child,tooth」這些基本形態

 

區別3:中文分詞需要考慮粒度問題

例如「中國科學技術大學」就有很多種分法:

  • 中國科學技術大學
  • 中國 \ 科學技術 \ 大學
  • 中國 \ 科學 \ 技術 \ 大學

粒度越大,表達的意思就越準確,但是也會導致召回比較少。所以中文需要不同的場景和要求選擇不同的粒度。這個在英文中是沒有的。

 

中文分詞的3大難點

中文分詞的3大難點

難點 1:沒有統一的標準

目前中文分詞沒有統一的標準,也沒有公認的規範。不同的公司和組織各有各的方法和規則。

 

難點 2:歧義詞如何切分

例如「兵乓球拍賣完了」就有2種分詞方式表達了2種不同的含義:

  • 乒乓球 \ 拍賣 \ 完了
  • 乒乓 \ 球拍 \ 賣 \ 完了

 

難點 3:新詞的識別

信息爆炸的時代,三天兩頭就會冒出來一堆新詞,如何快速的識別出這些新詞是一大難點。比如當年「藍瘦香菇」大火,就需要快速識別。

 

3種典型的分詞方法

3種典型的分詞方法

分詞的方法大致分為 3 類:

  1. 基於詞典匹配
  2. 基於統計
  3. 基於深度學習

給予詞典匹配的分詞方式

優點:速度快、成本低

缺點:適應性不強,不同領域效果差異大

基本思想是基於詞典匹配,將待分詞的中文文本根據一定規則切分和調整,然後跟詞典中的詞語進行匹配,匹配成功則按照詞典的詞分詞,匹配失敗通過調整或者重新選擇,如此反覆循環即可。代表方法有基於正向最大匹配和基於逆向最大匹配及雙向匹配法。

 

基於統計的分詞方法

優點:適應性較強

缺點:成本較高,速度較慢

這類目前常用的是算法是HMM、CRF、SVM、深度學習等算法,比如stanford、Hanlp分詞工具是基於CRF算法。以CRF為例,基本思路是對漢字進行標註訓練,不僅考慮了詞語出現的頻率,還考慮上下文,具備較好的學習能力,因此其對歧義詞和未登錄詞的識別都具有良好的效果。

 

基於深度學習

優點:準確率高、適應性強

缺點:成本高,速度慢

例如有人員嘗試使用雙向LSTM+CRF實現分詞器,其本質上是序列標註,所以有通用性,命名實體識別等都可以使用該模型,據報道其分詞器字符準確率可高達97.5%。

常見的分詞器都是使用機器學習算法和詞典相結合,一方面能夠提高分詞準確率,另一方面能夠改善領域適應性。

 

中文分詞工具

下面排名根據 GitHub 上的 star 數排名:

  1. Hanlp
  2. Stanford 分詞
  3. ansj 分詞器
  4. 哈工大 LTP
  5. KCWS分詞器
  6. jieba
  7. IK
  8. 清華大學THULAC
  9. ICTCLAS

 

英文分詞工具

  1. Keras
  2. Spacy
  3. Gensim
  4. NLTK

 

總結

分詞就是將句子、段落、文章這種長文本,分解為以字詞為單位的數據結構,方便後續的處理分析工作。

分詞的原因:

  1. 將複雜問題轉化為數學問題
  2. 詞是一個比較合適的粒度
  3. 深度學習時代,部分任務中也可以「分字」

中英文分詞的3個典型區別:

  1. 分詞方式不同,中文更難
  2. 英文單詞有多種形態,需要詞性還原和詞幹提取
  3. 中文分詞需要考慮粒度問題

中文分詞的3大難點

  1. 沒有統一的標準
  2. 歧義詞如何切分
  3. 新詞的識別

3個典型的分詞方式:

  1. 基於詞典匹配
  2. 基於統計
  3. 基於深度學習

 

百度百科+維基百科

百度百科版本

中文分詞就是將連續的字序列按照一定的規範重新組合成詞序列的過程。我們知道,在英文的行文中,單詞之間是以空格作為自然分界符的,而中文只是字、句和段能通過明顯的分界符來簡單劃界,唯獨詞沒有一個形式上的分界符,雖然英文也同樣存在短語的劃分問題,不過在詞這一層上,中文比之英文要複雜得多、困難得多。

查看詳情

 

維基百科版本

分詞是對一串輸入字符的部分進行劃分和可能分類的過程。然後將得到的標記傳遞給某種其他形式的處理。該過程可以被認為是解析輸入的子任務。

查看詳情