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

2020-12-13 大數據文摘

大數據文摘作品

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

自然語言處理(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入門+實戰必讀:一文教會你最常見的10種自然語言處理技術(附代碼)
    大數據文摘作品編譯:糖竹子、吳雙、錢天培自然語言處理(NLP)是一種藝術與科學的結合,旨在從文本數據中提取信息。在它的幫助下,我們從文本中提煉出適用於計算機算法的信息。從自動翻譯、文本分類到情緒分析,自然語言處理成為所有數據科學家的必備技能之一。
  • 一文學會最常見的10種NLP處理技術(附資源&代碼)
    >本文為你介紹10個最常見的NLP任務,以及相關資源和代碼。自然語言處理(NLP)是一種藝術與科學的結合,旨在從文本數據中提取信息。在它的幫助下,我們從文本中提煉出適用於計算機算法的信息。從自動翻譯、文本分類到情緒分析,自然語言處理成為所有數據科學家的必備技能之一。在這篇文章中,你將學習到最常見的10個NLP任務,以及相關資源和代碼。
  • 【獨家】自然語言處理(NLP)入門指南
    &model=en&cpu=1&cph=0 記得我曾經讀到過這樣一段話,如果你覺得有必要回答兩次同樣的問題,那就把答案發到博客上,這可能是一個好主意。根據這一原則,也為了節省回答問題的時間,我在這裡給出該問題的標準問法:「我的背景是研究**科學,我對學習NLP很有興趣。應該從哪說起呢?」
  • 自然語言處理NLP快速入門
    【導讀】自然語言處理已經成為人工智慧領域一個重要的分支,它研究能實現人與計算機之間用自然語言進行有效通信的各種理論和方法。
  • 【NLP】自然語言處理基礎微課程|語言學午餐
    小編痛下決心,同黑龍江大學自然語言處理實驗室(微信公眾號ID:hlju_nlp,在今天的另一則推送中專文介紹)的小夥伴們合作,計劃在本學期完成一門介紹自然語言處理的「微課程」。該課程將於下周三(9月17日)正式上線。下文是課程大綱,歡迎大家按時「上課」!
  • 帶新手走進自然語言處理,7本NLP專業書
    「自然語言處理是計算機科學領域與人工智慧領域中的一個重要方向。它研究能實現人與計算機之間用自然語言進行有效通信的各種理論和方法。        自然語言處理是一門融語言學、計算機科學、數學於一體的科學。因此,這一領域的研究將涉及自然語言,即人們日常使用的語言,所以它與語言學的研究有著密切的聯繫,但又有重要的區別。
  • 斯坦福NLP團隊發布最新自然語言處理Python庫
    【導讀】斯坦福NLP團隊,於1月29日發布了新版的自然語言處理Python庫:StandfordNLP,不同於以前java系的CoreNLP,
  • NLP航海圖:自然語言處理相關任務簡介
    作者樂雨泉,湖南大學在讀碩士,研究方向機器學習與自然語言處理,曾在IJCAI、TASLP等會議/期刊發表文章多篇。
  • 國內自然語言處理(NLP)研究組
    /natural-language-computing/www.microsoft.com百度自然語言處理百度自然語言處理 - 理解語言,擁有智能,改變世界nlp.baidu.com阿里巴巴達摩院語言技術實驗室
  • 實踐入門NLP:基於深度學習的自然語言處理
    特別是最近兩年,基於深度學習的自然語言處理逐漸取得了一定進展,在人機對話、問答系統、語言翻譯等方向的應用也一直是自然語言處理中的熱門話題,而這些應用的實現,基本依賴於底層技術和模型的進步,再加上自然語言處理領域也算是一個多學科交叉的行業,自然語言處理的未來發展對於很多相關學科和方向都具有深遠的影響力。
  • 【NLP】一文匯總自然語言處理主要研究方向
    NLP專欄已經發了相當數目的文章,從基礎的機器學習到最新的預訓練語言模型;從簡單的文本分類到複雜的信息抽取、聊天機器人。今天我們做一個回顧和總結,聊聊我們從事的自然語言處理研究或者工作,究竟是怎麼一回事,介紹一下自然語言處理的各大研究方向及其特點。
  • 一本開源的NLP入門書籍
    讓機器理解文字圖像、文字和聲音是人類接觸、理解外部世界最常見的三種形式,其中文字又是最容易保存和進行交換的形式。自然語言處理,即所謂的NLP是重要的支撐技術。NLP入門書籍作者:這可能是第一本用開源的思想寫的NLP入門書籍,整個寫作過程都在我的Github上。
  • Awesome-Chinese-NLP:中文自然語言處理相關資料
    HanLP (Java)SnowNLP (Python) Python library for processing Chinese textYaYaNLP (Python) 純python編寫的中文自然語言處理包,取名於「牙牙學語」小明NLP (Python) 輕量級中文自然語言處理工具DeepNLP (Python) Deep
  • 這把神器,讓你用 Python 一口氣掌握 53 種自然語言處理!
    它不但包含了完整的語義分析工具鏈,還帶有 73 個不同的高精度神經網絡模型,能解析 53 種不同的人類語言。是不是很牛×啊?今天的教程裡,我就手把手帶你在 Python 上使用 StanfordNLP,進行一些自然語言處理實戰。關注優達學城,私信回復關鍵詞 NLP (注意是大寫),領取全套「StanfordNLP」官方文檔。
  • 一文讀懂Smartbi的自然語言處理(NLP)技術
    由於自然語言是人類區別於其他動物的根本標誌,沒有語言,人類的思維也就無從談起,所以NLP體現了人工智慧的最高任務與境界。也就是說,只有當計算機具備了處理自然語言的能力時,機器才算實現了真正的智能。 從技術角度看,NLP包括序列標註、分類任務、句子關係判斷和生成式任務等。
  • Python自然語言處理(NLP)入門教程
    NLTK是Python的自然語言處理工具包,在NLP領域中,最常使用的一個Python庫。什麼是NLP?簡單來說,自然語言處理(NLP)就是開發能夠理解人類語言的應用程式或服務。這裡討論一些自然語言處理(NLP)的實際應用例子,如語音識別、語音翻譯、理解完整的句子、理解匹配詞的同義詞,以及生成語法正確完整句子和段落。
  • 《自然語言處理入門》不是 NLP 學習路上的萬能藥
    《自然語言處理入門》是圖靈 2019 年 10 月出版的一本 NLP 領域的入門圖書,作者是何晗(網名 hankcs,HanLP 作者、「碼農場
  • 基於Transformers入門自然語言處理
    我將之前零零散散的Transformer博客、講解文章進行了整理,形成了一個完整的教程叫做:learn nlp with transformers,翻譯過來是:基於Transformers入門自然語言處理。
  • 基於Transformers入門自然語言處理!
    我將之前零零散散的Transformer博客、講解文章進行了整理,形成了一個完整的教程叫做:learn nlp with transformers,翻譯過來是:基於Transformers入門自然語言處理。
  • 不是你無法入門自然語言處理(NLP),而是你沒找到正確的打開方式
    ;那在自然語言處理中呢?用一句簡單的話說,就語言模型就是計算一個句子的概率大小的這種模型。有什麼意義呢?一個句子的打分概率越高,越說明他是更合乎人說出來的自然句子。就是這麼簡單。常見的統計語言模型有N元文法模型(N-gram Model),最常見的是 unigram model、bigram model、trigram model 等等。