NLP入門+實戰必讀:一文教會你最常見的10種自然語言處理技術

2020-12-05 大數據文摘

大數據文摘作品

編譯:糖竹子、吳雙、錢天培

自然語言處理(NLP)是一種藝術與科學的結合,旨在從文本數據中提取信息。在它的幫助下,我們從文本中提煉出適用於計算機算法的信息。從自動翻譯、文本分類到情緒分析,自然語言處理成為所有數據科學家的必備技能之一。

在這篇文章中,你將學習到最常見的10個NLP任務,以及相關資源和代碼。

為什麼要寫這篇文章?

對於處理NLP問題,我也研究了一段時日。這期間我需要翻閱大量資料,通過研究報告,博客和同類NLP問題的賽事內容學習該領域的最新發展成果,並應對NLP處理時遇到的各類狀況。

因此,我決定將這些資源集中起來,打造一個對NLP常見任務提供最新相關資源的一站式解決方案。下方是文章中提到的任務列表及相關資源。那就一起開始吧。

目錄:

1. 詞幹提取2. 詞形還原3. 詞向量化4. 詞性標註5. 命名實體消岐6. 命名實體識別7. 情感分析8. 文本語義相似分析9. 語種辨識10. 文本總結

1. 詞幹提取

什麼是詞幹提取?詞幹提取是將詞語去除變化或衍生形式,轉換為詞幹或原型形式的過程。詞幹提取的目標是將相關詞語還原為同樣的詞幹,哪怕詞幹並非詞典的詞目。例如,英文中:

1.beautiful和beautifully的詞幹同為beauti2.Good,better和best 的詞幹分別為good,better和best。

相關論文:Martin Porter的波特詞幹算法原文

相關算法:在Python上可以使用Porter2詞幹算法(https://tartarus.org/martin/PorterStemmer/def.txt)

程序實現:這裡給出了在python的stemming庫中使用(https://bitbucket.org/mchaput/stemming/src/5c242aa592a6d4f0e9a0b2e1afdca4fd757b8e8a/stemming/porter2.py?at=default&fileviewer=file-view-default)

Porter2算法做詞幹提取的代碼:

#!pip install stemmingfrom stemming.porter2 import stemstem("casually")

2. 詞形還原

什麼是詞形還原? 詞形還原是將一組詞語還原為詞源或詞典的詞目形式的過程。還原過程考慮到了POS問題,即詞語在句中的語義,詞語對相鄰語句的語義等。例如,英語中:

1.beautiful和beautifully被分別還原為beautiful和beautifully。2.good, better和best被分別還原為good, good和good

相關論文1: 這篇文章詳細討論了詞形還原的不同方法。想要了解傳統詞形還原的工作原理必讀。(http://www.ijrat.org/downloads/icatest2015/ICATEST-2015127.pdf)

相關論文2: 這篇論文非常出色,討論了運用深度學習對變化豐富的語種做詞形還原時會遇到的問題。(https://academic.oup.com/dsh/article-abstract/doi/10.1093/llc/fqw034/2669790/Lemmatization-for-variation-rich-languages-using)

數據集: 這裡是Treebank-3數據集的連結,你可以使用它創建一個自己的詞形還原工具。(https://catalog.ldc.upenn.edu/ldc99t42)

程序實現:下面給出了在spacy上的英語詞形還原代碼

#!pip install spacy#python -m spacy download enimport spacynlp=spacy.load("en")doc="good better best"for token in nlp(doc): print(token,token.lemma_)

3. 詞向量化

什麼是詞向量化?詞向量化是用一組實數構成的向量代表自然語言的叫法。這種技術非常實用,因為電腦無法處理自然語言。詞向量化可以捕捉到自然語言和實數間的本質關係。通過詞向量化,一個詞語或者一段短語可以用一個定維的向量表示,例如向量的長度可以為100。

例如:「Man」這個詞語可以用一個五維向量表示。

這裡的每個數字代表了詞語在某個特定方向上的量級。

相關博文:這篇文章詳細解釋了詞向量化。

(https://www.analyticsvidhya.com/blog/2017/06/word-embeddings-count-word2veec/)

相關論文:這篇論文解釋了詞向量化的細節。深入理解詞向量化必讀。

(https://www.analyticsvidhya.com/blog/2017/10/essential-nlp-guide-data-scientists-top-10-nlp-tasks/)

相關工具:這是個基於瀏覽器的詞向量可視化工具。

(https://ronxin.github.io/wevi/)

預訓練詞向量:這裡有一份facebook的預訓練詞向量列表,包含294種語言。

(https://github.com/facebookresearch/fastText/blob/master/pretrained-vectors.md)

這裡可以下載google news的預訓練詞向量。

(https://drive.google.com/file/d/0B7XkCwpI5KDYNlNUTTlSS21pQmM/edit)

#!pip install gensimfromgensim.models.keyedvectors import KeyedVectorsword_vectors=KeyedVectors.load_word2vec_format('GoogleNews-vectors-negative300.bin',binary=True)word_vectors['human']

程序實現:這段代碼可以用gensim訓練你自己的詞向量

sentence=[['first','sentence'],['second','sentence']]model = gensim.models.Word2Vec(sentence, min_count=1,size=300,workers=4)

4. 詞性標註

什麼事詞性標註?簡單來說,詞性標註是對句子中的詞語標註為名字、動詞、形容詞、副詞等的過程。例如,對句子「Ashok killed the snake with a stick」,詞性標註會識別:

Ashok 代詞killed 動詞the 限定詞snake 名詞with 連詞a 限定詞stick 名詞. 標點

論文1:

choi aptly的這篇《The Last Gist to theState-of-the-Art 》介紹了一種叫動態特徵歸納的新方法。這是目前詞性標註最先進的方法。(https://aclweb.org/anthology/N16-1031.pdf)

論文2:這篇文章介紹了通過隱馬爾科夫模型做無監督詞性標註學習的方法。(https://transacl.org/ojs/index.php/tacl/article/viewFile/837/192)

程序實現:這段代碼可以在spacy上做詞性標註

#!pip install spacy#!python -m spacy download en nlp=spacy.load('en')sentence="Ashok killed the snake with a stick"for token in nlp(sentence): print(token,token.pos_)

5. 命名實體消歧

什麼是命名實體消岐?命名實體消岐是對句子中的提到的實體識別的過程。例如,對句子「Apple earned a revenue of 200 Billion USD in 2016」,命名實體消岐會推斷出句子中的Apple是蘋果公司而不是指一種水果。一般來說,命名實體要求有一個實體知識庫,能夠將句子中提到的實體和知識庫聯繫起來。

論文1:Huang的這篇論文運用了基於深度神經網絡和知識庫的深層語義關聯模型,在命名實體消岐上達到了領先水平。

(https://arxiv.org/pdf/1504.07678.pdf)

論文2:Ganea and Hofmann的這篇文章運用了局部神經關注模型和詞向量化,沒有人為設置特徵。(https://arxiv.org/pdf/1704.04920.pdf)

6. 命名實體識別

體識別是識別一個句子中有特定意義的實體並將其區分為人名,機構名,日期,地名,時間等類別的任務。例如,一個NER會將一個這樣的句子:

「Ram of Apple Inc. travelled to Sydney on 5th October 2017」

返回如下的結果:

Ram ofApple ORGInc. ORGtravelledtoSydney GPEon5th DATEOctober DATE2017 DATE

這裡,ORG代表機構組織名,GPE代表地名。

然而,當NER被用在不同於該NER被訓練的數據領域時,即使是最先進的NER也往往表現不佳。

論文:這篇優秀的論文使用雙向LSTM(長短期記憶網絡)神經網絡結合監督學習和非監督學習方法,在4種語言領域實現了命名實體識別的最新成果。(https://arxiv.org/pdf/1603.01360.pdf)

程序實現:以下是如何使用spacy執行命名實體識別。

import spacynlp=spacy.load('en')sentence="Ram of Apple Inc. travelled to Sydney on 5th October 2017"for token in nlp(sentence): print(token, token.ent_type_)

7. 情感分析

什麼是情感分析?情感分析是一種廣泛的主觀分析,它使用自然語言處理技術來識別客戶評論的語義情感,語句表達的情緒正負面以及通過語音分析或書面文字判斷其表達的情感等等。例如:

「我不喜歡巧克力冰淇淋」—是對該冰淇淋的負面評價。

「我並不討厭巧克力冰激凌」—可以被認為是一種中性的評價。

從使用LSTMs和Word嵌入來計算一個句子中的正負詞數開始,有很多方法都可以用來進行情感分析。

博文1:本文重點對電影推文進行情感分析(https://www.analyticsvidhya.com/blog/2016/02/step-step-guide-building-sentiment-analysis-model-graphlab/)

博文2:本文重點對印度金奈洪水期間的推文進行情感分析。(https://www.analyticsvidhya.com/blog/2017/01/sentiment-analysis-of-twitter-posts-on-chennai-floods-using-python/)

論文1:本文採用樸素貝葉斯的監督學習方法對IMDB評論進行分類。(https://arxiv.org/pdf/1305.6143.pdf)

論文2:本文利用LDA的無監督學習方法來識別用戶生成評論的觀點和情感。本文在解決注釋評論短缺的問題上表現突出。(http://www.cs.cmu.edu/~yohanj/research/papers/WSDM11.pdf)

資料庫:這是一個很好的包含相關研究論文和各種語言情感分析程序實現的資料庫。(https://github.com/xiamx/awesome-sentiment-analysis)

數據集1:多域情感數據集版本2.0(http://www.cs.jhu.edu/~mdredze/datasets/sentiment/)

數據集2:Twitter情感分析數據集(http://www.sananalytics.com/lab/twitter-sentiment/)

競賽:一個非常好的比賽,你可以檢查你的模型在爛番茄電影評論的情感分析任務中的表現。(https://www.kaggle.com/c/sentiment-analysis-on-movie-reviews)

8. 語義文本相似度

什麼是語義文本相似度分析?語義文本相似度分析是對兩段文本的意義和本質之間的相似度進行分析的過程。注意,相似性與相關性是不同的。

例如:

汽車和公共汽車是相似的,但是汽車和燃料是相關的。

論文1:本文詳細介紹了文本相似度測量的不同方法。是一篇可以一站式了解目前所有方法的必讀文章。(https://pdfs.semanticscholar.org/5b5c/a878c534aee3882a038ef9e82f46e102131b.pdf)

論文2:本文介紹了用CNN神經網絡去比對兩個短文本。(http://casa.disi.unitn.it/~moschitt/since2013/2015_SIGIR_Severyn_LearningRankShort.pdf)

論文3:本文利用Tree-LSTMs方法得到了文本的語義相關和語義分類的最新成果。(https://nlp.stanford.edu/pubs/tai-socher-manning-acl2015.pdf)

語言識別

什麼是語言識別?語言識別指的是將不同語言的文本區分出來。其利用語言的統計和語法屬性來執行此任務。語言識別也可以被認為是文本分類的特殊情況。

博文:在這篇由fastText撰寫的博文中介紹了一種新的工具,其可以在1MB的內存使用情況下識別170種語言。(https://fasttext.cc/blog/2017/10/02/blog-post.html)

論文1:本文討論了285種語言的7種語言識別方法。(http://www.ep.liu.se/ecp/131/021/ecp17131021.pdf)

論文2:本文描述了如何使用深度神經網絡來實現自動語言識別的最新成果。(https://repositorio.uam.es/bitstream/handle/10486/666848/automatic_lopez-moreno_ICASSP_2014_ps.pdf?sequence=1)

10. 文本摘要

什麼是文本摘要?文本摘要是通過識別文本的重點並使用這些要點創建摘要來縮短文本的過程。文本摘要的目的是在不改變文本含義的前提下最大限度地縮短文本。

論文1:本文描述了基於神經注意模型的抽象語句梗概方法。(https://arxiv.org/pdf/1509.00685.pdf)

論文2:本文描述了使用序列到序列的RNN在文本摘要中達到的最新結果。(https://arxiv.org/pdf/1602.06023.pdf)

資料庫:Google Brain團隊的這個資料庫擁有使用為文本摘要定製的序列到序列模型的代碼。該模型在Gigaword數據集上進行訓練。(https://github.com/tensorflow/models/tree/master/research/textsum)

應用程式:Reddit的autotldr機器人使用文本摘要來梗概從文章到帖子的各種評論。這個功能在Reddit用戶中非常有名。(https://www.reddit.com/r/autotldr/comments/31b9fm/faq_autotldr_bot/)

程序實現:以下是如何用gensim包快速實現文本摘要。

fromgensim.summarization import summarizesentence="Automatic summarization is the process of shortening a text document with software, in order to create a summary with the major points of the original document. Technologies that can make a coherent summary take into account variables such as length, writing style and syntax.Automatic data summarization is part of machine learning and data mining. The main idea of summarization is to find a subset of data which contains the information of the entire set. Such techniques are widely used in industry today. Search engines are an example; others include summarization of documents, image collections and videos. Document summarization tries to create a representative summary or abstract of the entire document, by finding the most informative sentences, while in image summarization the system finds the most representative and important (i.e. salient) images. For surveillance videos, one might want to extract the important events from the uneventful context.There are two general approaches to automatic summarization: extraction and abstraction. Extractive methods work by selecting a subset of existing words, phrases, or sentences in the original text to form the summary. In contrast, abstractive methods build an internal semantic representation and then use natural language generation techniques to create a summary that is closer to what a human might express. Such a summary might include verbal innovations. Research to date has focused primarily on extractive methods, which are appropriate for image collection summarization and video summarization."summarize(sentence)

結束語

以上就是最常見的NLP任務的入門介紹和資料匯總了,如果你有更多優質的資源,也歡迎在評論區分享哦!

相關焦點

  • 【超全資源】自然語言處理(NLP)入門學習資源清單(部分資料下載)
    &model=en&cpu=1&cph=0 記得我曾經讀到過這樣一段話,如果你覺得有必要回答兩次同樣的問題,那就把答案發到博客上,這可能是一個好主意。根據這一原則,也為了節省回答問題的時間,我在這裡給出該問題的標準問法:「我的背景是研究**科學,我對學習NLP很有興趣。應該從哪說起呢?」
  • 國內自然語言處理(NLP)研究組
    Lab)ByteDance AI Lablab.toutiao.com中科院計算所自然語言處理研究組歡迎來到中科院計算所自然語言處理組網站nlp.ict.ac.cn中科院自動化研究所語音語言技術研究組中文信息處理組nlpr-web.ia.ac.cn中國科學院軟體研究所中文信息處理實驗室中科院軟體所中文信息處理實驗室www.icip.org.cn
  • 實踐入門NLP:基於深度學習的自然語言處理
    特別是最近兩年,基於深度學習的自然語言處理逐漸取得了一定進展,在人機對話、問答系統、語言翻譯等方向的應用也一直是自然語言處理中的熱門話題,而這些應用的實現,基本依賴於底層技術和模型的進步,再加上自然語言處理領域也算是一個多學科交叉的行業,自然語言處理的未來發展對於很多相關學科和方向都具有深遠的影響力。
  • 不是你無法入門自然語言處理(NLP),而是你沒找到正確的打開方式
    進行處理,good;在圖像中,用圖片的像素構成的matrix展平成vector後組成的vector序列餵給NN進行處理,good;那在自然語言處理中呢?用一句簡單的話說,就語言模型就是計算一個句子的概率大小的這種模型。有什麼意義呢?一個句子的打分概率越高,越說明他是更合乎人說出來的自然句子。就是這麼簡單。常見的統計語言模型有N元文法模型(N-gram Model),最常見的是 unigram model、bigram model、trigram model 等等。
  • 斯坦福發布重磅NLP工具包StanfordNLP,支持中文等53種語言
    新智元報導 來源:stanfordnlp.github.io編輯:肖琴【新智元導讀】斯坦福團隊最新發布一個NLP任務的軟體包StanfordNLP,通過Python接口為53種語言提供標記、依存句法分析等NLP任務的重要工具
  • 一文讀懂Smartbi的自然語言處理(NLP)技術
    由於自然語言是人類區別於其他動物的根本標誌,沒有語言,人類的思維也就無從談起,所以NLP體現了人工智慧的最高任務與境界。也就是說,只有當計算機具備了處理自然語言的能力時,機器才算實現了真正的智能。 從技術角度看,NLP包括序列標註、分類任務、句子關係判斷和生成式任務等。
  • 中文NLP福利!大規模中文自然語言處理語料
    新智元推薦來源:AINLP作者:徐亮【新智元導讀】本文介紹一個中文自然語言處理語料庫項目:nlp_chinese_corpus ,初步貢獻了幾個已經預處理好的中文語料,包括維基、新聞和百科語料,可直接下載使用。
  • NLP 與 NLU:從語言理解到語言處理
    同理,在自然語言處理領域中,自然語言處理(NLP)的概念是否會讓位於自然語言理解(NLU)? 或者兩個概念之間的關係是否變得更微妙,更複雜,抑或只是技術的發展?在這篇文章中,我們將仔細研究NLP和NLU的概念以及它們在AI相關技術中的優勢。值得注意的是,NLP和NLU儘管有時可以互相交換使用,但它們實際上是兩個有一些重疊的不同概念。
  • 從語言學到深度學習NLP,一文概述自然語言處理
    本文從兩篇論文出發先簡要介紹了自然語言處理的基本分類和基本概念,再向讀者展示了深度學習中的 NLP。這兩篇論文都是很好的綜述性入門論文,希望詳細了解自然語言處理的讀者可以進一步閱讀這兩篇論文。本文第一部分介紹了自然語言處理的基本概念,作者將 NLP 分為自然語言理解和自然語言生成,並解釋了 NLP 過程的各個層級和應用,這一篇論文很適合讀者系統的了解 NLP 的基本概念。
  • 一文帶你讀懂自然語言處理 - 事件提取
    數百萬數據源以新聞稿、博客、消息、手稿和無數其他形式發布,因而自動組織和處理就必不可少。隨著神經網絡算法的改進、計算機算力的顯著提升以及大量湧現的理解框架,自然語言處理的能力正被前所未有的探索。其中一個常見應用稱為事件提取,即處理收集蘊藏在文本中的一個階段內發生的事件,自動識別發生了什麼和什麼時候發生。
  • 想快速入門NLP?我們測評了15門最火課程,幫你找到最適合的
    我個人一共完成或瀏覽了15個最有名的課。在下面這份嚴格的評論中,我將重點放在它們提供的實踐以及商業知識上。無論你是剛開始接觸NLP還是想在業務中實現一個最新算法,這篇文章都將為你提供巨大價值。下面就來看一下這條學習路徑,並挑你最感興趣的課程吧!
  • NLP 從入門到實戰,阿里 iDST 9 大名師即將開講
    唯一值得一提的可能就是 1972 年美國麻省理工學院開發的一個用自然語言指揮機器人的人機對話系統 SHRDLU,以及 1964-1966 年間開發的世界上第一個真正意義上的聊天機器人系統:ELIZA。但在當時,SHRDLU 和 ELIZA 的語言處理能力都非常簡單,例如 SHRDLU 只存儲了 200 個單詞,而 ELIZA 所做的也僅僅是用符合語法的方式將問題複述一遍,毫無「智能」可言。
  • 2019自然語言處理前沿論壇 五大議題全面解析NLP技術前沿
    5月26日,由百度與中國計算機學會中文信息技術專委會、中國中文信息學會青工委聯合舉辦的「2019自然語言處理前沿論壇」正式召開。本屆論壇主題為「機器之『讀、寫、說、譯』—— 探尋NLP未來之路」。論壇圍繞語義計算、自動問答、語言生成、人機對話及機器翻譯五大議題,與學術界、工業界一線青年專家學者共同探討NLP領域的最新技術進展、產業應用及發展趨勢。
  • 一文解讀NLP中的注意力機制
    本文深入淺出地介紹了近些年的自然語言中的注意力機制包括從起源、變體到評價指標方面。本文便對NLP的注意力機制進行了綜述。以nlp領域來說,序列可以是句子、段落、篇章等,所以我們也可以把它看作處理由一個句子(段落或篇章)生成另外一個句子(段落或篇章)的通用處理模型。對於句子對,我們期望輸入句子Source,期待通過Encoder-Decoder框架來生成目標句子Target。Source和Target可以是同一種語言,也可以是兩種不同的語言,若是不同語言,就可以處理翻譯問題了。
  • 自然語言處理的最佳實踐
    雷鋒網 AI 開發者按,近年來,自然語言處理(NLP)在質量和可用性方面快速增長,這有助於推動人工智慧解決方案的實際落地。在過去的幾年裡,研究人員一直在將新的深度學習方法應用於 NLP。數據科學家開始從傳統的方法轉向最先進的(SOTA)深度神經網絡(DNN)算法,這種算法使用的語言模型經過了大文本語料庫的預訓練。
  • 科普丨什麼是NLP(自然語言處理)
    自然語言處理(NLP)是一種專業分析人類語言的人工智慧。你使用過蘋果公司的人工智慧語音助手Siri嗎?有沒有好奇過Siri是如何理解你說的(大部分的)話的?Siri的工作過程就是自然語言處理在實踐中應用的一個鮮活案例。NLP正在成為我們生活中不可或缺的一部分,其與機器學習、深度學習一起達成的高度遠遠優於幾年前取得的成就。
  • 自然語言處理 NLP 發展簡史
    這一系列顛覆性的研究成果在學術界引發轟動,激發了人工智慧(AI)的思潮,同時也催生了自然語言處理(NLP)和計算機技術的發展。NLP 的早期理論基礎人們最早對 NLP 的探索始於對機器翻譯的研究。1947年,美國科學家韋弗(W. Weaver)博士和英國工程師布斯(A. D.
  • 最全!2019 年 NLP 領域都發生了哪些大事件?
    XLNet 是一種用於自然語言處理任務的預訓練方法,它在 20 種任務上相較於 BERT 有了進一步的提升。關於這份卓越的工作的總結,請參閱: https://medium.com/dair-ai/xlnet-outperforms-bert-on-several-nlp-tasks-9ec867bb563b。
  • 自然語言處理(NLP)中的深度學習發展史和待解難題
    王小新 編譯自 sigmoidal量子位 出品 | 公眾號 QbitAI自然語言處理(NLP)是指機器理解並解釋人類寫作與說話方式的能力。近年來,深度學習技術在自然語言處理方面的研究和應用也取得了顯著的成果。技術博客Sigmoidal最近發布了一篇文章,作者是機器學習工程師Rafal。