NLP從入門到實戰(一)

在這裏插入圖片描述

NLP自然語言處理技術,我將長期連載NLP技術,分享論文,源碼,新科技,以學習爲目的,建議大家關注博主,不斷更,一起進步~

本文爲原理篇,部分來源網絡資源,本文目的是綜述NLP,讓朋友們更清晰地明白!後期會不斷實戰訓練。


自然語言處理NLP概述

自然語言處理(Natural language processing,NLP)是計算機和人類語言之間的關係紐帶。更具體地說,自然語言處理是計算機對自然語言的理解、分析、操縱和/或生成。

自然語言處理(NLP)可以被定義爲人類語言的自動(或半自動)處理。“NLP”這個術語有時被用於比這更窄的範圍,通常不包括信息檢索,有時甚至不包括機器翻譯。NLP有時還與“計算語言學”相對立,NLP被認爲更適用。如今,往往首選使用替代術語,如“語言技術(Language Technology)”或“語言工程(Language Engineering)”。語言(Language)經常與演講(Speech)(比如演講技術和語言技術)相對照。但是我將簡單地提到NLP並廣義地使用這個術語。NLP本質上是多學科的:它與語言學密切相關(儘管NLP公然借鑑語言理論的程度差異很大)。

什麼是自然語言處理?

我們平常說地自然語言處理究竟能做些什麼呢?NLP是計算機以一種聰明而有用的方式分析,理解和從人類語言中獲取意義的一種方式。通過利用NLP,開發者可以組織和構建知識來執行自動摘要,翻譯,命名實體識別,關係提取,情感分析,語音識別和話題分割等任務。NLP用於分析文本,使機器瞭解人的說話方式。這種人機交互使現實世界的應用,如自動文摘,情感分析,主題提取,命名實體識別,零部件,詞性標註,關係提取,詞幹,等等。NLP通常用於文本挖掘,機器翻譯和自動問答。

早期的NLP方法涉及更基於規則的方法,在這種方法中,簡單的機器學習算法被告知要在文本中查找哪些單詞和短語,並在這些短語出現時給出特定的響應。但深度學習是一個更靈活,直觀的方法,在這個方法中,算法學會從許多例子中識別說話者的意圖,就像孩子如何學習人類語言一樣。

常用技術盤點

1.分詞 Word Segmentation

chqiwang/convseg ,基於CNN做中文分詞,提供數據和代碼。(python2.7 )
對應的論文Convolutional Neural Network with Word Embeddings for Chinese Word Segmentation IJCNLP2017.
2.詞預測 Word Prediction

Kyubyong/word_prediction ,基於CNN做詞預測,提供數據和代碼。代碼的準確對比的是Iphone7的鍵盤輸入,最新跟新是2019年7月。

  1. 文本蘊涵 Textual Entailment

Steven-Hewitt/Entailment-with-Tensorflow,基於Tensorflow做文本蘊涵,提供數據和代碼。 "Textual entailment with TensorFlow: Using neural networks to explore natural language,"的作者開發,但是代碼很久沒更新了,文章發表於2017年。

  1. 語音識別 Automatic Speech Recognition

buriburisuri/speech-to-text-wavenet,基於DeepMind WaveNet和Tensorflow 1.0做句子級語音識別。17年的代碼

  1. 自動摘要 Automatic Summarisation

PKULCWM/PKUSUMSUM,北大萬小軍老師團隊的自動摘要方法彙總,包含了他們大量paper的實現,支持單文檔摘要、多文檔摘要、topic-focused多文檔摘要。

  1. 文本糾錯 Text Correct

atpaino/deep-text-corrector,基於深度學習做文本糾錯,提供數據和代碼。
7.字音轉換 Grapheme to Phoneme

cmusphinx/g2p-seq2seq,基於網紅transformer做, 提供數據和代碼。

  1. 複述檢測 Paraphrase Detection 和 問答 Question Answering

Paraphrase-Driven Learning for Open Question Answering, 基於複述驅動學習的開放域問答。

  1. 音漢互譯 Pinyin-To-Chinese

Kyubyong/neural_chinese_transliterator,基於CNN做音漢互譯。

  1. 情感分析 Sentiment Analysis

情感分析包括的內容太多了,目前沒發現比較全的。推薦兩個適合練手的吧:Deeply Moving: Deep Learning for Sentiment Analysis,http://sentic.net/about/。

  1. 手語識別 Sign Language Recognition

Home - SignAll, 該項目在手語識別做的非常成熟。

  1. 詞性標註(POS)、 命名實體識別(NER)、 句法分析(parser)、 語義角色標註(SRL) 等。

HIT-SCIR/ltp, 語言技術平臺(Language Technology Platform,LTP)是哈工大社會計算與信息檢索研究中心歷時十年開發的一整套中文語言處理系統。LTP制定了基於XML的語言處理結果表示,並在此基礎上提供了一整套自底向上的豐富而且高效的中文語言處理模塊(包括詞法、句法、語義等6項中文處理核心技術),以及基於動態鏈接庫(Dynamic Link Library, DLL)的應用程序接口、可視化工具,並且能夠以網絡服務(Web Service)的形式進行使用。
官方網站:http://ltp.ai

  1. 詞幹 Word Stemming

snowballstem/snowball, C語言版本。
snowballstem/pystemmer,Python版本,代碼較新。
還有go 語言實現的,這裏不列舉了。

  1. 語言識別 Language Identification

(https://github.com/saffsd/langid.py),語言識別比較好的開源工具。

  1. 機器翻譯 Machine Translation

OpenNMT/OpenNMT-py, 基於PyTorch的神經機器翻譯,很適合練手。代碼較新,持續有更新。

  1. 複述生成 Paraphrase Generation

vsuthichai/paraphraser,基於Tensorflow的句子級複述生成,適合練手。

  1. 關係抽取 Relationship Extraction

ankitp94/relationship-extraction,基於核方法的關係抽取。

  1. 句子邊界消歧 Sentence Boundary Disambiguation

https://github.com/Orekhov/SentenceBreaking,很有意思。
19.事件抽取 Event Extraction

liuhuanyong/ComplexEventExtraction, 中文複合事件抽取,包括條件事件、因果事件、順承事件、反轉事件等事件抽取,並形成事理圖譜。

  1. 詞義消歧 Word Sense Disambiguation

alvations/pywsd,代碼不多,方法簡單,適合練手。

  1. 命名實體消歧 Named Entity Disambiguation

dice-group/AGDISTIS,實體消歧是很重要的,尤其對於實體融合(比如知識圖譜中多源數據融合)、實體鏈接。

  1. 幽默檢測 Humor Detection

pln-fing-udelar/pghumor 針對西班牙推文做的,一般用不上,不過可以參考學習一下。

  1. 諷刺檢測 Sarcasm Detection

AniSkywalker/SarcasmDetection,基於神經網絡的諷刺檢測。最新更新是2019年9月份

https://www.aclweb.org/anthology/W16-0425.pdf
  1. 實體鏈接 Entity Linking

hasibi/EntityLinkingRetrieval-ELR, 參考的ACM論文Exploiting Entity Linking in Queries for Entity Retrieval,實體鏈接用途非常廣,非常適合練手。

  1. 指代消歧 Coreference Resolution

huggingface/neuralcoref,基於神經網絡的指代消歧。持續有更新維護。
NeuralCoref是spaCy 2.1+的管道擴展,它使用神經網絡註釋和解析指代消歧。 NeuralCoref已投入生產,已集成到spaCy的NLP管道中,並可擴展到新的培訓數據集。

  1. 關鍵詞/短語抽取和社會標籤推薦 Keyphrase Extraction and Social Tag Suggestion

thunlp/THUTag, 用多種方法 實現了多種關鍵詞/短語抽取和社會標籤推薦。

以上整理的庫和鏈接並不一定是最經典的和最新的,請在學習和使用時注意區分是否是自己需要學習的庫。

NLP常用庫介紹

1.spaCy

極其優化的NLP庫,可與深度學習框架(如TensorFlow或PyTorch)一起運行。該庫提供了大多數標準功能(標記化,PoS標記,解析,命名實體識別…),並且構建快速。spaCy也很好地與所有主要的深度學習框架接口,並預裝了一些非常好的和有用的語言模型。下面所有的例子都是用Jupter運行過後的。

2:Natural Language Toolkit / NLTK

NLTK是構建Python程序以使用人類語言數據的領先平臺。它爲50多種語料庫和詞彙資源(如WordNet)提供了易於使用的界面,還提供了一套用於分類,標記化,詞幹化,標記,解析和語義推理的文本處理庫,用於工業級NLP庫的包裝器,和積極的討論論壇。由於實踐指南介紹了編程基礎知識以及計算語言學的主題,以及全面的API文檔,NLTK適用於語言學家,工程師,學生,教育工作者,研究人員和行業用戶等。 NLTK適用於Windows,Mac OS X和Linux。最重要的是,NLTK是一個免費的,開源的,社區驅動的項目。

3:Stanford CoreNLP Python

CoreNLP正在斯坦福大學的自然語言處理小組積極開發.該工具包提供了非常強大,準確和優化的技術,用於標記,解析和分析各種語言的文本。它還支持註釋管道,並且易於擴展和訪問。總的來說,CoreNLP是NLP工具包之一,已經並且肯定在生產中使用了很多。

4:jieba

結巴中文分詞涉及到的算法包括:
(1) 基於Trie樹結構實現高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構成的有向無環圖(DAG);
(2) 採用了動態規劃查找最大概率路徑, 找出基於詞頻的最大切分組合;
(3) 對於未登錄詞,採用了基於漢字成詞能力的HMM模型,使用了Viterbi算法。

結巴中文分詞支持的三種分詞模式包括:
(1) 精確模式:試圖將句子最精確地切開,適合文本分析;
(2) 全模式:把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義問題;
(3) 搜索引擎模式:在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜索引擎分詞。

號稱最全的中文詞庫分析

5:pyltp

哈工大的語料分析庫,最近常用,效果還行,安裝較難,對環境考驗較大

6:paddlehub

百度的paddlehub封裝了例如LAC這樣的實體命名識別模型,使用起來速度特別快,效果也很棒!

7:foolnltk

可能不是最快的開源中文分詞,但很可能是最準的開源中文分詞
基於BiLSTM模型訓練而成
包含分詞,詞性標註,實體識別, 都有比較高的準確率
用戶自定義詞典
可訓練自己的模型
批量處理

上面這幾個我都比較喜歡的,用起來也很方便,先介紹這麼多,後續再分析使用過程以及方法。

歡迎進入深度學習交流羣,與深度學習煉丹師一起交流,我們在同一個燃燒的煉丹爐!

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章