NLP and Web Applications

自然語言處理與網路應用

謝舒凱 GIL,NTU

Week3: Python and Web Applications

NLP and Web Applications

今天主題

  • More EDA with Streamlit

  • Using Machine Learning with Streamlit

  • NLP basics and Deploying NLP models

NLP and Web Applications

【複習】資料科學脈絡

  • 資料科學歷程 (data science process) 是在一定的資料流處理架構 (如:CRISP-DM and OSEMN)下,從資料中蒸餾出知識與洞察。

  • 資料科學專案 (data project) 若有機器學習模型嵌入,在部署成 web apps 時較具有說服力。

NLP and Web Applications

上週提到的 EDA 來看一下範例

NLP and Web Applications

Model deployment

  • 所謂的模型部署,是指將模型與資料整合成一個 web app,讓使用者可以透過網頁介面與模型互動。類型上可分:

    • Jupyter notebook (Uploaded to GitHub - Shared as a link via Google Colab - Shared via Binder)

    • API:模型可以利用像是 FastAPI 來部署成 REST API。提供程式化的介面,讓使用者可以透過程式語言與模型互動。(但沒有前端圖形介面)

    • Web app:提供網頁介面,讓使用者可以透過網頁與模型互動。傳統上會走 FlaskDjango 的 web framework。 晚近的簡單做法是採 low-code solution,例如 Streamlit

NLP and Web Applications

low-code solution: Streamlit approach

source

NLP and Web Applications

三個重要的元素

Key elements of a (Streamlit) app

  • input :使用不同的 widgets(如:sliders, text/number boxes, file uploader,...) 來接收使用者的輸入。

  • 'Brain'(functions) :透過 (外接,或自己寫) Python 的函式 來處理輸入,並產生輸出。特別的是,可以使用
    component (third-party Python modules) 來將複雜的函式包裝成一個 widget,可直接使用。

  • output :輸出的結果,可以是各種可能的形式(e.g. dataframe, images, plots, text, embeddings,...)

NLP and Web Applications

實作各種元素的方式

  • content (text, images, video, audio, etc.)

  • widget

  • auilliary(ballons, progress bars, code box, etc.)

NLP and Web Applications

機器學習

NLP and Web Applications

動機

  • 機器學習模型對於資料科學與自然語言處理專案或成品越見重要。

  • 開發模型後的體驗與測試很重要,但是等全端開發好(e.g. 加入 FlaskDjango)太耗時與資源。

  • 所以有 prototype 的開發需要:

    • 建模 create ML model prototypes in Streamlit
    • 互動介面 add user interaction to you ML apps
    • 探索與理解 explore and understand the results
NLP and Web Applications

ML workflow

  • The generation/training of the ML/NLP model.
  • The use of the ML/NLP model in production.
    • 外接或內訓 training the model outside or inside (of Streamlit apps).
NLP and Web Applications

接續上週

用上週的企鵝數據來建立一個機器學習預測模型

  • 先建立兩個檔案
> cd pengu_app
> touch pengu_ml.py pengu_streamlit.py
NLP and Web Applications

Jupyter Notebook 來探索與建模

NLP and Web Applications

複習上週的 EDA

pengu.ipynb

NLP and Web Applications

pengu_ml.ipynb

再轉成 python 檔案。我們使用隨機森林演算法來建立模型。

NLP and Web Applications

使用訓練好的模型

Load a pre-trained ML model in Streamlit

NLP and Web Applications

在客戶端訓練

Training models inside Streamlit apps

NLP and Web Applications

資料探索與機器學習

  • Streamlit 社群也提供 streamlit-pandas-profiling 的 component 來快速嵌入 EDA app。
    最近的 dabl 等套件也可以進階玩玩看。。
NLP and Web Applications

如何美化你的 app

  • columns

  • page configuration

  • sidebar

  • color picker

  • themes

NLP and Web Applications

NLP 來了


(credit: NLP.js)

NLP and Web Applications

Popular NLP libraries

參考 source

  • spaCy 是一個相對全面的 NLP library,可以做到很多 NLP 的傳統任務
  • Hugging Face Transformers 的特色則在於提供了許多預訓練好的模型 (pre-trained models),方便微調在不同的下游任務
NLP and Web Applications

Spacy

spaCy is a modern natural language processing library that handles +66 languages, provides state-of-the-art speed, and has various components for named entity recognition tasks, part-of-speech tagging, entity linking, and much more.

這裡開始。覺得無聊的同學可繼續 In-depth spacy tutorial

NLP and Web Applications

Spacy Streamlit

NLP and Web Applications

中文處理如何?

Spacy/HanLP/CKIP-Transformers . . .

重要的情意處理 (sense and sentiment) 還沒有到位。

NLP and Web Applications

情感(情緒)分析

Sentiment analysis

  • 規則加字典 rules+dictionary (+ Naive Bayes)
  • machine learning (deep learning)
NLP and Web Applications

中文練習

先用一個簡單的套件(snownlp)來做 sentiment analysis。

很可惜正體中文的情感資源與模型不多,大家加油。

  • 打開 sentiana.ipynb,跟著做一遍。

  • 想要玩深度學習模型的同學可以用 ktrain 速成。中文教學參考 這裡

NLP and Web Applications

個人反思




給有興趣中文 NLP 的同學參考:
中文 AI 知識庫與自然語言處理核心套件研討會

NLP and Web Applications

分享與部署


deploy, manage, and share your app for free.

NLP and Web Applications

Streamlit Cloud (== streamlit share)

簡易三步驟

  1. Put your app in a public GitHub repo (and make sure it has a requirements.txt!)
  2. Sign into share.streamlit.io
  3. Click 'Deploy an app' and then paste in your GitHub URL
NLP and Web Applications

幾件事

  • 熟悉 git/github 指令列 (參考這裡)

  • streamlit sharing 除錯

  • 使用 streamlit secrets 在公開 app 上使用私人資料

  • streamlit cloud 上部署

NLP and Web Applications

Project Package

簡單的軟體開發技巧

  • 可以試著結構化你的專案,讓程式更清楚,合作、部署更容易。
    source
NLP and Web Applications

Homework (bonus)

  • streamlit 建立一個簡單的 NLP app for Chinese sentiment analysis,部署在 streamlit cloud 上。

  • 至少看完 documentation 的 library 部分,並試著用一個以上的元素來美化你的 app。

  • 程式繳交到 github classroom
    第一行註解請寫上你的學號、姓名、stream cloud 的連結。

完全沒有頭緒的同學可以參考這個範例。照著做也行。