· Joseph · AI & Machine Learning  · 4 min read

[Day 17] Google Translation - 子系列最終章

今天要講AutoML translation的部分,這部分在官網上一直沒找到對應的範例,很有可能範例要自己生。我只好自己在網路上找些翻譯的dataset,幸好在這邊有找到很多很多的資料集,只需要做一些資料處理的動作,現在就來先處理一下。

我下載的資料集:News Commentary,並取出中文跟英文的部分。

處理資料

觀察一下原始資料你會發現,他基本上是透過<P>來做分隔,然後大概看一下,我做了一個基本假設每一列就是對應的翻譯。有了這個假設,我就要先把<P><P>之間行數不一樣的部分刪除掉(像圖中紅色的地方要),留下一樣的部分就好。 not equal

好來看看code:

func procTranslateFiles() {
  var (
    root            string = "./testdata/translate"
    validationCount int    = 0
    testCount       int    = 0
    trainCount      int    = 0
  )
  files, err := ioutil.ReadDir(root + "/en")
  if err != nil {
    log.Fatal(err)
  }

  for _, file := range files {
    fmt.Println(file.Name())
    if _, err := os.Stat(root + "/zh/" + file.Name()); err == nil {
      // 先把有英文也有中文的檔案,分別讀到`enLines`、`zhLines`
      var enLines, enErr = readLines(root + "/en/" + file.Name())
      var zhLines, zhErr = readLines(root + "/zh/" + file.Name())
      if enErr != nil || zhErr != nil {
        continue
      }
      
      //刪掉行數不一樣的部分
      enLines, zhLines = normalizeLines(enLines, zhLines)
      
      //塞入tsv data
      if trainCount < 11000 {
        trainCount += len(enLines)
        writeCSV(root+"/train.tsv", enLines, zhLines)
      } else if testCount < 1000 {
        testCount += len(enLines)
        writeCSV(root+"/test.tsv", enLines, zhLines)
      } else if validationCount < 1000 {
        validationCount += len(enLines)
        writeCSV(root+"/validation.tsv", enLines, zhLines)
      } else {
        fmt.Println("Done!")
        break
      }
    }
  }
}

因為是透過docker執行,所以執行時記得帶上 -v mount volumes e.g., docker run -v ${PWD}/testdata:/app/testdata -it golang ./app Day17

詳細的code可以看github:https://github.com/josephMG/ithelp-2019/blob/Day-17/main.go

tsv line count 確認一下,每個檔案行號都夠training。

train

好囉,回到GCP AutoML Translate,我們先建立一個dataset。 create dataset 你會注意到建立的時候要你選source language & target language。

import data 接下來import data,這邊比較人性化一點,讓我們可以分開上傳tsv。否則你會需要傳一個csv上去,裡面指定你tsv的位置,格式如下:

TRAIN,gs://my-project-vcm/csv/en-fr-train.tsv
VALIDATION,gs://my-project-vcm/csv/en-fr-validation.tsv
TEST,gs://my-project-vcm/csv/en-fr-test.tsv

記得Destination on Cloud Storage要選region us-central1

接下來你就會看到很久的Processing sentence pairs…,匯完以後你會看到一堆sentences,還有他們的label。 sentences

然後呢,我們就進入到train了。 train

操作過前面文章的應該就知道,開始訓練又是幾個小時以後才能結束。 所以今天就到這邊,就姑且不論訓練結果好壞,之後的優化就留到實際有自己data的時候再做吧!

今天的github在這:https://github.com/josephMG/ithelp-2019/tree/Day-17

好,今天就到這邊了,謝謝各位的觀看。

Back to Blog

Related Posts

View All Posts »

[Day 16] Google Translation - 3

還記得昨天在串API的時候,有特別提到Google Translate API在Go client library沒有v3beta1的版本。秉持著練習golang的精神,看到v3beta1有RESTful API,就花了點時間來串一下。 Google translate API v3 我這邊參考的是Using the command line的內容,使用CURL的方式呼叫,並把他改寫成Go req (http client)這類型的RESTful API call。仔細想想,要解決的問題有兩個:1. Get Access token、2. 呼叫restful api。

[Day 15] Google Translation - 2

昨天玩完了Demo,按照步調今天就用Code來實踐吧。在下筆的時候Client Library有v2、v3beta1兩個版本,但Golang只有v2的Example,需要的話就只能用Golang執行CURL POST去呼叫v3beta1版API,所以我這邊就先使用v2來試試看。 Translate Text 架構一樣是在modules底下建立一個translation.go的module 還有要記得抓credential json下來,可以參考這系列第三天的文章

[Day 14] Google Translation - 1

OK,今天要講一個大家常用,卻不一定知道他是Google AI & ML products之一的服務,Google Translation API。 他有什麼東西?他跟前面介紹的服務一樣,也分成兩個服務AutoML Translation與Translation API: AutoML Translation:透過UI介面讓一些比較沒這麼深入了解AI & ML的人可以快速操作,僅僅只要上傳固定格式的檔案,就可以訓練出你自己的model。 Translation API:透過API呼叫,可以讓你的服務馬上翻譯成多國語言,就有點像是在網頁上面串上Google翻譯那樣,點個兩下就做完多國語系(姑且不論正確性的問題,哈哈哈。)

[Day 30] Google AI & ML Products 系列總結

這系列文章出自於一個無窮無盡的bug的解題時間,想不到如何解bug、又想不出要寫什麼主題,參考完大家的方向以後,我發現這類型的文章很少、又很實用,才下定決心透過鐵人賽推廣 Google AI & ML Products。 在這次的挑戰裡,給了自己三個目標: 更熟悉docker 開始玩Golang 入門大部分的Google AI & ML Products 但也因為Google AI & ML Products太多了,所以把它分了很多子系列進行,現在再來回顧一下這次的內容。 前面先來個提醒,如果過程中你們有Deploy model做Online predict的,如果測完一定要記得刪掉,不然你deploy的model就會一直被收費喔。