自然語言處理和資料探勘專案中的一些技術體會

2022-08-04 16:48:30 字數 2426 閱讀 7285

從事自然語言處理的工作快一年了,一直想寫些東西,但自己學的太少一直不知道該從**開始下手,雖然現在還是很菜,但看著自己的專案即將完成,鼓起勇氣寫點東西,主要是自己在專案中遇到的一些問題。

這次做的這個專案,也是我工作的第乙個專案,就是利用自然語言處理的分詞、詞性標註、句法分析,還有就是資料探勘的一些東西。

最開始我是從nlp中分詞,詞性標註,未登入詞識別等等到句法分析一步一步慢慢學過來的,中間也折磨了我好久(特別是句法分析,還要感謝公司給這麼多時間給我學習),最後還是沒能把句法分析搞得很明白,只是能夠使用其中的一些技術。

在nlp這方面,我個人覺得,最好還是要有較好的數學基礎,要熟練使用其中的各種公式好好的複習大學的概率與數理統計這門課程,當然資訊理論也是必須的,裡面主要的我覺得就是熵,最大熵的一些知識,最主要的還是高等代數的知識(非數學專業的貌似叫大學數學,包括微積分和線性代數,我們數學專業是分開的是,數學分析主要是微積分之類的,高等代數主要是矩陣相關的知識)這能讓你更好的理解nlp的各種模型。語言學方面我覺得也沒必要要怎樣特意的學習,就是看書的時候理解下,應該就沒什麼問題了。然後就是計算機的程式設計知識,我用的主要是c和c++語言,因為要處理大量字串的問題,所以一定要熟悉char*陣列的使用,和string型別陣列的使用,以及各種型別之間的相互轉換,當然還要了解一些編碼的知識,比如gb2312之類的。具備了這些基礎,或者更多的知識你才能夠,或者有資格去學習nlp的相關技術(僅僅個人覺得,哈哈)。

我學習nlp是從正規表示式開始學習的,你必須要了解一些正規表示式的知識,當你處理文件,字串之類的,有時候難免會遇到。然後作為過渡,我先看了看google研究員吳軍的數學之美,這可以讓你大概的了解自然語言處理是怎麼回事,該怎麼去學習,以及現在的研究狀況。然後才開始真正的nlp的學習,我使用的書籍是,《統計自然語言處理》國外很經典的一本書,現在已經出第二版了,名字叫《語音與語言處理》(不過第二版,只有英文版,我買了一本,現在正苦逼的讀著),也沒必要挨著挨著一直讀,看自己的狀況,可以從n元語法,hmm模型開始學習,去感受一下數學知識的魅力。這期間你肯定要寫**,而很好學習**就是中科院的分詞系統《ictclas》,如果你把這個系統讀懂了,並自己寫了一遍,我覺得你就了解了大部分關於中文分詞以及詞性標註的東西(至少我是這樣的),當然這個只是其中乙個方面,還有很多的方法,你可以慢慢的學習,把這些弄懂後,你會發現一些問題,你只是實現模型,你不知道資料是怎麼來的,你也不知道是怎麼整理。所以你就要學習語料庫中的相關知識,怎樣去訓練模型,就會接觸到hmm模型,最大熵模型,條件隨機場等等的模型,其中最難的就是模型的訓練,包括有監督的學習和無監督的學習,你會看到很多短時間難以理解的演算法,比如em演算法,就是比較重要的乙個演算法。如果你能夠自己訓練處自己的模型了,那說明你能夠做分詞詞性標註之類的事情了,不過你沒有必要高興,雖然中國在這方面比較落後,但現在這一塊也以及基本成熟了,你只是會,然後為後面的句法分析,語義分析之類的做鋪墊,去研究這些東西,這才是現在nlp還沒有突破的問題。(我現在也在學習這方面的東西,希望有高手可以給些幫助,想學習的朋友能夠互相交流,一起成長,我的郵箱[email protected],需要資料的話,我有的都會給的)

做完上面的,你能夠簡單的分析一些句子,或者是文件了,也許也能得到一些句法分析樹,語義分析結果。對於我來說,我已經能夠獲取句子的一些簡單的句子結構,也能夠滿足我專案 的需求。所以下面我就開始做資料探勘的一些工作(我感覺是資料探勘,我也不知道這具體叫做什麼,哈哈)。

先前說過要通過nlp的結果,在資料中去尋找你想要的內容。所以第一步必須建立我自己的數學模型,怎樣去整理資料,資料是什麼格式的型別,怎樣去查詢我想要的東西。我首先想到的是矩陣,最後也確實用的是矩陣,因為矩陣可以儲存大量的內容,如果太大也可以通過矩陣的奇異分解,去消除這個問題,所以矩陣很好,我就用了矩陣。

專案最開始,需要定義很多種的結構體,和類去實現這些查詢的功能,比如,儲存某個個體的結構,結果的結構,中間變數的結構,這些東西都沒法用乙個變數儲存,所以要定義很多的結構體,然後就要去填補資料矩陣,定義矩陣的各種函式,最終實現資料查詢的功能,找出想要的軌跡,確定最終的核心人物。

其中會遇到很多層的迴圈,同時還需要考慮時間複雜度和空間複雜度,因為專案最終是要處理很大量的資料,如果時間複雜度和空間複雜都不考慮,也許系統要執行幾天甚至幾個月才能得到想要的結果。我在實現軌跡重溯的演算法的時候,自己都完全暈了,只是沒想到後來竟然測試通過了,後來看到幾百行的**(就乙個演算法)我自己都佩服自己的邏輯能力,哈哈。然後還有乙個比較重要的演算法,就是在得到軌跡圖以後,需要通過這個軌跡圖得到其中的核心點,這個演算法同樣要考慮很多東西,也寫了幾百行,測試的時候不能用特殊資料測試,這樣會忽略掉演算法一些bug和錯誤,我先前就遇到過,花了一天時間才發現錯誤,不過還好改過來了。(我想這應該就是資料探勘吧)

上面的一些東西,最開始我沒有看資料只是根據自己所學的東西去想,然後建模,然後實現模型,現在也基本成型了,雖然感覺很膚淺,不過確實也實現了。後來看了一些資料探勘的博士**,才發現,我和他們的思想都差不多,只是他們都寫成博士**了,而且還有自己的數學公式,而我只是乙個模型,然後實現了,沒有自己的公式。。。等等的,我想這就是差距吧,乙個本科生做nlp的悲哀,哈哈。

2023年10月

Kaggle競賽專案 自然語言處理

kaggle競賽題 這裡將使用多種處理庫,對比一下python nlp領域各個庫的優缺點。所有要用到的庫,讀入訓練 測試集,及介紹 import numpy as np import pandas as pd from sklearn.ensemble import randomforestregr...

什麼是自然語言處理,自然語言處理目前的應用有哪些?

自然語言處理大體包括了自然語言理解和自然語言生成兩個部分,實現人機間自然語言通訊意味著要使計算機既能理解自然語言文字的意義,也能以自然語言文本來表達給定的意圖 思想等,前者稱為自然語言理解,後者稱為自然語言生成。自然語言處理是電腦科學領域與人工智慧領域中的乙個重要方向。自然語言處理的終極目標是用自然...

入門自然語言處理資料集

在開始深入的學習自然語言處理任務時,我們需要準備一些資料集用來訓練自己的演算法。在這篇文章中,我們將準備一套標準資料集可以用於你大部分的自然語言處理任務,在你學習深度學習的過程中肯定能用的到。文字分類 語言模型 影象語義 機器翻譯 問答系統 語音識別 文字摘要 我試圖在這裡提供乙個在學術界受歡迎的資...