【Other】Day 29: 除了自然語言處理,我們還要...?處理資料時,你可能需要會的這些那些

終於快要到鐵人賽的尾聲,在處理 NLP 任務的時候,除了要瞭解不同語言模型的內部架構、功能,還有這些模型適合的不同任務內容,有時候也會需要學習其他技能,來幫助你執行 NLP 的任務。所謂的其他技能,除了最基本的程式語言之外(不一定是 Python),我們昨天以及前天所說的網路爬蟲,就是除了模型以外,處理自然語言處理任務上,可能會需要學習的。那由於時間的關係,再加上這些主題有太多內容可以講,所以今天的主題來簡單介紹一下在進行自然語言處理的時候,可能需要學習,但還來不及詳細介紹的技能。

資料庫基本概念(Database)& SQL

身為一個資料處理人員,資料的儲存問題將會是一個需要考量的點之一。你可能會想問說:

我們為什麼不直接像先前所說的,利用網路爬蟲爬下來儲存成 json 檔之後,再將這些資料儲存在本機端就好了?

有一點需要先釐清,通常在進行程式開發時,基本上都是採取多人共同開發模式。如果說只單純利用前面所說的資料儲存方式,在多人協作上就會產生很多的不便以及困難點,畢竟不可能大家都在那邊上傳 Google 雲端,然後還要上傳下載等等等之類的,過多的繁雜程序會造成任務處理的時間增加,反而沒有效率 畢竟工程師都希望時間越快越好 。另外,一旦處理的任務變得越來越複雜,資料與資料之間產生相依性的時候,複雜的資料結構也會造成困難(例如:增加新進人員理解資料結構的速度)。

我們可以思考一下,假如今天有家百貨公司需要建構資料庫,我們會需要哪些資料?可能有:

  1. 會員基本資料:姓名、手機、地址、Email etc.
  2. 顧客購買紀錄
  3. 商品資料
  4. 樓層資料

因為我們沒有辦法在同一個表格同時包含所有我們需要的資料,意思就是,沒有辦法在同一個表格同時包含會員的基本資料、又涵蓋所有顧客購買紀錄;那所謂的相依性,就是我們可以透過共同欄位的資料,來連結不同相對應的表格。例如:在會員基本資料以及顧客購買紀錄的表格中,有個共同欄位「姓名」(通常會用 ID 但這裡以姓名為例)。那麼就可以透過「姓名」欄位來「連結」兩個表格,也就是:「紀錄了王小明在百貨公司購買哪些商品的表格」。

回到主題,如果我們同時需要:

  1. 多人共同存取資料
  2. 處理相依性問題

那這時就會需要使用資料庫,來提升開發的速度。

存取資料庫,會利用另外一個程式語言 SQL ,來提取資料庫中的資料。那基本架構大概會是長這樣:

1
2
3
4
5
SELECT [回傳欄位]
FROM [資料庫表格]
WHERE [條件式篩選]
GROUP BY [組合欄位]
HAVING [組合後進行的條件式篩選] ORDER BY [需要排序的欄位]

那所謂的資料庫有以下這些:

  • Oracle
  • MySQL
  • MS SQL Server
  • PostgreSQL
  • Amazon Redshift
  • IBM DB2
  • MS Access
  • SQLite
  • Snowflake

大家如果有興趣可以再去查,因為這又完全是另外一個大主題了。

用 Python 架網頁以及架設 API:Flask

前面說到,html + CSS + Javascript。另外,也可以用 Python 來建立網站。這邊提供非常簡單的介紹,通常若要用 Flask 來搭建網站,會需要以下程式碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from flask import Flask

app = Flask(__name__)

@app.route("/")
def home():
return """<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>

</body>
</html>"""

if __name__ == '__main__':
app.run()

接著直接運行這個 Python 檔,就可以用 Python 運行你的第一個網頁喔!另外,Flask 也很常會用來部署 API。所謂的 API,也就是 Application Platform Interface。記得先前我們在利用 Tensorflow 進行機器學習的時候,透過別人已經訓練好的模型來進行下游的自然語言處理任務,Tensorflow 就是 API 的其中一種。Flask 就可以用來架設 API。

Git & GitHub

前面說到,通常開發流程都會是多人共同進行的,這時多人同時存取程式碼也就成為一個需求,就會需要同時有很多分支讓開發團隊同時進行程式碼的撰寫;另外,也難保有人會寫錯程式碼,或者是有時候會發生昨天還可以跑,今天就不行跑了 相信我,這很常發生,不然台灣的乖乖文化哪來的?。Git 套件就可以幫助你在發生這些狀況的時候,讓他回復到尚未出問題之前的狀態。所謂「回復」、「分支」稱為「版本管理」。

除了以上功能,也會需要一個儲存程式碼的地方,稱為程式庫(repository)。存放這些程式庫的地方有很多,最為人所用的是微軟開發的 GitHub,另外其他的程式庫存放處,像是 GitKraken、GitLab。

明天邁入最後一天囉!我明天會說明模型解釋力的重要性,最後做個結尾,感謝各位一路以來的支持。