Gradio 是很方便可以把你 AI model 做成網路 app 的套件。現在還可以配合 Hugging Face 的 transformers 套件, 很快用名門 model, 做出一個 NLP 應用!
gradio
¶!pip install gradio
Collecting gradio Downloading https://files.pythonhosted.org/packages/c4/c7/0606fd431bd963ba704d8f71b7404ef778236d6f7f7981a36157ba68e6c5/gradio-2.0.10-py3-none-any.whl (2.4MB) |████████████████████████████████| 2.4MB 4.1MB/s Requirement already satisfied: pandas in /usr/local/lib/python3.7/dist-packages (from gradio) (1.1.5) Collecting Flask-Login Downloading https://files.pythonhosted.org/packages/2b/83/ac5bf3279f969704fc1e63f050c50e10985e50fd340e6069ec7e09df5442/Flask_Login-0.5.0-py2.py3-none-any.whl Collecting ffmpy Downloading https://files.pythonhosted.org/packages/bf/e2/947df4b3d666bfdd2b0c6355d215c45d2d40f929451cb29a8a2995b29788/ffmpy-0.3.0.tar.gz Requirement already satisfied: numpy in /usr/local/lib/python3.7/dist-packages (from gradio) (1.19.5) Collecting markdown2 Downloading https://files.pythonhosted.org/packages/5d/be/3924cc1c0e12030b5225de2b4521f1dc729730773861475de26be64a0d2b/markdown2-2.4.0-py2.py3-none-any.whl Collecting flask-cachebuster Downloading https://files.pythonhosted.org/packages/74/47/f3e1fedfaad965c81c2f17234636d72f71450f1b4522ca26d2b7eb4a0a74/Flask-CacheBuster-1.0.0.tar.gz Collecting paramiko Downloading https://files.pythonhosted.org/packages/95/19/124e9287b43e6ff3ebb9cdea3e5e8e88475a873c05ccdf8b7e20d2c4201e/paramiko-2.7.2-py2.py3-none-any.whl (206kB) |████████████████████████████████| 215kB 34.2MB/s Requirement already satisfied: matplotlib in /usr/local/lib/python3.7/dist-packages (from gradio) (3.2.2) Collecting Flask-Cors>=3.0.8 Downloading https://files.pythonhosted.org/packages/db/84/901e700de86604b1c4ef4b57110d4e947c218b9997adf5d38fa7da493bce/Flask_Cors-3.0.10-py2.py3-none-any.whl Requirement already satisfied: pillow in /usr/local/lib/python3.7/dist-packages (from gradio) (7.1.2) Collecting analytics-python Downloading https://files.pythonhosted.org/packages/30/81/2f447982f8d5dec5b56c10ca9ac53e5de2b2e9e2bdf7e091a05731f21379/analytics_python-1.3.1-py2.py3-none-any.whl Requirement already satisfied: requests in /usr/local/lib/python3.7/dist-packages (from gradio) (2.23.0) Requirement already satisfied: Flask>=1.1.1 in /usr/local/lib/python3.7/dist-packages (from gradio) (1.1.4) Collecting pycryptodome Downloading https://files.pythonhosted.org/packages/ad/16/9627ab0493894a11c68e46000dbcc82f578c8ff06bc2980dcd016aea9bd3/pycryptodome-3.10.1-cp35-abi3-manylinux2010_x86_64.whl (1.9MB) |████████████████████████████████| 1.9MB 38.9MB/s Requirement already satisfied: scipy in /usr/local/lib/python3.7/dist-packages (from gradio) (1.4.1) Requirement already satisfied: python-dateutil>=2.7.3 in /usr/local/lib/python3.7/dist-packages (from pandas->gradio) (2.8.1) Requirement already satisfied: pytz>=2017.2 in /usr/local/lib/python3.7/dist-packages (from pandas->gradio) (2018.9) Collecting cryptography>=2.5 Downloading https://files.pythonhosted.org/packages/b2/26/7af637e6a7e87258b963f1731c5982fb31cd507f0d90d91836e446955d02/cryptography-3.4.7-cp36-abi3-manylinux2014_x86_64.whl (3.2MB) |████████████████████████████████| 3.2MB 41.7MB/s Collecting pynacl>=1.0.1 Downloading https://files.pythonhosted.org/packages/9d/57/2f5e6226a674b2bcb6db531e8b383079b678df5b10cdaa610d6cf20d77ba/PyNaCl-1.4.0-cp35-abi3-manylinux1_x86_64.whl (961kB) |████████████████████████████████| 962kB 32.9MB/s Collecting bcrypt>=3.1.3 Downloading https://files.pythonhosted.org/packages/26/70/6d218afbe4c73538053c1016dd631e8f25fffc10cd01f5c272d7acf3c03d/bcrypt-3.2.0-cp36-abi3-manylinux2010_x86_64.whl (63kB) |████████████████████████████████| 71kB 8.4MB/s Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.7/dist-packages (from matplotlib->gradio) (0.10.0) Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->gradio) (1.3.1) Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->gradio) (2.4.7) Requirement already satisfied: Six in /usr/local/lib/python3.7/dist-packages (from Flask-Cors>=3.0.8->gradio) (1.15.0) Collecting monotonic>=1.5 Downloading https://files.pythonhosted.org/packages/9a/67/7e8406a29b6c45be7af7740456f7f37025f0506ae2e05fb9009a53946860/monotonic-1.6-py2.py3-none-any.whl Collecting backoff==1.10.0 Downloading https://files.pythonhosted.org/packages/f0/32/c5dd4f4b0746e9ec05ace2a5045c1fc375ae67ee94355344ad6c7005fd87/backoff-1.10.0-py2.py3-none-any.whl Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests->gradio) (1.24.3) Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests->gradio) (2.10) Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests->gradio) (2021.5.30) Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests->gradio) (3.0.4) Requirement already satisfied: Jinja2<3.0,>=2.10.1 in /usr/local/lib/python3.7/dist-packages (from Flask>=1.1.1->gradio) (2.11.3) Requirement already satisfied: Werkzeug<2.0,>=0.15 in /usr/local/lib/python3.7/dist-packages (from Flask>=1.1.1->gradio) (1.0.1) Requirement already satisfied: click<8.0,>=5.1 in /usr/local/lib/python3.7/dist-packages (from Flask>=1.1.1->gradio) (7.1.2) Requirement already satisfied: itsdangerous<2.0,>=0.24 in /usr/local/lib/python3.7/dist-packages (from Flask>=1.1.1->gradio) (1.1.0) Requirement already satisfied: cffi>=1.12 in /usr/local/lib/python3.7/dist-packages (from cryptography>=2.5->paramiko->gradio) (1.14.5) Requirement already satisfied: MarkupSafe>=0.23 in /usr/local/lib/python3.7/dist-packages (from Jinja2<3.0,>=2.10.1->Flask>=1.1.1->gradio) (2.0.1) Requirement already satisfied: pycparser in /usr/local/lib/python3.7/dist-packages (from cffi>=1.12->cryptography>=2.5->paramiko->gradio) (2.20) Building wheels for collected packages: ffmpy, flask-cachebuster Building wheel for ffmpy (setup.py) ... done Created wheel for ffmpy: filename=ffmpy-0.3.0-cp37-none-any.whl size=4710 sha256=1bd68e97d872d49ef0f0dc3f3de95fe0e632102ce83c14d43ebb9041040b0934 Stored in directory: /root/.cache/pip/wheels/cc/ac/c4/bef572cb7e52bfca170046f567e64858632daf77e0f34e5a74 Building wheel for flask-cachebuster (setup.py) ... done Created wheel for flask-cachebuster: filename=Flask_CacheBuster-1.0.0-cp37-none-any.whl size=3372 sha256=ed61019d7337f1e53dd8c6e6ffd4a63c231b7d3b0bad5b441ab16e0995b99683 Stored in directory: /root/.cache/pip/wheels/9f/fc/a7/ab5712c3ace9a8f97276465cc2937316ab8063c1fea488ea77 Successfully built ffmpy flask-cachebuster Installing collected packages: Flask-Login, ffmpy, markdown2, flask-cachebuster, cryptography, pynacl, bcrypt, paramiko, Flask-Cors, monotonic, backoff, analytics-python, pycryptodome, gradio Successfully installed Flask-Cors-3.0.10 Flask-Login-0.5.0 analytics-python-1.3.1 backoff-1.10.0 bcrypt-3.2.0 cryptography-3.4.7 ffmpy-0.3.0 flask-cachebuster-1.0.0 gradio-2.0.10 markdown2-2.4.0 monotonic-1.6 paramiko-2.7.2 pycryptodome-3.10.1 pynacl-1.4.0
gpt2
唬爛王小試一下身手¶transformers
套件提供很多名門套件給你使用! 我們來試試使用前一代的唬爛王 GPT-2 試試。
import gradio as gr
gr.Interface.load('huggingface/gpt2').launch()
Colab notebook detected. To show errors in colab notebook, set `debug=True` in `launch()` This share link will expire in 24 hours. If you need a permanent link, visit: https://gradio.app/introducing-hosted (NEW!) Running on External URL: https://20023.gradio.app Interface loading below...
(<Flask 'gradio.networking'>, 'http://127.0.0.1:7860/', 'https://20023.gradio.app')
一行就寫出 GPT-2!! 而且這裡用的是 Hugging Face 的運算資源, 所以你連 transformers
都沒有裝。當然, 如果自己裝一下 transformers
有時會更順一點。
很酷的是我們在 Colab 執行時,自動進入 share 的狀態, 也就是會有個 https://xxxx.gradio.app
這個網址, 這在其他電腦、行動裝置的瀏覽器連到這個網址, 就可以使用! 也就是你用差不多一行, 就完成了一個 NLP Web App!
雖然 transformers
本來就內建很多名門 transformer 的 models, 但有時, 比如我們想用中文的 NLP, 可以選擇的就很少。這時我們可去搜尋有沒有社群提供的 model:
比如我們搜尋 Chinese, 可以找到中研院 CKIP Lab 中文詞知識庫小組發佈的一些 transformers
預訓練好的 models。
我們找到一個叫 ckiplab/gpt2-base-chinese
的 model, 點進去 copy 這個 model 的名稱。
gr.Interface.load("huggingface/ckiplab/gpt2-base-chinese").launch()
Colab notebook detected. To show errors in colab notebook, set `debug=True` in `launch()` This share link will expire in 24 hours. If you need a permanent link, visit: https://gradio.app/introducing-hosted (NEW!) Running on External URL: https://13748.gradio.app Interface loading below...
(<Flask 'gradio.networking'>, 'http://127.0.0.1:7861/', 'https://13748.gradio.app')
我們發現, 簡體中文的 models 還是比較多, 使用上我們就需要先把繁體轉簡體。這可以用一個叫 opencc
的套件。
!pip install opencc-python-reimplemented
Collecting opencc-python-reimplemented Downloading https://files.pythonhosted.org/packages/04/aa/02c5ffc87e2bf1da1f476d35aa4de69cad2cfc3140e37114755c454d1231/opencc-python-reimplemented-0.1.6.tar.gz (484kB) |████████████████████████████████| 491kB 3.8MB/s Building wheels for collected packages: opencc-python-reimplemented Building wheel for opencc-python-reimplemented (setup.py) ... done Created wheel for opencc-python-reimplemented: filename=opencc_python_reimplemented-0.1.6-py2.py3-none-any.whl size=486151 sha256=4056225dec960dc0a1ca07b63b26fd491559c01b27aba808b5ac305f9418ec4f Stored in directory: /root/.cache/pip/wheels/54/8a/0f/405db0ba3f02d9af8211422d3ae94c47b3296256f168ac1e68 Successfully built opencc-python-reimplemented Installing collected packages: opencc-python-reimplemented Successfully installed opencc-python-reimplemented-0.1.6
from opencc import OpenCC
cc = OpenCC('t2s')
text = "在一個下雨的日子,再度回到我們熟悉的地方"
cc.convert(text)
'在一个下雨的日子,再度回到我们熟悉的地方'
gr.Interface.load("huggingface/uer/gpt2-chinese-lyric",
inputs="text", outputs="text").launch()
Colab notebook detected. To show errors in colab notebook, set `debug=True` in `launch()` This share link will expire in 24 hours. If you need a permanent link, visit: https://gradio.app/introducing-hosted (NEW!) Running on External URL: https://35255.gradio.app Interface loading below...
(<Flask 'gradio.networking'>, 'http://127.0.0.1:7860/', 'https://35255.gradio.app')
transformers
和 gradio
¶如果要學更多 transformers
, 非常推薦 Hugging Face 的官方課程!
Gradio 的快速入門 去學怎麼把 gradio 用在你自己的 models 上。
另外, 你也可以到 Gradio Hub 看許多有趣的範例。