0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何讓計算機理解文本并從中提取數(shù)據(jù)呢?

zhKF_jqr_AI ? 來源:未知 ? 作者:李倩 ? 2018-07-24 09:38 ? 次閱讀

編者按:計算機非常適合處理電子表格和數(shù)據(jù)庫表等結(jié)構(gòu)化數(shù)據(jù),但在日常生活中,人類通常使用的溝通工具是文字,而不是表格,這對計算機來說也許是個不幸。語言原始文本是一種非結(jié)構(gòu)化的信息,那么我們該如何讓計算機理解文本并從中提取數(shù)據(jù)呢?

自然語言處理(NLP)是人工智能的一個子領(lǐng)域,它專注于使計算機能夠理解和處理人類語言。本文會介紹NLP工作的基本機制,希望讀者能從中得到啟發(fā)。

注:本文選用的示例語言是英語。

計算機能理解語言嗎?

自計算機誕生之初,程序員們就一直在嘗試編寫能理解語言的程序。原因很簡單——人類使用語言的歷史已長達千年,如果計算機能閱讀并理解所有數(shù)據(jù),這將大有裨益。

雖然現(xiàn)在計算機還不能像人類一樣真正讀懂語言,但它們確實取得了不少進展,在某些領(lǐng)域,使用NLP可以為事物帶來神奇的改變。通過把NLP技術(shù)應(yīng)用于你自己的項目,也許你會因此節(jié)約大量時間。

更好的消息是,現(xiàn)在我們可以通過開源Python庫(如spaCy、textacy和neuralcoref)輕松訪問NLP領(lǐng)域的最新成果。只需幾行代碼,令人驚嘆的成果立馬實現(xiàn)。

從文本中提取意義很難

閱讀和理解語言是一個非常復(fù)雜的過程——它們甚至不會判斷這樣的理解是否符合邏輯和一致性。例如,下面這個新聞標(biāo)題表達了什么含義?

“Environmental regulators grill business owner over illegal coal fires.” 環(huán)境監(jiān)管機構(gòu)就非法燃煤一事___企業(yè)主。(grill:追問,炙烤)

監(jiān)管機構(gòu)是在質(zhì)疑企業(yè)存在非法燃煤情況,還是在拿企業(yè)主做飯?如你所見,用計算機解析語言會讓問題變得很復(fù)雜。

機器學(xué)習(xí)中,解決復(fù)雜任務(wù)通常意味著建立一個pipeline。它的想法是把問題分解成若干個非常小的部分,然后用機器學(xué)習(xí)去一一破解,最后,通過將這些機器學(xué)習(xí)模型拼接在一起,我們可以用它完成復(fù)雜任務(wù)。

而這正是我們在NLP中常用的策略。我們把理解語言文本這個過程分成幾個小塊,然后獨立推敲它們的具體理解方式。

逐步構(gòu)建NLP管道

下面是維基百科中關(guān)于“倫敦”的一段文字:

London is the capital and most populous city of England and the United Kingdom. Standing on the River Thames in the south east of the island of Great Britain, London has been a major settlement for two millennia. It was founded by the Romans, who named it Londinium. 倫敦是英格蘭和英國的首府,也是英國人口最多的城市。它位于大不列顛島東南部的泰晤士河畔,2000年來一直是這一地區(qū)的主要定居點之一。倫敦最初由羅馬人建立,取名為倫蒂尼恩。

這段文字包含多個有用事實,如果計算機能從中讀懂“倫敦是一座城市”“倫敦位于英格蘭”“倫敦由羅馬人建立”,那就大功告成了。但為了實現(xiàn)這一目標(biāo),我們首先要向計算機傳授書面語言的最基本概念,然后再謀求進一步發(fā)展。

第一步:語句分割(Sentence Segmentation)

NLP pipeline的第一步是先把文本分割成單獨的句子,如下所示:

倫敦是英格蘭和英國的首府,也是英國人口最多的城市。

它位于大不列顛島東南部的泰晤士河畔,2000年來一直是這一地區(qū)主要的定居點之一。

倫敦最初由羅馬人建立,取名為倫蒂尼恩。

我們可以假設(shè)這里的每個句子都表示一種獨立的思想或想法,比起理解整個段落,編寫程序來理解單個句子確實會容易得多。

至于構(gòu)建語句分割模型,這不是一件難事,我們可以根據(jù)標(biāo)點符號確定每個句子。當(dāng)然,現(xiàn)代NLP通常會用更復(fù)雜的技術(shù),即便文檔內(nèi)容不整潔,它還是能大致區(qū)分完整句子。

第二步:單詞詞例(Word Tokenization)

有了一個個被拆分的句子,現(xiàn)在我們可以對它們進行逐一處理。讓我們從第一句開始:

London is the capital and most populous city of England and the United Kingdom.

這一步的目標(biāo)是把句子再分割成單獨的單詞或標(biāo)點符號,分割完成后,整個句子變成了這樣:

“London”, “is”, “ the”, “capital”, “and”, “most”, “populous”, “city”, “of”, “England”, “and”, “the”, “United”, “Kingdom”, “.”

英語中存在自然分界符——空格,所以對它生成詞例非常方便。只要兩個詞例之間有空格,我們就可以把它們直接分開。因為標(biāo)點符號也有意義,我們要把它們視為單獨的詞例。

第三步:預(yù)測詞例詞性

接下來,我們來關(guān)注詞例的詞性:名詞、動詞、形容詞……知道每個詞語在句子中的作用有助于我們理解句子在說什么。

要實現(xiàn)這一點,我們可以事先訓(xùn)練一個詞性分類模型,然后把每個單詞輸入其中預(yù)測詞性:

這個模型最初是在數(shù)百萬個英語句子上訓(xùn)練的,數(shù)據(jù)集中已經(jīng)標(biāo)明每個單詞的詞性,因此它可以學(xué)會這個“定義”的過程。但是注意一點,這個模型完全是基于統(tǒng)計數(shù)據(jù)的——它實際上無法像人類那樣理解單詞含義,而是只能根據(jù)“看”到過的類似句子進行猜測。

處理完整句后,我們會得到這樣的結(jié)果:

有了這些信息,我們就可以開始收集一些非?;镜暮x,比如句子中的名詞包括“倫敦”“首府”,所以這句話有大概率是在談?wù)搨惗亍?/p>

第四步:文本詞形還原(Text Lemmatization)

在英語中,單詞是有不同形式的,比如:

I had a pony.

I had two ponies.

兩個句子都涉及名詞pony(小馬),但一個是單數(shù)形式,一個是復(fù)數(shù)形式。當(dāng)計算機在處理文本時,如果沒有說明,它會把“pony”和“ponies”看成完全不同的對象,因此了解每個單詞的基本形式很有幫助,只有這樣,計算機才知道兩個句子在談?wù)撏粋€概念。

在NLP中,我們把這種將一個任何形式的語言詞匯還原為一般形式的過程稱為詞形還原,它能找出句子中每個單詞的最基本形式。

同樣的,這也適用于英語動詞。我們可以用詞形還原找出單詞詞根,這之后,“I had two ponies”就變成了“I [have] two [pony]”。

詞形還原是通過檢索詞匯生成表格實現(xiàn)的,它也有可能具有一些自定義規(guī)則,可以處理人們從未見過的單詞。

以下是經(jīng)還原的例句,我們做的唯一改變是把“is”變成“be”:

第五步:識別停用詞(Identifying Stop Words)

然后就是衡量句子中每個單詞的重要性。英語中有很多填充詞,比如經(jīng)常出現(xiàn)的“and”“the”和“a”。在對文本進行統(tǒng)計時,這些詞會引入很多噪音,因為它們出現(xiàn)的頻率很高。一些NLP pipeline會將它們標(biāo)記為停用詞 ——也就是說,在進行任何統(tǒng)計分析之前,我們可能會希望過濾掉這些詞。

下面是標(biāo)灰停用詞的例句:

停用詞檢測也有一個事先準(zhǔn)備好的列表,但它和詞形還原有區(qū)別,我們沒有適用于任何問題的標(biāo)準(zhǔn)停用詞列表,它需要具體問題具體分析。比方說,如果我們要構(gòu)建一個有關(guān)搖滾樂隊的搜索引擎,那“The”這個詞千萬不能被忽略,因為它會出現(xiàn)在很多樂隊的名字里,20世紀(jì)80年代還有一支著名的樂隊叫“The The”。

第六步:依存句法分析(Dependency Parsing)

下一步是弄清楚句子中的所有單詞是如何相互關(guān)聯(lián)的,也就是依存句法分析。

我們的目標(biāo)是構(gòu)建一棵依存樹,其中樹根處是占據(jù)支配地位的主要動詞,簡稱主詞,處于依存地位的是從詞:

但我們可以更進一步。除了識別每個單詞的主詞外,我們還可以預(yù)測這兩個單詞之間的依存關(guān)系類型:

這棵依存樹告訴我們句子的主語是“London”,它和“capital”存在一個“be”的關(guān)系。據(jù)此我們得到了一條有用信息——London is a capital。在這個基礎(chǔ)上,如果我們繼續(xù)往后看,可以發(fā)現(xiàn),其實London is the capital of the United Kingdom。

就像我們之前使用機器學(xué)習(xí)模型預(yù)測詞性一樣,依存句法分析也可以用一個模型來實現(xiàn)。不同的是,解析單詞依存特別復(fù)雜,需要結(jié)合整篇文章詳細解釋。如果你感興趣,Matthew Honnibal的“用500行Python代碼解析英語”是個不錯的教程。

雖然2015年的時候,作者表示這種方法已經(jīng)成為標(biāo)準(zhǔn),但放到現(xiàn)在來看,它還是有點過時,很多研究人員都已經(jīng)不再用它了。2016年,Google發(fā)布了一個名為Parsey McParseface的新依存解析器,它基于深度學(xué)習(xí),在性能上明顯超出已有基準(zhǔn),因此一經(jīng)發(fā)布就被廣泛傳播。一年后,他們又發(fā)布了更新版本ParseySaurus,進一步做了提升。簡而言之,依存句法分析現(xiàn)在還是一個活躍的研究領(lǐng)域,并且在不斷變化和改進。

此外,許多英語句子存在意義含糊不清的問題,往往難以解析。在這些情況下,模型會基于句子的各個解析版本猜測一個可能性最高的選擇,但它并不完美,有時模型會出現(xiàn)令人尷尬的錯誤。但隨著時間的推移,我們的NLP模型會逐漸走向合理。

第6b步:尋找名詞短語

到目前為止,我們已經(jīng)把句子中的每個單詞視為一個單獨的實體,但有時這些表示單個想法或事物的詞組合在一起會更有意義。利用依存樹,我們可以自動整合信息,把討論同一個事物的單詞組合在一起。

比起下圖這個形式:

我們可以對名詞短語進行分組以生成:

是否要采取這一步驟取決于我們的最終目標(biāo)。但是,如果我們不需要了解句子的額外細節(jié),比如哪些詞是形容詞,而是更多地關(guān)注提取完整想法,那么這通常是簡化句子的一個便捷方法。

第七步:命名實體識別(NER)

完成上述步驟后,我們就可以擺脫初級語法,開始真正著手提取意義。

在示例句子中,我們有以下名詞:

這些名詞中包含一些現(xiàn)實存在的東西,比如“倫敦”“英格蘭”“英國”表示地圖上的某個地理位置。有了這些信息,我們就可以使用NLP自動提取文檔中提到的真實世界的位置列表。

命名實體識別(NER)的目標(biāo)是檢測這些表示現(xiàn)實世界食物的詞,并對它們進行標(biāo)記。下圖把各個詞例輸入NER模型后,示例句子的變化情況:

雖然直觀上看不出,但NER絕不是簡單地查詞典、打標(biāo)簽,它包含一個單詞在上下文中位置的統(tǒng)計模型,可以預(yù)測不同單詞分別代表哪種類型的名詞。舉個例子,一個好的NER模型可以區(qū)分“Brooklyn”是表示人名Brooklyn Decker,還是地名布魯克林。

以下是典型NER系統(tǒng)可以標(biāo)記的一些對象:

人的名字

公司名稱

地理位置(地緣和政治)

產(chǎn)品名稱

日期和時間

金額

事件名稱

NER有很多用途,因為它可以輕易從文本中獲取結(jié)構(gòu)化數(shù)據(jù),這是快速從NLP pipeline中獲取有價值信息的最簡單的方法之一。

第八步:共指消解

截至目前,我們已經(jīng)有了許多和句子相關(guān)的有用表征。我們知道每個單詞的詞性、單詞間的依存關(guān)系,以及那些詞表示命名實體。

但我們還有一個棘手的問題,就是英語中包含大量代詞,比如“he”“she”“it”,這些詞頻繁出現(xiàn)在句子里,是我們?yōu)榱吮苊庵貜?fù)提及某個名稱而使用的簡稱。人類可以根據(jù)上下文理解這些代詞的含義,但NLP模型不行,因為到目前為止,它只是一句一句地檢測。

讓我們來看示例的第三句:

“It was founded by the Romans, who named it Londinium.”

根據(jù)NLP pipeline,我們的模型只知道“it”是羅馬人造的,還不知道“it”是什么。但這個問題想必難不倒任何讀得動這段話的人,我們知道這里的“it”就是第一句里的“London”。

以下是在我們的文檔中為“倫敦”一詞運行共識解析的結(jié)果:

通過將共指消解與依存樹、命名實體信息相結(jié)合,我們可以從該文檔中提取大量信息!事實上,這也是現(xiàn)在NLP領(lǐng)域的一大難點,它的難度遠高于單個句子解析。雖然近年來基于深度學(xué)習(xí)最新進展的某些成果已經(jīng)取得了一定突破,但它們都不完美。

以上是關(guān)于NLP的一些基礎(chǔ)知識,如果你對這個內(nèi)容感興趣,以后我們還會討論NLP的更多內(nèi)容,如文本分類、智能助理解析問題等具體應(yīng)用。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 計算機
    +關(guān)注

    關(guān)注

    19

    文章

    7534

    瀏覽量

    88502
  • 機器學(xué)習(xí)
    +關(guān)注

    關(guān)注

    66

    文章

    8438

    瀏覽量

    132970
  • nlp
    nlp
    +關(guān)注

    關(guān)注

    1

    文章

    489

    瀏覽量

    22085

原文標(biāo)題:自然語言處理,其樂無窮!

文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    計算機有哪些功能

    一句話概括:計算機體系結(jié)構(gòu)講的是計算機有哪些功能(包括指令集、數(shù)據(jù)類型、存儲器尋址技術(shù)、I/O機理等等),是抽象的;計算機組成原理講的是
    發(fā)表于 07-16 07:45

    深度學(xué)習(xí)是什么

    是人工智能領(lǐng)域一個最新的分支,可以幫助計算機理解圖像、聲音和文本,但需要強大的數(shù)據(jù)處理能力作為支撐。NVIDIAJetsonTX1  在今年的EmbeddedWorld、SX...
    發(fā)表于 07-19 06:17

    視頻場景下的視聯(lián)網(wǎng)是怎樣做到升級的

    AI場景廣告是通過計算機視覺技術(shù)對視頻數(shù)據(jù)提取,將視頻內(nèi)容按照語義關(guān)系,采用對象識別、 特征提取等處理手段,組織成可供計算機理解的結(jié)構(gòu)化信
    發(fā)表于 09-10 14:57 ?768次閱讀

    如何使用計算機機器人理解人類語言以及含義

    和文化背景的復(fù)雜性,機器很難理解和解釋客戶提供的觀點性數(shù)據(jù),因此提取見解極具挑戰(zhàn)性。自然語言處理(NLP)和機器學(xué)習(xí)(ML)等工具使計算機
    的頭像 發(fā)表于 05-17 16:19 ?3311次閱讀

    如何使用TensorFlow Lite從Android設(shè)備圖像提取文本

    俗話說:“一圖勝千言”。圖像包含豐富的視覺信息,但有時關(guān)鍵信息位于圖像的文本當(dāng)中。雖然識字的人可以輕松理解圖像中嵌入的文字,但我們?nèi)绾卫?b class='flag-5'>計算機視覺和機器學(xué)習(xí)來教計算機做到這一點
    的頭像 發(fā)表于 11-02 15:34 ?3457次閱讀

    計算機視覺為何重要?

    計算機視覺是一個研究領(lǐng)域,旨在助力計算機使用復(fù)雜算法(可以是傳統(tǒng)算法,也可以是基于深度學(xué)習(xí)的算法)來理解數(shù)字圖像和視頻并提取有用的信息。
    的頭像 發(fā)表于 04-29 14:21 ?3509次閱讀

    計算機視覺中不同的特征提取方法對比

    特征提取計算機視覺中的一個重要主題。不論是SLAM、SFM、三維重建等重要應(yīng)用的底層都是建立在特征點跨圖像可靠地提取和匹配之上。特征提取計算機
    的頭像 發(fā)表于 07-11 10:28 ?3565次閱讀

    手勢識別幫助計算機理解人體語言

    電子發(fā)燒友網(wǎng)站提供《手勢識別幫助計算機理解人體語言.zip》資料免費下載
    發(fā)表于 10-28 10:16 ?0次下載
    手勢識別幫助<b class='flag-5'>計算機理解</b>人體語言

    機器視覺是干什么的_機器視覺的應(yīng)用有哪些

    機器視覺是指通過計算機技術(shù)和算法實現(xiàn)對圖像或視頻進行分析、處理、識別和理解的能力。它的主要目的是模擬人眼的視覺系統(tǒng),計算機能夠像人一樣“看懂”圖像和視頻,
    發(fā)表于 03-12 11:50 ?1895次閱讀

    計算機是如何理解世界的

    電子發(fā)燒友網(wǎng)站提供《計算機是如何理解世界的.zip》資料免費下載
    發(fā)表于 06-13 15:48 ?0次下載
    <b class='flag-5'>計算機</b>是如何<b class='flag-5'>理解</b>世界的

    自然語言理解問答對話文本數(shù)據(jù),賦予計算機智能交流的能力

    自然語言理解(Natural Language Understanding,簡稱NLU)問答對話文本數(shù)據(jù)是現(xiàn)代人工智能領(lǐng)域的一項重要資源。這些數(shù)據(jù)集涵蓋了用戶與計算機之間的自然語言交互
    的頭像 發(fā)表于 08-07 18:11 ?729次閱讀

    計算機究竟是如何理解并執(zhí)行我們所寫的代碼的?

    在編寫了大量代碼之后,不禁人思考,計算機究竟是如何理解并執(zhí)行我們所寫的代碼的?這個問題將引導(dǎo)我們深入了解計算機的內(nèi)部工作原理,從二進制到
    發(fā)表于 09-05 09:54 ?461次閱讀
    <b class='flag-5'>計算機</b>究竟是如何<b class='flag-5'>理解</b>并執(zhí)行我們所寫的代碼的<b class='flag-5'>呢</b>?

    計算機視覺:AI如何識別與理解圖像

    計算機視覺是人工智能領(lǐng)域的一個重要分支,它致力于機器能夠像人類一樣理解和解釋圖像。隨著深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)的發(fā)展,人們對于如何AI識別和理解
    的頭像 發(fā)表于 01-12 08:27 ?1557次閱讀
    <b class='flag-5'>計算機</b>視覺:AI如何識別與<b class='flag-5'>理解</b>圖像

    計算機視覺和圖像處理的區(qū)別和聯(lián)系

    計算機視覺和圖像處理是兩個密切相關(guān)但又有明顯區(qū)別的領(lǐng)域。 1. 基本概念 1.1 計算機視覺 計算機視覺是一門研究如何使計算機能夠理解和解釋
    的頭像 發(fā)表于 07-09 09:16 ?1425次閱讀

    計算機視覺的工作原理和應(yīng)用

    圖像和視頻中提取有用信息,進而進行決策和行動。自1960年代第一批學(xué)術(shù)論文問世以來,計算機視覺技術(shù)已經(jīng)取得了長足的發(fā)展,并在多個領(lǐng)域展現(xiàn)出巨大的應(yīng)用潛力和價值。
    的頭像 發(fā)表于 07-10 18:24 ?2240次閱讀