我對有抱負的數據科學家的簡單教程:了解NLP技術

聞數起舞 發佈 2020-06-04T22:08:06+00:00

Vincent使用高級數據分析,機器學習和軟體工程技術來保護Chrome和Gmail用戶。除了在Google任職外,Vincent還是Towards Data Science Medium的特約作家,該指南為全球有50萬以上觀眾的ML和數據從業者提供指導。

了解基本文本分析和ML的快速方法

"您將知道它所擁有的公司的一句話" —約翰·費思

什麼是自然語言處理?

自然語言處理(NLP)可幫助計算機理解文本並模擬人類如何理解文本。

由於近年來的數據增長,NLP迅速增長。 隨著Twitter,Facebook和Google的興起,尤其是在搜尋引擎或個人AI助手中處理非結構化數據的情況下。 NLP的應用越來越廣泛。

NLP的應用與問題

Google搜尋圖片

考慮使用Google搜索貓圖片。 你是什麼貓?

有這麼多貓。 您在"貓"戲劇演出中有突變貓。 你有卡通貓。 你在說哪一個?

· 當我說"可愛的貓"時。 顯然我要小貓。

· 當我說"貓秀"時。 顯然我要那隻突變的貓。

相鄰的單詞,例如" Cute"和" Show",進一步說明了我想要的內容。 這是評估NLP性能的背景。

Google助手

考慮一下Google Home Mini,您只需花費50美元即可購買。 它了解查詢上下文嗎?

想像一下,您的小女兒在她的任務項目" Ok Google,定義一閃一閃的小星星"中詢問Google Home Mini。

Google Home是否不應該足夠聰明地知道它是一首歌的標題?

情緒分析

想像一下,您想預測唐納德·川普在上屆總統選舉中戰勝希拉蕊·柯林頓的勝利。

您能從Twitter上的普遍情緒中預測嗎? 每個總統候選人的滿意點是什麼?

主題分析

想像一下您的碩士/本科班級論壇:很難從所有這些信息中提取出重要的內容。

您能否建立一個模型,以潛在地提取所有關鍵主題並根據該主題過濾帖子?

問題陳述

NLP變得越來越普遍,對學習也很重要。 潛力是巨大的,現在已在世界各地使用。

NLP為什麼很難-歧義和上下文?

NLP的最大敵人是模稜兩可,NLP的最大朋友是上下文– Vincent Tatan

考慮一下我們在日常生活中如何使用文字。

"你為什麼這麼沮喪? 玩得開心啦!

"這是怎麼回事?

對於我們來說,這些單詞的含義似乎非常清楚。 " r u"表示"您是","怎麼了"是美國常見的非正式問候。

但是,這些句子中存在歧義。 "怎麼了"字面上的答案應該是"太陽升起了",而不是"我很好,謝謝"。 隱藏的上下文使我們很難向計算機解釋這些句子的確切含義。

大多數時候,我們假設聽眾會根據對世界的了解和共享上下文來填補很多空白。

我們在哪?

我們在做什麼?

我們彼此之間已經了解了什麼?

有趣的是,我們不知道大腦中的單詞是如何產生含義的。 但這對我們來說非常容易。

這就是為什麼我們需要計算機的機器學習和NLP技術才能從文本語料庫中識別這些規則和上下文。

合作實驗室

在本課程中,我們將使用此Colab來完成本教程。 隨意打開它並直接運行。 該合作實驗展示了NLP的簡單應用。

您如何理解"我愛冰淇淋"?

想像一下,你問你的女兒他們喜歡吃什麼。 其中一個孩子回答"我愛冰淇淋!" 你能猜出他們是興奮地微笑還是皺著眉頭?

如果我剛剛向您顯示"我在這裡插入單詞"冰淇淋這個詞,您可以這樣做嗎? 您怎麼知道這個孩子是否皺著眉頭?

為了回答這個情感分析問題,讓我們將NLP分解為以下基本原則:

· 標記化:分解並編碼句子中的每個單詞。

· 序列:以特定順序映射標記以形成句子/序列。

· 嵌入:在多維圖中表示令牌以提供矢量聚合以提供業務洞察力(情感分析)。

Tokenize

標記化將文本分解為計算機可以理解的標記和索引。

我們將討論如何通過標記單詞來理解單詞。 考慮單詞FRIED。 我們可以用ASCII數字表示這些字母。 但是由於順序不同,FIRED的字母也相同,但單詞卻不同。

好吧,讓我們改用這些詞。 在文本"我愛我的狗"中,我們可以按每個單詞→1 [I],2 [love],3 [my],4 [dog]對其進行編碼。 我們將看一下實現標記化的代碼

Tokenizer API已經刪除了所有的感嘆號和標點符號,這些符號和標點符號對於快速獲取單詞令牌很方便。

首先,我們需要標記來自Keras的API。 然後我們可以創建句子。 Num_words參數在這裡表示要保留的單詞數。 在這種情況下,我們將保留100個出現在語料庫中的最常用單詞。

如果分詞器發現word_index中不存在的單詞怎麼辦? 然後,我們需要指定詞庫外(OOV)標記並將其標識為索引1。

恭喜! 您剛剛將這些標記編入索引以進行培訓!

排序

排序表示單詞序列及其相應索引中的句子。 我們使用tokenizer.texts_to_sequence將語料庫按順序轉換為標記。

排序很重要,因為單詞的順序很重要。 "我愛魚"和"我愛魚"具有不同的語義和語法錯誤。 句子的順序確定哪個標記成為含義的對象或主語。

這對標記進行排序,並填充剩餘的標記空間以匹配最長序列的維數。 這些對於在嵌入/情感分析過程中運行數學運算非常重要。

請注意,我們可以從此處提取幾個索引:

· 0→填充較短的句子以匹配較長的句子

· 1→OOV(詞彙不足)。 這些是在word_index標記中找不到的詞彙表

· 1→在標記化word_index中找到的單詞索引

填充使我們能夠標準化每個主體的長度。 這使得使用numpy運行多個操作並為進行神經網絡(NN)培訓做準備變得更加容易。

嵌入

嵌入將輸入投影到多維表示空間中。 例如,我們可以將以下單詞投影到極性子空間中。

讓我們在多維空間中繪製每個單詞。 然後,當我們想擁有合併的含義時。 我們可以將這些向量組合在一起並生成統一的向量。

例如,好被認為是積極情緒,而壞則被認為是消極情緒。 但是,如果您在同一句話中使用"好"和"壞"(例如:我認為您的論文是好的,但是您的筆跡很差),那麼您的情緒就會中立。

通過對Tensorflow和Keras進行實驗,我們可以訓練以嵌入為輸入的神經網絡。 使用此colab筆記本,您可以嘗試做Kaggle問題並運行代碼。

獎勵:自然語言處理的進一步挑戰

這樣在NLP中有更多的應用。 我希望這個簡單的教程能激發您的胃口,探索如何處理單詞和語言。

語法和詞彙很複雜。 我們需要更多的技術來派生我們的功能並更好地進行標記化。

· 引理:應該表示的獨特詞。 例如,在英語中,我們有不同的時態。 運行,運行和運行均指相同的單詞。 中文具有單詞組合,在其中可以具有不同的含義。 像wei(危險)ji(機會)→危機

· POS(詞性)標記:單詞標記是獨立的含義單位。 可以是動詞,詞綴,前綴,名詞等。例如run是動詞,但是running可以是形容詞(例如running race)

· 塊:從"語音標記"中識別對實體的提及。 它將單詞/標記分組

· 共指:連結中提到相同實體的部分中的單詞。 例如:歐巴馬和羅姆尼談到自己的童年。 他在這裡指的是什麼?

最後的想法

總之,我相信這些基本的NLP在您的第一次探索中很容易實現。 我們了解到:

· 標記化:分解並編碼句子中的每個單詞。

· 序列:以特定順序映射標記以形成句子/序列。

· 嵌入:在多維圖中表示令牌以提供矢量聚合以提供業務洞察力(情感分析)。

隨意了解如何在Tensorflow和Keras等DNN框架中實現它。

與往常一樣,如果您有任何疑問,請通過Linkedin與我聯繫。 如果時間允許,我很樂意回答您的問題。

索利·迪奧·格洛里亞

參考

· 史丹福大學的自然語言理解(NLU)

· NLP零英雄,勞倫斯·莫洛尼(Laurence Moroney)

關於作者

Vincent通過ML @ Google打擊網際網路濫用。 Vincent使用高級數據分析,機器學習和軟體工程技術來保護Chrome和Gmail用戶。

除了在Google任職外,Vincent還是Towards Data Science Medium的特約作家,該指南為全球有50萬以上觀眾的ML和數據從業者提供指導。

在業餘時間,文森特(Vincent)就讀喬治亞理工大學的ML碩士學位,並訓練鐵人三項/騎車旅行。

最後,請通過LinkedIn,Medium或Youtube頻道聯繫Vincent

(本文翻譯自Vincent Tatan的文章《Understanding NLP Techniques》,參考:https://towardsdatascience.com/understanding-nlp-techniques-and-machine-learning-2fdbe78922f2)

關鍵字: