本文作者:Wayne
自由團隊將從0到1 手把手教各位讀者學會(1)Python基礎語法、(2)Python Web 網頁開發框架 – Django 、(3)Python網頁爬蟲 – 周易解夢網、(4)Tensorflow AI語言模型基礎與訓練 – LSTM、(5)實際部屬AI解夢模型到Web框架上。
AI . FREE Team 讀者專屬福利 → Python Basics 免費學習資源
準備 AI 解夢資料,爬取解夢網站解夢文本
你最近有沒有做甚麼奇怪的夢?夢裡是不是跑出甚麼動物?像是蛇、牛或是老鼠,或者是夢到甚麼奇特的事情?像是正在往下掉或是被搶劫,當我做了這種奇怪的夢時,我就會想這個夢是不是有甚麼特殊的意思呢?這時,我就會到一些解夢的網站看看,了解一下夢到這些事情,通常代表甚麼含意,滿足自己的好奇心。
最近在研究GPT2時,突然想到語言模型已經廣泛運用在各種聊天機器人上,我們是不是也可以嘗試讓AI 幫助我們解夢呢?接下來,跟著我一起來做AI 解夢吧!
我們可以蒐集解夢網站的內文,來作為訓練AI 的資料,所以第一步我們要從網路爬蟲下手,後續在我們爬完整理完資料後,我們會透過GPT2模型來訓練這個模型。
我們用這個解夢網站做示範: https://www.golla.tw/
使用 requests 可以從我們要的網頁中爬取資料。
使用Beautiful Soup 則可以去方便我們將request抓取的網頁資料,更容易呈現出網頁中的標題或是內文。
我們載入上面這些套件後,就可以來準備網頁爬蟲了!
import requests from bs4 import BeautifulSoup
利用 def 來定義我們的網頁爬蟲( web_crawl ) 功能。
利用for loop 來重複執行爬取不同解夢頁面的資料。
首先,我們要定義我們網路爬蟲的功能,我們需要一個header,因為爬蟲時,伺服器會憑藉headers來辨認你這位使用者,我們會用自己的User-Agent作為headers,讓伺服器認為我正在瀏覽網頁,實際上則是程式幫我爬取。另外,我們選擇UTF-8 作為我們的編碼方式,因為我們的資料類型是中文字,接下來用上Beautiful Soup 就可以從html格式中,抓取網頁的標題和內文了。
#定義我們網路爬蟲的功能 def web_crawl(weblink): headers = { 'user-agent': '你的user agent' } res = requests.get(weblink, headers=headers) res.encoding = 'UTF-8' soup = BeautifulSoup(res.text, 'html.parser') return soup
接下來,我們要讓程式知道我們爬蟲時要擷取的資料是我們的標題和內文,我們要幫助程式找到標題和內文的位置,並且我們在解夢網站上不只是爬一篇解夢文,而是需要大量的解夢文來訓練我們的AI ,因此,我們需要使用到我們的for loop功能,最後,我們需要將爬取下來的大量文章做一些前處理,並且儲存到txt文件,幫助我們後續進行AI 訓練時做使用。
我們要讓程式知道我們爬蟲時要擷取的資料是我們的標題和內文,我們要幫助程式找到標題和內文的位置,我們使用某解夢網站嘗試我們的爬蟲,我們可以在這個網站頁面中選擇我們夢到的關鍵字(例如:蛇)。
首先,我們按下F12可以檢視網頁的原始碼,我們就可以看到網頁的內容,當我們點擊最左邊的檢查器/inspect(長得像滑鼠的圖案),在回到網頁上點任一關鍵字,我們就可以知道這些關鍵字存放在原始碼中的甚麼位置,我們會發現它存放在bd 這個類別(class)下的超連結(a)中,我們用select和for loop功能選到這些關鍵字的位置。
soup_2 = web_crawl('https://www.golla.tw/') a = soup_2.select('.bd a') for i in a: print(str(i).split('"')[1])
我們回想我們自己在搜尋的步驟,我們會選擇與我們做的夢相關的關鍵字,接著進入那個關鍵字的頁面,然後讀取內文,了解夢到這些事情,通常代表甚麼含意,因為需要大量的解夢文來訓練我們的AI,因此,我們需要使用到我們的for loop功能,爬取所有的解夢文。
link_2 = [] sub_link_2 = [] for i in a: if 'html' in str(i).split('"')[1]: link_html = 'https://www.golla.tw' + str(i).split('"')[1] if link_html in link_2: pass else: link_2.append(link_html) else: sub_html = 'https://www.golla.tw' + str(i).split('"')[1] if sub_html in sub_link_2: pass else: sub_link_2.append(sub_html)
最後,我們將爬取下來的大量文章儲存到txt文件,幫助我們後續進行AI 訓練時做使用。
#寫入txt中 with open("dream1_link_2.txt", "w") as f: for content in link_2: f.write(str(content) +"\n")
接下來,我們要只要學習完 AI 的基礎概念 & AI 的語言模型,我們就能訓練簡單的AI解夢模型囉!
自由團隊 官方網站:https://aifreeblog.herokuapp.com/
自由團隊 Github:https://github.com/AI-FREE-Team/
自由團隊 粉絲專頁:https://www.facebook.com/AI.Free.Team/
自由團隊 IG:https://www.instagram.com/aifreeteam/
自由團隊 Youtube:https://www.youtube.com/channel/UCjw6Kuw3kwM_il39NTBJVTg/
文章同步發布於:第十二屆 IT 挑戰賽部落格