【机器学习】基于LDA主题模型的人脸识别专利分析
作者 | Soren Gran
編譯 | VK
來源 | Towards Data Science
介紹
作為一名數據科學家,文本數據提出了一個獨特的挑戰:雖然金融、年齡和溫度數據可以立即被注入線性回歸,但詞匯和語言本身對統計模型毫無意義。
怎樣才能有人對一系列隨機的、毫無意義的字母進行建模或分析?廣義上,這類工作屬于自然語言處理(NLP)的范疇,這項研究跨越了各種領域——計算機科學、語言學、人工智能,當然還有數據科學。
然而,對于模型來說,重要的是模式,特別是文本數據語料庫中的詞匯排列。主題模型的統計方法是利用機器學習識別文本數據語料庫中的詞之間的關系。然后它基于“主題”來描述語料庫,主題是模型推斷出的屬于一個主題的單詞組。
在本文中,我將解釋如何使用一種名為潛Dirichlet分配(LDA)的主題模型方法來識別這些關系。然后,我將在我從DergoInnovations索引數據庫中提取的一些專利數據實現此方法,我通過Claremont學院圖書館(Claremont Colleges Library)訪問了該數據庫。最后,我將對模型的結果執行并可視化趨勢分析。這個演示將使用Python實現,并且將依賴Gensim、pandas和自然語言工具包。
了解使用LDA的主題模型,你將能夠對各種文本數據進行建模——推特、研究或專利摘要、報紙或任何其他文本數據語料庫。
基于潛Dirichlet分配的主題模型
主題模型如何工作?它使用一種機器學習方法,稱為“潛Dirichlet分配”。盡管這種方法聽起來很嚇人,但它的標題實際上很好地描述了它:
潛:這意味著隱藏或未被發現。我們假設主題在語料庫中隱式地存在,我們只是去發現它們。
Dirichlet:你可以從統計中認識這個術語,特別是Dirichlet。Dirichlet是有限事件數的概率分布
其中
每個事件E都有自己的概率P,這些概率,一如既往地,總和為1。
分配:在主題模型中,我們為多種目的分配狄利克雷分布。我們為語料庫中主題的分布分配了一個。此外,我們分配到每個主題,每個代表該主題中單詞的分布。在前一種分布中,事件是主題;在后者中,事件是主題中的單詞。
既然你對LDA有了一個想法,我們可以討論它的實現。對于Gensim的LDAMulticore方法,我們指定了我們想要發現的主題的數量。
每個主題的Dirichlet概率分布是隨機初始化的,并且在模型通過語料庫時調整每個分布中單詞的概率。
為了對LDA進行一個非常奇妙、更長的解釋,我推薦ThushanGanegedara的直觀教程。它與本文的水平差不多,但將進一步深入到數學細節:https://towardsdatascience.com/light-on-math-machine-learning-intuitive-guide-to-latent-dirichlet-allocation-437c81220158
專利數據主題模型的實現
讓我們看看一個在真實數據集上的主題模型的實現。在這個案例中,我想分析成千上萬的專利摘要,涉及一個新興技術:人臉識別。
自1990年以來,我從世界各地提取了近3500份專利摘要。然而,一項快速的探索性數據分析顯示,超過65%的摘要發生在2016年至2020年,這是有意義的,基于近年來面部識別應用程序的激增。EDA還顯示,近80%的摘要來自美國和中國,兩者之間幾乎是均勻的。代碼和數據在本文末尾鏈接。
提取數據
為了實現,我對技術專利的摘要進行了建模。我從DergoInnovations索引數據庫中提取了這些數據,特別是搜索術語“facial recognition”。
除了專利申請日期和專利的來源國外,我對構成文本語料庫的摘要感興趣。日期和國家并不用于主題建模過程,而是用于我對主題模型結果進行的趨勢分析。
一旦我們有了數據,我們就要導入我們的包。
import?pandas?as?pd import?seaborn?as?sns?#?用于可視化我們的主題 from?gensim.corpora?import?Dictionary?#?我們語料庫中的單詞 from?gensim.models?import?TfidfModel,?LdaMulticore?#?我們的模型 from?gensim.utils?import?simple_preprocess?#?快速預處理包 from?gensim.parsing.preprocessing?import?STOPWORDS?#?停用詞庫 from?nltk.stem?import?WordNetLemmatizer,?SnowballStemmer,?LancasterStemmer?#?詞干和詞形還原 import?matplotlib.pyplot?as?plt?#?數據可視化 from?nltk.corpus?import?wordnet import?numpy?as?np np.random.seed(2018) import?nltk from?datetime?import?datetime import?csv#?下載字典 nltk.download('wordnet') nltk.download('averaged_perceptron_tagger')數據的清理和預處理
一如既往,第一步是清理數據集。首先,因為原始數據集中沒有“國家”列,所以我解析了專利號,它以國家代碼開始。接下來,我刪除了缺少數據的文檔。
stemmer1?=?SnowballStemmer('english')?#?用于語料的詞干提取。 stemmer2?=?LancasterStemmer()?#?比Snowball更好def?preprocess(self,?text):'''建模數據的預處理。標識化,刪除停用詞和短詞,刪除標點符號,使所有東西都小寫,詞干,并刪除相關的詞'''result?=?[]for?token?in?simple_preprocess(text):if?token?not?in?STOPWORDS?and?len(token)?>?3:stemmed2?=?stemmer2.stem(token)if?stemmed2?not?in?self.cleaned_terms:?#?我們不關心我們的搜索條件stemmed1?=?stemmer1.stem(token)result.append(stemmed1)return?resultprocessed_docs?=?self.clean_documents['abstract'].map(self.preprocess)與所有文本相關的數據分析一樣,第二步是預處理。
對于文本預處理的全面介紹,我推薦我的教程。
https://towardsdatascience.com/preprocessing-text-data-in-python-an-introduction-via-kaggle-7d28ad9c9eb
為了總結這個過程,我們從一個由文本字符串組成的數據集開始,其中充滿了標點符號和數字。我們希望對這些數據進行預處理,以便語料庫中的每個文檔都是文檔的基本部分列表—詞干化、詞形還原、小寫化、有用的單詞。這一過程可概括為五個步驟:
我們去掉標點和數字。我們把所有的字都改成小寫。
我們將每個文檔從一個字符串分解為一個單詞列表。列表中的每一項都稱為“標識”。
我們過濾掉停用詞(介詞、冠詞等)。我們過濾掉短詞。
我們將單詞縮減為詞根(例如,“runner”和“running”都變成“run”)——這個過程稱為詞干分析。我們對動詞也這么做,這個過程叫做詞形還原。
我們過濾掉原來的數據庫搜索詞(在我的例子中是“facial”和“recognition”)。
現在,語料庫中的每個文檔都是一組小寫的詞干標識。
詞袋
#?索引語料庫中的單詞 dictionary?=?Dictionary(processed_docs)#?刪除極其罕見(少于15個文檔)和常見(超過40%的語料庫)的單詞。 #?只保留前n個最常用的單詞。 dictionary.filter_extremes(no_below=15,?no_above=0.4,?keep_n=100000)#?轉換文件到詞袋(bow) # bow由每個文檔的標識id和它們的頻率計數組成。 bow_corpus?=?[dictionary.doc2bow(doc)?for?doc?in?processed_docs]在對文本數據建模時,從某種意義上講,開始使用數字而不是單詞是有利的。
第一步是編譯一個字典,包含出現在整個語料庫中的每個惟一標識,并為每個惟一標識建立索引——這是使用Gensim的dictionary模塊完成的。
我們也過濾掉非常常見的或極為罕見的單詞。然后,我們保留剩余的10萬個最頻繁的標識。使用這個字典,將每個文檔從一個標識列表轉換為出現在文檔中的唯一標識列表及其在文檔中的頻率。這種語料庫的表示稱為詞袋。
詞頻逆文檔頻率(tf-idf)
#? tf-idf是一個單詞重要性的度量,就像頻率計數可以被認為是一個重要度量一樣。 #?然而,tf-idf認為出現在高百分比文檔中的單詞不那么重要, #?但是如果它們經常出現在一個文檔中,它們就更重要了。 tfidf?=?TfidfModel(bow_corpus) corpus_tfidf?=?tfidf[bow_corpus]在編譯我們的模型之前的最后一步是調整詞袋的頻率度量。雖然頻率當然是衡量一個特定單詞在文本語料庫中的重要性的一個指標,但我們假設出現在更多文檔中的單詞就不那么重要了。
例如,如果我們沒有過濾掉“facial”和“recognition”這兩個詞,它們可能會出現在我們語料庫的文檔中。盡管它們對語料庫顯然很重要,但對于我們最感興趣的語料庫中的變化和模式,它們提供了很少的見解。
基于這個原因,我們使用了一種稱為“詞頻-逆文檔頻率”(tf-idf)的度量方法,而不是簡單地使用詞頻作為我們對每個單詞的重要性度量。
tf-idf對基本詞頻的唯一修改是,當一個單詞出現在文檔中時,它在文檔中的頻率除以它出現在整個語料庫中的文檔數。這使得出現在數千個文檔中的單詞不如出現在幾百個文檔中的單詞重要。
基于潛在Dirichlet分配的主題模型
我們現在的目標是研究單詞在tf-idf單詞包語料庫中是如何相互關聯出現的,以辨別“主題”,這是模型認為的簡單的單詞組。
我前面解釋過,這些主題潛在地存在于語料庫中——在本例中,我們假設(并希望)我們發現的主題反映了面部識別領域中一些小的技術領域。
#?我們的LDA模型使用Gensim。 self.lda_model?=?LdaMulticore(corpus_tfidf,?num_topics=num_topics,?id2word=dictionary,?passes=50,?workers=2)我們使用Gensim的LDAMulticore模型將tf-idf語料庫放入LDA主題模型中。
例如,該模型從面部識別數據中識別出“authent、data、inform、biometr、mobil、content、person、comput、video、access”(這些詞看起來被切斷了,因為它們是詞干化和詞形還原的版本)。本主題似乎與使用面部識別的生物特征認證有關。
基于主題的語料庫趨勢分析
我們使用Gensim的LDAMulticore模型成功地創建了一個主題模型。現在讓我們來了解一下基于這個模型的語料庫。
通過確定每個主題隨時間出現在多少文檔中,我們可以根據其在專利中的流行程度對每個主題進行排序,并跟蹤這種流行程度隨時間的變化。
這可以讓我們知道在過去的二十年中,人臉識別技術的哪些領域(基于每個主題中的單詞)得到了發展。利用seaborn的catplot,我們可以將這項技術的發展可視化。
2009年至2018年最受歡迎的主題(藍色)似乎與生物特征認證有關。這還不完全清楚,所以我們可以對這個主題中最為重要的五個專利摘要進行抽樣,以便更好地了解這個主題涉及的技術類型。
這一專利摘要似乎如預期的那樣涉及到為了身份驗證目的而進行的面部識別,也涉及識別——可能涉及罪犯或受害受害者。
然而,2003年至2009年,另一個主題(橙色)似乎與攝影中的面部檢測有關,頗受歡迎。2017年以來,一個不同的主題(綠色)迅速崛起。從文字上看還不完全清楚,但看一下這個主題的專利,就可以看出,它與安裝的具有面部識別能力的安全攝像頭有關。
比較國家
讓我們再做一個分析:2009年美國和中國的比較。
美國的面部識別專利顯然已嚴重關注生物特征認證,其次是攝影。盡管最近安全攝像頭和家庭安全系統都有上升趨勢,但這些年來,所有主題基本保持穩定。
另一方面,自2009年以來,中國的面部識別專利一直非常不穩定。雖然生物識別認證是最重要的,但也有一些挑戰,包括家庭安全系統,攝影,以及最近的安全攝像頭。
通過對美國和中國面部識別專利的對比分析,可以得出有趣的結論,說明這兩個國家的技術發展是如何不同的,以及為什么。
結論
主題模型是一種用于大量文本數據的NLP方法。潛Dirichlet分配是一種強大但可解釋的機器學習方法。
LDA的簡潔和優雅對數據科學家來說是一個福音,他們經常要向同事和高管解釋他們的方法。LDA提供了簡單與力量的完美融合。
雖然我用專利數據演示了一個實現,但同樣的方法也可以應用于其他文本數據集,從研究論文摘要到報紙文章或再到推特。
代碼
我使用該代碼將數據文件合并到一個數據集中:https://github.com/stgran/personal/blob/master/lda_topic_modeling/jupyter_notebook/web_of_science_data.ipynb
我用于預處理、建模和趨勢分析的完整Jupyter筆記本位于此處:https://github.com/stgran/personal/blob/master/lda_topic_modeling/jupyter_notebook/lda_topic_modeling.ipynb
包含所有代碼文件、我的數據和Readme.md在這里:https://github.com/stgran/personal/tree/master/lda_topic_modeling
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯溫州大學《機器學習課程》視頻 本站qq群851320808,加入微信群請掃碼:總結
以上是生活随笔為你收集整理的【机器学习】基于LDA主题模型的人脸识别专利分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【NLP】NLP实战篇之bert源码阅读
- 下一篇: 手机优酷怎么删除自己发的弹幕