點擊上方關注,All in AI中國
作者——Ridham Dave
各位,歡迎來到我的第一個技術教程。在本教程中,我將對不同的網站進行解釋提取、清理和分類。我將在python環境運行我的數據抓取代碼,並使用神經網絡對網站進行分類。
文本分類是自然語言處理(NLP)在數據科學的許多不同領域中廣泛使用的任務之一。一個高效的文本分類器可以利用NLP算法高效地將數據分類。
文本分類是監督機器學習任務的一個例子,因為包含文本文檔及其標籤的標記數據集,故多用於訓練分類器。
常用的文本分類技術有:
樸素貝葉斯分類器(https://en.wikipedia.org/wiki/Naive_Bayes_classifier)
線性分類器(https://en.wikipedia.org/wiki/Linear_classifier)
支持向量機(https://en.wikipedia.org/wiki/Support_vector_machine)
Baggin模型(https://en.wikipedia.org/wiki/Bootstrap_aggregating)
Boosting模型(https://en.wikipedia.org/wiki/Gradient_boosting)
深度神經網絡(https://en.wikipedia.org/wiki/Deep_learning)
Web抓取、Web獲取或Web數據提取是用於從網站中提取數據進行數據抓取。通常,這是通過模擬人類上網來從不同的網站收集指定的信息的軟件來完成的。
可用於Web抓取的一些技術包括:
- 複製粘貼
- 文本模式匹配
- HTTP編程
- HTML解析
- DOM解析
- 垂直聚合(Vertical aggregation)
- 語義標註識別
- 計算機視覺網頁分析
在本教程中,我們將嘗試將完整的模型實現為三個不同的模塊:
- 數據抓取
- 基於關鍵字的訓練數據集分類
- 神經網絡在實際測試模型中的應用
模塊1:數據抓取
在這個模塊中,我將使用Python 3.5環境來實現我的腳本。因此,請遵循完整的參考。
步驟1:從網站請求數據
要提取web數據,可以使用許多不同的包,但在本教程中,我將使用:
在上面的代碼中,requests.get()方法將使用https協議從網站發出請求,並將頁面加載到對象"page(頁面)"中。下一行代碼將HTML代碼移動到字符串html_code。因此,到目前為止,我們已經從網站中提取數據,但它仍然是HTML格式,這與實際文本有很大的不同。
步驟2:從HTML頁面中提取文本
為了從HTML頁面中提取完整的文本數據,可以用這兩個包,BeautifulSoup(https://www.crummy.com/software/BeautifulSoup/bs4/doc/)和html2text(https://pypi.org/project/html2text/)。使用上一步中找到的html_code字符串,我們可以應用以下兩種方法中的任何一種。
在上面的片段中,BeautifulSoup包將解析HTML代碼並將數據分配給soup對象。findall() 函數查找代碼中的所有可見文本,並返回我們存儲在文本中的String列表中。最後,我們使用JOIN()函數將所有單個文本連接到一個公共字符串中。
在這個備用塊中,我們使用html2text包來解析字符串,並直接從HTML代碼中獲取文本。另外,我們需要用空格替換空行,並最後找到text_from_html。
類似地,我們可以在大約1000+URL上使用一個循環,並從這些站點提取數據,並以CSV(逗號分隔值)格式存儲它們,我們可以在分類模塊中進一步使用該格式。
模塊2:基於關鍵字的分類
對於任何機器學習算法,我們都需要一些訓練集和測試集來訓練模型並檢驗模型的準確性。因此,為了創建模型的數據集,我們已經有了來自不同網站的文本,我們只需根據關鍵詞進行分類,然後將結果應用到下一個模塊中。
在本教程中,我們將網站分為三類,即:
科技、辦公及教育產品網站(1級)
消費品網站(2級)
工業工具及五金產品網站(第3級)
這裡的方法是,我們將擁有屬於特定類別的特定關鍵字,並將這些關鍵字與文本匹配,並找到具有最大匹配值的類。
Matching_value =(與一個行業匹配的關鍵詞數量)/(匹配的關鍵詞總數)
因此,我們有一個針對各個類別的關鍵詞列表,如下:
現在,我們將使用KeywordProcessor(https://pypi.org/project/flashtext/)查找文本中從URL收到的關鍵字。
KeywordProcessor可在pypi上的FlashText包中使用。
在上面的代碼中,我們將使用關鍵字加載KeywordProcessor對象,我們將進一步使用這些關鍵字來查找匹配的關鍵字。
要查找匹配值的百分比值,我們定義函數百分比如下:
現在,我們將使用提取關鍵字(String)方法來查找文本中的關鍵字。我們將找到該列表的長度,以查找文本中匹配關鍵字的數量。下面的函數將查找百分比,並選擇具有最大百分比的類。
對上述函數進行循環,我們基本可以找到大部分網站類別的關鍵字。我們將把機密數據保存到一個Data.csv文件中,Data.csv我們還會進一步使用。現在,我們已經準備好了數據集,可以應用神經網絡進行分類。
模塊3:應用神經網絡
在下面的實現中,我們將從頭創建一個神經網絡,並使用NLTKWord標記器進行預處理。首先,我們需要導入從上述步驟獲得的數據集,並將其加載到列表中。
以上代碼將加載和清理機密數據。空值將被刪除。
下面的代碼將針對其類創建數據字典。
為了應用神經網絡,我們需要將語言單詞轉換成數學符號,用於計算。換句話說,我們將形成一個跨越所有字符串的所有單詞的列表。
例如,輸出將是:
1594個文檔
3類("1類"、"3類"、"2類")
獨特詞根詞40000
現在,我們將為模式創建一個標記詞列表,並使用NLTK Lancaster Stemmer創建一個單詞包。
輸出:
#Word 41468
#第3類
現在,我們對數據進行最後的預處理,並創建一些函數。
Sigmoid函數
清洗功能(Cleaning function)
詞袋功能(Bag Of Words function)
在神經網絡中使用的最後一個功能是:思維功能(Think function)
現在我們開始訓練我們的神經網絡模型。我們將通過Scratch實現它,並將使用邏輯迴歸進入到每個神經元。雖然只有一層,但會進行50000次(迭代),我們將訓練我們的模式。完整的訓練示例將在CPU上運行。
最後,我們將對模型進行訓練,
輸出:
訓練10個神經元,alpha:0.1, dropout:False
輸入矩陣:1594x41468輸出矩陣:1x3
10000次迭代後delta:0.0665105275385
20000次迭代後delta:0.0610711168863
30000次迭代後delta:0.0561908365355
40000次迭代後delta:0.0533465919346
50000次迭代後delta:0.0461560407785
將突觸保存到synapses.json
處理時間:33060.51151227951秒
正如我們所看到的,訓練這個模型花費了將近11個小時。經過如此密集的計算,我們準備測試這些數據。
測試數據的函數:
讓我們測試模型的準確性:
輸出:
("3級",0.97663437888614435)
輸出:
("1級",0.9620297535870017)
正如你所看到的,我們在這些測試中獲得了相當高的精確度。我在不同的數據上嘗試過這個模型,並發現了相當高的精確度。
在這種只有一層的模型中,大約95%+的精度被認為是相當精確的。對於不同模型的進一步分類,我們可以使用Keras或TensorFlow。為了減少訓練模型的時間,我們可以使用NVIDIA GPU。
現在,利用深度神經網絡、BP神經網絡,都可以方便地對數據進行抓取和分類。
閱讀更多 AI中國 的文章