NLP入门_自然语言处理_AI分支
NLP (Natural Language Processing) 是人工智能(AI)的一個子領域。
? ? ?自然語言是人類智慧的結晶,自然語言處理是人工智能中最為困難的問題之一,而對自然語言處理的研究也是充滿魅力和挑戰的。
? ? ? ?理論上,NLP是一種很吸引人的人機交互方式。早期的語言處理系統如SHRDLU,當它們處于一個有限的“積木世界”,運用有限的詞匯表會話時,工作得相當好。這使得研究員們對此系統相當樂觀,然而,當把這個系統拓展到充滿了現實世界的含糊與不確定性的環境中時,他們很快喪失了信心。
? ? ? 由于理解(understanding)自然語言,需要關于外在世界的廣泛知識以及運用操作這些知識的能力,自然語言認知,同時也被視為一個人工智能完備(AI-complete)的問題。同時,在自然語言處理中,"理解"的定義也變成一個主要的問題。有關理解定義問題的研究已經引發關注。
?
常見的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)
?
9.語言識別
什么是語言識別?語言識別指的是將不同語言的文本區分出來。其利用語言的統計和語法屬性來執行此任務。語言識別也可以被認為是文本分類的特殊情況。
博文:在這篇由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入门_自然语言处理_AI分支的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css实现三角箭头(兼容IE6)
- 下一篇: C++互斥量、原子锁、自旋锁等比较