【Other】Day 29: 除了自然語言處理,我們還要...?處理資料時,你可能需要會的這些那些
終於快要到鐵人賽的尾聲,在處理 NLP 任務的時候,除了要瞭解不同語言模型的內部架構、功能,還有這些模型適合的不同任務內容,有時候也會需要學習其他技能,來幫助你執行 NLP 的任務。所謂的其他技能,除了最基本的程式語言之外(不一定是 Python),我們昨天以及前天所說的網路爬蟲,就是除了模型以外,處理自然語言處理任務上,可能會需要學習的。那由於時間的關係,再加上這些主題有太多內容可以講,所以今天的主題來簡單介紹一下在進行自然語言處理的時候,可能需要學習,但還來不及詳細介紹的技能。
資料庫基本概念(Database)& SQL
身為一個資料處理人員,資料的儲存問題將會是一個需要考量的點之一。你可能會想問說:
我們為什麼不直接像先前所說的,利用網路爬蟲爬下來儲存成
json
檔之後,再將這些資料儲存在本機端就好了?
有一點需要先釐清,通常在進行程式開發時,基本上都是採取多人共同開發模式。如果說只單純利用前面所說的資料儲存方式,在多人協作上就會產生很多的不便以及困難點,畢竟不可能大家都在那邊上傳 Google 雲端,然後還要上傳下載等等等之類的,過多的繁雜程序會造成任務處理的時間增加,反而沒有效率 畢竟工程師都希望時間越快越好 。另外,一旦處理的任務變得越來越複雜,資料與資料之間產生相依性的時候,複雜的資料結構也會造成困難(例如:增加新進人員理解資料結構的速度)。
我們可以思考一下,假如今天有家百貨公司需要建構資料庫,我們會需要哪些資料?可能有:
- 會員基本資料:姓名、手機、地址、Email etc.
- 顧客購買紀錄
- 商品資料
- 樓層資料
因為我們沒有辦法在同一個表格同時包含所有我們需要的資料,意思就是,沒有辦法在同一個表格同時包含會員的基本資料、又涵蓋所有顧客購買紀錄;那所謂的相依性,就是我們可以透過共同欄位的資料,來連結不同相對應的表格。例如:在會員基本資料以及顧客購買紀錄的表格中,有個共同欄位「姓名」(通常會用 ID 但這裡以姓名為例)。那麼就可以透過「姓名」欄位來「連結」兩個表格,也就是:「紀錄了王小明在百貨公司購買哪些商品的表格」。
回到主題,如果我們同時需要:
- 多人共同存取資料
- 處理相依性問題
那這時就會需要使用資料庫,來提升開發的速度。
存取資料庫,會利用另外一個程式語言 SQL ,來提取資料庫中的資料。那基本架構大概會是長這樣:
1 | SELECT [回傳欄位] |
那所謂的資料庫有以下這些:
- Oracle
- MySQL
- MS SQL Server
- PostgreSQL
- Amazon Redshift
- IBM DB2
- MS Access
- SQLite
- Snowflake
大家如果有興趣可以再去查,因為這又完全是另外一個大主題了。
用 Python 架網頁以及架設 API:Flask
前面說到,html + CSS + Javascript。另外,也可以用 Python 來建立網站。這邊提供非常簡單的介紹,通常若要用 Flask 來搭建網站,會需要以下程式碼:
1 | from flask import Flask |
接著直接運行這個 Python 檔,就可以用 Python 運行你的第一個網頁喔!另外,Flask 也很常會用來部署 API。所謂的 API,也就是 Application Platform Interface。記得先前我們在利用 Tensorflow 進行機器學習的時候,透過別人已經訓練好的模型來進行下游的自然語言處理任務,Tensorflow 就是 API 的其中一種。Flask 就可以用來架設 API。
Git & GitHub
前面說到,通常開發流程都會是多人共同進行的,這時多人同時存取程式碼也就成為一個需求,就會需要同時有很多分支讓開發團隊同時進行程式碼的撰寫;另外,也難保有人會寫錯程式碼,或者是有時候會發生昨天還可以跑,今天就不行跑了 相信我,這很常發生,不然台灣的乖乖文化哪來的?。Git 套件就可以幫助你在發生這些狀況的時候,讓他回復到尚未出問題之前的狀態。所謂「回復」、「分支」稱為「版本管理」。
除了以上功能,也會需要一個儲存程式碼的地方,稱為程式庫(repository)。存放這些程式庫的地方有很多,最為人所用的是微軟開發的 GitHub,另外其他的程式庫存放處,像是 GitKraken、GitLab。
明天邁入最後一天囉!我明天會說明模型解釋力的重要性,最後做個結尾,感謝各位一路以來的支持。