├── .gitbook
└── assets
│ ├── 1_cMke9qdC4EvowVEDquVCjw.webp
│ ├── 1d.png
│ ├── 2d.png
│ ├── 3d.png
│ ├── BOW.drawio.png
│ ├── Google Colab.png
│ ├── No (1).png
│ ├── No.png
│ ├── QA回答.png
│ ├── Untitled.png
│ ├── box-plot (1).png
│ ├── box-plot.png
│ ├── captures_chrome-capture-2023-6-16.png
│ ├── cer.drawio (1).png
│ ├── cer.drawio.png
│ ├── colab_python_stock.drawio.png
│ ├── colab運行結果 (1).png
│ ├── colab運行結果.png
│ ├── config.png
│ ├── deletions.drawio.png
│ ├── dep (1).png
│ ├── dep.png
│ ├── dsplit.drawio.png
│ ├── grouping.drawio.png
│ ├── hello_world.png
│ ├── hub (1).png
│ ├── huggingface_tokenizer.drawio.png
│ ├── idf.png
│ ├── image (1).png
│ ├── image.png
│ ├── insertions.drawio.png
│ ├── math (1).jpg
│ ├── matplotlib中文化.drawio.png
│ ├── mer.drawio.png
│ ├── merge.jpg
│ ├── ner (1).png
│ ├── ner.png
│ ├── ner結果.png
│ ├── numpy分割.drawio.png
│ ├── numpy陣列.drawio.png
│ ├── pivot實現.png
│ ├── pos.png
│ ├── python_visualization.drawio.png
│ ├── reshaping_stack.png
│ ├── result.png
│ ├── spider.drawio.png
│ ├── spy.jpg
│ ├── stereo_mono.drawio.png
│ ├── substitutions.drawio.png
│ ├── svgviewer-png-output.png
│ ├── text2img.drawio.png
│ ├── tf.png
│ ├── tf_idf.png
│ ├── wer.drawio (1).png
│ ├── wer.drawio (2).png
│ ├── wer.drawio (3).png
│ ├── wer.drawio.png
│ ├── whisper_srt.drawio.png
│ ├── whisper_模型.png
│ ├── wip.drawio.png
│ ├── 下一段程式碼.png
│ ├── 下載 (3).jpg
│ ├── 下載 (4) (1).jpg
│ ├── 下載 (4).jpg
│ ├── 下載 (6).jpg
│ ├── 下載 (7).jpg
│ ├── 下載.png
│ ├── 串接.png
│ ├── 互動式圖表.png
│ ├── 俯瞰資料集.png
│ ├── 分組統計銷售金額.png
│ ├── 切換GPU.png
│ ├── 創建筆記本.png
│ ├── 加個文字.png
│ ├── 合併.png
│ ├── 回傳結果.png
│ ├── 回測.drawio.png
│ ├── 圖表架構j.drawio.png
│ ├── 垂直分割.drawio.png
│ ├── 堆疊.png
│ ├── 報表.jpg
│ ├── 多欄位分組.png
│ ├── 字幕檔.png
│ ├── 客戶的地址.png
│ ├── 客戶的訂單.png
│ ├── 屬性.png
│ ├── 成功抓到資訊.png
│ ├── 成功抓取目標.png
│ ├── 成功抓取目標資訊.png
│ ├── 成功繪製中文.png
│ ├── 打上token (1).png
│ ├── 打上token.png
│ ├── 找NER模型 (1).png
│ ├── 找QA模型 (1).png
│ ├── 找QA模型.png
│ ├── 找到user_agent.png
│ ├── 找推理APi.png
│ ├── 找音檔.png
│ ├── 抓取殖利率.png
│ ├── 捕魚.png
│ ├── 推理API.drawio.png
│ ├── 搜尋模型.png
│ ├── 搜尋資料集.png
│ ├── 文字區塊 (1).png
│ ├── 文字區塊.png
│ ├── 文字產生圖片.png
│ ├── 新增記事本.png
│ ├── 更多的統計方法.png
│ ├── 未堆疊.png
│ ├── 標題名稱.png
│ ├── 模型區篩選.png
│ ├── 正確的圖片 (1).png
│ ├── 正確的圖片.png
│ ├── 殖利率位階圖.png
│ ├── 殖利率區間.drawio.png
│ ├── 水平分割.drawio.png
│ ├── 瀏覽資料集 (1).png
│ ├── 瀏覽資料集.png
│ ├── 留下指定欄位資訊.png
│ ├── 發生錯誤.png
│ ├── 真有這麼佛心嗎.png
│ ├── 知識專家 (1).jpeg
│ ├── 知識專家.jpeg
│ ├── 硬體加速器.png
│ ├── 編輯頁面.png
│ ├── 總結小幫手 (1).png
│ ├── 總結小幫手.png
│ ├── 股價位階圖.png
│ ├── 股利發放年度_封包.png
│ ├── 股利發放年度_封包觀察.png
│ ├── 股利發放年度頁面.png
│ ├── 股利資訊.png
│ ├── 蒐集_經營績效.png
│ ├── 表格 (1).png
│ ├── 表格.png
│ ├── 被阻擋的請求.png
│ ├── 觀察瀏覽器行為.png
│ ├── 解析.png
│ ├── 詞彙頻率表.png
│ ├── 變更執行階段.png
│ ├── 變更執行階段類型.png
│ ├── 豐富的範例圖表1 (1).png
│ ├── 豐富的範例圖表1.png
│ ├── 豐富的範例圖表2 (1).png
│ ├── 豐富的範例圖表2.png
│ ├── 資源限制.png
│ ├── 資訊.png
│ ├── 運行結果.png
│ ├── 重朔樣本.png
│ ├── 銷售原始數據.png
│ ├── 錨定select標籤.png
│ ├── 鎖定目標.png
│ ├── 限制 (1).png
│ ├── 限制 (2).png
│ ├── 限制.png
│ ├── 限縮表格範圍.png
│ └── 顯示依據選項.png
├── README.md
├── SUMMARY.md
├── asr-yu-yin-bian-shi-pian-openai-whisper
├── README.md
├── yu-yin-bian-shi-whisper-chu-tan-whisper-lai-dui-yi-duan-youtube-ying-pian-jin-hang-bian-shi-ba.md
└── yu-yin-bian-shi-whisperopenai-whisper-yu-yin-bian-shi-chan-sheng-zi-mu-dang.md
├── bao-biao-shi-jue-hua-gong-ju-ji
├── README.md
├── google-colab-python-xi-lie-shi-jue-hua-zi-liao-matplotlib-ru-he-hui-zhi-chu-zhong-wen.md
└── google-colab-python-xi-lie-shi-jue-hua-zi-liao-matplotlib-xin-shou-cun.md
├── goodinfo-pa-chong-shi-zhan-pian
├── README.md
├── google-colab-python-xi-lie-yi-goodinfo-wei-li-jiang-zi-liao-shi-jue-hua-ba.md
├── google-colab-xi-lie-yi-goodinfo-wei-li-tong-ji-yi-duan-shi-jian-nei-de-zui-gao-zui-di-zhi-li-shuai.md
└── zi-liao-chu-li-shen-qi-qu-pytube-xi-lie-sou-ji-qing-bao-rang-shu-ju-hui-shuo-hua.md
├── hugging-face-pian
├── README.md
├── hugging-faceep.1-ping-fan-ren-ye-neng-wan-de-qi-de-ai-ping-tai.md
├── hugging-faceep.2-chu-tan-xin-shou-cun-da-zao-zhuan-shu-de-fan-yi-guan.md
├── hugging-faceep.3-qian-wang-datasets-tao-jin-qu.md
├── hugging-faceep.4-wen-zi-yu-mo-xing-de-zhuan-huan-qi-tokenizer.md
├── hugging-faceep.5-wen-zi-shi-jie-zhong-de-chao-neng-li-yu-yan-ying-xiong-named-entity-recognition.md
├── hugging-faceep.6-jie-jue-wen-ti-de-zhuan-ye-ji-po-guan-zhi-shi-jia-question-answering.md
├── hugging-faceep.7-yi-wen-sheng-tu-de-mo-huan-zhi-tu-shi-text-to-image.md
└── hugging-faceep.8-zhuan-ye-de-biao-zhun-hua-tui-li-jia-inference-api.md
├── ji-chu-pian
├── README.md
└── google-colab-xi-lie-colab-ping-tai-yu-python-ru-he-ca-chu-huo-hua.md
├── jiao-yi-ce-lve-hui-ce-pian
├── README.md
└── google-colab-python-xi-lie-ji-shu-zhi-biao-hui-ce-kd-ce-lve.md
├── jupyter-examples
├── goodinfo_example.ipynb
├── goodinfo_yield.ipynb
├── huggingface
│ ├── hugging_face_datasets.ipynb
│ ├── huggingface_ep8_inference_api.ipynb
│ ├── huggingface_ner.ipynb
│ ├── huggingface_qa.ipynb
│ ├── huggingface_text2image.ipynb
│ ├── opus_mt_zh_en.ipynb
│ └── tokenizers.ipynb
├── kd_strategy.ipynb
├── matplotlib
│ └── matplotlib_quickstart.ipynb
├── matplotlib_chinese_font.ipynb
├── nlp
│ ├── bow.ipynb
│ ├── spacy_dep_parsing.ipynb
│ ├── spacy_pos.ipynb
│ ├── tf_idf.ipynb
│ └── wordvector.ipynb
├── nlpspacy_dep_parsing.ipynb
├── numpy
│ ├── numpy_quickstart.ipynb
│ └── numpy_split.ipynb
├── pandas
│ ├── pandas_group_reshape.ipynb
│ ├── pandas_merge.ipynb
│ └── pandas_quickstart.ipynb
├── pytube
│ └── pytube_quickstart.ipynb
├── spacy_0.ipynb
├── spacy_1.ipynb
├── whisper
│ └── whisper_acc.ipynb
├── whisper_0_yt.ipynb
├── whisper_1_srt.ipynb
└── whisper_2_channel.ipynb
├── zi-liao-chu-li-shen-qi-qu
├── README.md
├── google-colab-python-xi-lie-zi-liao-chu-li-shen-qi-pandas-fen-zu-yu-zhong-shuo-zhi-shu-groupingreshap.md
├── google-colab-python-xi-lie-zi-liao-chu-li-shen-qi-pandas-he-bing-zhi-shu-joinconcat.md
├── google-colab-python-xi-lie-zi-liao-chu-li-shen-qi-pandas-qi-shou-shi.md
├── zi-liao-chu-li-shen-qi-qu-numpy-xi-lie-dian-ding-zi-liao-ke-xue-de-ji-chu-mo-zu-an-zhuang-yu-ren-shi.md
└── zi-liao-chu-li-shen-qi-qu-numpy-xi-lie-fen-ge-split-de-yi-shu.md
└── zi-ran-yu-yan-chu-li-nlpnatural-language-processing
├── README.md
├── zi-ran-yu-yan-chu-li-gai-nian-pian-chai-jie-yu-ju-zu-cheng-de-gui-ze-he-wei-yi-cun-ju-fa-fen-xi-depe.md
├── zi-ran-yu-yan-chu-li-gai-nian-pian-ci-xing-biao-zhu-pos-zai-nlp-de-shi-jie-ban-yan-shi-mo-yang-de-ji.md
├── zi-ran-yu-yan-chu-li-gai-nian-pian-lai-ren-shi-yi-xia-ci-xiang-liang-word-embedding-or-word-vector-b.md
├── zi-ran-yu-yan-chu-li-gai-nian-pian-tan-suo-tfidf-guan-yu-ci-de-tong-ji-yu-suo-yin-yin-han-zhu-shi-mo.md
├── zi-ran-yu-yan-chu-li-gai-nian-pian-zui-ji-chu-de-bagofwords-mo-xing-shi-shi-mo-ni.md
├── zi-ran-yu-yan-chu-li-spacy-chu-tan-qiang-da-de-gong-ju-ku-spacy-rang-ji-qi-du-dong-wo-men-de-yu-yan.md
└── zi-ran-yu-yan-chu-li-spacy-shan-yong-chatgpt-bang-wo-men-xun-lian-chu-zi-ding-de-name-entity-recogni.md
/.gitbook/assets/1_cMke9qdC4EvowVEDquVCjw.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/1_cMke9qdC4EvowVEDquVCjw.webp
--------------------------------------------------------------------------------
/.gitbook/assets/1d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/1d.png
--------------------------------------------------------------------------------
/.gitbook/assets/2d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/2d.png
--------------------------------------------------------------------------------
/.gitbook/assets/3d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/3d.png
--------------------------------------------------------------------------------
/.gitbook/assets/BOW.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/BOW.drawio.png
--------------------------------------------------------------------------------
/.gitbook/assets/Google Colab.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/Google Colab.png
--------------------------------------------------------------------------------
/.gitbook/assets/No (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/No (1).png
--------------------------------------------------------------------------------
/.gitbook/assets/No.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/No.png
--------------------------------------------------------------------------------
/.gitbook/assets/QA回答.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/QA回答.png
--------------------------------------------------------------------------------
/.gitbook/assets/Untitled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/Untitled.png
--------------------------------------------------------------------------------
/.gitbook/assets/box-plot (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/box-plot (1).png
--------------------------------------------------------------------------------
/.gitbook/assets/box-plot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/box-plot.png
--------------------------------------------------------------------------------
/.gitbook/assets/captures_chrome-capture-2023-6-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/captures_chrome-capture-2023-6-16.png
--------------------------------------------------------------------------------
/.gitbook/assets/cer.drawio (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/cer.drawio (1).png
--------------------------------------------------------------------------------
/.gitbook/assets/cer.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/cer.drawio.png
--------------------------------------------------------------------------------
/.gitbook/assets/colab_python_stock.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/colab_python_stock.drawio.png
--------------------------------------------------------------------------------
/.gitbook/assets/colab運行結果 (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/colab運行結果 (1).png
--------------------------------------------------------------------------------
/.gitbook/assets/colab運行結果.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/colab運行結果.png
--------------------------------------------------------------------------------
/.gitbook/assets/config.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/config.png
--------------------------------------------------------------------------------
/.gitbook/assets/deletions.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/deletions.drawio.png
--------------------------------------------------------------------------------
/.gitbook/assets/dep (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/dep (1).png
--------------------------------------------------------------------------------
/.gitbook/assets/dep.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/dep.png
--------------------------------------------------------------------------------
/.gitbook/assets/dsplit.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/dsplit.drawio.png
--------------------------------------------------------------------------------
/.gitbook/assets/grouping.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/grouping.drawio.png
--------------------------------------------------------------------------------
/.gitbook/assets/hello_world.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/hello_world.png
--------------------------------------------------------------------------------
/.gitbook/assets/hub (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/hub (1).png
--------------------------------------------------------------------------------
/.gitbook/assets/huggingface_tokenizer.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/huggingface_tokenizer.drawio.png
--------------------------------------------------------------------------------
/.gitbook/assets/idf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/idf.png
--------------------------------------------------------------------------------
/.gitbook/assets/image (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/image (1).png
--------------------------------------------------------------------------------
/.gitbook/assets/image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/image.png
--------------------------------------------------------------------------------
/.gitbook/assets/insertions.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/insertions.drawio.png
--------------------------------------------------------------------------------
/.gitbook/assets/math (1).jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/math (1).jpg
--------------------------------------------------------------------------------
/.gitbook/assets/matplotlib中文化.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/matplotlib中文化.drawio.png
--------------------------------------------------------------------------------
/.gitbook/assets/mer.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/mer.drawio.png
--------------------------------------------------------------------------------
/.gitbook/assets/merge.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/merge.jpg
--------------------------------------------------------------------------------
/.gitbook/assets/ner (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/ner (1).png
--------------------------------------------------------------------------------
/.gitbook/assets/ner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/ner.png
--------------------------------------------------------------------------------
/.gitbook/assets/ner結果.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/ner結果.png
--------------------------------------------------------------------------------
/.gitbook/assets/numpy分割.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/numpy分割.drawio.png
--------------------------------------------------------------------------------
/.gitbook/assets/numpy陣列.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/numpy陣列.drawio.png
--------------------------------------------------------------------------------
/.gitbook/assets/pivot實現.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/pivot實現.png
--------------------------------------------------------------------------------
/.gitbook/assets/pos.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/pos.png
--------------------------------------------------------------------------------
/.gitbook/assets/python_visualization.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/python_visualization.drawio.png
--------------------------------------------------------------------------------
/.gitbook/assets/reshaping_stack.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/reshaping_stack.png
--------------------------------------------------------------------------------
/.gitbook/assets/result.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/result.png
--------------------------------------------------------------------------------
/.gitbook/assets/spider.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/spider.drawio.png
--------------------------------------------------------------------------------
/.gitbook/assets/spy.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/spy.jpg
--------------------------------------------------------------------------------
/.gitbook/assets/stereo_mono.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/stereo_mono.drawio.png
--------------------------------------------------------------------------------
/.gitbook/assets/substitutions.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/substitutions.drawio.png
--------------------------------------------------------------------------------
/.gitbook/assets/svgviewer-png-output.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/svgviewer-png-output.png
--------------------------------------------------------------------------------
/.gitbook/assets/text2img.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/text2img.drawio.png
--------------------------------------------------------------------------------
/.gitbook/assets/tf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/tf.png
--------------------------------------------------------------------------------
/.gitbook/assets/tf_idf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/tf_idf.png
--------------------------------------------------------------------------------
/.gitbook/assets/wer.drawio (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/wer.drawio (1).png
--------------------------------------------------------------------------------
/.gitbook/assets/wer.drawio (2).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/wer.drawio (2).png
--------------------------------------------------------------------------------
/.gitbook/assets/wer.drawio (3).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/wer.drawio (3).png
--------------------------------------------------------------------------------
/.gitbook/assets/wer.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/wer.drawio.png
--------------------------------------------------------------------------------
/.gitbook/assets/whisper_srt.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/whisper_srt.drawio.png
--------------------------------------------------------------------------------
/.gitbook/assets/whisper_模型.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/whisper_模型.png
--------------------------------------------------------------------------------
/.gitbook/assets/wip.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/wip.drawio.png
--------------------------------------------------------------------------------
/.gitbook/assets/下一段程式碼.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/下一段程式碼.png
--------------------------------------------------------------------------------
/.gitbook/assets/下載 (3).jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/下載 (3).jpg
--------------------------------------------------------------------------------
/.gitbook/assets/下載 (4) (1).jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/下載 (4) (1).jpg
--------------------------------------------------------------------------------
/.gitbook/assets/下載 (4).jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/下載 (4).jpg
--------------------------------------------------------------------------------
/.gitbook/assets/下載 (6).jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/下載 (6).jpg
--------------------------------------------------------------------------------
/.gitbook/assets/下載 (7).jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/下載 (7).jpg
--------------------------------------------------------------------------------
/.gitbook/assets/下載.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/下載.png
--------------------------------------------------------------------------------
/.gitbook/assets/串接.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/串接.png
--------------------------------------------------------------------------------
/.gitbook/assets/互動式圖表.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/互動式圖表.png
--------------------------------------------------------------------------------
/.gitbook/assets/俯瞰資料集.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/俯瞰資料集.png
--------------------------------------------------------------------------------
/.gitbook/assets/分組統計銷售金額.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/分組統計銷售金額.png
--------------------------------------------------------------------------------
/.gitbook/assets/切換GPU.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/切換GPU.png
--------------------------------------------------------------------------------
/.gitbook/assets/創建筆記本.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/創建筆記本.png
--------------------------------------------------------------------------------
/.gitbook/assets/加個文字.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/加個文字.png
--------------------------------------------------------------------------------
/.gitbook/assets/合併.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/合併.png
--------------------------------------------------------------------------------
/.gitbook/assets/回傳結果.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/回傳結果.png
--------------------------------------------------------------------------------
/.gitbook/assets/回測.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/回測.drawio.png
--------------------------------------------------------------------------------
/.gitbook/assets/圖表架構j.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/圖表架構j.drawio.png
--------------------------------------------------------------------------------
/.gitbook/assets/垂直分割.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/垂直分割.drawio.png
--------------------------------------------------------------------------------
/.gitbook/assets/堆疊.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/堆疊.png
--------------------------------------------------------------------------------
/.gitbook/assets/報表.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/報表.jpg
--------------------------------------------------------------------------------
/.gitbook/assets/多欄位分組.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/多欄位分組.png
--------------------------------------------------------------------------------
/.gitbook/assets/字幕檔.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/字幕檔.png
--------------------------------------------------------------------------------
/.gitbook/assets/客戶的地址.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/客戶的地址.png
--------------------------------------------------------------------------------
/.gitbook/assets/客戶的訂單.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/客戶的訂單.png
--------------------------------------------------------------------------------
/.gitbook/assets/屬性.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/屬性.png
--------------------------------------------------------------------------------
/.gitbook/assets/成功抓到資訊.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/成功抓到資訊.png
--------------------------------------------------------------------------------
/.gitbook/assets/成功抓取目標.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/成功抓取目標.png
--------------------------------------------------------------------------------
/.gitbook/assets/成功抓取目標資訊.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/成功抓取目標資訊.png
--------------------------------------------------------------------------------
/.gitbook/assets/成功繪製中文.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/成功繪製中文.png
--------------------------------------------------------------------------------
/.gitbook/assets/打上token (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/打上token (1).png
--------------------------------------------------------------------------------
/.gitbook/assets/打上token.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/打上token.png
--------------------------------------------------------------------------------
/.gitbook/assets/找NER模型 (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/找NER模型 (1).png
--------------------------------------------------------------------------------
/.gitbook/assets/找QA模型 (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/找QA模型 (1).png
--------------------------------------------------------------------------------
/.gitbook/assets/找QA模型.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/找QA模型.png
--------------------------------------------------------------------------------
/.gitbook/assets/找到user_agent.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/找到user_agent.png
--------------------------------------------------------------------------------
/.gitbook/assets/找推理APi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/找推理APi.png
--------------------------------------------------------------------------------
/.gitbook/assets/找音檔.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/找音檔.png
--------------------------------------------------------------------------------
/.gitbook/assets/抓取殖利率.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/抓取殖利率.png
--------------------------------------------------------------------------------
/.gitbook/assets/捕魚.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/捕魚.png
--------------------------------------------------------------------------------
/.gitbook/assets/推理API.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/推理API.drawio.png
--------------------------------------------------------------------------------
/.gitbook/assets/搜尋模型.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/搜尋模型.png
--------------------------------------------------------------------------------
/.gitbook/assets/搜尋資料集.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/搜尋資料集.png
--------------------------------------------------------------------------------
/.gitbook/assets/文字區塊 (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/文字區塊 (1).png
--------------------------------------------------------------------------------
/.gitbook/assets/文字區塊.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/文字區塊.png
--------------------------------------------------------------------------------
/.gitbook/assets/文字產生圖片.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/文字產生圖片.png
--------------------------------------------------------------------------------
/.gitbook/assets/新增記事本.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/新增記事本.png
--------------------------------------------------------------------------------
/.gitbook/assets/更多的統計方法.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/更多的統計方法.png
--------------------------------------------------------------------------------
/.gitbook/assets/未堆疊.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/未堆疊.png
--------------------------------------------------------------------------------
/.gitbook/assets/標題名稱.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/標題名稱.png
--------------------------------------------------------------------------------
/.gitbook/assets/模型區篩選.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/模型區篩選.png
--------------------------------------------------------------------------------
/.gitbook/assets/正確的圖片 (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/正確的圖片 (1).png
--------------------------------------------------------------------------------
/.gitbook/assets/正確的圖片.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/正確的圖片.png
--------------------------------------------------------------------------------
/.gitbook/assets/殖利率位階圖.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/殖利率位階圖.png
--------------------------------------------------------------------------------
/.gitbook/assets/殖利率區間.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/殖利率區間.drawio.png
--------------------------------------------------------------------------------
/.gitbook/assets/水平分割.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/水平分割.drawio.png
--------------------------------------------------------------------------------
/.gitbook/assets/瀏覽資料集 (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/瀏覽資料集 (1).png
--------------------------------------------------------------------------------
/.gitbook/assets/瀏覽資料集.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/瀏覽資料集.png
--------------------------------------------------------------------------------
/.gitbook/assets/留下指定欄位資訊.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/留下指定欄位資訊.png
--------------------------------------------------------------------------------
/.gitbook/assets/發生錯誤.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/發生錯誤.png
--------------------------------------------------------------------------------
/.gitbook/assets/真有這麼佛心嗎.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/真有這麼佛心嗎.png
--------------------------------------------------------------------------------
/.gitbook/assets/知識專家 (1).jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/知識專家 (1).jpeg
--------------------------------------------------------------------------------
/.gitbook/assets/知識專家.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/知識專家.jpeg
--------------------------------------------------------------------------------
/.gitbook/assets/硬體加速器.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/硬體加速器.png
--------------------------------------------------------------------------------
/.gitbook/assets/編輯頁面.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/編輯頁面.png
--------------------------------------------------------------------------------
/.gitbook/assets/總結小幫手 (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/總結小幫手 (1).png
--------------------------------------------------------------------------------
/.gitbook/assets/總結小幫手.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/總結小幫手.png
--------------------------------------------------------------------------------
/.gitbook/assets/股價位階圖.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/股價位階圖.png
--------------------------------------------------------------------------------
/.gitbook/assets/股利發放年度_封包.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/股利發放年度_封包.png
--------------------------------------------------------------------------------
/.gitbook/assets/股利發放年度_封包觀察.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/股利發放年度_封包觀察.png
--------------------------------------------------------------------------------
/.gitbook/assets/股利發放年度頁面.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/股利發放年度頁面.png
--------------------------------------------------------------------------------
/.gitbook/assets/股利資訊.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/股利資訊.png
--------------------------------------------------------------------------------
/.gitbook/assets/蒐集_經營績效.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/蒐集_經營績效.png
--------------------------------------------------------------------------------
/.gitbook/assets/表格 (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/表格 (1).png
--------------------------------------------------------------------------------
/.gitbook/assets/表格.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/表格.png
--------------------------------------------------------------------------------
/.gitbook/assets/被阻擋的請求.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/被阻擋的請求.png
--------------------------------------------------------------------------------
/.gitbook/assets/觀察瀏覽器行為.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/觀察瀏覽器行為.png
--------------------------------------------------------------------------------
/.gitbook/assets/解析.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/解析.png
--------------------------------------------------------------------------------
/.gitbook/assets/詞彙頻率表.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/詞彙頻率表.png
--------------------------------------------------------------------------------
/.gitbook/assets/變更執行階段.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/變更執行階段.png
--------------------------------------------------------------------------------
/.gitbook/assets/變更執行階段類型.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/變更執行階段類型.png
--------------------------------------------------------------------------------
/.gitbook/assets/豐富的範例圖表1 (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/豐富的範例圖表1 (1).png
--------------------------------------------------------------------------------
/.gitbook/assets/豐富的範例圖表1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/豐富的範例圖表1.png
--------------------------------------------------------------------------------
/.gitbook/assets/豐富的範例圖表2 (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/豐富的範例圖表2 (1).png
--------------------------------------------------------------------------------
/.gitbook/assets/豐富的範例圖表2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/豐富的範例圖表2.png
--------------------------------------------------------------------------------
/.gitbook/assets/資源限制.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/資源限制.png
--------------------------------------------------------------------------------
/.gitbook/assets/資訊.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/資訊.png
--------------------------------------------------------------------------------
/.gitbook/assets/運行結果.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/運行結果.png
--------------------------------------------------------------------------------
/.gitbook/assets/重朔樣本.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/重朔樣本.png
--------------------------------------------------------------------------------
/.gitbook/assets/銷售原始數據.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/銷售原始數據.png
--------------------------------------------------------------------------------
/.gitbook/assets/錨定select標籤.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/錨定select標籤.png
--------------------------------------------------------------------------------
/.gitbook/assets/鎖定目標.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/鎖定目標.png
--------------------------------------------------------------------------------
/.gitbook/assets/限制 (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/限制 (1).png
--------------------------------------------------------------------------------
/.gitbook/assets/限制 (2).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/限制 (2).png
--------------------------------------------------------------------------------
/.gitbook/assets/限制.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/限制.png
--------------------------------------------------------------------------------
/.gitbook/assets/限縮表格範圍.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/限縮表格範圍.png
--------------------------------------------------------------------------------
/.gitbook/assets/顯示依據選項.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/weihanchen/google-colab-python-learn/454e7096c2807c8909b140580311323fd25a8da5/.gitbook/assets/顯示依據選項.png
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: 📚 Learn Google Colab、Python、ML、NLP、ASR、NumPy、Pandas
3 | ---
4 |
5 | # 📌 基本介紹
6 |
7 | ### 基礎篇
8 |
9 | * [【Google Colab系列】Colab平台與Python如何擦出火花?](ji-chu-pian/google-colab-xi-lie-colab-ping-tai-yu-python-ru-he-ca-chu-huo-hua.md)
10 |
11 | ### Hugging Face篇
12 |
13 | * [【Hugging Face】Ep.1 平凡人也能玩的起的AI平台](hugging-face-pian/hugging-faceep.1-ping-fan-ren-ye-neng-wan-de-qi-de-ai-ping-tai.md)
14 | * [【Hugging Face】Ep.2 初探新手村, 打造專屬的翻譯官](hugging-face-pian/hugging-faceep.2-chu-tan-xin-shou-cun-da-zao-zhuan-shu-de-fan-yi-guan.md)
15 | * [【Hugging Face】Ep.3 前往Datasets掏金趣](hugging-face-pian/hugging-faceep.3-qian-wang-datasets-tao-jin-qu.md)
16 | * [【Hugging Face】Ep.4 文字與模型的轉換器Tokenizer](hugging-face-pian/hugging-faceep.4-wen-zi-yu-mo-xing-de-zhuan-huan-qi-tokenizer.md)
17 | * [【Hugging Face】Ep.5 文字世界中的超能力語言英雄(Named Entity Recognition)](hugging-face-pian/hugging-faceep.5-wen-zi-shi-jie-zhong-de-chao-neng-li-yu-yan-ying-xiong-named-entity-recognition.md)
18 | * [【Hugging Face】Ep.6 解決問題的專業級破關知識家(Question Answering)](hugging-face-pian/hugging-faceep.6-jie-jue-wen-ti-de-zhuan-ye-ji-po-guan-zhi-shi-jia-question-answering.md)
19 | * [【Hugging Face】Ep.7 以文生圖的魔幻製圖師(Text To Image)](hugging-face-pian/hugging-faceep.7-yi-wen-sheng-tu-de-mo-huan-zhi-tu-shi-text-to-image.md)
20 | * [【Hugging Face】Ep.8 專業的標準化推理家(Inference API)](hugging-face-pian/hugging-faceep.8-zhuan-ye-de-biao-zhun-hua-tui-li-jia-inference-api.md)
21 |
22 | ### ASR語音辨識篇 - OpenAI Whisper
23 |
24 | * [【語音辨識 - Whisper】 初探Whisper: 來對一段Youtube影片進行辨識吧!](asr-yu-yin-bian-shi-pian-openai-whisper/yu-yin-bian-shi-whisper-chu-tan-whisper-lai-dui-yi-duan-youtube-ying-pian-jin-hang-bian-shi-ba.md)
25 | * [【語音辨識 - Whisper】OpenAI Whisper: 語音辨識產生字幕檔](asr-yu-yin-bian-shi-pian-openai-whisper/yu-yin-bian-shi-whisperopenai-whisper-yu-yin-bian-shi-chan-sheng-zi-mu-dang.md)
26 |
27 | ### 自然語言處理 - NLP(Natural Language Processing)
28 |
29 | * [【自然語言處理 - 概念篇】最基礎的Bag-of-Words模型是什麼呢?](zi-ran-yu-yan-chu-li-nlpnatural-language-processing/zi-ran-yu-yan-chu-li-gai-nian-pian-zui-ji-chu-de-bagofwords-mo-xing-shi-shi-mo-ni.md)
30 | * [【自然語言處理 - 概念篇】 來認識一下詞向量(Word Embedding or Word Vector)吧](zi-ran-yu-yan-chu-li-nlpnatural-language-processing/zi-ran-yu-yan-chu-li-gai-nian-pian-lai-ren-shi-yi-xia-ci-xiang-liang-word-embedding-or-word-vector-b.md)
31 | * [【自然語言處理 - 概念篇】 探索TF-IDF, 關於詞的統計與索引隱含著什麼奧秘呢?](zi-ran-yu-yan-chu-li-nlpnatural-language-processing/zi-ran-yu-yan-chu-li-gai-nian-pian-tan-suo-tfidf-guan-yu-ci-de-tong-ji-yu-suo-yin-yin-han-zhu-shi-mo.md)
32 | * [【自然語言處理 - 概念篇】 詞性標注POS在NLP的世界扮演什麼樣的角色呢?](zi-ran-yu-yan-chu-li-nlpnatural-language-processing/zi-ran-yu-yan-chu-li-gai-nian-pian-ci-xing-biao-zhu-pos-zai-nlp-de-shi-jie-ban-yan-shi-mo-yang-de-ji.md)
33 | * [【自然語言處理 - 概念篇】 拆解語句組成的規則, 何謂依存句法分析(Dependency Parsing)?](zi-ran-yu-yan-chu-li-nlpnatural-language-processing/zi-ran-yu-yan-chu-li-gai-nian-pian-chai-jie-yu-ju-zu-cheng-de-gui-ze-he-wei-yi-cun-ju-fa-fen-xi-depe.md)
34 | * [【自然語言處理 - spaCy】初探強大的工具庫spaCy, 讓機器讀懂我們的語言](zi-ran-yu-yan-chu-li-nlpnatural-language-processing/zi-ran-yu-yan-chu-li-spacy-chu-tan-qiang-da-de-gong-ju-ku-spacy-rang-ji-qi-du-dong-wo-men-de-yu-yan.md)
35 | * [【自然語言處理 - spaCy】善用ChatGPT幫我們訓練出自訂的Name Entity Recognition實體](zi-ran-yu-yan-chu-li-nlpnatural-language-processing/zi-ran-yu-yan-chu-li-spacy-shan-yong-chatgpt-bang-wo-men-xun-lian-chu-zi-ding-de-name-entity-recogni.md)
36 |
37 | ### 爬蟲實戰篇
38 |
39 | * [【Google Colab Python系列】該如何設計自己的爬蟲來抓取Html資料?](https://vocus.cc/article/64733ecafd89780001782a6f)
40 | * [【Google Colab Python系列】以Goodinfo!為例,統計區間內的數值](goodinfo-pa-chong-shi-zhan-pian/google-colab-xi-lie-yi-goodinfo-wei-li-tong-ji-yi-duan-shi-jian-nei-de-zui-gao-zui-di-zhi-li-shuai.md)
41 | * [📈【Google Colab Python系列】以Goodinfo為例,將資料視覺化吧!](goodinfo-pa-chong-shi-zhan-pian/google-colab-python-xi-lie-yi-goodinfo-wei-li-jiang-zi-liao-shi-jue-hua-ba.md)
42 | * [【資料處理神器區 - Pytube系列】 蒐集情報讓數據會說話](goodinfo-pa-chong-shi-zhan-pian/zi-liao-chu-li-shen-qi-qu-pytube-xi-lie-sou-ji-qing-bao-rang-shu-ju-hui-shuo-hua.md)
43 |
44 | ### 資料處理神器區
45 |
46 | * [【資料處理神器區 - NumPy系列】 奠定資料科學的基礎模組(安裝與認識維度)](zi-liao-chu-li-shen-qi-qu/zi-liao-chu-li-shen-qi-qu-numpy-xi-lie-dian-ding-zi-liao-ke-xue-de-ji-chu-mo-zu-an-zhuang-yu-ren-shi.md)
47 | * [【資料處理神器區 - NumPy系列】 分割(Split)的藝術](zi-liao-chu-li-shen-qi-qu/zi-liao-chu-li-shen-qi-qu-numpy-xi-lie-fen-ge-split-de-yi-shu.md)
48 | * [【Google Colab Python系列】 資料處理神器 Pandas 起手式](zi-liao-chu-li-shen-qi-qu/google-colab-python-xi-lie-zi-liao-chu-li-shen-qi-pandas-qi-shou-shi.md)
49 | * [【Google Colab Python系列】 資料處理神器 Pandas 合併之術(join、concat)](zi-liao-chu-li-shen-qi-qu/google-colab-python-xi-lie-zi-liao-chu-li-shen-qi-pandas-he-bing-zhi-shu-joinconcat.md)
50 | * [【Google Colab Python系列】 資料處理神器 Pandas 分組與重朔之術(Grouping/Reshaping)](zi-liao-chu-li-shen-qi-qu/google-colab-python-xi-lie-zi-liao-chu-li-shen-qi-pandas-fen-zu-yu-zhong-shuo-zhi-shu-groupingreshap.md)
51 |
52 | ### 報表視覺化工具集
53 |
54 | * [【Google Colab Python系列】 視覺化資料Matplotlib 新手村](bao-biao-shi-jue-hua-gong-ju-ji/google-colab-python-xi-lie-shi-jue-hua-zi-liao-matplotlib-xin-shou-cun.md)
55 | * [【Google Colab Python系列】 視覺化資料Matplotlib 如何繪製出中文?](bao-biao-shi-jue-hua-gong-ju-ji/google-colab-python-xi-lie-shi-jue-hua-zi-liao-matplotlib-ru-he-hui-zhi-chu-zhong-wen.md)
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/SUMMARY.md:
--------------------------------------------------------------------------------
1 | # Table of contents
2 |
3 | * [📌 基本介紹](README.md)
4 | * [基礎篇](ji-chu-pian/README.md)
5 | * [【Google Colab Python系列】Colab平台與Python如何擦出火花?](ji-chu-pian/google-colab-xi-lie-colab-ping-tai-yu-python-ru-he-ca-chu-huo-hua.md)
6 | * [Hugging Face篇](hugging-face-pian/README.md)
7 | * [【Hugging Face】Ep.1 平凡人也能玩的起的AI平台](hugging-face-pian/hugging-faceep.1-ping-fan-ren-ye-neng-wan-de-qi-de-ai-ping-tai.md)
8 | * [【Hugging Face】Ep.2 初探新手村, 打造專屬的翻譯官](hugging-face-pian/hugging-faceep.2-chu-tan-xin-shou-cun-da-zao-zhuan-shu-de-fan-yi-guan.md)
9 | * [【Hugging Face】Ep.3 前往Datasets掏金趣](hugging-face-pian/hugging-faceep.3-qian-wang-datasets-tao-jin-qu.md)
10 | * [【Hugging Face】Ep.4 文字與模型的轉換器Tokenizer](hugging-face-pian/hugging-faceep.4-wen-zi-yu-mo-xing-de-zhuan-huan-qi-tokenizer.md)
11 | * [【Hugging Face】Ep.5 文字世界中的超能力語言英雄(Named Entity Recognition)](hugging-face-pian/hugging-faceep.5-wen-zi-shi-jie-zhong-de-chao-neng-li-yu-yan-ying-xiong-named-entity-recognition.md)
12 | * [【Hugging Face】Ep.6 解決問題的專業級破關知識家(Question Answering)](hugging-face-pian/hugging-faceep.6-jie-jue-wen-ti-de-zhuan-ye-ji-po-guan-zhi-shi-jia-question-answering.md)
13 | * [【Hugging Face】Ep.7 以文生圖的魔幻製圖師(Text To Image)](hugging-face-pian/hugging-faceep.7-yi-wen-sheng-tu-de-mo-huan-zhi-tu-shi-text-to-image.md)
14 | * [【Hugging Face】Ep.8 專業的標準化推理家(Inference API)](hugging-face-pian/hugging-faceep.8-zhuan-ye-de-biao-zhun-hua-tui-li-jia-inference-api.md)
15 | * [ASR語音辨識篇 - OpenAI Whisper](asr-yu-yin-bian-shi-pian-openai-whisper/README.md)
16 | * [【語音辨識 - Whisper】 初探Whisper: 來對一段Youtube影片進行辨識吧!](asr-yu-yin-bian-shi-pian-openai-whisper/yu-yin-bian-shi-whisper-chu-tan-whisper-lai-dui-yi-duan-youtube-ying-pian-jin-hang-bian-shi-ba.md)
17 | * [【語音辨識 - Whisper】OpenAI Whisper: 語音辨識產生字幕檔](asr-yu-yin-bian-shi-pian-openai-whisper/yu-yin-bian-shi-whisperopenai-whisper-yu-yin-bian-shi-chan-sheng-zi-mu-dang.md)
18 | * [自然語言處理 - NLP(Natural Language Processing)](zi-ran-yu-yan-chu-li-nlpnatural-language-processing/README.md)
19 | * [【自然語言處理 - 概念篇】最基礎的Bag-of-Words模型是什麼呢?](zi-ran-yu-yan-chu-li-nlpnatural-language-processing/zi-ran-yu-yan-chu-li-gai-nian-pian-zui-ji-chu-de-bagofwords-mo-xing-shi-shi-mo-ni.md)
20 | * [【自然語言處理 - 概念篇】 來認識一下詞向量(Word Embedding or Word Vector)吧](zi-ran-yu-yan-chu-li-nlpnatural-language-processing/zi-ran-yu-yan-chu-li-gai-nian-pian-lai-ren-shi-yi-xia-ci-xiang-liang-word-embedding-or-word-vector-b.md)
21 | * [【自然語言處理 - 概念篇】 探索TF-IDF, 關於詞的統計與索引隱含著什麼奧秘呢?](zi-ran-yu-yan-chu-li-nlpnatural-language-processing/zi-ran-yu-yan-chu-li-gai-nian-pian-tan-suo-tfidf-guan-yu-ci-de-tong-ji-yu-suo-yin-yin-han-zhu-shi-mo.md)
22 | * [【自然語言處理 - 概念篇】 詞性標注POS在NLP的世界扮演什麼樣的角色呢?](zi-ran-yu-yan-chu-li-nlpnatural-language-processing/zi-ran-yu-yan-chu-li-gai-nian-pian-ci-xing-biao-zhu-pos-zai-nlp-de-shi-jie-ban-yan-shi-mo-yang-de-ji.md)
23 | * [【自然語言處理 - 概念篇】 拆解語句組成的規則, 何謂依存句法分析(Dependency Parsing)?](zi-ran-yu-yan-chu-li-nlpnatural-language-processing/zi-ran-yu-yan-chu-li-gai-nian-pian-chai-jie-yu-ju-zu-cheng-de-gui-ze-he-wei-yi-cun-ju-fa-fen-xi-depe.md)
24 | * [【自然語言處理 - spaCy】初探強大的工具庫spaCy, 讓機器讀懂我們的語言](zi-ran-yu-yan-chu-li-nlpnatural-language-processing/zi-ran-yu-yan-chu-li-spacy-chu-tan-qiang-da-de-gong-ju-ku-spacy-rang-ji-qi-du-dong-wo-men-de-yu-yan.md)
25 | * [【自然語言處理 - spaCy】善用ChatGPT幫我們訓練出自訂的Name Entity Recognition實體](zi-ran-yu-yan-chu-li-nlpnatural-language-processing/zi-ran-yu-yan-chu-li-spacy-shan-yong-chatgpt-bang-wo-men-xun-lian-chu-zi-ding-de-name-entity-recogni.md)
26 | * [爬蟲實戰篇](goodinfo-pa-chong-shi-zhan-pian/README.md)
27 | * [【Google Colab Python系列】以Goodinfo!為例,統計一段時間內的最高、最低殖利率](goodinfo-pa-chong-shi-zhan-pian/google-colab-xi-lie-yi-goodinfo-wei-li-tong-ji-yi-duan-shi-jian-nei-de-zui-gao-zui-di-zhi-li-shuai.md)
28 | * [📈【Google Colab Python系列】以Goodinfo為例,將資料視覺化吧!](goodinfo-pa-chong-shi-zhan-pian/google-colab-python-xi-lie-yi-goodinfo-wei-li-jiang-zi-liao-shi-jue-hua-ba.md)
29 | * [【資料處理神器區 - Pytube系列】 蒐集情報讓數據會說話](goodinfo-pa-chong-shi-zhan-pian/zi-liao-chu-li-shen-qi-qu-pytube-xi-lie-sou-ji-qing-bao-rang-shu-ju-hui-shuo-hua.md)
30 | * [資料處理神器區](zi-liao-chu-li-shen-qi-qu/README.md)
31 | * [【資料處理神器區 - NumPy系列】 奠定資料科學的基礎模組(安裝與認識維度)](zi-liao-chu-li-shen-qi-qu/zi-liao-chu-li-shen-qi-qu-numpy-xi-lie-dian-ding-zi-liao-ke-xue-de-ji-chu-mo-zu-an-zhuang-yu-ren-shi.md)
32 | * [【資料處理神器區 - NumPy系列】 分割(Split)的藝術](zi-liao-chu-li-shen-qi-qu/zi-liao-chu-li-shen-qi-qu-numpy-xi-lie-fen-ge-split-de-yi-shu.md)
33 | * [【Google Colab Python系列】 資料處理神器 Pandas 起手式](zi-liao-chu-li-shen-qi-qu/google-colab-python-xi-lie-zi-liao-chu-li-shen-qi-pandas-qi-shou-shi.md)
34 | * [【Google Colab Python系列】 資料處理神器 Pandas 合併之術(join、concat)](zi-liao-chu-li-shen-qi-qu/google-colab-python-xi-lie-zi-liao-chu-li-shen-qi-pandas-he-bing-zhi-shu-joinconcat.md)
35 | * [【Google Colab Python系列】 資料處理神器 Pandas 分組與重朔之術(Grouping/Reshaping)](zi-liao-chu-li-shen-qi-qu/google-colab-python-xi-lie-zi-liao-chu-li-shen-qi-pandas-fen-zu-yu-zhong-shuo-zhi-shu-groupingreshap.md)
36 | * [報表視覺化工具集](bao-biao-shi-jue-hua-gong-ju-ji/README.md)
37 | * [【Google Colab Python系列】 視覺化資料Matplotlib 新手村](bao-biao-shi-jue-hua-gong-ju-ji/google-colab-python-xi-lie-shi-jue-hua-zi-liao-matplotlib-xin-shou-cun.md)
38 | * [🖋 【Google Colab Python系列】 視覺化資料Matplotlib 如何繪製出中文?](bao-biao-shi-jue-hua-gong-ju-ji/google-colab-python-xi-lie-shi-jue-hua-zi-liao-matplotlib-ru-he-hui-zhi-chu-zhong-wen.md)
39 | * [交易策略回測篇](jiao-yi-ce-lve-hui-ce-pian/README.md)
40 | * [【Google Colab Python系列】 技術指標回測 - KD策略](jiao-yi-ce-lve-hui-ce-pian/google-colab-python-xi-lie-ji-shu-zhi-biao-hui-ce-kd-ce-lve.md)
41 |
--------------------------------------------------------------------------------
/asr-yu-yin-bian-shi-pian-openai-whisper/README.md:
--------------------------------------------------------------------------------
1 | # 5 5. ASR語音辨識篇 - OpenAI Whisper
2 |
3 |
--------------------------------------------------------------------------------
/asr-yu-yin-bian-shi-pian-openai-whisper/yu-yin-bian-shi-whisper-chu-tan-whisper-lai-dui-yi-duan-youtube-ying-pian-jin-hang-bian-shi-ba.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: 初探Whisper
3 | ---
4 |
5 | # 【語音辨識 - Whisper】 初探Whisper: 來對一段Youtube影片進行辨識吧!
6 |
7 | 這個篇章主要是讓我們能夠熟悉Whisper的安裝與使用方式,並簡單的對Youtube影片進行線上翻譯的工作,主軸在於了解一下整個Whisper使用方式到底是簡單還是複雜,就讓我們一起來玩玩看吧! 在這之前我們還是說一下Whisper它是什麼樣的一個工具,能夠做什麼?
8 |
9 |
10 |
11 | ## Whisper簡介
12 |
13 | Whisper 是OpenAI 提供的一種最先進自動語音辨識( Automatic Speech Recognition,ASR )模型,用來執行語音辨識與翻譯的功能。
14 |
15 | 能夠將各種語言的語音轉錄成文字,甚至可以處理較差的音頻品質或過多的背景雜訊。
16 |
17 | P.S 聽起來就很威,別著急,讓我們實際試試看才知道...
18 |
19 |
20 |
21 | ## 觀看 Whisper 官方文件
22 |
23 | 使用Whisper過程中難免會遇到各式各樣的問題,最簡單的方式就是查看原廠的官方文件囉!
24 |
25 | 這是一個opensource的專案,因此放置於Github: [https://github.com/openai/whisper](https://github.com/openai/whisper)
26 |
27 | 圖片來源
28 |
29 | ### 安裝Whisper
30 |
31 | 這邊我們會直接使用Google Colab Python環境來進行安裝。
32 |
33 | ```python
34 | # 安裝whisper語音辨識工具
35 | !pip install -U openai-whisper
36 |
37 | # 安裝youtube套件,這工具主要幫我們下載youtube影片進行後續的語音辨識demo,算是一個語音前處理工具
38 | !pip install pytube
39 | ```
40 |
41 | ### 在這之前記得切換成GPU模式
42 |
43 | 語音辨識在解碼的時候採用GPU模式一定比CPU模式來的快,而Google Colab也提供一些GPU資源給我們,記得進行切換,否則後面的作業會等待的非常久...
44 |
45 |
46 |
47 | 首先我們在右上角點選資源的圖示,並且點擊下方的「變更執行階段類型」。
48 |
49 | 圖片來源
50 |
51 | 接著我們就切換成「GPU」吧
52 |
53 | 圖片來源
54 |
55 | ### 試著找一段Youtube影音,嘗試在Google Colab播放測試
56 |
57 | 這裡我們找了一段長約「3分30秒」的影片,https://www.youtube.com/watch?v=EYhlGV9AZHI
58 |
59 | 我們接著就來Google Colab播放試試看吧
60 |
61 | ```python
62 | from IPython.display import YouTubeVideo
63 |
64 | YouTubeVideo('EYhlGV9AZHI')
65 | ```
66 |
67 | ### 接著我們使用pytube來抓取影片資訊
68 |
69 | 這邊我們就取得`title`屬性並印出試試看
70 |
71 | ```python
72 | from pytube import YouTube
73 |
74 | url = 'https://www.youtube.com/watch?v=EYhlGV9AZHI'
75 |
76 | yt = YouTube(url)
77 |
78 | # 抓取標題試試看
79 | yt.title
80 | ```
81 |
82 | ### 下載純音檔
83 |
84 | ```python
85 | streams = yt.streams
86 | audio = streams.get_audio_only()
87 | obj = audio.download(filename='test.mp4')
88 | ```
89 |
90 | ### 載入辨識模型
91 |
92 | 要載入什麼樣的模型呢?可以看看官方網站的「[Available models and languages](https://github.com/openai/whisper#available-models-and-languages)」
93 |
94 | 圖片來源
95 |
96 | 這邊我們就選擇大型的模型\`large\`試試看最佳可以辨識的如何?
97 |
98 | ```python
99 | import whisper
100 |
101 | model = whisper.load_model('large')
102 | ```
103 |
104 | ### 對下載的音檔進行辨識
105 |
106 | 這邊我們就直接載入剛下載完成的`test.mp4`, 執行時間會有一些等待,這邊環境下大約等待1分鐘左右。
107 |
108 | ```python
109 | result = model.transcribe('test.mp4')
110 |
111 | result
112 | ```
113 |
114 | 我們可以看到回傳結果不只有整段文字,也將每一段的時間邊界切割出來,並精準的辨識出文字,看到這邊聰明的我們應該聯想到什麼了吧! 沒錯,就是字幕檔,很多影片早期上字幕檔是非常繁雜的,透過whisper的精準辨識讓我們可以加快效率,來看看結果吧!
115 |
116 | 圖片來源
117 |
118 | ### 結語
119 |
120 | 使用了Whisper之後,突然感覺到時代的演變真的超快,早期的kaldi專案也曾經玩過,但複雜的腳本與架構令人退卻,現如今的Whisper除了文檔完備豐富之外,使用起來也非常的簡易,而且結果也非常的人性化,下一個篇章我們就要來玩玩它的產生字幕檔、如何調整參數,讓我們也能夠簡易的使用門檻高的語音辨識吧。
121 |
122 |
123 |
124 | 今天的範例都在這裡「[📦 ](../jupyter-examples/goodinfo\_yield.ipynb)[**whisper\_0\_yt.ipynb**](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/whisper\_0\_yt.ipynb)」歡迎自行取用。
125 |
126 | 如何使用請參閱「[【Google Colab Python系列】Colab平台與Python如何擦出火花?](https://www.potatomedia.co/s/aNLHZe3S)」。
127 |
128 |
129 |
130 | \------------------------------------------------------------------------------------------------
131 |
132 | 喜歡撰寫文章的你,不妨來了解一下:
133 |
134 | [Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 - 為什麼要加入?](https://www.potatomedia.co/s/2PmFxsq)
135 |
136 | 歡迎加入一起練習寫作,賺取知識,累積財富!
137 |
138 |
139 |
140 | #### 更多關於【語音辨識 - Whisper 系列】…
141 |
142 | * [【語音辨識 - Whisper】 初探Whisper: 來對一段Youtube影片進行辨識吧!](https://vocus.cc/article/644526c8fd89780001ffdd9f)
143 | * [【語音辨識 - Whisper】OpenAI Whisper: 語音辨識產生字幕檔](https://vocus.cc/article/64468d92fd8978000115c6e1)
144 | * [【語音辨識 - Whisper】 雙聲道音訊處理與辨識](https://vocus.cc/article/64733d7efd89780001781326)
145 | * [【語音辨識 - Whisper】 準確與否需要有一把 📏尺來衡量](https://vocus.cc/article/64b3a209fd89780001481152)
146 |
147 |
148 |
149 |
--------------------------------------------------------------------------------
/asr-yu-yin-bian-shi-pian-openai-whisper/yu-yin-bian-shi-whisperopenai-whisper-yu-yin-bian-shi-chan-sheng-zi-mu-dang.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: 還在煩惱字幕問題嗎? 無字幕的影片有救了!
3 | ---
4 |
5 | # 【語音辨識 - Whisper】OpenAI Whisper: 語音辨識產生字幕檔
6 |
7 | 上一篇「[【Google Colab Python系列】 初探Whisper: 來對一段Youtube影片進行辨識吧!](https://vocus.cc/article/644526c8fd89780001ffdd9f)」我們介紹了Whisper的基本用法及功能,這次我們除了語音辨識之外,還要下載辨識後的字幕檔,我想這對於我們常常看到沒有字幕的影片,若想要進行辨識與翻譯時非常有幫助。
8 |
9 | 圖片來源
10 |
11 | ### 這次的篇章主要做些什麼?
12 |
13 | * 前置作業。
14 | * 上傳影音檔。
15 | * 自動語音辨識文字。
16 | * 下載字幕檔(.srt)。
17 |
18 | ### 前置作業
19 |
20 | #### 安裝相關套件
21 |
22 | * [x] openai-whisper
23 |
24 | #### 檢查是否開啟GPU
25 |
26 | ```python
27 | # 安裝whisper語音辨識工具
28 | !pip install -U openai-whisper
29 |
30 | # 檢查是否開啟GPU
31 | !nvidia-smi
32 | ```
33 |
34 | ### 上傳影音檔
35 |
36 | 在Google Colab環境中如果要上傳音檔是沒問題的,貼心的Colab提供了API讓我們可以設計上傳音檔的功能,那就讓我們來實際玩玩吧。
37 |
38 | P.S 上傳的時間會比下載的時間久很多,可以喝杯咖啡後再回來。
39 |
40 | ```python
41 | from google.colab import files
42 |
43 | uploaded = files.upload()
44 |
45 |
46 | todo = []
47 | for fn in uploaded.keys():
48 | print('{name} with length {length} bytes'.format(name=fn, length=len(uploaded[fn])))
49 | todo.append(fn)
50 |
51 | todo
52 | ```
53 |
54 | ### 載入辨識模型
55 |
56 | 要載入什麼樣的模型呢?可以看看官方網站的「[Available models and languages](https://github.com/openai/whisper#available-models-and-languages)」
57 |
58 | ```python
59 | import whisper
60 |
61 | model = whisper.load_model('large')
62 | ```
63 |
64 | ### 對上傳檔案進行辨識
65 |
66 | ```python
67 | import os
68 | from whisper.utils import get_writer
69 |
70 | # 輸出格式為srt
71 | # 輸出路徑為目前位置
72 | w = get_writer('srt', '.')
73 |
74 | for f in todo:
75 | name = os.path.basename(f)
76 |
77 | result = model.transcribe(name)
78 |
79 | srt_file_name = '{name}.srt'.format(name=name)
80 | w(result, srt_file_name)
81 |
82 | files.download(srt_file_name)
83 |
84 | ```
85 |
86 |
87 |
88 | ### 結語
89 |
90 | 有了Whisper之後,我們就能夠本地開發一隻Python小程式來對影片進行辨識自動產生字幕了,如此一來就不用每次都上傳到雲端才開始進行,甚至人工產生字幕,基本上Whisper的辨識就目前使用上來說已經算是不錯了,句子的切點都還算精確,標點符號也都幫我們自動標上,真是貼心啊。
91 |
92 |
93 |
94 | 今天的範例都在這裡「[📦 ](../jupyter-examples/goodinfo\_yield.ipynb)[**whisper\_1\_srt.ipynb**](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/whisper\_1\_srt.ipynb)」歡迎自行取用。
95 |
96 | 如何使用請參閱「[【Google Colab Python系列】Colab平台與Python如何擦出火花?](https://www.potatomedia.co/s/aNLHZe3S)」。
97 |
98 |
99 |
100 | \------------------------------------------------------------------------------------------------
101 |
102 | 喜歡撰寫文章的你,不妨來了解一下:
103 |
104 | [Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 - 為什麼要加入?](https://www.potatomedia.co/s/2PmFxsq)
105 |
106 | 歡迎加入一起練習寫作,賺取知識,累積財富!
107 |
108 |
109 |
110 | #### 更多關於【語音辨識 - Whisper 系列】…
111 |
112 | * [【語音辨識 - Whisper】 初探Whisper: 來對一段Youtube影片進行辨識吧!](https://vocus.cc/article/644526c8fd89780001ffdd9f)
113 | * [【語音辨識 - Whisper】OpenAI Whisper: 語音辨識產生字幕檔](https://vocus.cc/article/64468d92fd8978000115c6e1)
114 | * [【語音辨識 - Whisper】 雙聲道音訊處理與辨識](https://vocus.cc/article/64733d7efd89780001781326)
115 | * [【語音辨識 - Whisper】 準確與否需要有一把 📏尺來衡量](https://vocus.cc/article/64b3a209fd89780001481152)
116 |
--------------------------------------------------------------------------------
/bao-biao-shi-jue-hua-gong-ju-ji/README.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: 這邊主要記載Python語言的報表視覺化套件的一些技巧與使用方式
3 | ---
4 |
5 | # 3 報表視覺化工具集
6 |
7 |
--------------------------------------------------------------------------------
/bao-biao-shi-jue-hua-gong-ju-ji/google-colab-python-xi-lie-shi-jue-hua-zi-liao-matplotlib-ru-he-hui-zhi-chu-zhong-wen.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: 中文字型小技巧大受用
3 | ---
4 |
5 | # 🖋 【Google Colab Python系列】 視覺化資料Matplotlib 如何繪製出中文?
6 |
7 | 圖片來源
8 |
9 | 我們前篇有介紹到如何讓資料視覺化「[📈【Google Colab Python系列】以Goodinfo為例,將資料視覺化吧!](https://www.potatomedia.co/s/zX7EIT7)」,過程中雖然我們的報表呈現皆使用英文字眼,但假若欲繪製中文進行呈現時就會發生以下狀況:
10 |
11 | ```python
12 | import matplotlib.pyplot as plt
13 |
14 | data = [lYield, cYield, hYield]
15 |
16 | # 這裡繪製出中文
17 | labels = ['中文']
18 |
19 | plt.boxplot(data, labels=labels)
20 | plt.show()
21 | ```
22 |
23 | ```
24 | /usr/local/lib/python3.8/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 20013 missing from current font.
25 | font.set_text(s, 0.0, flags=flags)
26 | /usr/local/lib/python3.8/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 25991 missing from current font.
27 | font.set_text(s, 0.0, flags=flags)
28 | /usr/local/lib/python3.8/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 20013 missing from current font.
29 | font.set_text(s, 0, flags=flags)
30 | /usr/local/lib/python3.8/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 25991 missing from current font.
31 | font.set_text(s, 0, flags=flags)
32 | ```
33 |
34 | 由上述的訊息可以推估可能是某些字型缺失,因此無法正常顯現,這時候我們就需要下載字型並補足,以下會逐步說明步驟。
35 |
36 |
37 |
38 | ### 下載字型並加掛
39 |
40 | 字型的下載可以到「[思源宋體](https://github.com/adobe-fonts/source-han-serif)」抓取唷!裡面涵蓋了中、日、韓的字型,那這邊的範例我們就隨便選一個中文字型來進行示範。
41 |
42 | 這邊我們會下載繁體中文的ttf檔,並將該檔掛入matplotlib的字型資料庫中,以便進行中文的繪製。
43 |
44 | ```python
45 | import matplotlib as mpl
46 | import matplotlib.font_manager as fm
47 | import matplotlib.pyplot as plt
48 |
49 | # 下載繁體中文字型
50 | !wget -O SourceHanSerifTW-VF.ttf https://github.com/adobe-fonts/source-han-serif/raw/release/Variable/TTF/Subset/SourceHanSerifTW-VF.ttf
51 |
52 | # 加入字型檔
53 | fm.fontManager.addfont('SourceHanSerifTW-VF.ttf')
54 |
55 | # 設定字型
56 | #
57 | mpl.rc('font', family='Source Han Serif TW VF')
58 | ```
59 |
60 | 至於要設定哪種family請參閱「[official font readme file](https://github.com/adobe-fonts/source-han-serif/raw/release/SourceHanSerifReadMe.pdf).」。
61 |
62 |
63 |
64 | #### 繪製中文標籤
65 |
66 | ```python
67 | data = [0.2, 0.4, 0.6]
68 |
69 | # 這裡繪製出中文
70 | labels = ['中文']
71 |
72 | plt.boxplot(data, labels=labels)
73 | plt.show()
74 | ```
75 |
76 |
77 |
78 |
79 |
80 | ### 結語
81 |
82 | 這次就能夠成功繪製並且沒有錯誤訊息囉! 其實在初學Python的時候最常遇到的就是中文亂碼的問體,沒想到套件也是稍微複雜,不過套件的問題與Python中文問題又不太相似,僅是缺少一些字型而已,補足即可,只是Matplotlib的官方文件真的蠻詳細的需要好好的研讀才能解決遇到的問題,過程中也學習到別人的設計模式,可以當成下一次的功能設計養分。
83 |
84 |
85 |
86 | 字型問題真的非常惱人啊,有otf、ttf、woff2...等字型格式,以及各種標準方法(family),關於字型更多的知識請參考「[https://zh.wikipedia.org/zh-tw/%E5%AD%97%E5%9E%8B](https://zh.wikipedia.org/zh-tw/%E5%AD%97%E5%9E%8B)」
87 |
88 |
89 |
90 | 今天的範例都在這裡「[📦 ](../jupyter-examples/goodinfo\_yield.ipynb)[**matplotlib\_chinese\_font.ipynb**](../jupyter-examples/matplotlib\_chinese\_font.ipynb)」歡迎自行取用。
91 |
92 | 如何使用請參閱「[【Google Colab Python系列】Colab平台與Python如何擦出火花?](https://www.potatomedia.co/s/aNLHZe3S)」。
93 |
94 | ### 資源參考
95 |
96 | * [https://ithelp.ithome.com.tw/articles/10202385](https://ithelp.ithome.com.tw/articles/10202385)
97 | * [https://sujingjhong.com/posts/how-to-show-matplotlib-visual-packages-in-chinese-on-colab/](https://sujingjhong.com/posts/how-to-show-matplotlib-visual-packages-in-chinese-on-colab/)
98 |
--------------------------------------------------------------------------------
/bao-biao-shi-jue-hua-gong-ju-ji/google-colab-python-xi-lie-shi-jue-hua-zi-liao-matplotlib-xin-shou-cun.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: 視覺化讓數據決策更加精準...
3 | ---
4 |
5 | # 【Google Colab Python系列】 視覺化資料Matplotlib 新手村
6 |
7 |
8 |
9 | 圖片來源
10 |
11 | 相信視覺化報表對於資料科學來說是非常重要的一環, 透過圖表來呈現資料的樣態, 過程中分析模型訓練時, 觀察訓練的收斂趨勢是否如我們預期, 視覺化加速我們的判斷時間, 節省找問題的成本。
12 |
13 | 數據就如同鐵證一般, 當我們常常苦於為什麼訓練出來的A模型這麼差勁,但B模型卻非常好, 這中間發生了什麼事情, 通常沒有一個數據的話, 我們只能憑感覺, 但感覺這東西很微妙也很主觀, 常常因為我們當時看到的視角太狹隘而得出錯誤的結論, 因此最好的方式就是讓「數據」來說明一切, 呈現「數據」最好的幫手就是「視覺化圖表」了。
14 |
15 | 而在Python的世界裡, 常拿來被使用的視覺化套件是「[Matplotlib](https://matplotlib.org/)」, 也是這個篇章即將介紹的一個利器, 功能非常豐富, 常見的線圖、散點圖、直方圖、長條圖、餅圖…都難不倒它, 難的是我們會不會使用它, 因此非常值得我們好好的學習一番。
16 |
17 |
18 |
19 | ### 導覽
20 |
21 | 我們可以看到官網的範例圖表非常的豐富, 涵蓋各式各樣的統計分析圖。
22 |
23 | [https://matplotlib.org/stable/gallery/index.html](https://matplotlib.org/stable/gallery/index.html)
24 |
25 | 圖片來源
26 |
27 |
28 |
29 | 圖片來源
30 |
31 | 在龐大的範例池裡挖呀挖呀挖, 一篇接著一篇有點挖不完的感覺…, 但不要害怕, 我們將一步步的進行教學。
32 |
33 | 當然官方網站也提供了使用者指南, 如果需要更詳細的資訊也歡迎直接上官網:
34 |
35 |
36 |
37 | [https://matplotlib.org/stable/users/index.html](https://matplotlib.org/stable/users/index.html)
38 |
39 | 圖片來源
40 |
41 | ### 知己知彼,百戰百勝: 認識架構
42 |
43 | * Figure(圖片):整個圖表的最外層容器。一個Figure對應於一張圖片,可以包含多個子圖(Axes)。
44 | * Axes(座標軸):即子圖,是在Figure中的一個繪圖區域。每個Axes都有自己的座標系,可以設置座標軸的範圍、標籤、刻度等。
45 | * Axis(坐標軸):Axes上的x軸和y軸,用於顯示數據的範圍和刻度。
46 | * Artist(圖形元素):包括線條、文本、圖片等用於繪製圖表的元素。
47 |
48 |
49 |
50 |
51 |
52 | ### 啟航: 快速安裝
53 |
54 | 以下是使用Python pip套件管理程式進行安裝, 如果是使用conda的朋友可以這樣安裝: `conda install -c conda-forge matplotlib`
55 |
56 | ```python
57 | pip install matplotlib
58 | ```
59 |
60 | ### 練功:一步一腳印
61 |
62 | 簡單的五個步驟,讓我們親手繪製出長條圖。
63 |
64 | #### 引入模組
65 |
66 | ```python
67 | import matplotlib.pyplot as plt
68 | ```
69 |
70 | #### 創建Figure和Axes
71 |
72 | plt.subplots()函數會返回一個包含Figure和Axes對象的元組,可以通過fig設置圖片屬性,通過ax繪製圖表元素。
73 |
74 | ```python
75 | # 這邊預設給予一個子圖
76 | fig, ax = plt.subplots()
77 |
78 | ## 假設想要多張子圖時可以這麼做..., 創建一個2x2的子圖佈局,總共有4個子圖
79 | # fig, ax = plt.subplots(2, 2)
80 | ## 第一張
81 | # ax[0, 0].plot([1, 2, 3, 4], [1, 4, 2, 3])
82 | ## 第二張
83 | # ax[0, 1].scatter([1, 2, 3, 4], [1, 4, 2, 3], color='r')
84 | ```
85 |
86 | #### 繪製圖表
87 |
88 | ```python
89 | fruits = ['apple', 'blueberry', 'cherry', 'orange']
90 | counts = [40, 100, 30, 55]
91 | bar_labels = ['red', 'blue', '_red', 'orange']
92 | bar_colors = ['tab:red', 'tab:blue', 'tab:red', 'tab:orange']
93 | ax.bar(fruits, counts, label=bar_labels, color=bar_colors)
94 | ```
95 |
96 | #### 添加標籤、標題、圖例等
97 |
98 | ```python
99 | ax.set_ylabel('fruit supply')
100 | ax.set_title('Fruit supply by kind and color')
101 | ax.legend(title='Fruit color')
102 | ```
103 |
104 | #### 顯示圖表
105 |
106 | 儲存並呈現
107 |
108 | ```python
109 | from IPython.display import Image
110 |
111 | fig.savefig('tmp.png')
112 |
113 | Image('tmp.png')
114 | ```
115 |
116 |
117 |
118 | 今天的範例都在這裡「[📦 matplotlib/matplotlib\_quickstart.ipynb](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/matplotlib/matplotlib\_quickstart.ipynb)」歡迎自行取用。
119 |
120 | 如何使用請參閱「[【Google Colab Python系列】Colab平台與Python如何擦出火花?](https://www.potatomedia.co/s/aNLHZe3S)」。
121 |
122 |
123 |
124 | ### 結語
125 |
126 | 這次透過簡單的幾個步驟就可以輕鬆使用[Matplotlib](https://matplotlib.org/)來繪製圖表,其實基本架構弄懂之後,照著SOP就能購繪製出各種不同的圖表,最難的就在於如何將金礦中的「資料」轉化為可繪製的「數據」,各種圖表各有不同的資料結構,難就難在怎麼做好使用者端與套件端的資料介接者,這也是價值之所在,亦是軟體工程師重要的一環。
127 |
128 | AI時代的來臨,總會需要數據來導正AI,而輔助我們決策的神兵利器就是「視覺化圖表」,因此身處浪潮的我們不得不好好學習這些技能才不至於被時代給淘汰,其實技術一點都不難,只要我們能夠理解設計理念及原理,那麼相信只要隨著時間的遞移就能夠熟能生巧,讓AI成為我們的最佳夥伴。
129 |
130 |
131 |
132 | 喜歡撰寫文章的你,不妨來了解一下:
133 |
134 | [Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入?](https://www.potatomedia.co/s/2PmFxsq)
135 |
136 | 歡迎加入一起練習寫作,賺取知識!
137 |
--------------------------------------------------------------------------------
/goodinfo-pa-chong-shi-zhan-pian/README.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: 各式爬蟲實作篇
3 | ---
4 |
5 | # 爬蟲實戰篇
6 |
7 |
--------------------------------------------------------------------------------
/goodinfo-pa-chong-shi-zhan-pian/google-colab-python-xi-lie-yi-goodinfo-wei-li-jiang-zi-liao-shi-jue-hua-ba.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: 以報表展示資料視覺化,讓分析更加精準...
3 | ---
4 |
5 | # 📈【Google Colab Python系列】以Goodinfo為例,將資料視覺化吧!
6 |
7 | 圖片來源
8 |
9 | 上一篇我們有介紹如何爬取Goodinfo的資訊並統計分析,還沒閱讀的朋友建議先行閱讀,再進入此篇章會比較容易上手唷,傳送門如下:
10 |
11 | [🚪【Google Colab系列】以Goodinfo!為例,統計一段時間內的最高、最低殖利率](https://www.potatomedia.co/s/ah0EuUhd)
12 |
13 | ### 為什麼要做資料視覺化?
14 |
15 | 相信圖文甚至影音箱對於文字來說更為吸引我們進行知識的汲取,一張好的圖表讓我們一眼就能看出資料的趨勢、分布,提升整體效率,因此當資料、統計都準備好之後,下一步就是以圖表來進行分析並決策。
16 |
17 | 那這次的主題會使用到的套件為「[Matplotlib](https://matplotlib.org/)提供了靜態、動態與互動式圖表,是python語言中資料視覺化的強大利器。
18 |
19 | ### 我們應該選用哪一種圖表呢?
20 |
21 | 不同的情境下選用不同的圖表,就像戰場上根據戰況選用不同的武器甚至策略,因此並沒有一個標準答案,不論是時序、量化...都有其擅長與短處,看看這篇今周刊的文章就有提到「[不同圖表不同使用時機,我的報表適合什麼圖形?你用對了嗎?](https://www.businesstoday.com.tw/article/category/80407/post/201903260012/)」。
22 |
23 | 而我們的情境是要分析目前股價屬於偏貴還是便宜,因此會有最高、最低以及目前錨定位置,那以這樣的情境我們可以選用了箱型圖來做表述:
24 |
25 | 圖片來源
26 |
27 | 因為我們並沒有時序上的需求,因此也不適用於折線圖、長條圖這種常見的圖表,反而是箱型圖可以表述目前的價格偏高還是低。
28 |
29 | ### 開始實作的旅程
30 |
31 | 上一篇」我們已經統計出最高/最低殖利率了,這次我們進行延伸,以最新成交價搭配圖表來評估目前股價的位階,因此會抓取最新成交價、計算目前殖利率、繪製圖表這幾個步驟,以下將逐步說明。
32 |
33 | #### 抓取最新成交價
34 |
35 | 我們一樣使用dom分析的工具來抓取指定表格,如何抓? 請參閱「[🚪【Google Colab系列】以Goodinfo!為例,統計一段時間內的最高、最低殖利率](https://www.potatomedia.co/s/ah0EuUhd)」,以下是主要抓取的部分:
36 |
37 | ```python
38 | # 這一段是「成交價」區塊
39 | price_data = bs.find(class_ = 'b1 p4_2 r10')
40 | ```
41 |
42 | 接著我們試著取得成交價,並進行轉型為float以利後續計算。
43 |
44 | ```python
45 | import pandas
46 |
47 | dfs = pandas.read_html(price_data.prettify())
48 |
49 | node = dfs[0]
50 |
51 | # 僅留下第一列
52 | node.columns = node.columns.get_level_values(1)
53 |
54 | # 印出Columns輔助以下抓取重要資訊
55 | # node.columns
56 |
57 | # 取得第一列的成交價
58 | x = node['成交價'].iloc[0]
59 | price = float(x)
60 | ```
61 |
62 | #### 計算目前殖利率
63 |
64 | 請參閱「[🚪【Google Colab系列】以Goodinfo!為例,統計一段時間內的最高、最低殖利率](https://www.potatomedia.co/s/ah0EuUhd)」,並搭配上述最新成交價的資訊進行公式的替換即可。
65 |
66 | #### 繪製圖表
67 |
68 | 重頭戲來了,具備資料之後,下一步就是將這些資料繪製成簡單易懂的圖表,以利進行分析,而這邊會使用到的是Python語言中較為知名的套件「[matplotlib](https://matplotlib.org/)」,提供種類豐富的圖表類型,而這次我們採用範例的是箱型圖,而箱型圖繪製的API如下:
69 |
70 | ```python
71 | import matplotlib.pyplot as plt
72 |
73 | plt.boxplot(<...資料集>, )
74 |
75 | ```
76 |
77 | **繪製目前股價位階圖**
78 |
79 | * 以N年平均最高股價與最低股價作為上下限。
80 | * 對照目前股價位階。
81 | * 股價越低代表價格越迷人。
82 |
83 | ```python
84 | import matplotlib.pyplot as plt
85 |
86 | # lowest 近N年平均最低價
87 | # price 目前股價
88 | # highest 近N年平均最高價
89 | data = [lowest, price, highest]
90 |
91 | # 標籤
92 | labels = ['price']
93 |
94 | plt.boxplot(data, labels=labels)
95 | plt.show()
96 | ```
97 |
98 | 圖片來源
99 |
100 | **繪製目前殖利率位階圖**
101 |
102 | * 以N年平均最高與最低殖利率作為上下限。
103 | * 對照目前的殖利率位階。
104 | * 殖利率越高代表目前CP值越高。
105 |
106 | ```python
107 | import matplotlib.pyplot as plt
108 |
109 | # lYield 近N年平均最低殖利率
110 | # cYield 目前殖利率
111 | # hYield 近N年平均最高殖利率
112 | data = [lYield, cYield, hYield]
113 |
114 | labels = ['yield']
115 |
116 | plt.boxplot(data, labels=labels)
117 | plt.show()o
118 | ```
119 |
120 | 圖片來源
121 |
122 | 相信具有圖表的輔助更能夠快速的判斷及決策,而Matplotlib這套工具就能夠很好的薑我們的資料繪製成圖,非常便利。
123 |
124 | ### 結語
125 |
126 | 藉由上述的圖表呈現可以得知目前股價處於近N年的哪個位階,以價格來說有些偏高,以殖利率來說有些偏低,因此會暫時觀望,等待時機再行購入,當然這些都是過去資料並不代表未來,過去的數據不論怎麼推估都並非產生絕對的未來,我們僅能掌握更多數據來提升對未來的決策判斷。
127 |
128 |
129 |
130 | 不妨親自動動手來計算這些數據,相信會更加印象深刻,以後遇到各種資料我們都能夠較為準確的判斷,而不是僅憑感覺盲目的猜測,造成不精準的決策導致損失。
131 |
132 |
133 |
134 | 今天的範例都在這裡「[📦 **goodinfo\_yield.ipynb**](../jupyter-examples/goodinfo\_yield.ipynb)」歡迎自行取用。
135 |
136 | 如何使用請參閱「[【Google Colab Python系列】Colab平台與Python如何擦出火花?](https://www.potatomedia.co/s/aNLHZe3S)」。
137 |
138 | \------------------------------------------------------------------------------------------------
139 |
140 | 喜歡撰寫文章的你,不妨來了解一下:
141 |
142 | [Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 - 為什麼要加入?](https://www.potatomedia.co/s/2PmFxsq)
143 |
144 | 歡迎加入一起練習寫作,賺取知識,累積財富!
145 |
--------------------------------------------------------------------------------
/goodinfo-pa-chong-shi-zhan-pian/google-colab-xi-lie-yi-goodinfo-wei-li-tong-ji-yi-duan-shi-jian-nei-de-zui-gao-zui-di-zhi-li-shuai.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: 一起動動手來玩玩Python吧
3 | ---
4 |
5 | # 【Google Colab Python系列】以Goodinfo!為例,統計一段時間內的最高、最低殖利率
6 |
7 | 圖片來源
8 |
9 | 上一篇我們有介紹Google Colab Python的爬蟲基礎概念與技巧,還沒閱讀的朋友可以先進行閱讀,並建立基礎概念之後再接著進行實戰演練會比較容易上手唷! 這裡就附上連結「[【Google Colab系列】該如何設計自己的爬蟲來抓取Html資料?](broken-reference)」供各位參考囉!
10 |
11 |
12 |
13 | 這一篇章會以捕魚的四大步驟進行比喻,由淺入深,逐步完成屬於自己的統計程式,目標是能夠以生活化例子建立撰寫爬蟲的基礎概念,未來假若我們需要進一步蒐集資料進行統計分析時,就將這套心法搬出來舞弄,相信概念與技巧熟練之後,遇到任何奇耙的網站資料也都能夠迎刃而解。
14 |
15 | 圖片來源
16 |
17 |
18 |
19 | 上一次我們已經示範如何抓取目標表格,這次的主軸會圍繞在如何切換表格內容並抓取某幾個cell的資料進行程式運算,因此這個篇章我們會學到以下幾個重要技能:
20 |
21 | * 抓取某段範圍內的cell內容。
22 | * 過濾標題。
23 | * 使用pandas進行計算與統計。
24 |
25 | ### 觀察: 分析切換「顯示依據」的行為
26 |
27 | 我們先打開F12並切到Network來觀察操作行為過程中會發送哪些網路封包。
28 |
29 | 圖片來源
30 |
31 | 這時候就得考驗我們的觀察能力了,有沒有發現圖片上請求的URL已經有點不太一樣了,我們拿這段URL去試著請求看看,果不其然,刷新後的頁面就是股利發放政策的相關資訊了。
32 |
33 |
34 |
35 | ```
36 | https://goodinfo.tw/tw/StockDividendPolicy.asp?STOCK_ID=xxx
37 | ```
38 |
39 | 圖片來源
40 |
41 | ### 撒網: 定義明確目標
42 |
43 | 首先我們成功抓到表格之後,下一步就是定義我們今天要統計的數值,以這次的目標為例,統計的為N段時間內的最高、最低殖利率。
44 |
45 | 因此我們需要抓取的元素有「股利發放年度」、「現金股利」、「年度股價」這些資訊輔助我們進行每一年殖利率的計算。
46 |
47 |
48 |
49 | ### 收網: 撰寫程式進行抓取重要區塊
50 |
51 | 這時候我們就可以大膽的將這串URL寫到程式碼中,進一步進行抓取。
52 |
53 | ```
54 | import requests
55 |
56 | STOCK_ID='3231'
57 |
58 | headers = {
59 | 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
60 | }
61 | res = requests.get('https://goodinfo.tw/tw/StockDividendPolicy.asp?STOCK_ID={0}'.format(STOCK_ID), headers = headers)
62 | res.encoding = 'utf-8'
63 | res.text
64 | ```
65 |
66 | 再來我們一樣藉由F12(Network)來錨定關注範圍的表格。
67 |
68 | 圖片來源
69 |
70 | 接著我們運用「BeautifulSoup」來抓取該表格的標籤。
71 |
72 | ```
73 | from bs4 import BeautifulSoup
74 | bs = BeautifulSoup(res.text, 'html.parser')
75 | data = bs.select_one('#tblDetail')
76 | print(data)
77 | ```
78 |
79 | 再來使用pandas套件來檢驗我們抓取的表格是否正確。
80 |
81 | ```
82 | import pandas
83 | dfs = pandas.read_html(data.prettify())
84 | print(dfs)
85 | ```
86 |
87 | 圖片來源
88 |
89 | 看樣子是我們所需要的資訊沒有錯,接下來就要開始抓取最高與最低股利來計算這兩者的平均殖利率囉!
90 |
91 | ### 料理:統計的精華與心法
92 |
93 | 首先我們一樣用取節點的技巧,並印出前N筆的方式來縮減範圍,並且框出我們需要的欄位。
94 |
95 | ```python
96 | import pandas
97 | import datetime
98 |
99 |
100 |
101 | dfs = pandas.read_html(data.prettify())
102 | node = dfs[0]
103 |
104 | node.head(5)
105 | ```
106 |
107 | 圖片來源
108 |
109 | 這邊有幾篇關於Pandas的教學,建議可以先行閱讀,才比較容易知道如何使用這個強大的套件。
110 |
111 | * [https://www.learncodewithmike.com/2020/11/python-pandas-dataframe-tutorial.html](https://www.learncodewithmike.com/2020/11/python-pandas-dataframe-tutorial.html)
112 |
113 | 接著我們直接進入重點,我們先試試看抓取重要的幾個欄位並留下即可,並且我們試著將columns印出,記錄我們需要的欄位名稱,下一步我們會使用這些資訊留下重要的欄位資訊。
114 |
115 | ```python
116 | # 這邊我們將標題僅留下第3列即可
117 | node.columns = node.columns.get_level_values(3)
118 |
119 | # 印出標題名稱
120 | node.columns
121 | ```
122 |
123 | 圖片來源
124 |
125 | 接著我們試著讓資訊列僅留下指定欄位資訊。
126 |
127 | ```python
128 | # 顯示Columns(列)為名稱的數據
129 | # 這次抓取的目標有4個欄位,分別以下:
130 | node = node[['股利 發放 年度', '股利 合計', '最高', '最低']]
131 |
132 | node = node.head()
133 | ```
134 |
135 | 圖片來源
136 |
137 | 重頭戲來囉! 加油,剩下最後一段路了,讓我們來統計一下這N年的最高與最低殖利率吧! 如果不知道殖利率怎麼計算的朋友不妨試著閱讀以下文章:
138 |
139 | * [金融理財入門(股票篇) — 基本面名詞](https://www.potatomedia.co/s/bXdkrdvG)
140 | * [【股市韭菜系列】明年股息推算,以「xx」為例](https://www.potatomedia.co/s/hlGfSzx)
141 |
142 | 讓我們動手來進行程式開發,統計屬於自己的分析庫,首先我們針對前N筆的股利合計、最高、最低進行平均的運算,但在平均之前值得注意的是表格內的值尚未轉換前仍為字串,因此我們要優先處理型態轉換如下:
143 |
144 | ```python
145 | # 把 str 轉成 float 型態才能進行統計
146 | node['最低'] = node['最低'].astype('float')
147 | node['最高'] = node['最高'].astype('float')
148 | ```
149 |
150 | 接著我們分別取合計股利、最高、最低的平均數。
151 |
152 | ```python
153 | dividend = node['股利 合計'].mean()
154 | highest = node['最高'].mean()
155 | lowest = node['最低'].mean()
156 | ```
157 |
158 | 接下來就是重頭戲殖利率的計算囉!
159 |
160 | ```python
161 | # 由於股價越低,殖利率越高的特性,因此會以股利除以最低價
162 | hYield = dividend / lowest
163 |
164 |
165 | # 由於股價越高,殖利率越低的特性, 因此會以股利除以最高價
166 | lYield = dividend / highest
167 |
168 | # 這邊已知的資訊有目前股價,而未知的資訊則是發放股利,因此我們可以設法由最近四季去推估未來可能的股利,進而得到目前殖利率的指標, 最終依據最高與最低殖利率決定買進時間點
169 | # 注意: 以下並非真實資料,僅以示範為主
170 | # 假設目前股價為27.5
171 | # 平均股利: 1.8782
172 | cYield = dividend / 27.5
173 |
174 | print('最高殖利率={0:.2%}, 最低殖利率={1:.2%}, 目前殖利率={2:.2%}'.format(hYield, lYield, cYield))
175 | ```
176 |
177 | 得出最終結果為:
178 |
179 | ```
180 | 最高殖利率=9.06%, 最低殖利率=5.71%, 目前殖利率=6.83%
181 | ```
182 |
183 | [❗](https://emojipedia.org/exclamation-mark/) 這邊的股價請使用今天的範例進行動態抓取,做為練習,加深印象,因此範例中特以固定的值進行統計,真實數據並非如此,需自行抓取目前股價才能推估。
184 |
185 |
186 |
187 | 📝 這次的實戰練習會用到一些基本的API筆記如下:
188 |
189 | ```
190 | # 顯示有哪些欄位
191 | node.columns
192 |
193 | # 顯示Columns(列)為名稱的數據
194 | node[['名稱']]
195 |
196 | # 取得指定「列」的標題
197 | node.columns.get_level_values(3)
198 |
199 | # 將指定欄資料集轉換型態以利統計
200 | node['欄位名稱'].astype('float')
201 |
202 | # 取平均
203 | node['欄位名稱'].mean()
204 | ```
205 |
206 |
207 |
208 | ### 結語
209 |
210 | 過程中其實都在訓練我們的觀察能力,如何察覺到某些地方的微小差異就能夠透過這樣的差異抓到一些規則,藉由這些規則進行排除法,一步步的獲取我們重要的資訊,
211 |
212 |
213 |
214 | 下一篇章我們預計將殖利率區間渲染成報表,學習如何產生圖表,以視覺化來呈現推估數據,提升分析與評估的效益。
215 |
216 |
217 |
218 | 今天的範例都在這裡「[📦 **goodinfo\_yield.ipynb**](../jupyter-examples/goodinfo\_yield.ipynb)」歡迎自行取用。
219 |
220 | 如何使用請參閱「[【Google Colab Python系列】Colab平台與Python如何擦出火花?](https://www.potatomedia.co/s/aNLHZe3S)」。
221 |
222 | \------------------------------------------------------------------------------------------------
223 |
224 | 喜歡撰寫文章的你,不妨來了解一下:
225 |
226 | [Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 - 為什麼要加入?](https://www.potatomedia.co/s/2PmFxsq)
227 |
228 | 歡迎加入一起練習寫作,賺取知識,累積財富!
229 |
230 |
231 |
232 | ### 資源參考
233 |
234 | * [https://minkuanchen.medium.com/python-pandas-goodinfo%E7%9A%84%E6%B3%95%E4%BA%BA%E8%B2%B7%E8%B3%A3%E8%B6%85-1a0d821db99d](https://minkuanchen.medium.com/python-pandas-goodinfo%E7%9A%84%E6%B3%95%E4%BA%BA%E8%B2%B7%E8%B3%A3%E8%B6%85-1a0d821db99d)
235 | * [https://pandas.pydata.org/docs/getting\_started/intro\_tutorials/06\_calculate\_statistics.html](https://pandas.pydata.org/docs/getting\_started/intro\_tutorials/06\_calculate\_statistics.html)
236 |
--------------------------------------------------------------------------------
/goodinfo-pa-chong-shi-zhan-pian/zi-liao-chu-li-shen-qi-qu-pytube-xi-lie-sou-ji-qing-bao-rang-shu-ju-hui-shuo-hua.md:
--------------------------------------------------------------------------------
1 | # 【資料處理神器區 - Pytube系列】 蒐集情報讓數據會說話
2 |
3 |
4 |
5 |
6 |
7 | 這次要來介紹「pytube」這套神器, 當我們需要對影音進行統計分析時就需要使用這把利器來破關, 尤其是AI時代的來臨, 我們會需要大量的資料來進行模型的訓練, 而我們總不可能海量的去撈取這些資料, 會非常沒有效率也浪費空間, 因此我們會先進行偵查的任務, 需要派出偵察隊來蒐集youtube的影音資訊再來決策下一步…。
8 |
9 | 而針對youtube影音平台的情境底下, 「pytube」就是偵查隊的最佳武器, 它不僅能夠蒐集基本資訊(長度、熱度、頻道數量、評分…), 也能夠抓取影片或者音訊, 非常的方便好用。
10 |
11 | 那我們今天就來表演一下這套神器的使用方式, 預計抓取的資訊有音檔長度、發布日期、評分、多少人看過,這些資訊背後都隱藏著驚人的秘密...。
12 |
13 | ### 安裝
14 |
15 | ```python
16 | !pip install pytube
17 | ```
18 |
19 | ### 引入套件庫並設定目標連結
20 |
21 | ℹ️ 這裡的 `${影片網址}` 請貼上目標的影片連結。
22 |
23 | 這個步驟是基本使用上的第一步, 提供網址讓「pytube」去自動抓取相關資訊, 這一步並沒有實際進行下載, 因此網路傳輸的耗費並不大, 主要用來蒐集情資使用。
24 |
25 | ```python
26 | from pytube import YouTube
27 |
28 | yt = YouTube('${影片網址}')
29 | ```
30 |
31 | ### 哪些資訊可以偵查?
32 |
33 | ```python
34 | # 標題
35 | print(f'標題: {yt.title}')
36 |
37 | # 作者
38 | print(f'作者: {yt.author}')
39 |
40 | # 頻道識別碼
41 | print(f'頻道識別碼: {yt.channel_id}')
42 |
43 | # 影片的描述
44 | print(f'影片的描述: {yt.description}')
45 |
46 | # 影片的關鍵字
47 | print(f'影片的關鍵字: {yt.keywords}')
48 |
49 | # 影片的長度(秒)
50 | print(f'影片的長度: {yt.length} 秒')
51 |
52 | # 發布日期
53 | print(f'發布日期: {yt.publish_date}')
54 |
55 | # 評分
56 | print(f'評分: {yt.rating}')
57 |
58 | # 多少個人瀏覽過
59 | print(f'多少人看過: {yt.views}')py
60 | ```
61 |
62 |
63 |
64 |
65 |
66 | 有了這些資訊我們可以做什麼? 就讓我列出幾個可能的方向供您思考:
67 |
68 | * 長度介於多少範圍的影音檔分析。
69 | * 瀏覽數量分析。
70 | * 評分高低分析。
71 | * 日期區間分析。
72 |
73 | P.S 年份較舊的影片可能缺少關鍵字、評分...等資訊, 畢竟早期也還沒規劃大數據的應用...。
74 |
75 | ### 可以怎麼統計分析?
76 |
77 | 我們可以藉由另一套神器pandas來進行..., 底下提供幾個學習資源包, 可以建立基本概念後配合動手實作加深印象:
78 |
79 | * [【Google Colab Python系列】 資料處理神器 Pandas 起手式](https://vocus.cc/article/64c90f67fd8978000138d9bc)
80 | * [【Google Colab Python系列】 資料處理神器 Pandas 合併之術(join、concat)](https://vocus.cc/article/64ca3fb9fd897800018b230c)
81 | * [【Google Colab Python系列】 資料處理神器 Pandas 分割與重組之術(Grouping/Reshaping)](https://vocus.cc/article/64ca6232fd897800018e734a)
82 |
83 | 上面的教學讀完了嗎? 接下來會教您如何結合pytube + pandas來構建屬於自己的影音分析系統、高品質語料庫爬蟲系統..., 這些實戰我們也會放在會員專屬文章區, 歡迎支持一下付費專欄, 讓我們更有動力分享關於軟體科技的武功心法:
84 |
85 | [🔥 阿Han的軟體心法實戰營](https://vocus.cc/weihanchen/introduce)
86 |
87 |
88 |
89 | 今天的範例都在這裡「[📦](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/pandas/pandas\_quickstart.ipynb)[ pytube\_quickstart.ipynb](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/pytube/pytube\_quickstart.ipynb)」歡迎自行取用。
90 |
91 | 如何使用請參閱「[【Google Colab Python系列】Colab平台與Python如何擦出火花?](https://www.potatomedia.co/s/aNLHZe3S)」。
92 |
93 | ### 結語
94 |
95 | 初步認識到pytube的功能之後, 我們就可以統計分析決定目標群, 甚至打造屬於AI訓練的爬蟲系統, 或者結合推薦系統建立個人 + 商業化的影音推播系統..., 非常的靈活, 重點在於我們會不會使用工具, 如何讓工具變成武器, 因此有個領路人可以讓您少走點彎路, 不妨花個銅板費購買一下實戰專欄, 讓您創造出各種創新的應用, 甚至能夠成立公司開發產品。
96 |
97 |
98 |
99 | 喜歡撰寫文章的你,不妨來了解一下:
100 |
101 | [Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入?](https://www.potatomedia.co/s/2PmFxsq)
102 |
103 | 歡迎加入一起練習寫作,賺取知識
104 |
--------------------------------------------------------------------------------
/hugging-face-pian/README.md:
--------------------------------------------------------------------------------
1 | # Hugging Face篇
2 |
3 |
--------------------------------------------------------------------------------
/hugging-face-pian/hugging-faceep.1-ping-fan-ren-ye-neng-wan-de-qi-de-ai-ping-tai.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: AI原來離我們那麼近...
3 | ---
4 |
5 | # 【Hugging Face】Ep.1 平凡人也能玩的起的AI平台
6 |
7 | 圖片來源
8 |
9 | ### 它到底是什麼?
10 |
11 | 簡單說Hugging Face是人工智慧開源平台,開發者發表和共享預訓練模型、資料庫和示範檔案等。Hugging Face共享超過10萬個預訓練模型,上萬資料庫,包括微軟、Google、彭博、英特爾等各行業上萬機構都有使用Hugging Face。
12 |
13 | ### 理念與目標
14 |
15 | 我們都知道最近火紅的OpenAI公開的ChatGPT非常熱門, 但在開發者服務方面, OpenAI正在搭起人工智慧的圍牆, 僅允許滿足條件的企業或個人進入, 而「[Hugging Face](https://huggingface.co/docs)」希望每個人都能做出生成式AI的模型, 有點像是[Github](https://github.com/)的概念, 讓整個資訊科技可以快速推進。
16 |
17 | 巨頭努力築起AI的圍牆的戰場之下, 「[Hugging Face](https://huggingface.co/docs)」有點像強力的民兵, 擁抱開放, 讓一般的平民老百姓也有機會接觸到高深的AI技術, 不再讓這些尖端技術掌握在巨頭手中, 因此也吸引了不少的擁護者, 其實一開始的「[Hugging Face](https://huggingface.co/docs)」是針對年輕人開發的聊天機器人, 且技術基於NLP(自然語言處理), Transformer模型的出現瞬間成為自然語言領域最受開發者關注的模型,也讓[Hugging Face](https://huggingface.co/docs)一炮而紅。
18 |
19 | ### 商業模式
20 |
21 | 「[Hugging Face](https://huggingface.co/docs)」以賦能為出發點讓整個AI社群發揚光大, 因此只要在其中獲得1%的變現就能夠撐起一間公司, 類似於[elastic](https://www.elastic.co/?ultron=B-Stack-Trials-APJ-Exact\&gambit=Stack-Core\&blade=adwords-s\&hulk=paid\&Device=c\&thor=elasticsearch\&gclid=Cj0KCQjwtO-kBhDIARIsAL6LorcEhwruQCuEpuXsKJv0SaTVff-tTBBMSJc6bKQF8NlnadNjzHpc0XMaAnlHEALw\_wcB)、[mongodb](https://www.mongodb.com/)…等。
22 |
23 | ### **Hugging Face Hub**
24 |
25 | 相信只要是開發者都知道Github是一個儲存程式碼的倉庫, 但AI模型呢? 總要有個地方集中控管吧!
26 |
27 | 如果有興趣的朋友請至這裡參考參考: [https://huggingface.co/docs/hub/index](https://huggingface.co/docs/hub/index)
28 |
29 | 圖片來源
30 |
31 | 我們可以發現到除了模型以外, 資料集、靜態網頁空間、報告空間.., 非常的豐富, 讓我們可以將開發好的專案完整的放置Hub之上, 透過學習交流的方式加快人工智慧的進程。
32 |
33 | ### 組成的元件
34 |
35 | 使用[Hugging Face](https://huggingface.co/docs)務必要了解最重要的三大元件, 基本上各種任務的模型(語音辨識、影像分類、NLP…), 都是離不開這三大元件的,
36 |
37 | #### **Transformers**
38 |
39 | 顧名思義就是為了處理各種Transformer模型而開發的元件,
40 |
41 | #### **Tokenizers**
42 |
43 | 我們都知道NLP的世界裡, 文字的最小的單位就是詞, 而要將文字化成詞的關鍵就是斷詞, Tokenizers就是扮演著這個角色, 提供了不同的策略也支援前處理、後處理。
44 |
45 | #### Datasets
46 |
47 | 我們都知道AI訓練的重要養分來源就是資料集, 而Datasets元件就是扮演著如何將資料集管理好的角色, 並提供豐富的API(隨機分類、切割、整合pandas), 讓我們更容易的處理資料。
48 |
49 | #### 更多其他的元件
50 |
51 | 最佳化、加速器的Accelerate、Optimum, 甚至是無代碼工具的AutoTrain…, 都是[Hugging Face](https://huggingface.co/docs)涵蓋的強大功能。
52 |
53 | ### 簡易的使用方式讓我們輕鬆上手
54 |
55 | 這邊我們就使用wav2vec2的語音辨識模型試玩看看吧!
56 |
57 | 使用起來非常簡單, 我們只要使用pipeline搭配指定的任務, 就能進行簡單的AI任務, 以這裡的範例為例, 我們會使用「automatic-speech-recognition」語音辨識的任務來進行。
58 |
59 | 並指定「[ydshieh/wav2vec2-large-xlsr-53-chinese-zh-cn-gpt](https://huggingface.co/ydshieh/wav2vec2-large-xlsr-53-chinese-zh-cn-gpt)」這個中文模型進行語音辨識。
60 |
61 |
62 |
63 | #### 如何找模型呢?
64 |
65 | 我們可以在[Hugging fa](https://huggingface.co/)[ce](https://huggingface.co/)首頁直接進行搜尋。
66 |
67 | 圖片來源
68 |
69 | 也可以到[模型區](https://huggingface.co/models)進行精確的篩選。
70 |
71 | 圖片來源
72 |
73 |
74 |
75 | 找到模型之後我們就直接將音檔進行辨識,產生文字, 整個操作流程非常簡易。
76 |
77 | ```python
78 | import torch
79 |
80 | # 引入pipeline
81 | from transformers import pipeline
82 |
83 | # 定義任務
84 | asr = pipeline(
85 | "automatic-speech-recognition",
86 | model='ydshieh/wav2vec2-large-xlsr-53-chinese-zh-cn-gpt',
87 | )
88 |
89 | # 執行任務
90 | result = asr('./test.wav')
91 |
92 | text = result['text']
93 |
94 | text
95 | ```
96 |
97 | 更多的使用方式請參考「[https://huggingface.co/docs/transformers/quicktour」。](https://huggingface.co/docs/transformers/quicktour%E3%80%8D%E3%80%82)
98 |
99 | 喜歡撰寫文章的你,不妨來了解一下:
100 |
101 | [Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 - 為什麼要加入?](https://www.potatomedia.co/s/2PmFxsq)
102 |
103 | 歡迎加入一起練習寫作,賺取知識!
104 |
105 |
106 |
107 | #### 更多關於【Hugging Face 系列】…
108 |
109 | * [【Hugging Face】Ep.1 平凡人也能玩的起的AI平台](https://vocus.cc/article/649d7961fd89780001b63b0a)
110 | * [【Hugging Face】Ep.2 初探新手村, 打造專屬的翻譯官](https://vocus.cc/article/64a013ecfd89780001601391)
111 | * [【Hugging Face】Ep.3 前往Datasets掏金趣](https://vocus.cc/article/64a2c62afd897800018a8185)
112 | * [【Hugging Face】Ep.4 文字與模型的轉換器Tokenizer](https://vocus.cc/article/64a34d8dfd8978000190e556)
113 | * [【Hugging Face】Ep.5 文字世界中的超能力語言英雄(Named Entity Recognition)](https://vocus.cc/article/64a42269fd89780001589eca)
114 | * [【Hugging Face】Ep.6 解決問題的專業級破關知識家(Question Answering)](https://vocus.cc/article/64ad426cfd89780001f0f010)
115 | * [【Hugging Face】Ep.7 以文生圖的魔幻製圖師(Text To Image)](https://vocus.cc/article/64aea57ffd89780001075213)
116 | * [【Hugging Face】Ep.8 專業的標準化推理家(Inference API)](https://vocus.cc/article/64affcd6fd89780001437d39)
117 |
--------------------------------------------------------------------------------
/hugging-face-pian/hugging-faceep.2-chu-tan-xin-shou-cun-da-zao-zhuan-shu-de-fan-yi-guan.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: AI原來離我們那麼近...
3 | ---
4 |
5 | # 【Hugging Face】Ep.2 初探新手村, 打造專屬的翻譯官
6 |
7 | 圖片來源
8 |
9 | 我們已經介紹過關於Transformer模型的平台「[【Hugging Face】Ep.1 平凡人也能玩的起的AI平台](https://vocus.cc/article/649d7961fd89780001b63b0a)」,而這次就來實際動手進行開發,讓我們自己的AI自己做。
10 |
11 |
12 |
13 | 由於AI模型的訓練往往都會比較耗時, 因此建議需要有GPU環境會比較有效率一些, 否則訓練模行動輒好幾個小時才能看到結果, 一來一往之間, 當我們調好一版可用的模型時已經浪費了不少青春去了…。
14 |
15 | 基本上怎麼開始呢? 其實有分為兩條路徑, 一條是全部自己擁有, 將環境架設於本地端, 另一種則是使用雲端服務, 例如學術研究的Google Colab, 我們都會分別示範如何開始。
16 |
17 | ### 主題
18 |
19 | 這次的任務是自行打造一個翻譯官, 幫我們將中文翻譯成英文, 預計使用的模型為「[Helsinki-NLP/opus-mt-zh-en](https://huggingface.co/Helsinki-NLP/opus-mt-zh-en)」, 就讓我們分別示範如何在本地端與Google Colab上使用吧!
20 |
21 | ### 本地端
22 |
23 | 當我們非常Care數據是應該私有的, 不流於雲上時, 這時候本地端架設會是較好的選擇, 但相對應的也要有足夠的硬體, 成本相對較高。
24 |
25 | 另外會建議基於Docker、Container這種容器化技術為基礎進行環境架設, 如此一來才能夠避免因為系統環境的因素導致訓練失敗或者辨識失敗…等狀況。
26 |
27 | 首先請安裝一下Docker, 請參考「[Install Docker Engine](https://docs.docker.com/engine/install/)」, 至於什麼是Docker, 我們之後會另外撰寫一篇來進行介紹, 並在此補充, 這邊假設您已經是Docker/Container專家為基礎進行說明。
28 |
29 | 安裝完畢後就是選用合適的image了, 所謂image就是所謂的映像檔(虛擬機時期常常聽到的), 這邊會建議使用nvidia官方的image「[PyTorch Release Notes](https://docs.nvidia.com/deeplearning/frameworks/pytorch-release-notes/#abstract)」, 這邊我們會選用「[nvcr.io/nvidia/pytorch:22.12-py3」這個版本來進行示範。](http://nvcr.io/nvidia/pytorch:22.12-py3%E3%80%8D%E9%80%99%E5%80%8B%E7%89%88%E6%9C%AC%E4%BE%86%E9%80%B2%E8%A1%8C%E7%A4%BA%E7%AF%84%E3%80%82)
30 |
31 | 基本上Docker安裝完畢之後, 我們會用docker compose來管理配置的部份, 大致上如下:
32 |
33 | ```python
34 | version: "3.8"
35 | services:
36 | jupyter:
37 | image: nvcr.io/nvidia/pytorch:22.12-py3
38 | tmpfs:
39 | - /tmp
40 | ports:
41 | - "8888:8888"
42 | volumes:
43 | - ./:/workspace
44 | runtime: nvidia
45 | command: jupyter notebook --ip=0.0.0.0 --port=8888 --allow-root --NotebookApp.token='test'
46 | ```
47 |
48 | 接著啟動我們的環境
49 |
50 | ```python
51 | docker compose up -d
52 | ```
53 |
54 | 再來開啟jupyter的網站:[http://127.0.0.1:8888/login](http://127.0.0.1:8888/login), 然後將token=text輸入就可以進行登錄了。
55 |
56 | 圖片來源
57 |
58 | 登入成功之後, 我們就可以來創建一個筆記本。
59 |
60 | 圖片來源
61 |
62 | 安裝一下必要元件。
63 |
64 | ```python
65 | !pip install transformers
66 |
67 | # This tokenizer cannot be instantiated. Please make sure you have `sentencepiece` installed in order to use this tokenizer.
68 | !pip install sentencepiece
69 |
70 | !pip install sacremoses
71 | ```
72 |
73 | 接著進行翻譯任務。
74 |
75 | ```python
76 | from transformers import pipeline
77 | translator = pipeline("translation", model='Helsinki-NLP/opus-mt-zh-en') #使用翻譯任務
78 | translator('這是一個很困難的問題')
79 | ```
80 |
81 | 最終結果如下,成功幫我們進行翻譯。
82 |
83 | 圖片來源
84 |
85 | ### Google Colab
86 |
87 | 當我們不想維護硬體時, 雲端的Google Colab就是最好的選擇了, 因為它整合了完整的python環境, 讓我們可以透過類似Jupyter的方式進行開發, 並分享腳本, 基本上比較適合學生、數據資料學家或是 AI 研究人員, 可以快速驗證概念或者訓練方向是否正確, 支援CPU、GPU甚至TPU, 但要注意的是除了CPU以外其他的運算單元都是會有額度限制的, 超過額度可是得付費的。
88 |
89 | 怎麼開始使用Google Colab呢? 請參考「[【Google Colab系列】台股分析預備式: Colab平台與Python如何擦出火花?](https://www.potatomedia.co/s/aNLHZe3S)」, 假設你已經學會如何開筆記本了, 那就讓我們開始吧!
90 |
91 | 首先安裝一下最重要的Transformers元件吧
92 |
93 | ```python
94 | !pip install transformers
95 |
96 | # This tokenizer cannot be instantiated. Please make sure you have `sentencepiece` installed in order to use this tokenizer.
97 | !pip install sentencepiece
98 |
99 | !pip install sacremoses
100 | ```
101 |
102 | 接著進行翻譯任務。
103 |
104 | ```python
105 | from transformers import pipeline
106 | translator = pipeline("translation", model='Helsinki-NLP/opus-mt-zh-en') #使用翻譯任務
107 | translator('這是一個很困難的問題')
108 | ```
109 |
110 | 最終得到翻譯結果。
111 |
112 | 圖片來源
113 |
114 | 今天的範例都在這裡「[📦](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/spacy\_1.ipynb)[huggingface/opus\_mt\_zh\_en.ipynb](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/huggingface/opus\_mt\_zh\_en.ipynb)」歡迎自行取用。
115 |
116 | 如何使用請參閱「[【Google Colab系列】台股分析預備式: Colab平台與Python如何擦出火花?](https://www.potatomedia.co/s/aNLHZe3S)」。
117 |
118 | ### 結語
119 |
120 | 整個過程非常的簡單, 幾行指令就讓我們完成翻譯的任務, 過往可能需要付費才能使用的API,如今都可以自行擁有了, HuggingFace上有很多模型及任務可以使用, 不妨親自動手玩看看, 會讓我們對於AI領域有更進一步的認識喔, 下一個篇章將會陸續介紹不同的任務與不同的模型, 甚至自己動手訓練模型, 就讓我們持續學習下去吧!
121 |
122 | 喜歡撰寫文章的你,不妨來了解一下:
123 |
124 | [Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 - 為什麼要加入?](https://www.potatomedia.co/s/2PmFxsq)
125 |
126 | 歡迎加入一起練習寫作,賺取知識!
127 |
128 |
129 |
130 | #### 更多關於【Hugging Face 系列】…
131 |
132 | * [【Hugging Face】Ep.1 平凡人也能玩的起的AI平台](https://vocus.cc/article/649d7961fd89780001b63b0a)
133 | * [【Hugging Face】Ep.2 初探新手村, 打造專屬的翻譯官](https://vocus.cc/article/64a013ecfd89780001601391)
134 | * [【Hugging Face】Ep.3 前往Datasets掏金趣](https://vocus.cc/article/64a2c62afd897800018a8185)
135 | * [【Hugging Face】Ep.4 文字與模型的轉換器Tokenizer](https://vocus.cc/article/64a34d8dfd8978000190e556)
136 | * [【Hugging Face】Ep.5 文字世界中的超能力語言英雄(Named Entity Recognition)](https://vocus.cc/article/64a42269fd89780001589eca)
137 | * [【Hugging Face】Ep.6 解決問題的專業級破關知識家(Question Answering)](https://vocus.cc/article/64ad426cfd89780001f0f010)
138 | * [【Hugging Face】Ep.7 以文生圖的魔幻製圖師(Text To Image)](https://vocus.cc/article/64aea57ffd89780001075213)
139 | * [【Hugging Face】Ep.8 專業的標準化推理家(Inference API)](https://vocus.cc/article/64affcd6fd89780001437d39)
140 |
--------------------------------------------------------------------------------
/hugging-face-pian/hugging-faceep.3-qian-wang-datasets-tao-jin-qu.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: AI原來離我們那麼近...
3 | ---
4 |
5 | # 【Hugging Face】Ep.3 前往Datasets掏金趣
6 |
7 |
8 |
9 |
10 |
11 | 上一篇「[【Hugging Face】Ep.2 初探新手村, 打造專屬的翻譯官](https://vocus.cc/article/64a013ecfd89780001601391)」我們學習到如何架設起Hugging Face的環境了,接下來我們就介紹一下重要的Datasets吧!
12 |
13 |
14 |
15 | AI模型訓練最重要的燃料就是「資料」了, 而HuggingFace的Dataset也公開了不少的資料集, 非常適合我們進行練功, 就讓我們先從dataset的部份開始吧!
16 |
17 | ### 鎖定目標,縮小範圍
18 |
19 | 掏金之前最重要的就是找到地點, 而如何快速的找到地點呢? HuggingFace也提供了非常友善的搜尋功能, 總共分成三塊, 左上角依照任務、模型大小…等主題選定, 而每種主題下方包含著不同的子類別,最終搭配關鍵字搜尋出自己需要的資料集。
20 |
21 |
22 |
23 | 假設我們選了情緒分類的資料集, 那麼可以來看看資料集的內容長怎樣, 可以觀察到其實資料集很簡單, 只有「文字」與對應的「標籤」。
24 |
25 |
26 |
27 | ### 玩轉資料集
28 |
29 | #### 安裝套件
30 |
31 | ```python
32 | !pip install datasets
33 | ```
34 |
35 | #### 載入資料集
36 |
37 | 使用[load\_dataset\_builder()](https://huggingface.co/docs/datasets/v2.13.1/en/package\_reference/loading\_methods#datasets.load\_dataset\_builder)來載入資料集, 這次載入的資料集為「[imdb](https://huggingface.co/datasets/imdb)」
38 |
39 | ```python
40 | from datasets import load_dataset_builder
41 | ds_builder = load_dataset_builder("imdb")
42 | ```
43 |
44 | ### 檢查資料集資訊
45 |
46 | 使用[load\_dataset\_builder()](https://huggingface.co/docs/datasets/v2.13.1/en/package\_reference/loading\_methods#datasets.load\_dataset\_builder)來檢查資料集, 這次檢查的資料集為「[imdb](https://huggingface.co/datasets/imdb)」
47 |
48 | ```python
49 | from datasets import load_dataset_builder
50 | ds_builder = load_dataset_builder("imdb")
51 | ```
52 |
53 | #### 基本資訊
54 |
55 | 可以得知這是一個電影的資料集, 包含正向與負向的標籤。
56 |
57 | ```python
58 | print(ds_builder.info.description)
59 | # Large Movie Review Dataset.
60 |
61 | print(ds_builder.info.features)
62 | # This is a dataset for binary sentiment classification containing substantially more data than previous benchmark datasets. We provide a set of 25,000 highly polar movie reviews for training, and 25,000 for testing. There is additional unlabeled data for use as well.
63 | {'text': Value(dtype='string', id=None), 'label': ClassLabel(names=['neg', 'pos'], id=None)}
64 | ```
65 |
66 | ### 索引值操作
67 |
68 | ```python
69 | from datasets import load_dataset
70 |
71 | # 載入訓練的資料集
72 | ds = load_dataset("imdb", split='train')
73 | ```
74 |
75 | ```python
76 | # 第一列
77 | ds[0]
78 | ```
79 |
80 | ```python
81 | # 最後一列
82 | ds[-1]
83 | ```
84 |
85 | ### 過濾
86 |
87 | 資料集雖然猶如黃金, 但其實夾雜著許多的雜訊, 我們可以透過「過濾」的方式, 篩選出我們需要的特定數據, 例如: 文字包含「U.S」且長度不要太長的資料才要進行訓練, 因此我們可以這樣做。
88 |
89 | ```python
90 | ds1 = ds.filter(lambda x: 'U.S' in x['text'] and len(x['text']) < 500)
91 |
92 | ds1[:3]
93 | ```
94 |
95 | ```python
96 | {
97 | 'text': [
98 | 'It is not un-common to see U.S. re-makes of foreign movies that fall flat on their face, but here is the flip side!!! This is an awful re-make of the U.S. movie "Wide Awake" by the British! "Wide Awake" is strange but entertaining and funny! "Liam" on the other hand is just strange. I must give credit to "Liam" for one thing, and that is making it clear that I made the right choice in changing my religion!',
99 | 'I saw this movie on Comedy Central a few times. This movie was pretty good. It\\'s an interesting adventure with the life of Sunny Davis, who is arranged to marry the king of Ohtar, so that the U.S. can get an army base there to balance power in the Middle East. Some good jokes, including "Sunnygate." I also just loved the ending theme. It gave me great political spirit. Ten out of ten was my rating for this movie.',
100 | '"Antwone Fisher" tells of a young black U.S. Navy enlisted man and product of childhood abuse and neglect (Luke) whose hostility toward others gets him a stint with the base shrink (Washington) leading to introspection, self appraisal, and a return to his roots. Pat, sanitized, and sentimental, "Antwone Fisher" is a solid feel-good flick about the reconciliation of past regrets and closure. Good old Hollywood style entertainment family values entertainment with just a hint of corn. (B)'],
101 | 'label': [0, 1, 1]
102 | }
103 | ```
104 |
105 | ### 更多的操作方式
106 |
107 | 上面我們介紹了基本用法,需要更多資料集的操作方式請參考「[datasets/process](https://huggingface.co/docs/datasets/process)」。
108 |
109 |
110 |
111 | 今天的範例都在這裡「[📦](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/spacy\_1.ipynb)[huggingface/hugging\_face\_datasets.ipynb](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/huggingface/hugging\_face\_datasets.ipynb)」歡迎自行取用。
112 |
113 | 如何使用請參閱「[【Google Colab系列】台股分析預備式: Colab平台與Python如何擦出火花?](https://www.potatomedia.co/s/aNLHZe3S)」。
114 |
115 | ### 結語
116 |
117 | 看起來HuggingFace除了很好的管控資料集之外, 也設計了非常強大的資料集處理API, 最重要的是非常有遠見, 一開始就制定好規範, 大家只要照著標準化的方式上傳資料集就能夠使用標準的API進行資料集處理。
118 |
119 |
120 |
121 | 喜歡撰寫文章的你,不妨來了解一下:
122 |
123 | [Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 - 為什麼要加入?](https://www.potatomedia.co/s/2PmFxsq)
124 |
125 | 歡迎加入一起練習寫作,賺取知識!
126 |
127 |
128 |
129 | #### 更多關於【Hugging Face 系列】…
130 |
131 | * [【Hugging Face】Ep.1 平凡人也能玩的起的AI平台](https://vocus.cc/article/649d7961fd89780001b63b0a)
132 | * [【Hugging Face】Ep.2 初探新手村, 打造專屬的翻譯官](https://vocus.cc/article/64a013ecfd89780001601391)
133 | * [【Hugging Face】Ep.3 前往Datasets掏金趣](https://vocus.cc/article/64a2c62afd897800018a8185)
134 | * [【Hugging Face】Ep.4 文字與模型的轉換器Tokenizer](https://vocus.cc/article/64a34d8dfd8978000190e556)
135 | * [【Hugging Face】Ep.5 文字世界中的超能力語言英雄(Named Entity Recognition)](https://vocus.cc/article/64a42269fd89780001589eca)
136 | * [【Hugging Face】Ep.6 解決問題的專業級破關知識家(Question Answering)](https://vocus.cc/article/64ad426cfd89780001f0f010)
137 | * [【Hugging Face】Ep.7 以文生圖的魔幻製圖師(Text To Image)](https://vocus.cc/article/64aea57ffd89780001075213)
138 | * [【Hugging Face】Ep.8 專業的標準化推理家(Inference API)](https://vocus.cc/article/64affcd6fd89780001437d39)
139 |
--------------------------------------------------------------------------------
/hugging-face-pian/hugging-faceep.4-wen-zi-yu-mo-xing-de-zhuan-huan-qi-tokenizer.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: AI原來離我們那麼近...
3 | ---
4 |
5 | # 【Hugging Face】Ep.4 文字與模型的轉換器Tokenizer
6 |
7 | 圖片來源
8 |
9 | 前面我們介紹了「[【Hugging Face】Ep.1 平凡人也能玩的起的AI平台](https://www.potatomedia.co/s/aHvvQP3M)」, 我們都知道「詞」是NLP世界中的最小單元, 關於詞的知識歡迎參考:
10 |
11 | 簡單來說,主要的目的是將文本轉換為模型可以處理的數據, But…, 他主要的任務並不是像jieba…等斷詞器一樣, 而是很單純的扮演文字與模型的橋接器。
12 |
13 | 經過上述知識的洗禮, 我們對於詞也具有一定的基礎認知, 在「Hugging Face」的平台裡, 處理詞也提供了非常好用的Tokenizer工具, 就讓我們好好的來認識一下唄!
14 |
15 | ### 兩種標記技巧
16 |
17 | #### 詞(Word-based)
18 |
19 | 基於「詞」的標記方式會將一段文本進行斷詞, 假設一文本如下:
20 |
21 | ```python
22 | Jim Henson was a puppeteer
23 | ```
24 |
25 | 可以被斷詞成:
26 |
27 | ```python
28 | Jim
29 | Henson
30 | was
31 | a
32 | puppeteer
33 | ```
34 |
35 | 最基本的方法有「基於空格」、「基於標點符號」…, 目前處理斷詞的框架有「[NLTK](https://www.nltk.org/)」、「[SpaCy](https://spacy.io/)」、「[Gensim](https://github.com/RaRe-Technologies/gensim)」等, 不妨親自玩玩看斷詞, 未來Hugging Face的斷詞層若需要抽換成特定領域語言時也會較為容易。
36 |
37 | #### 字元(Character-based)
38 |
39 | 基於「字元」的標記方式會將文字拆成單一的字符, 這種方式的詞彙量較小, 但帶來的資訊量價值大, 因為不同語言的詞與詞之間是具有語言學組合的關係,也會表達出不同的意義。
40 |
41 | ```python
42 | Jim Henson was a puppeteer
43 | ```
44 |
45 | ```python
46 | J
47 | i
48 | m
49 | .
50 | .
51 | .
52 | ```
53 |
54 | #### 有沒有更好的「斷詞」處理方式?
55 |
56 | BPE、WordPiece、SentencePiece、Unigram分別適用於不同的語言模型, 後續也會獨立章節來介紹這部份。
57 |
58 | ### 標記化
59 |
60 | 我們就實際來使用Hugging Face的API來進行說明,這邊我們使用「[ckiplab/bert-tiny-chinese](https://huggingface.co/ckiplab/bert-tiny-chinese)」這個模型來進行。
61 |
62 | ```python
63 | from transformers import AutoTokenizer
64 |
65 | # Initialize tokenzier and model
66 | tokenizer = AutoTokenizer.from_pretrained("ckiplab/bert-tiny-chinese")
67 |
68 | # Input text
69 | text = "今天的天氣很好。"
70 | tokens = tokenizer.tokenize(text)
71 | tokens
72 |
73 | # ['今', '天', '的', '天', '氣', '很', '好', '。']
74 | ```
75 |
76 | #### 轉換成ID編碼
77 |
78 | 當我們第一步將文字拆為單詞之後通常稱為標記(Token), 第二步就是將這些標記(Token)轉為模型看得懂的數字(ID)。
79 |
80 | ```python
81 | ids = tokenizer.convert_tokens_to_ids(tokens)
82 | ids
83 |
84 | # [791, 1921, 4638, 1921, 3706, 2523, 1962, 511]
85 | ```
86 |
87 | #### 解碼
88 |
89 | 我們也可以透過解碼函式將ID解回文字。
90 |
91 | ```python
92 | decoded_string = tokenizer.decode([791, 1921, 4638, 1921, 3706, 2523, 1962, 511])
93 | decoded_string
94 |
95 | # 今 天 的 天 氣 很 好 。
96 | ```
97 |
98 | 這就是Tokenizer的主要目的, 扮演著模型與文字之間的轉換器。
99 |
100 | ### 加載與儲存
101 |
102 | 加載的部份。
103 |
104 | ```python
105 | from transformers import AutoTokenizer
106 |
107 | # Initialize tokenzier and model
108 | tokenizer = AutoTokenizer.from_pretrained("ckiplab/bert-tiny-chinese")
109 | ```
110 |
111 | 經過加工後儲存成自訂的斷詞器可以這樣。
112 |
113 | ```python
114 | tokenizer.save_pretrained("custom")
115 | ```
116 |
117 | 關於更進階的的使用方式可以參考「[https://huggingface.co/learn/nlp-course/zh-TW/chapter6/3?fw=pt」。](https://huggingface.co/learn/nlp-course/zh-TW/chapter6/3?fw=pt%E3%80%8D%E3%80%82)
118 |
119 |
120 |
121 | 今天的範例都在這裡「[📦 huggingface/tokenizers.ipynb」](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/huggingface/tokenizers.ipynb)歡迎自行取用。
122 |
123 | 如何使用請參閱「[【Google Colab系列】台股分析預備式: Colab平台與Python如何擦出火花?](https://www.potatomedia.co/s/aNLHZe3S)」。
124 |
125 | ### 結語
126 |
127 | 初步了解到Hugging Face架構之後深深感受到標準化的好處, 有點像是鴻海MIH平台一般, 賦能給各個開發者到這個平台共同發展AI模型, 雖說獲利模式是否足以支撐起一家公司仍待時間進行驗證, 但平台已經讓各種NLP技術的發展更快速, 也縮小著技術屏障的隔閡。
128 |
129 | 喜歡撰寫文章的你,不妨來了解一下:
130 |
131 | [Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 - 為什麼要加入?](https://www.potatomedia.co/s/2PmFxsq)
132 |
133 | 歡迎加入一起練習寫作,賺取知識!
134 |
135 |
136 |
137 | #### 更多關於【Hugging Face 系列】…
138 |
139 | * [【Hugging Face】Ep.1 平凡人也能玩的起的AI平台](https://vocus.cc/article/649d7961fd89780001b63b0a)
140 | * [【Hugging Face】Ep.2 初探新手村, 打造專屬的翻譯官](https://vocus.cc/article/64a013ecfd89780001601391)
141 | * [【Hugging Face】Ep.3 前往Datasets掏金趣](https://vocus.cc/article/64a2c62afd897800018a8185)
142 | * [【Hugging Face】Ep.4 文字與模型的轉換器Tokenizer](https://vocus.cc/article/64a34d8dfd8978000190e556)
143 | * [【Hugging Face】Ep.5 文字世界中的超能力語言英雄(Named Entity Recognition)](https://vocus.cc/article/64a42269fd89780001589eca)
144 | * [【Hugging Face】Ep.6 解決問題的專業級破關知識家(Question Answering)](https://vocus.cc/article/64ad426cfd89780001f0f010)
145 | * [【Hugging Face】Ep.7 以文生圖的魔幻製圖師(Text To Image)](https://vocus.cc/article/64aea57ffd89780001075213)
146 | * [【Hugging Face】Ep.8 專業的標準化推理家(Inference API)](https://vocus.cc/article/64affcd6fd89780001437d39)
147 |
--------------------------------------------------------------------------------
/hugging-face-pian/hugging-faceep.5-wen-zi-shi-jie-zhong-de-chao-neng-li-yu-yan-ying-xiong-named-entity-recognition.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: AI原來離我們那麼近...
3 | ---
4 |
5 | # 【Hugging Face】Ep.5 文字世界中的超能力語言英雄(Named Entity Recognition)
6 |
7 | 圖片來源
8 |
9 | 這次來介紹一下NLP自然語言處理中重要的一個任務「命名實體識別(Named Entity Recognition)」, 這個任務主要識別出「人名」、「地名」、「公司」…等實體, 透過這些實體辨識結果, 可以近一步的理解意圖, 甚至判斷出該文章主要在講什麼重點…等。
10 |
11 | 關於更多NER的細節歡迎閱讀: 「[【自然語言處理 - spaCy】善用ChatGPT幫我們訓練出自訂的Name Entity Recognition實體](https://www.potatomedia.co/s/fTyoEZy)」
12 |
13 | ### 找看看有哪些可用模型
14 |
15 | 在「[【Hugging Face】Ep.3 前往Dataset掏金趣](https://vocus.cc/article/64a2c62afd897800018a8185)」我們有介紹過HuggingFace平台如何精準的找出我們需要的模型, 那這次我們要找的任務是「Token Classification」,語言為「Chinese」, 我們就來選用最多人使用的「[xlm-roberta-large-finetuned-conll03-english](https://huggingface.co/xlm-roberta-large-finetuned-conll03-english)」吧!
16 |
17 | 圖片來源
18 |
19 | ### 準備文本
20 |
21 | ```python
22 | text = '台灣是一個非常美麗的地區'
23 | ```
24 |
25 | ### 安裝套件
26 |
27 | ```python
28 | !pip install transformers
29 | !pip install pandas
30 | ```
31 |
32 | ### 進行NER任務
33 |
34 | ```python
35 | from transformers import pipeline, AutoTokenizer, AutoModelForTokenClassification
36 | import pandas as pd
37 | tokenizer = AutoTokenizer.from_pretrained("xlm-roberta-large-finetuned-conll03-english")
38 | model = AutoModelForTokenClassification.from_pretrained("xlm-roberta-large-finetuned-conll03-english")
39 | ner = pipeline("ner", model=model, tokenizer=tokenizer)
40 | results = ner("台灣是一個非常美麗的地區")
41 |
42 | pd.DataFrame(results)
43 | ```
44 |
45 | 圖片來源
46 |
47 | 上述的結果辨識出「台灣」是一個「I-LOC」的實體, 當然這個實體的標籤我們也可以自己去定義它。
48 |
49 | 今天的範例都在這裡「[📦 huggingface/huggingface\_ner.ipynb](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/huggingface/huggingface\_ner.ipynb)」歡迎自行取用。
50 |
51 | 如何使用請參閱「[【Google Colab系列】台股分析預備式: Colab平台與Python如何擦出火花?](https://www.potatomedia.co/s/aNLHZe3S)」。
52 |
53 | ### 結語
54 |
55 | 初步了解到Hugging Face架構之後深深感受到標準化的好處, 有點像是鴻海MIH平台一般, 賦能給各個開發者到這個平台共同發展AI模型, 雖說獲利模式是否足以支撐起一家公司仍待時間進行驗證, 但平台已經讓各種NLP技術的發展更快速, 也縮小著技術屏障的隔閡。
56 |
57 | 喜歡撰寫文章的你,不妨來了解一下:
58 |
59 | [Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 - 為什麼要加入?](https://www.potatomedia.co/s/2PmFxsq)
60 |
61 | 歡迎加入一起練習寫作,賺取知識!
62 |
63 |
64 |
65 | #### 更多關於【Hugging Face 系列】…
66 |
67 | * [【Hugging Face】Ep.1 平凡人也能玩的起的AI平台](https://vocus.cc/article/649d7961fd89780001b63b0a)
68 | * [【Hugging Face】Ep.2 初探新手村, 打造專屬的翻譯官](https://vocus.cc/article/64a013ecfd89780001601391)
69 | * [【Hugging Face】Ep.3 前往Datasets掏金趣](https://vocus.cc/article/64a2c62afd897800018a8185)
70 | * [【Hugging Face】Ep.4 文字與模型的轉換器Tokenizer](https://vocus.cc/article/64a34d8dfd8978000190e556)
71 | * [【Hugging Face】Ep.5 文字世界中的超能力語言英雄(Named Entity Recognition)](https://vocus.cc/article/64a42269fd89780001589eca)
72 | * [【Hugging Face】Ep.6 解決問題的專業級破關知識家(Question Answering)](https://vocus.cc/article/64ad426cfd89780001f0f010)
73 | * [【Hugging Face】Ep.7 以文生圖的魔幻製圖師(Text To Image)](https://vocus.cc/article/64aea57ffd89780001075213)
74 | * [【Hugging Face】Ep.8 專業的標準化推理家(Inference API)](https://vocus.cc/article/64affcd6fd89780001437d39)
75 |
--------------------------------------------------------------------------------
/hugging-face-pian/hugging-faceep.6-jie-jue-wen-ti-de-zhuan-ye-ji-po-guan-zhi-shi-jia-question-answering.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: AI原來離我們那麼近...
3 | ---
4 |
5 | # 【Hugging Face】Ep.6 解決問題的專業級破關知識家(Question Answering)
6 |
7 | 圖片來源
8 |
9 | QA問答是自然語言處理NLP中蠻困難的一項任務, 必須從一段文本中識別出使用者的提問,像搜尋引擎就是一種QA的應用, 從眾多的問題中找答案, 那就讓我們親手來打造一下自己專屬的QA系統吧!
10 |
11 | ### 找看看有哪些可用模型
12 |
13 | 在「[【Hugging Face】Ep.3 前往Dataset掏金趣](https://vocus.cc/article/64a2c62afd897800018a8185)」我們有介紹過HuggingFace平台如何精準的找出我們需要的模型, 那這次我們要找的任務是「Question Answering」,語言為「Chinese」, 我們就來選用最多人使用的「[timpal0l/mdeberta-v3-base-squad2](https://huggingface.co/timpal0l/mdeberta-v3-base-squad2)」吧!
14 |
15 | 圖片來源
16 |
17 | ### 安裝套件
18 |
19 | ```python
20 | !pip install transformers
21 | ```
22 |
23 | ### 給予知識文章
24 |
25 | 這邊透過[Chatgpt](https://chat.openai.com/)幫我們產生Google的基礎知識並做為問答系統的基礎知識。
26 |
27 | ```python
28 | context = """
29 | Google是一家全球知名的科技公司,成立於1998年,總部位於美國加利福尼亞州的山景城。Google以其在搜尋引擎技術方面的卓越表現而聞名,早期推出的Google搜尋引擎迅速成為全球最受歡迎和廣泛使用的搜尋引擎之一。
30 |
31 | 除了搜尋引擎外,Google還開發和提供了許多其他互聯網產品和服務。其中包括谷歌地圖、谷歌郵箱(Gmail)、谷歌翻譯、谷歌雲端硬碟(Google Drive)等。此外,Google還擁有Android操作系統,該操作系統目前是全球最受歡迎的移動操作系統之一。
32 |
33 | Google也涉足硬體領域,推出了自己的智慧型手機系列Pixel,以及Pixelbook筆記型電腦、Google Home智慧音箱等產品。此外,Google還在人工智慧(AI)和機器學習領域投入了大量資源,並推出了許多與AI相關的產品和服務,如Google Assistant智慧助理和Google Lens圖像識別技術。
34 |
35 | 除了互聯網產品和服務,Google還在廣告業務方面表現出色。其廣告平台Google Ads為廣告客戶提供了廣告投放和行銷解決方案,並通過廣告收入成為Google的主要盈利來源之一。
36 |
37 | Google在全球範圍內擁有廣泛的影響力和使用者基礎。其創始人之一拉里·佩奇(Larry Page)和謝爾蓋·布林(Sergey Brin)一直是科技行業的知名人物,Google也是全球最具價值的品牌之一。公司在全球各地設有辦事處和數據中心,員工遍布世界各地。
38 |
39 | Google一直秉持著使訊息普遍可用和受人們歡迎的使命,致力於提供高質量的產品和服務,並不斷推動科技的創新和發展。
40 | """
41 | ```
42 |
43 | ### 打造QA任務機器人
44 |
45 | 這邊我們選用[timpal0l/mdeberta-v3-base-squad2](https://huggingface.co/timpal0l/mdeberta-v3-base-squad2)這個模型進行任務。
46 |
47 | ```python
48 | from transformers import pipeline, AutoTokenizer, AutoModelForQuestionAnswering
49 | tokenizer = AutoTokenizer.from_pretrained("timpal0l/mdeberta-v3-base-squad2")
50 | model = AutoModelForQuestionAnswering.from_pretrained("timpal0l/mdeberta-v3-base-squad2")
51 | qa = pipeline("question-answering", model=model, tokenizer=tokenizer)
52 | ```
53 |
54 | ### 問與答
55 |
56 | 回答雖然不盡完美, 但已經能夠精確的理解我們的問題並給予接近正確的回答, 見到如此成效, 對於商業嗅覺敏感的朋友來說, 或許已經想到要如何打造一個知識庫問答機器人了吧!
57 |
58 | 後面的章節也會介紹如何自行訓練私有資料庫,並真正的打造私有的專屬問答知識家。
59 |
60 | ```python
61 | questions = [
62 | '請問Google的主要產品是什麼?',
63 | '請問創始人是誰?',
64 | '請問什麼時候開始的?'
65 | ]
66 |
67 | for question in questions:
68 | result = qa(question = question, context = context)
69 | print(result['answer'])
70 | ```
71 |
72 | 圖片來源
73 |
74 | 今天的範例都在這裡「[📦huggingface/huggingface\_qa.ipynb](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/huggingface/huggingface\_qa.ipynb)」歡迎自行取用。
75 |
76 | 如何使用請參閱「[【Google Colab系列】台股分析預備式: Colab平台與Python如何擦出火花?](https://www.potatomedia.co/s/aNLHZe3S)」。
77 |
78 | ### 結語
79 |
80 | 藉由Hugging Face平台, 我們可以親手打造各式各樣的AI機器人, 上面也已經有許多前輩分享的模型可供使用, 對於我們來說只要站在巨人的肩膀上即可, 也期望有朝一日我們也能訓練出對這世界更有幫助的AI模型。
81 |
82 | 喜歡撰寫文章的你,不妨來了解一下:
83 |
84 | [Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 - 為什麼要加入?](https://www.potatomedia.co/s/2PmFxsq)
85 |
86 | 歡迎加入一起練習寫作,賺取知識!
87 |
88 |
89 |
90 | #### 更多關於【Hugging Face 系列】…
91 |
92 | * [【Hugging Face】Ep.1 平凡人也能玩的起的AI平台](https://vocus.cc/article/649d7961fd89780001b63b0a)
93 | * [【Hugging Face】Ep.2 初探新手村, 打造專屬的翻譯官](https://vocus.cc/article/64a013ecfd89780001601391)
94 | * [【Hugging Face】Ep.3 前往Datasets掏金趣](https://vocus.cc/article/64a2c62afd897800018a8185)
95 | * [【Hugging Face】Ep.4 文字與模型的轉換器Tokenizer](https://vocus.cc/article/64a34d8dfd8978000190e556)
96 | * [【Hugging Face】Ep.5 文字世界中的超能力語言英雄(Named Entity Recognition)](https://vocus.cc/article/64a42269fd89780001589eca)
97 | * [【Hugging Face】Ep.6 解決問題的專業級破關知識家(Question Answering)](https://vocus.cc/article/64ad426cfd89780001f0f010)
98 | * [【Hugging Face】Ep.7 以文生圖的魔幻製圖師(Text To Image)](https://vocus.cc/article/64aea57ffd89780001075213)
99 | * [【Hugging Face】Ep.8 專業的標準化推理家(Inference API)](https://vocus.cc/article/64affcd6fd89780001437d39)
100 |
--------------------------------------------------------------------------------
/hugging-face-pian/hugging-faceep.7-yi-wen-sheng-tu-de-mo-huan-zhi-tu-shi-text-to-image.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: AI原來離我們那麼近...
3 | ---
4 |
5 | # 【Hugging Face】Ep.7 以文生圖的魔幻製圖師(Text To Image)
6 |
7 | 我們過往介紹了幾個關於文字AI應用的篇章:
8 |
9 | * [【Hugging Face】Ep.5 文字世界中的超能力語言英雄(Named Entity Recognition)](https://vocus.cc/article/64a42269fd89780001589eca)
10 | * [【Hugging Face】Ep.6 解決問題的專業級破關知識家(Question Answering)](https://vocus.cc/article/64ad426cfd89780001f0f010)
11 |
12 | 但單獨的文字應用似乎不太能滿足千變萬化的應用時代,相信常常我們都有在Line、Facebook看到過梗圖吧! 但這些梗圖都非常的陽春,通常在我們給予的背景圖上加註文字,就產生很多的問候圖,非常的呆板,那如果AI能夠理解我們的意圖並繪製出圖片不就更完美了嗎? 很幸運的我們搭上了AI發展的時代列車,這樣的技術也越趨成熟,各式各樣的模型也都有高手經過微調放置在網路上開源共享,這個篇章我們就會實際以技術角度來進行使用,並測試看看效果如何。
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
圖片來源
21 |
22 |
23 |
24 | ### 我們需要哪些素材?
25 |
26 | 由於目前效果最好的莫過於「stable-diffusion」了,它是2022年發布的深度學習文字到圖像生成模型, 因此我們也會以它來進行任務,但此模型對於「中文」的識別來說並不友善 😔 , 那我們能怎麼做呢?
27 |
28 | 當然可以對該模型進行Fine Tune, But…數據哪裡來?
29 |
30 | 除了自行Fine Tune之外還有別的思路嗎? 當然有! 我們在「[【Hugging Face】Ep.2 初探新手村, 打造專屬的翻譯官](https://vocus.cc/article/64a013ecfd89780001601391)」有介紹了如何搭建一個翻譯官, 那這位翻譯官不就能夠幫助我們將中文翻譯成中文了嗎? 透過簡單的AI工具庫組合技巧就能夠幫我們完成中文語句產生圖像的任務了, 如此一來需要的素材大致如下:
31 |
32 | * 翻譯AI: [Helsinki-NLP/opus-mt-zh-en](https://huggingface.co/Helsinki-NLP/opus-mt-zh-en)
33 | * 文字生成圖片AI: [runwayml/stable-diffusion-v1-5](https://huggingface.co/runwayml/stable-diffusion-v1-5)
34 |
35 | 怎麼找這些模型呢?
36 |
37 | 在「[【Hugging Face】Ep.3 前往Dataset掏金趣](https://vocus.cc/article/64a2c62afd897800018a8185)」我們有介紹過HuggingFace平台如何精準的找出我們需要的模型。
38 |
39 | ### 安裝套件
40 |
41 | ```python
42 | !pip install diffusers
43 | !pip install transformers
44 | ```
45 |
46 | ### 我們先看看尚未翻譯過的成果
47 |
48 | ```python
49 | from diffusers import StableDiffusionPipeline
50 | import torch
51 |
52 | t2i = StableDiffusionPipeline.from_pretrained('runwayml/stable-diffusion-v1-5')
53 | t2i = t2i.to("cpu")
54 |
55 | prompt = "一個在窗戶上的蘋果"
56 | image = t2i(prompt).images[0]
57 | image
58 | ```
59 |
60 | 圖片來源
61 |
62 | 我們期望有蘋果、有窗, But…怎麼會是這樣呢? 這是什麼鬼?
63 |
64 | 仔細看了官方說明文件有指出: 「該模型主要使用英文字幕進行訓練,在其他語言中效果不佳。」
65 |
66 |
67 |
68 | 既然如此我們何不搭個翻譯官,幫我們將中文翻譯成英文再讓以文產圖機器人更容易理解呢?
69 |
70 | ### 透過翻譯讓AI更理解我們的需求
71 |
72 | 我們就在產生圖片之前加掛翻譯功能, 將我們的中文語句翻譯成英文, 再讓Text-to-Image AI理解我們真正的意圖。
73 |
74 | #### 翻譯
75 |
76 | 透過翻譯, 讓我們將中文轉換成英文。
77 |
78 | ```python
79 | from transformers import pipeline
80 | # 使用翻譯任務
81 | translator = pipeline("translation", model='Helsinki-NLP/opus-mt-zh-en')
82 |
83 | t = translator('一個在窗戶上的蘋果')
84 | prompt = t[0]['translation_text']
85 | ```
86 |
87 | #### 重新生成圖片
88 |
89 | ```python
90 | image = t2i(prompt).images[0]
91 | image
92 |
93 | ```
94 |
95 | 圖片來源
96 |
97 | 看起來正常多了, 有窗、有蘋果, 基本上都滿足我們提出的需求。
98 |
99 | 今天的範例都在這裡「[📦](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/huggingface/huggingface\_qa.ipynb)[huggingface/huggingface\_text2image.ipynb](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/huggingface/huggingface\_text2image.ipynb)」歡迎自行取用。
100 |
101 | 如何使用請參閱「[【Google Colab系列】台股分析預備式: Colab平台與Python如何擦出火花?](https://www.potatomedia.co/s/aNLHZe3S)」。
102 |
103 | ### 結語
104 |
105 | 藉由Hugging Face平台, 我們可以親手打造各式各樣的AI機器人, 上面也已經有許多前輩分享的模型可供使用, 對於我們來說只要站在巨人的肩膀上即可, 也期望有朝一日我們也能訓練出對這世界更有幫助的AI模型。
106 |
107 | 喜歡撰寫文章的你,不妨來了解一下:
108 |
109 | [Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 - 為什麼要加入?](https://www.potatomedia.co/s/2PmFxsq)
110 |
111 | 歡迎加入一起練習寫作,賺取知識!
112 |
113 | #### 更多關於【Hugging Face 系列】…
114 |
115 | * [【Hugging Face】Ep.1 平凡人也能玩的起的AI平台](https://vocus.cc/article/649d7961fd89780001b63b0a)
116 | * [【Hugging Face】Ep.2 初探新手村, 打造專屬的翻譯官](https://vocus.cc/article/64a013ecfd89780001601391)
117 | * [【Hugging Face】Ep.3 前往Datasets掏金趣](https://vocus.cc/article/64a2c62afd897800018a8185)
118 | * [【Hugging Face】Ep.4 文字與模型的轉換器Tokenizer](https://vocus.cc/article/64a34d8dfd8978000190e556)
119 | * [【Hugging Face】Ep.5 文字世界中的超能力語言英雄(Named Entity Recognition)](https://vocus.cc/article/64a42269fd89780001589eca)
120 | * [【Hugging Face】Ep.6 解決問題的專業級破關知識家(Question Answering)](https://vocus.cc/article/64ad426cfd89780001f0f010)
121 | * [【Hugging Face】Ep.7 以文生圖的魔幻製圖師(Text To Image)](https://vocus.cc/article/64aea57ffd89780001075213)
122 | * [【Hugging Face】Ep.8 專業的標準化推理家(Inference API)](https://vocus.cc/article/64affcd6fd89780001437d39)
123 |
--------------------------------------------------------------------------------
/hugging-face-pian/hugging-faceep.8-zhuan-ye-de-biao-zhun-hua-tui-li-jia-inference-api.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: AI原來離我們那麼近...
3 | ---
4 |
5 | # 【Hugging Face】Ep.8 專業的標準化推理家(Inference API)
6 |
7 | 圖片來源
8 |
9 | 前面幾個篇章已經大致上介紹了Hugging Face這個平台的一些基本概念了,既然我們都能夠在平台上找到各式各樣的模型,而且也能夠照著教學一步步的來下載並使用,但有沒有更簡單的方式呢?
10 |
11 | 比如說,我們專注在應用端上的開發,AI的推理就藉由平台進行呢? 答案肯定是有的,近期越來越多開源的平台也都開放這種便利的方式供給我們存取,一旦我們與它綁的越深它就越容易向我們收取部分的費用來進行獲利的商業模式,就是一種升級解鎖的概念,提供適度免費可用的使用方式,想要更加方便就是付費。
12 |
13 | Hugging Face提供了Inference API,透過標準化的規則制定,讓模型的上傳者以標準的格式進行擺放,而使用者也能夠較簡易、少部分修改的存取這些API來完成AI的應用,那這些API怎麼用呢? 收費狀況又是如何呢? 我們將陸續的來進行介紹。
14 |
15 | ### 讓新手領航員帶你導覽API…
16 |
17 | 基本上許多的模型上傳者都已經有照著平台上的規範擺放正確的模型,並提供如何使用API,如果還不知道怎麼使用模型的話,歡迎參考「[【Hugging Face】Ep.1 平凡人也能玩的起的AI平台](https://vocus.cc/article/649d7961fd89780001b63b0a)」,接著我們實際找一個模型來看看它的API長怎樣吧!
18 |
19 | 首先來找個模型,這次找到「[csebuetnlp/mT5\_multilingual\_XLSum](https://huggingface.co/csebuetnlp/mT5\_multilingual\_XLSum)」
20 |
21 | 圖片來源
22 |
23 | 找到之後我們點選右上方的「Deploy」 → 「Inference API」就可以看到如何使用了。
24 |
25 | 圖片來源
26 |
27 | ### API架構說明
28 |
29 | 第一步我們需要透過\*\*[Model Hub](https://huggingface.co/models)\*\*來找尋模型,基本上API的入口URL結構為:
30 |
31 | ```python
32 | # 以上述範例來說為:
33 | #
34 | ENDPOINT =
35 | ```
36 |
37 | 底下是一個針對於「summarization」類型任務的API樣版,已經附上註解,再請細細品嘗:
38 |
39 | ❗ API\_TOKEN記得填入, 請至:[https://huggingface.co/docs/hub/security-tokens,依照教學進行帳號的註冊與Token的申請。](https://huggingface.co/docs/hub/security-tokens%EF%BC%8C%E4%BE%9D%E7%85%A7%E6%95%99%E5%AD%B8%E9%80%B2%E8%A1%8C%E5%B8%B3%E8%99%9F%E7%9A%84%E8%A8%BB%E5%86%8A%E8%88%87Token%E7%9A%84%E7%94%B3%E8%AB%8B%E3%80%82)
40 |
41 | [https://huggingface.co/settings/tokens](https://huggingface.co/settings/tokens)
42 |
43 | 除了python語言之外,也提供javascript與cURL,那這邊就先以python進行說明。
44 |
45 | 輸入的文章摘取自: [https://www.ithome.com.tw/news/157763](https://www.ithome.com.tw/news/157763)
46 |
47 | ```python
48 | import requests
49 |
50 | # 就是所謂的ENDPOINT
51 | API_URL = ""
52 |
53 | # API_TOKEN的部分請至:
54 | headers = {"Authorization": f"Bearer {API_TOKEN}"}
55 |
56 | # 包裝成一個query函式,並設計好請求的payload data
57 | def query(payload):
58 | response = requests.post(API_URL, headers=headers, json=payload)
59 | return response.json()
60 |
61 | # 呼叫query函式並帶入payload進行API請求,最終得到推理結果
62 | output = query({
63 | "inputs": "在接獲美國政府用戶通報下,微軟發現中國駭客組織利用所獲得的一個微軟帳號(MSA)消費者簽章金鑰來偽造身分認證權杖,以存取使用Outlook Web Access in Exchange Online(OWA)及Outlook.com的用戶,估計影響歐美地區的25個政府組織與相關個人",
64 | })
65 | ```
66 |
67 | 並得到以下結果:
68 |
69 | ```python
70 | [{'summary_text': '美國電腦巨頭微軟發現中國黑客組織利用個人簽章金鑰來偽造身分認證權杖,影響歐美地區的25個政府組織。'}]
71 | ```
72 |
73 | 其它不同的任務有不同的樣板,請參考「[Detailed parameters](https://huggingface.co/docs/api-inference/detailed\_parameters)」。
74 |
75 | ### 真有這麼佛心?
76 |
77 | 圖片來源
78 |
79 | 我們可以看到雖然免費使用,但卻有速率上的限制,但對於一般的小應用來說已經足夠使用,不過基本上推理的部分是由CPU運算,因此效能可能不是我們所滿意的結果,如果需要更強大的功能請參考「[Inference Endpoints](https://huggingface.co/docs/inference-endpoints/index)」後面的篇章我們再來針對這個部分進行詳解。
80 |
81 | 今天的範例都在這裡「[📦huggingface/huggingface\_ep8\_inference\_api.ipynb](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/huggingface/huggingface\_ep8\_inference\_api.ipynb)」歡迎自行取用。
82 |
83 | 如何使用請參閱「[【Google Colab系列】台股分析預備式: Colab平台與Python如何擦出火花?](https://www.potatomedia.co/s/aNLHZe3S)」。
84 |
85 | ### 結語
86 |
87 | 目前的Hugging Face平台看起來還蠻佛心的,以開源共享為主,但曾經的MongoDB、Elasticsearch也是如此,可惜到最後仍逐漸走向商業化,甚至雲端訂閱才能享受到強大功能,不知道未來的Hugging Face走向會不會也是如此,但這也是必然的,否則怎麼養得起那麼多的員工呢?
88 |
89 | 既然現在有了這些方便的API,那我們不妨好好的享用一番,簡單的使用API來兜出我們的應用,像是串接Line Bot、手機APP…等AI輔助工具,後續也將撰寫一篇實戰篇來結合AI應用。
90 |
91 | 喜歡撰寫文章的你,不妨來了解一下:
92 |
93 | [Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 - 為什麼要加入?](https://www.potatomedia.co/s/2PmFxsq)
94 |
95 | 歡迎加入一起練習寫作,賺取知識!
96 |
97 | #### 更多關於【Hugging Face 系列】…
98 |
99 | * [【Hugging Face】Ep.1 平凡人也能玩的起的AI平台](https://vocus.cc/article/649d7961fd89780001b63b0a)
100 | * [【Hugging Face】Ep.2 初探新手村, 打造專屬的翻譯官](https://vocus.cc/article/64a013ecfd89780001601391)
101 | * [【Hugging Face】Ep.3 前往Datasets掏金趣](https://vocus.cc/article/64a2c62afd897800018a8185)
102 | * [【Hugging Face】Ep.4 文字與模型的轉換器Tokenizer](https://vocus.cc/article/64a34d8dfd8978000190e556)
103 | * [【Hugging Face】Ep.5 文字世界中的超能力語言英雄(Named Entity Recognition)](https://vocus.cc/article/64a42269fd89780001589eca)
104 | * [【Hugging Face】Ep.6 解決問題的專業級破關知識家(Question Answering)](https://vocus.cc/article/64ad426cfd89780001f0f010)
105 | * [【Hugging Face】Ep.7 以文生圖的魔幻製圖師(Text To Image)](https://vocus.cc/article/64aea57ffd89780001075213)
106 | * [【Hugging Face】Ep.8 專業的標準化推理家(Inference API)](https://vocus.cc/article/64affcd6fd89780001437d39)
107 |
--------------------------------------------------------------------------------
/ji-chu-pian/README.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: 主要介紹工具的使用方式與概念導讀
3 | ---
4 |
5 | # 1 基礎篇
6 |
7 |
--------------------------------------------------------------------------------
/ji-chu-pian/google-colab-xi-lie-colab-ping-tai-yu-python-ru-he-ca-chu-huo-hua.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: 一起動動手來玩玩Python吧
3 | ---
4 |
5 | # 【Google Colab Python系列】Colab平台與Python如何擦出火花?
6 |
7 | 圖片來源
8 |
9 | 這次的主題除了結合平時興趣之一的金融理財之外,亦將本業的軟體程式概念進行結合,透過跨領域的想法激盪出屬於自己的交易策略,過程中也將學習歷程進行筆記,提供給路途中的朋友一個方向,讓我們一起動動手打造出自己的分析程式吧!
10 |
11 | 多年的軟體開發經驗,過程中也踩過不少雷,因此常常在學習道路上都期望有人能夠將技術經驗進行分享,讓我們能夠少走一些彎路,而作者本身也有這樣的願景在,希望幫助後進者能夠減少阻礙,一同加入未來的趨勢,每一字每一句都是肺腑之言,本身也非常能夠理解初學者的難處在哪,故而在撰寫教材文章的時候,都會由淺入深的循序漸進,幫助一個沒有任何基礎經驗的朋友較無痛的加入,而這次選擇的技術平台就非常適合初學者,相信只要我們努力踏實的踏出每一步,就能夠掌握到寶貴的知識庫。
12 |
13 | 接下來的教學系列非常精彩,有興趣的朋友歡迎隨時關注與討論,讓我們一起學習成長,創造屬於自己的財富吧!
14 |
15 | 進入主題之前先來談談為什麼選擇Google Colab這個平台來進行使用呢? 主要有以下幾個特點。
16 |
17 | 圖片來源
18 |
19 | 看到以上的特點其實只是冰山一角而已,相信技術同好者們應該都已經熱血沸騰了吧! 廢話不多說,我們就來實際使用一下Google Colab這套雲端開發軟體,讓我們奠定程式交易的基礎,共創未來財富吧!
20 |
21 | ### 起手式: 開啟記事本進行第一式
22 |
23 | 我們先進到Google Colab的首頁:[https://colab.research.google.com/](https://colab.research.google.com/)
24 |
25 | 一進入首頁如果已經登入Google帳號的朋友,會看到導引列,請我們建立一個筆記本,這就是一個非常簡單的開端,請按下「新增記事本」吧!
26 |
27 | 圖片來源
28 |
29 | 新增完畢後會被導引到編輯頁面,就如同我們在編輯文章一樣,開始撰寫我們的草稿並準備測試及發佈吧!
30 |
31 | 圖片來源
32 |
33 | ### 練功蹲馬步: 美好開端穩一步
34 |
35 | 我們就以程式入門最簡單的Hello World進行示範,讓一段程式碼實際執行並印出結果。
36 |
37 | 我們用Python語言的內建關鍵字「Print」印出期望資訊如下:
38 |
39 | ```jsx
40 | Print("Hello World")
41 | ```
42 |
43 | 圖片來源
44 |
45 | 我們可以在程式碼執行區塊下一行看到預期結果,使用Colab最大的好處在於每一段程式碼都可以是一個獨立的區塊,如此一來假設我們每一段都撰寫非常詳細的註解說明,相信對於入門者來說就非常容易的進入到這個領域,也是Google Colab發展的主要宗旨,透過教學共享的方式互相學習創造共贏。
46 |
47 | 再寫一段程式碼…
48 |
49 | 圖片來源
50 |
51 | 未來的故事由你來接著創造,請試著動手做看看吧…
52 |
53 | ### 再來下一步:寫出心法做紀錄
54 |
55 | 我們除了當下撰寫完成一份程式碼之外,透過良好的紀錄來描述這段語法主要處理的目的、架構、注意事項、參考資源…等資訊,幫助未來的我們可以讀懂自己當時開發的內容,並進行維護、優化及升級,也讓協作的夥伴可以更快的進入狀況,透過團體合作的方式對抗快速變遷的環境。
56 |
57 | 按下「+文字」來增加一個區塊。
58 |
59 | 圖片來源
60 |
61 | 增加區塊之後就可以開始撰寫屬於該段程式碼的說明文件囉,對了,這邊使用的編輯格式為[Markdown語法](https://zh.wikipedia.org/zh-tw/Markdown),雖然是軟體工程常用的註解語法架構,但其實非常的容易學習,一般人也能快速進入狀況,就算不會語法也沒關係,透過列表上的UI點選也可以很容易的寫出漂亮的文件。
62 |
63 | 圖片來源
64 |
65 | 給自己一個練習,寫出一段大綱來說明你的程式碼,歡迎留言分享學習心得,一起努力成長,加油!
66 |
67 | ### 資源有限度: 使用起來要有度
68 |
69 | 由於我們使用的是免費雲端,並不代表無限量的使用,Google會分配給我們一些免費的額度,當玩的越進階時,如果還想使用雲端資源就得付費才能有更好的體驗囉! 這也是目前雲端廠商的獲利模式,透過訂閱加購的方式來提升獲利能力。
70 |
71 | 右上角的區塊點擊下去,我們可以看到目前使用了多少資源,還有多少額度可以使用,這也再提醒我們如何在有限度的資源底下寫出一段能夠跑的漂亮的程式碼。
72 |
73 | 圖片來源
74 |
75 | ### 進階玩家有一步: GPU、TPU任你訓練每一步
76 |
77 | Google Colab非常貼心的幫我們準備了GPU與TPU的環境,讓我們可以進行機器學習與類神經網路訓練等複雜的AI模型訓練,但使用這個部分需要注意的是免費配額其實都不敷我們使用,因此通常被拿來做教育訓練,實際上如果要進行更進階的模型訓練僅能進行加購,或者自行架設機器將程式碼搬移到自行架設的主機進行訓練,但成本的估計就自行評估囉!
78 |
79 | 打開「執行階段」並按下變更「執行階段類型」。
80 |
81 | 圖片來源
82 |
83 | 這邊可以根據個人需求選擇需要的硬體加速器,提供了GPU與TPU兩個選項,但值得注意的還是老話一句,資源有限!
84 |
85 | 圖片來源
86 |
87 | ### 結語
88 |
89 | 這次主要針對Google Colab進行簡單的入門簡介,相信整個操作起來應該不到5分鐘吧! 5分鐘換到寶貴的開發經驗是非常值得的投資,就怕我們連開始都不願意,只要跨出第一步相信第二步、第三步就越來越快,就好比知識與財富的累積,每天進步一點點,不論是財富還是知識都會拉開一大步,加油! Keep Going😊。
90 |
91 |
--------------------------------------------------------------------------------
/jiao-yi-ce-lve-hui-ce-pian/README.md:
--------------------------------------------------------------------------------
1 | # 4 交易策略回測篇
2 |
3 |
--------------------------------------------------------------------------------
/jiao-yi-ce-lve-hui-ce-pian/google-colab-python-xi-lie-ji-shu-zhi-biao-hui-ce-kd-ce-lve.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: 用數據來佐證一切吧!
3 | ---
4 |
5 | # 【Google Colab Python系列】 技術指標回測 - KD策略
6 |
7 | 圖片來源
8 |
9 | 常常我們在財經節目聽到一堆技術指標都可以成功獲利,但真的如此嗎? 這麼簡單的技術指標操作就能獲利,早就人人變成有錢人了! 相信數據會說話,身為軟體工程師就最喜歡用數字來解讀一切了,因此這個篇章將會手把手教你如何使用Python語言來回測你的股票及交易策略。
10 |
11 |
12 |
13 | 剛接觸股市時最常聽到的就是KD、RSI、MACD...等,一堆看不懂的技術指標名詞,也常常聽到說什麼K20以下向上與D值黃金交叉時買進的策略,一堆眼花撩亂的字眼已經讓投資的熱情被冷水給澆熄了,但身為科技人的我們怎麼可以退卻呢? 因此抱著學習的態度來結合程式進行統計與分析,並且藉由專家開發的便利套件來進行驗證,最終得出回測的結果,有了數據之後我們才知道該怎麼做,該怎麼修正,才不會在投資道路上像隻無頭蒼蠅般的亂竄,最終賠了時間又賠了金錢。
14 |
15 | ## 制定策略
16 |
17 | 那以下的範例會以常聽到的KD指標進行回測,我們先來擬訂一下回測的目標吧,我們就將買進及賣出切分成以下兩種條件:
18 |
19 | * 買進策略:「KD低於20且與D黃金交叉」。
20 | * 賣出策略: 「KD大於80」。
21 |
22 |
23 |
24 | ## 開始實作的旅程
25 |
26 | ### 工欲善其事必先利其器: 來安裝套件吧
27 |
28 | * [x] [yfinance](https://pypi.org/project/yfinance/): 獲取Yahoo Finance API的小幫手
29 | * [x] [backtesting](https://kernc.github.io/backtesting.py/): 回測工具
30 | * [x] [ta-lib](https://github.com/TA-Lib/ta-lib-python): 技術指標工具
31 |
32 | ```python
33 | # 安裝必要套件
34 | !pip install yfinance backtesting
35 |
36 | # 安裝Ta-Lib
37 | !wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz
38 | !tar -xzvf ta-lib-0.4.0-src.tar.gz
39 | %cd ta-lib
40 | !./configure --prefix=/usr
41 | !make
42 | !make install
43 | !pip install Ta-Lib
44 | ```
45 |
46 | 這邊比較特別的是\`Ta-Lib\`這個套件,需要重新Compile,約耗時3分鐘,可以喝個咖啡再回來看結果 😋
47 |
48 | ### 數據會說話,但...我們要先有數據
49 |
50 | 我們就透過「yfinance」這個套件來幫我們下載數據吧!
51 |
52 | ```python
53 | import yfinance as yf
54 | import pandas as pd
55 | from pandas_datareader import data
56 | from datetime import datetime
57 |
58 | ################################# 請視需求帶入參數 ######################################
59 | # 股票代號
60 | stock_code = '0050.TW'
61 |
62 | # 開始時間
63 | start_date = datetime(2013, 1, 1)
64 |
65 | # 結束時間
66 | end_date = datetime(2023, 2, 11)
67 | ###########################################################################################
68 |
69 | # 獲取股票資料
70 | yf.pdr_override()
71 |
72 | # 從yahoo資料源獲取台股代號的datafram
73 | df = data.get_data_yahoo(stock_code, start_date, end_date)
74 |
75 | df.tail(10)
76 | ```
77 |
78 | 會得出股票的資訊
79 |
80 | ```
81 | Open High Low Close Adj Close Volume
82 | Date
83 | 2022-07-11 113.650002 113.699997 111.849998 112.250000 112.250000 7572953
84 | 2022-07-12 110.949997 110.949997 109.150002 109.550003 109.550003 11133444
85 | 2022-07-13 113.000000 113.650002 112.599998 113.449997 113.449997 24824897
86 | 2022-07-14 112.699997 114.250000 111.800003 114.000000 114.000000 14750428
87 | 2022-07-15 114.599998 115.650002 113.750000 115.500000 115.500000 18555312
88 | 2022-07-18 114.650002 114.849998 113.949997 114.199997 114.199997 22207344
89 | 2022-07-19 113.949997 114.650002 113.599998 114.300003 114.300003 13251365
90 | 2022-07-20 115.849998 116.199997 114.699997 115.050003 115.050003 16836288
91 | 2022-07-21 115.400002 116.349998 115.000000 116.349998 116.349998 8803270
92 | 2022-07-22 116.599998 117.199997 116.300003 116.800003 116.800003 15614914
93 | ```
94 |
95 | ### 有了數據之後,我們要讓數據會說話!
96 |
97 | 數據是最有說服力的證據,讓我們實際撰寫一套交易策略來為我們的交易說說話吧!
98 |
99 | 1. 這邊的範例主要是先利用talib來計算數據的KD值。
100 | 2. 設計策略: KD小於20且黃金交叉(K穿越D)時買入,KD大於80且死亡交叉(D穿越K)時買入。
101 | 3. 設定金額與手續費之後去跑回測資料。
102 |
103 | 以上就可以在固定區間中不斷的替換策略,研究出屬於自己的一套最佳化策略去進行股市交易,提高勝率。
104 |
105 | ```python
106 | from backtesting import Backtest, Strategy
107 |
108 | from backtesting.lib import crossover
109 | from backtesting.test import SMA
110 |
111 | from talib import abstract
112 |
113 | import pandas as pd
114 |
115 |
116 | # bypass data in Strategy
117 | def I_bypass(data):
118 | return data
119 | # 制定KD交易策略, K < 20買,
120 | class KDCross(Strategy):
121 | lower_bound = 20
122 | upper_bound = 80
123 |
124 | def init(self):
125 | self.k = self.I(I_bypass, self.data.slowk)
126 | self.d = self.I(I_bypass, self.data.slowd)
127 |
128 | def next(self):
129 | if crossover(self.k, self.d) and self.kself.upper_bound and self.d>self.upper_bound:
132 | if self.position and self.position.is_long:
133 | self.position.close()
134 |
135 | # CSV檔案中若有缺漏,會使用內插法自動補值
136 | df = df.interpolate()
137 |
138 | # 將索引欄資料轉換成pandas的時間格式,backtesting才有辦法排序
139 | df.index = pd.to_datetime(df.index)
140 |
141 | # 使用talib計算KD值
142 | df_tmp = df
143 |
144 | # 由於talib僅支援high、low、close這三種欄位名稱,因此進行一次轉換
145 | df_tmp.rename(columns = {'High':'high', 'Low':'low','Adj Close':'close','Close':''}, inplace = True)
146 |
147 | # 計算kd
148 | kd = abstract.STOCH(df_tmp)
149 | kd.index=df_tmp.index
150 |
151 | # 合併
152 | fnl_df = df_tmp.join(kd).dropna()
153 |
154 | # 一樣將欄位名稱轉回backtest接受的參數名稱
155 | fnl_df.rename(columns = {'high':'High', 'low':'Low','close':'Close'}, inplace = True)
156 |
157 | # 資料來源, 交易策略, 現金, 手續費(%)
158 | test = Backtest(fnl_df, KDCross, cash=10000, commission=.004)
159 |
160 |
161 | # 執行回測程式並存到result中
162 | result = test.run()
163 |
164 | print(result)
165 |
166 | test.plot()
167 | ```
168 |
169 | 最後我們來解讀一下結果資訊吧,結果如下:
170 |
171 | ```
172 | Start 2013-01-14 00:00:00
173 | End 2023-02-10 00:00:00
174 | Duration 3679 days 00:00:00
175 | Exposure Time [%] 29.922858
176 | Equity Final [$] 10460.521845
177 | Equity Peak [$] 12429.626572
178 | Return [%] 4.605218
179 | Buy & Hold Return [%] 122.018349
180 | Return (Ann.) [%] 0.461715
181 | Volatility (Ann.) [%] 10.943097
182 | Sharpe Ratio 0.042192
183 | Sortino Ratio 0.060318
184 | Calmar Ratio 0.013289
185 | Max. Drawdown [%] -34.743676
186 | Avg. Drawdown [%] -3.493335
187 | Max. Drawdown Duration 2786 days 00:00:00
188 | Avg. Drawdown Duration 225 days 00:00:00
189 | # Trades 31
190 | Win Rate [%] 64.516129
191 | Best Trade [%] 6.143418
192 | Worst Trade [%] -13.532682
193 | Avg. Trade [%] 0.141764
194 | Max. Trade Duration 138 days 00:00:00
195 | Avg. Trade Duration 35 days 00:00:00
196 | Profit Factor 1.144918
197 | Expectancy [%] 0.25123
198 | SQN 0.161717
199 | ```
200 |
201 | 其中我們只要關注兩項指標:
202 |
203 | * Win Rate \[%]: 勝率。
204 | * Return \[%]: 報酬率。
205 |
206 | 用上述指標就能大概判斷我們的策略是否值得投資,回測出來我們的勝率有64.5%算是過半,但美中不足的是報酬率僅有 4.605218,這是一個令人蠻失望的數字,但我們如果將回測資料往前拉到2008年就會非常可觀囉,不妨動手自己玩玩看!
207 |
208 | 另外也可以繪製成互動式圖表:
209 |
210 | 圖片來源
211 |
212 | ## 結語
213 |
214 | 如果報酬率不高但勝率高其實長期下來也只是將手續費送給券商而已,我們的目標應該是制定一套高勝率 + 高報酬率的指標策略,但這並不容易,況且機器無感情,我們人在交易時真的會照表操課嗎? 這很令人懷疑,因此常常交易策略是好的沒錯,但最終的關鍵仍在於人,因此投資的市場中主要是磨練我們的心性,假若心性不夠堅定,無法有紀律的照著自己的交易策略執行的話,就不太建議踏入市場,或者是直接購買指數型ETF,讓被動投資幫我們累積微幅報酬率即可,專注本業讓資金擴大才是最根本之道。
215 |
216 |
217 |
218 | 希望這樣的實戰練習能夠幫助到大家,讓我們不斷學習新知,因應這個變化萬千的世界,讓投資理財道路上減少踩雷的機會,創造出屬於自己的一套完美交易策略。
219 |
220 |
221 |
222 | 如果你也撰寫出一套成功的交易策略的話,也歡迎互相分享,一起學習,打怪破關,突飛猛進。
223 |
224 |
225 |
226 | 今天的範例都在這裡「[📦 ](../jupyter-examples/goodinfo\_yield.ipynb)[**kd\_strategy.ipynb**](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/kd\_strategy.ipynb)」歡迎自行取用。
227 |
228 | 如何使用請參閱「[【Google Colab Python系列】Colab平台與Python如何擦出火花?](https://www.potatomedia.co/s/aNLHZe3S)」。
229 |
230 | \------------------------------------------------------------------------------------------------
231 |
232 | 喜歡撰寫文章的你,不妨來了解一下:
233 |
234 | [Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 - 為什麼要加入?](https://www.potatomedia.co/s/2PmFxsq)
235 |
236 | 歡迎加入一起練習寫作,賺取知識,累積財富!
237 |
--------------------------------------------------------------------------------
/jupyter-examples/huggingface/huggingface_ep8_inference_api.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "nbformat": 4,
3 | "nbformat_minor": 0,
4 | "metadata": {
5 | "colab": {
6 | "provenance": [],
7 | "authorship_tag": "ABX9TyNda3ozgRVGpMcJqpcvEdwp",
8 | "include_colab_link": true
9 | },
10 | "kernelspec": {
11 | "name": "python3",
12 | "display_name": "Python 3"
13 | },
14 | "language_info": {
15 | "name": "python"
16 | }
17 | },
18 | "cells": [
19 | {
20 | "cell_type": "markdown",
21 | "metadata": {
22 | "id": "view-in-github",
23 | "colab_type": "text"
24 | },
25 | "source": [
26 | " "
27 | ]
28 | },
29 | {
30 | "cell_type": "markdown",
31 | "source": [
32 | "# 【Hugging Face】Ep.8 專業的標準化推理家(Inference API)\n",
33 | "\n"
34 | ],
35 | "metadata": {
36 | "id": "RGmurnJpQZK_"
37 | }
38 | },
39 | {
40 | "cell_type": "markdown",
41 | "source": [
42 | "## API架構說明\n",
43 | "第一步我們需要透過**[Model Hub](https://huggingface.co/models)**來找尋模型,基本上API的入口URL結構為:\n",
44 | "\n",
45 | "```python\n",
46 | "# 以上述範例來說為:\n",
47 | "# https://api-inference.huggingface.co/models/csebuetnlp/mT5_multilingual_XLSum\n",
48 | "ENDPOINT = https://api-inference.huggingface.co/models/\n",
49 | "```\n",
50 | "\n",
51 | "底下是一個針對於「summarization」類型任務的API樣版,已經附上註解,再請細細品嘗:\n",
52 | "\n",
53 | "❗ `API_TOKEN`記得填入, 請至: https://huggingface.co/docs/hub/security-tokens,依照教學進行帳號的註冊與Token的申請。\n",
54 | "\n",
55 | "除了python語言之外,也提供javascript與cURL,那這邊就先以python進行說明。\n",
56 | "\n",
57 | "其它不同的任務有不同的樣板,請參考「[Detailed parameters](https://huggingface.co/docs/api-inference/detailed_parameters)」。"
58 | ],
59 | "metadata": {
60 | "id": "UGzqaZ4DRju3"
61 | }
62 | },
63 | {
64 | "cell_type": "code",
65 | "execution_count": 6,
66 | "metadata": {
67 | "colab": {
68 | "base_uri": "https://localhost:8080/"
69 | },
70 | "id": "n7p6Q-GNQR2n",
71 | "outputId": "2caa5164-7b8a-466f-a614-f6d8f2813203"
72 | },
73 | "outputs": [
74 | {
75 | "output_type": "execute_result",
76 | "data": {
77 | "text/plain": [
78 | "[{'summary_text': '美國電腦巨頭微軟發現中國黑客組織利用個人簽章金鑰來偽造身分認證權杖,影響歐美地區的25個政府組織。'}]"
79 | ]
80 | },
81 | "metadata": {},
82 | "execution_count": 6
83 | }
84 | ],
85 | "source": [
86 | "import requests\n",
87 | "\n",
88 | "# 就是所謂的ENDPOINT\n",
89 | "API_URL = \"https://api-inference.huggingface.co/models/csebuetnlp/mT5_multilingual_XLSum\"\n",
90 | "\n",
91 | "# API_TOKEN的部分請至: https://huggingface.co/docs/hub/security-tokens\n",
92 | "API_TOKEN = '{YOUR_API_TOKEN}'\n",
93 | "headers = {\"Authorization\": f\"Bearer {API_TOKEN}\"}\n",
94 | "\n",
95 | "# 包裝成一個query函式,並設計好請求的payload data\n",
96 | "def query(payload):\n",
97 | "\tresponse = requests.post(API_URL, headers=headers, json=payload)\n",
98 | "\treturn response.json()\n",
99 | "\n",
100 | "# 呼叫query函式並帶入payload進行API請求,最終得到推理結果\n",
101 | "# 文章來自於: https://www.ithome.com.tw/news/157763\n",
102 | "output = query({\n",
103 | "\t\"inputs\": \"在接獲美國政府用戶通報下,微軟發現中國駭客組織利用所獲得的一個微軟帳號(MSA)消費者簽章金鑰來偽造身分認證權杖,以存取使用Outlook Web Access in Exchange Online(OWA)及Outlook.com的用戶,估計影響歐美地區的25個政府組織與相關個人\",\n",
104 | "})\n",
105 | "\n",
106 | "output"
107 | ]
108 | }
109 | ]
110 | }
--------------------------------------------------------------------------------
/jupyter-examples/huggingface/huggingface_qa.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "nbformat": 4,
3 | "nbformat_minor": 0,
4 | "metadata": {
5 | "colab": {
6 | "provenance": [],
7 | "authorship_tag": "ABX9TyPM2ahcsRFonqXfCq4l+Pii",
8 | "include_colab_link": true
9 | },
10 | "kernelspec": {
11 | "name": "python3",
12 | "display_name": "Python 3"
13 | },
14 | "language_info": {
15 | "name": "python"
16 | }
17 | },
18 | "cells": [
19 | {
20 | "cell_type": "markdown",
21 | "metadata": {
22 | "id": "view-in-github",
23 | "colab_type": "text"
24 | },
25 | "source": [
26 | " "
27 | ]
28 | },
29 | {
30 | "cell_type": "markdown",
31 | "source": [
32 | "## 安裝套件"
33 | ],
34 | "metadata": {
35 | "id": "z7kZndasA3a6"
36 | }
37 | },
38 | {
39 | "cell_type": "code",
40 | "execution_count": null,
41 | "metadata": {
42 | "id": "9oWk1pTs_VKD"
43 | },
44 | "outputs": [],
45 | "source": [
46 | "!pip install transformers"
47 | ]
48 | },
49 | {
50 | "cell_type": "markdown",
51 | "source": [
52 | "## 給予知識文章\n",
53 | "\n",
54 | "這邊透過[Chatgpt](https://chat.openai.com/)幫我們產生Google的基礎知識並做為問答系統的基礎知識。"
55 | ],
56 | "metadata": {
57 | "id": "Kw02BQBcA9RY"
58 | }
59 | },
60 | {
61 | "cell_type": "code",
62 | "source": [
63 | "context = \"\"\"\n",
64 | "Google是一家全球知名的科技公司,成立於1998年,總部位於美國加利福尼亞州的山景城。Google以其在搜尋引擎技術方面的卓越表現而聞名,早期推出的Google搜尋引擎迅速成為全球最受歡迎和廣泛使用的搜尋引擎之一。\n",
65 | "\n",
66 | "除了搜尋引擎外,Google還開發和提供了許多其他互聯網產品和服務。其中包括谷歌地圖、谷歌郵箱(Gmail)、谷歌翻譯、谷歌雲端硬碟(Google Drive)等。此外,Google還擁有Android操作系統,該操作系統目前是全球最受歡迎的移動操作系統之一。\n",
67 | "\n",
68 | "Google也涉足硬體領域,推出了自己的智慧型手機系列Pixel,以及Pixelbook筆記型電腦、Google Home智慧音箱等產品。此外,Google還在人工智慧(AI)和機器學習領域投入了大量資源,並推出了許多與AI相關的產品和服務,如Google Assistant智慧助理和Google Lens圖像識別技術。\n",
69 | "\n",
70 | "除了互聯網產品和服務,Google還在廣告業務方面表現出色。其廣告平台Google Ads為廣告客戶提供了廣告投放和行銷解決方案,並通過廣告收入成為Google的主要盈利來源之一。\n",
71 | "\n",
72 | "Google在全球範圍內擁有廣泛的影響力和使用者基礎。其創始人之一拉里·佩奇(Larry Page)和謝爾蓋·布林(Sergey Brin)一直是科技行業的知名人物,Google也是全球最具價值的品牌之一。公司在全球各地設有辦事處和數據中心,員工遍布世界各地。\n",
73 | "\n",
74 | "Google一直秉持著使訊息普遍可用和受人們歡迎的使命,致力於提供高質量的產品和服務,並不斷推動科技的創新和發展。\n",
75 | "\"\"\""
76 | ],
77 | "metadata": {
78 | "id": "tGmxf993DlFx"
79 | },
80 | "execution_count": null,
81 | "outputs": []
82 | },
83 | {
84 | "cell_type": "markdown",
85 | "source": [
86 | "## 打造QA任務機器人\n",
87 | "\n",
88 | "這邊我們選用[timpal0l/mdeberta-v3-base-squad2](https://huggingface.co/timpal0l/mdeberta-v3-base-squad2)這個模型進行任務。"
89 | ],
90 | "metadata": {
91 | "id": "kNX_ZlupBAbp"
92 | }
93 | },
94 | {
95 | "cell_type": "code",
96 | "source": [
97 | "from transformers import pipeline, AutoTokenizer, AutoModelForQuestionAnswering\n",
98 | "tokenizer = AutoTokenizer.from_pretrained(\"timpal0l/mdeberta-v3-base-squad2\")\n",
99 | "model = AutoModelForQuestionAnswering.from_pretrained(\"timpal0l/mdeberta-v3-base-squad2\")\n",
100 | "qa = pipeline(\"question-answering\", model=model, tokenizer=tokenizer)"
101 | ],
102 | "metadata": {
103 | "id": "XMLyIsVVA6Nw"
104 | },
105 | "execution_count": null,
106 | "outputs": []
107 | },
108 | {
109 | "cell_type": "markdown",
110 | "source": [
111 | "## 問與答\n",
112 | "\n",
113 | "回答雖然不盡完美, 但已經能夠精確的理解我們的問題並給予接近正確的回答, 見到如此成效, 對於商業嗅覺敏感的朋友來說, 或許已經想到要如何打造一個知識庫問答機器人了吧!\n",
114 | "\n",
115 | "後面的章節也會介紹如何自行訓練私有資料庫,並真正的打造私有的專屬問答知識家。"
116 | ],
117 | "metadata": {
118 | "id": "kaaJRfkGaGZW"
119 | }
120 | },
121 | {
122 | "cell_type": "code",
123 | "source": [
124 | "questions = [\n",
125 | " '請問Google的主要產品是什麼?',\n",
126 | " '請問創始人是誰?',\n",
127 | " '請問什麼時候開始的?'\n",
128 | "]\n",
129 | "\n",
130 | "for question in questions:\n",
131 | " result = qa(question = question, context = context)\n",
132 | " print(result['answer'])"
133 | ],
134 | "metadata": {
135 | "colab": {
136 | "base_uri": "https://localhost:8080/"
137 | },
138 | "id": "3Ka_iMkRaItl",
139 | "outputId": "aec3ed13-e0df-4182-aad8-7741fff16a8d"
140 | },
141 | "execution_count": null,
142 | "outputs": [
143 | {
144 | "output_type": "stream",
145 | "name": "stdout",
146 | "text": [
147 | "平台Google Ads為廣告客戶提供了廣告投放和行銷解決方案,並通過廣告收入成為Google的主要盈利來源之一。\n",
148 | "\n",
149 | "Google在全球範圍內擁有廣泛的影響力和使用者基礎。其創始人之一拉里·佩奇(Larry\n",
150 | "Google是一家全球知名的科技公司,成立於1998年,總部位於美國加利福尼亞州的山景城。Google以其在搜尋引擎技術方面的卓越表現而聞名,早期推出的Google搜尋引擎迅速成為全球最受歡迎和廣泛使用的搜尋引擎之一。\n"
151 | ]
152 | }
153 | ]
154 | }
155 | ]
156 | }
--------------------------------------------------------------------------------
/jupyter-examples/huggingface/opus_mt_zh_en.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "nbformat": 4,
3 | "nbformat_minor": 0,
4 | "metadata": {
5 | "colab": {
6 | "provenance": [],
7 | "authorship_tag": "ABX9TyMHDRXx/57jTszAJvgHIsRj",
8 | "include_colab_link": true
9 | },
10 | "kernelspec": {
11 | "name": "python3",
12 | "display_name": "Python 3"
13 | },
14 | "language_info": {
15 | "name": "python"
16 | }
17 | },
18 | "cells": [
19 | {
20 | "cell_type": "markdown",
21 | "metadata": {
22 | "id": "view-in-github",
23 | "colab_type": "text"
24 | },
25 | "source": [
26 | " "
27 | ]
28 | },
29 | {
30 | "cell_type": "code",
31 | "execution_count": null,
32 | "metadata": {
33 | "id": "dD0oGgoFahZK"
34 | },
35 | "outputs": [],
36 | "source": [
37 | "!pip install transformers\n",
38 | "\n",
39 | "# This tokenizer cannot be instantiated. Please make sure you have `sentencepiece` installed in order to use this tokenizer.\n",
40 | "!pip install sentencepiece\n",
41 | "\n",
42 | "!pip install sacremoses"
43 | ]
44 | },
45 | {
46 | "cell_type": "code",
47 | "source": [
48 | "from transformers import pipeline\n",
49 | "translator = pipeline(\"translation\", model='Helsinki-NLP/opus-mt-zh-en') #使用翻譯任務\n",
50 | "translator('這是一個很困難的問題')"
51 | ],
52 | "metadata": {
53 | "colab": {
54 | "base_uri": "https://localhost:8080/"
55 | },
56 | "id": "rEh8cq5Hajj1",
57 | "outputId": "00eebc59-00c2-4bdf-eeda-33fb7ec94def"
58 | },
59 | "execution_count": null,
60 | "outputs": [
61 | {
62 | "output_type": "execute_result",
63 | "data": {
64 | "text/plain": [
65 | "[{'translation_text': \"It's a very difficult question.\"}]"
66 | ]
67 | },
68 | "metadata": {},
69 | "execution_count": 3
70 | }
71 | ]
72 | }
73 | ]
74 | }
--------------------------------------------------------------------------------
/jupyter-examples/huggingface/tokenizers.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "nbformat": 4,
3 | "nbformat_minor": 0,
4 | "metadata": {
5 | "colab": {
6 | "provenance": [],
7 | "authorship_tag": "ABX9TyN0DVNiB+aQsY+IdYEOjcYl",
8 | "include_colab_link": true
9 | },
10 | "kernelspec": {
11 | "name": "python3",
12 | "display_name": "Python 3"
13 | },
14 | "language_info": {
15 | "name": "python"
16 | }
17 | },
18 | "cells": [
19 | {
20 | "cell_type": "markdown",
21 | "metadata": {
22 | "id": "view-in-github",
23 | "colab_type": "text"
24 | },
25 | "source": [
26 | " "
27 | ]
28 | },
29 | {
30 | "cell_type": "markdown",
31 | "source": [
32 | "前面我們介紹了「【Hugging Face】Ep.1 平凡人也能玩的起的AI平台」, 我們都知道「詞」是NLP世界中的最小單元, 關於詞的知識歡迎參考:\n",
33 | "\n",
34 | "簡單來說,主要的目的是將文本轉換為模型可以處理的數據。\n",
35 | "\n",
36 | "經過上述知識的洗禮, 我們對於詞也具有一定的基礎認知, 在「Hugging Face」的平台裡, 處理詞也提供了非常好用的Tokenizer工具, 就讓我們好好的來認識一下唄!"
37 | ],
38 | "metadata": {
39 | "id": "3vq3YDItqbVu"
40 | }
41 | },
42 | {
43 | "cell_type": "markdown",
44 | "source": [
45 | "## 安裝套件"
46 | ],
47 | "metadata": {
48 | "id": "piwGW_DvqjY8"
49 | }
50 | },
51 | {
52 | "cell_type": "code",
53 | "source": [
54 | "!pip install transformers"
55 | ],
56 | "metadata": {
57 | "id": "jXJ-yVTxqgAk"
58 | },
59 | "execution_count": null,
60 | "outputs": []
61 | },
62 | {
63 | "cell_type": "markdown",
64 | "source": [
65 | "## 斷詞\n",
66 | "\n",
67 | "這邊我們使用「[ckiplab/bert-tiny-chinese](https://huggingface.co/ckiplab/bert-tiny-chinese)」這個模型來進行中文的演示。"
68 | ],
69 | "metadata": {
70 | "id": "IvBkv0J5r7vT"
71 | }
72 | },
73 | {
74 | "cell_type": "code",
75 | "execution_count": null,
76 | "metadata": {
77 | "colab": {
78 | "base_uri": "https://localhost:8080/"
79 | },
80 | "id": "Ea4-KlagqM24",
81 | "outputId": "8f745b12-373e-4021-ce6f-019d6937939e"
82 | },
83 | "outputs": [
84 | {
85 | "output_type": "execute_result",
86 | "data": {
87 | "text/plain": [
88 | "['今', '天', '的', '天', '氣', '很', '好', '。']"
89 | ]
90 | },
91 | "metadata": {},
92 | "execution_count": 4
93 | }
94 | ],
95 | "source": [
96 | "from transformers import AutoTokenizer\n",
97 | "\n",
98 | "# Initialize tokenzier and model\n",
99 | "tokenizer = AutoTokenizer.from_pretrained(\"ckiplab/bert-tiny-chinese\")\n",
100 | "\n",
101 | "# Input text\n",
102 | "text = \"今天的天氣很好。\"\n",
103 | "tokens = tokenizer.tokenize(text)\n",
104 | "tokens"
105 | ]
106 | },
107 | {
108 | "cell_type": "markdown",
109 | "source": [
110 | "## 轉換成ID編碼"
111 | ],
112 | "metadata": {
113 | "id": "l0VAA7tf6NZN"
114 | }
115 | },
116 | {
117 | "cell_type": "code",
118 | "source": [
119 | "ids = tokenizer.convert_tokens_to_ids(tokens)\n",
120 | "ids"
121 | ],
122 | "metadata": {
123 | "colab": {
124 | "base_uri": "https://localhost:8080/"
125 | },
126 | "id": "zRNQ62sS6F22",
127 | "outputId": "a9a2b43e-9454-46a3-cc27-1b171bee067c"
128 | },
129 | "execution_count": null,
130 | "outputs": [
131 | {
132 | "output_type": "execute_result",
133 | "data": {
134 | "text/plain": [
135 | "[791, 1921, 4638, 1921, 3706, 2523, 1962, 511]"
136 | ]
137 | },
138 | "metadata": {},
139 | "execution_count": 25
140 | }
141 | ]
142 | },
143 | {
144 | "cell_type": "markdown",
145 | "source": [
146 | "## 解碼"
147 | ],
148 | "metadata": {
149 | "id": "90XoJISz6TQk"
150 | }
151 | },
152 | {
153 | "cell_type": "code",
154 | "source": [
155 | "decoded_string = tokenizer.decode([791, 1921, 4638, 1921, 3706, 2523, 1962, 511])\n",
156 | "decoded_string"
157 | ],
158 | "metadata": {
159 | "colab": {
160 | "base_uri": "https://localhost:8080/",
161 | "height": 35
162 | },
163 | "id": "W_pgPugA6UTM",
164 | "outputId": "6306a6c9-2957-46ec-96d5-1f9b8f52ddae"
165 | },
166 | "execution_count": null,
167 | "outputs": [
168 | {
169 | "output_type": "execute_result",
170 | "data": {
171 | "text/plain": [
172 | "'今 天 的 天 氣 很 好 。'"
173 | ],
174 | "application/vnd.google.colaboratory.intrinsic+json": {
175 | "type": "string"
176 | }
177 | },
178 | "metadata": {},
179 | "execution_count": 27
180 | }
181 | ]
182 | }
183 | ]
184 | }
--------------------------------------------------------------------------------
/jupyter-examples/pytube/pytube_quickstart.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "nbformat": 4,
3 | "nbformat_minor": 0,
4 | "metadata": {
5 | "colab": {
6 | "provenance": [],
7 | "authorship_tag": "ABX9TyPEHiTI2uVfz/JDedd90pA5",
8 | "include_colab_link": true
9 | },
10 | "kernelspec": {
11 | "name": "python3",
12 | "display_name": "Python 3"
13 | },
14 | "language_info": {
15 | "name": "python"
16 | }
17 | },
18 | "cells": [
19 | {
20 | "cell_type": "markdown",
21 | "metadata": {
22 | "id": "view-in-github",
23 | "colab_type": "text"
24 | },
25 | "source": [
26 | " "
27 | ]
28 | },
29 | {
30 | "cell_type": "markdown",
31 | "source": [
32 | "# 【資料處理神器區 - Pytube系列】 蒐集情報讓數據會說話\n",
33 | "\n",
34 | "這次要來介紹「pytube」這套神器, 當我們需要對影音進行統計分析時就需要使用這把利器來破關, 尤其是AI時代的來臨, 我們會需要大量的資料來進行模型的訓練, 而我們總不可能海量的去撈取這些資料, 會非常沒有效率也浪費空間, 因此我們會先進行偵查的任務, 需要派出偵察隊來蒐集youtube的影音資訊再來決策下一步…。\n",
35 | "\n",
36 | "而針對youtube影音平台的情境底下, 「pytube」就是偵查隊的最佳武器, 它不僅能夠蒐集基本資訊(長度、熱度、頻道數量、評分…), 也能夠抓取影片或者音訊, 非常的方便好用。\n",
37 | "\n",
38 | "那我們今天就來表演一下這套神器的使用方式, 預計抓取的資訊有音檔長度、發布日期、評分、多少人看過,這些資訊背後都隱藏著驚人的秘密...。"
39 | ],
40 | "metadata": {
41 | "id": "m4EcIHR50uWe"
42 | }
43 | },
44 | {
45 | "cell_type": "markdown",
46 | "source": [
47 | "## 安裝"
48 | ],
49 | "metadata": {
50 | "id": "cRy-Sc6Eyx5C"
51 | }
52 | },
53 | {
54 | "cell_type": "code",
55 | "execution_count": null,
56 | "metadata": {
57 | "id": "LMC--esLyn02"
58 | },
59 | "outputs": [],
60 | "source": [
61 | "!pip install pytube"
62 | ]
63 | },
64 | {
65 | "cell_type": "markdown",
66 | "source": [
67 | "## 引入套件庫並設定目標連結\n",
68 | "\n",
69 | "ℹ️ 這裡的 `${影片網址}` 請貼上目標的影片連結。\n",
70 | "\n",
71 | "這個步驟是基本使用上的第一步, 提供網址讓「pytube」去自動抓取相關資訊, 這一步並沒有實際進行下載, 因此網路傳輸的耗費並不大, 主要用來蒐集情資使用。"
72 | ],
73 | "metadata": {
74 | "id": "YEj3c4mOy-2x"
75 | }
76 | },
77 | {
78 | "cell_type": "code",
79 | "source": [
80 | "from pytube import YouTube\n",
81 | "\n",
82 | "yt = YouTube('${影片網址}')"
83 | ],
84 | "metadata": {
85 | "id": "08TQDb12y_Bx"
86 | },
87 | "execution_count": null,
88 | "outputs": []
89 | },
90 | {
91 | "cell_type": "markdown",
92 | "source": [
93 | "## 哪些資訊可以偵查?"
94 | ],
95 | "metadata": {
96 | "id": "LGMSpfdO1br5"
97 | }
98 | },
99 | {
100 | "cell_type": "code",
101 | "source": [
102 | "# 標題\n",
103 | "print(f'標題: {yt.title}')\n",
104 | "\n",
105 | "# 作者\n",
106 | "print(f'作者: {yt.author}')\n",
107 | "\n",
108 | "# 頻道識別碼\n",
109 | "print(f'頻道識別碼: {yt.channel_id}')\n",
110 | "\n",
111 | "# 影片的描述\n",
112 | "print(f'影片的描述: {yt.description}')\n",
113 | "\n",
114 | "# 影片的關鍵字\n",
115 | "print(f'影片的關鍵字: {yt.keywords}')\n",
116 | "\n",
117 | "# 影片的長度(秒)\n",
118 | "print(f'影片的長度: {yt.length} 秒')\n",
119 | "\n",
120 | "# 發布日期\n",
121 | "print(f'發布日期: {yt.publish_date}')\n",
122 | "\n",
123 | "# 評分\n",
124 | "print(f'評分: {yt.rating}')\n",
125 | "\n",
126 | "# 多少個人瀏覽過\n",
127 | "print(f'多少人看過: {yt.views}')"
128 | ],
129 | "metadata": {
130 | "colab": {
131 | "base_uri": "https://localhost:8080/"
132 | },
133 | "id": "df5Xs6Ds1hjd",
134 | "outputId": "288c68db-4e65-4950-b470-81ce63be5e47"
135 | },
136 | "execution_count": null,
137 | "outputs": [
138 | {
139 | "output_type": "stream",
140 | "name": "stdout",
141 | "text": [
142 | "標題: 怎樣買長照險:Q11.投保前要注意什麼?\n",
143 | "作者: 李柏泉\n",
144 | "頻道識別碼: UC3NpI8LWYRuJ83aaJRf5-9w\n",
145 | "影片的描述: None\n",
146 | "影片的關鍵字: []\n",
147 | "影片的長度: 416 秒\n",
148 | "發布日期: 2017-04-16 00:00:00\n",
149 | "評分: None\n",
150 | "多少人看過: 10857\n"
151 | ]
152 | }
153 | ]
154 | },
155 | {
156 | "cell_type": "markdown",
157 | "source": [
158 | "有了這些資訊我們可以做什麼? 就讓我列出幾個可能的方向供您思考:\n",
159 | "\n",
160 | "- 長度介於多少範圍的影音檔分析。\n",
161 | "- 瀏覽數量分析。\n",
162 | "- 評分高低分析。\n",
163 | "- 日期區間分析。\n",
164 | "\n",
165 | "P.S 年份較舊的影片可能缺少關鍵字、評分...等資訊, 畢竟早期也還沒規劃大數據的應用...。"
166 | ],
167 | "metadata": {
168 | "id": "z4pe0nDi8TK2"
169 | }
170 | },
171 | {
172 | "cell_type": "markdown",
173 | "source": [
174 | "## 可以怎麼統計分析?\n",
175 | "\n",
176 | "我們可以藉由另一套神器pandas來進行..., 底下提供幾個學習資源包, 可以建立基本概念後配合動手實作加深印象:\n",
177 | "\n",
178 | "- [【Google Colab Python系列】 資料處理神器 Pandas 起手式](https://vocus.cc/article/64c90f67fd8978000138d9bc)\n",
179 | "- [【Google Colab Python系列】 資料處理神器 Pandas 合併之術(join、concat)](https://vocus.cc/article/64ca3fb9fd897800018b230c)\n",
180 | "- [【Google Colab Python系列】 資料處理神器 Pandas 分割與重組之術(Grouping/Reshaping)](https://vocus.cc/article/64ca6232fd897800018e734a)\n",
181 | "\n",
182 | "上面的教學讀完了嗎? 接下來會教您如何結合pytube + pandas來構建屬於自己的影音分析系統、高品質語料庫爬蟲系統..., 這些實戰我們也會放在會員專屬文章區, 歡迎支持一下付費專欄, 讓我們更有動力分享關於軟體科技的武功心法:\n",
183 | "\n"
184 | ],
185 | "metadata": {
186 | "id": "NYDr6RrP9CwJ"
187 | }
188 | },
189 | {
190 | "cell_type": "markdown",
191 | "source": [
192 | "## 結語\n",
193 | "初步認識到pytube的功能之後, 我們就可以統計分析決定目標群, 甚至打造屬於AI訓練的爬蟲系統, 或者結合推薦系統建立個人 + 商業化的影音推播系統..., 非常的靈活, 重點在於我們會不會使用工具, 如何讓工具變成武器, 因此有個領路人可以讓您少走點彎路, 不妨花個銅板費購買一下實戰專欄, 讓您創造出各種創新的應用, 甚至能夠成立公司開發產品。\n",
194 | "\n",
195 | "\n",
196 | "喜歡撰寫文章的你,不妨來了解一下:\n",
197 | "\n",
198 | "\n",
199 | "[Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入?](https://www.potatomedia.co/s/2PmFxsq)\n",
200 | "\n",
201 | "\n",
202 | "歡迎加入一起練習寫作,賺取知識\n"
203 | ],
204 | "metadata": {
205 | "id": "tkn5HyGJBX6E"
206 | }
207 | }
208 | ]
209 | }
--------------------------------------------------------------------------------
/zi-liao-chu-li-shen-qi-qu/README.md:
--------------------------------------------------------------------------------
1 | # 資料處理神器區
2 |
3 |
--------------------------------------------------------------------------------
/zi-liao-chu-li-shen-qi-qu/google-colab-python-xi-lie-zi-liao-chu-li-shen-qi-pandas-fen-zu-yu-zhong-shuo-zhi-shu-groupingreshap.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: 開始AI之前的基礎工就是資料處理了,而資料處理也需要有神器的輔助才能事半功倍,Pandas正是我們的神兵利器...
3 | ---
4 |
5 | # 【Google Colab Python系列】 資料處理神器 Pandas 分組與重朔之術(Grouping/Reshaping)
6 |
7 | 過往我們有介紹了「[【Google Colab Python系列】 資料處理神器 Pandas 起手式](https://www.potatomedia.co/s/pYiFElO)」, 相信對於pandas的基本操作具有一定的基礎知識了, 主要著重在基本的操作, 讓我們快速篩選與分析資料, 但真實的世界是有可能具有很多類型的資料集分別儲存, 而不同的資料集又具有一些相似度, 需要進行更進階的分割與合併,讓零散的「資料」變成黃金。
8 |
9 | ### 分組(Grouping)
10 |
11 | 分組的用意在於將一大筆原始資料根據相似群組進行分類,進而統計, 最終產生該群組的一組樣本數據資料,嗯...,相信看到這裡心裡難免會說「能不能說點人話?」, 的確,就字面解釋確實不太容易理解,那我們就以一個較貼近生活化的例子來輔助說明看看吧!
12 |
13 | 假設我們是咖啡廳的老闆,我們有一份銷售表格,記錄著每一位員工每天的銷售額,其中包含員工姓名、銷售日期、銷售金額..
14 |
15 |
16 |
17 | 圖片來源
18 |
19 | ```python
20 | import pandas as pd
21 |
22 | data = {
23 | '姓名': ['小明', '小華', '小明', '小華', '小明', '小華'],
24 | '日期': ['2023-08-01', '2023-08-01', '2023-08-02', '2023-08-02', '2023-08-03', '2023-08-03'],
25 | '銷售金額': [100, 150, 120, 80, 200, 90]
26 | }
27 |
28 | df = pd.DataFrame(data)
29 | print(df)
30 |
31 | ```
32 |
33 |
34 |
35 | 圖片來源
36 |
37 | 那麼有了這個銷售數據後,身為老闆的我們總會希望統計一下哪位員工的銷售金額比較多,績效比較好,做為評估的依據, 此時我們可以這麼做, 以「姓名」當作群組的分類標的,進而針對銷售金額進行加總, 就可以得出這批資料中,哪位員工銷售的最多...
38 |
39 | ```python
40 | total = df.groupby('姓名')['銷售金額'].sum()
41 | print(total)
42 |
43 | ```
44 |
45 |
46 |
47 | 圖片來源
48 |
49 | 當然我們群組分類的欄位也可以不只一個, 假設我們要統計每個人每天的銷售額多少時就可以這麼做...
50 |
51 | ```python
52 | total = df.groupby(['姓名', '日期'])['銷售金額'].sum()
53 | print(total)
54 | ```
55 |
56 |
57 |
58 | 圖片來源
59 |
60 |
61 |
62 | ### 重朔(Reshaping)
63 |
64 | 這功能主要就像是資料的變形怪一樣,它允許我們重新組織或轉換資料的形狀。
65 |
66 | stacking、unstacking、pivot、pivot\_table都是Reshaping能夠轉換的格式與方法, 就讓我們繼續看下去吧!
67 |
68 | 假設我們有一份樣本資料...
69 |
70 | ```python
71 | import pandas as pd
72 |
73 | data = {
74 | '日期': ['2023-08-01', '2023-08-01', '2023-08-02', '2023-08-02'],
75 | '城市': ['台北', '高雄', '台北', '高雄'],
76 | '最高溫度': [32, 34, 33, 35],
77 | '最低溫度': [26, 28, 27, 29]
78 | }
79 |
80 | df = pd.DataFrame(data)
81 | print(df)
82 |
83 | ```
84 |
85 |
86 |
87 | 圖片來源
88 |
89 | #### 以pivot來實現
90 |
91 | 將城市作為欄位,日期作為索引,並將最高溫度和最低溫度分別填入對應的欄位中。
92 |
93 | 這樣的數據格式主要表示每個日期各地區的最高溫度與最低溫度。
94 |
95 | ```python
96 | reshaped_df = df.pivot(index='日期', columns='城市', values=['最高溫度', '最低溫度'])
97 | print(reshaped_df)
98 |
99 | ```
100 |
101 |
102 |
103 | 圖片來源
104 |
105 |
106 |
107 | #### 我們可以用stack
108 |
109 | 讓欄位的值堆疊到日期之處,這樣的數據讓我們較方便從上往下觀察。
110 |
111 |
112 |
113 | 圖片來源
114 |
115 | ```python
116 | stacked_df = reshaped_df.stack()
117 | print(stacked_df)
118 | ```
119 |
120 |
121 |
122 | 圖片來源
123 |
124 | #### 當然也可以unstack
125 |
126 | ```python
127 | unstacked_df = stacked_df.unstack()
128 | print(unstacked_df)
129 | ```
130 |
131 |
132 |
133 | 圖片來源
134 |
135 | 今天的範例都在這裡「[📦 pandas/pandas\_merge.ipynb](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/pandas/pandas\_group\_reshape.ipynb)」歡迎自行取用。
136 |
137 | 如何使用請參閱「[【Google Colab Python系列】Colab平台與Python如何擦出火花?](https://www.potatomedia.co/s/aNLHZe3S)」。
138 |
139 | ### 結語
140 |
141 | 原來數據可以這麼玩,分組、重組不同格式都輕而易舉,靈活彈性的展示數據讓我們訓練AI的過程中更容易抓到方向。
142 |
143 | 喜歡撰寫文章的你,不妨來了解一下:
144 |
145 | [Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入?](https://www.potatomedia.co/s/2PmFxsq)
146 |
147 | 歡迎加入一起練習寫作,賺取知識
148 |
149 |
150 |
151 | ### 更多關於資料處理神器 Pandas 系列文章…
152 |
153 | * [【Google Colab Python系列】 資料處理神器 Pandas 起手式](https://vocus.cc/article/64c90f67fd8978000138d9bc)
154 | * [【Google Colab Python系列】 資料處理神器 Pandas 合併之術(join、concat)](https://vocus.cc/article/64ca3fb9fd897800018b230c)
155 | * [【Google Colab Python系列】 資料處理神器 Pandas 分割與重組之術(Grouping/Reshaping)](https://vocus.cc/article/64ca6232fd897800018e734a)
156 |
--------------------------------------------------------------------------------
/zi-liao-chu-li-shen-qi-qu/google-colab-python-xi-lie-zi-liao-chu-li-shen-qi-pandas-he-bing-zhi-shu-joinconcat.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: 開始AI之前的基礎工就是資料處理了,而資料處理也需要有神器的輔助才能事半功倍,Pandas正是我們的神兵利器...
3 | ---
4 |
5 | # 【Google Colab Python系列】 資料處理神器 Pandas 合併之術(join、concat)
6 |
7 |
8 |
9 | 圖片來源
10 |
11 | 上一篇我們有介紹了「[【Google Colab Python系列】 資料處理神器 Pandas 起手式](https://www.potatomedia.co/s/pYiFElO)」, 相信對於pandas的基本操作具有一定的基礎知識了, 主要著重在基本的操作, 讓我們快速篩選與分析資料, 但真實的世界是有可能具有很多類型的資料集分別儲存, 而不同的資料集又具有一些相似度, 需要進行共同的群組分類與合併, 這一篇主要就著重在如何處理不同類型的資料集合併。
12 |
13 | ### 首先是串接
14 |
15 | 假設小夫的媽媽想要請他根據「蔬果清單」去菜市場購買, 而爸爸也想要請他根據「五金清單」去五金行購買, 那麼這兩個清單雖然是不同的類型, 但聰明的小夫發現可以稍微整理一下比較好採購, 也比較好跟爸媽回報今天總共會花費多少、該請款多少, 那麼共同點就是會有「商品名稱」、「數量」、「價格」, 這時候就需要將兩個清單進行合併…
16 |
17 | ```python
18 | import pandas as pd
19 |
20 | # 菜市場購物清單
21 | wet_market = pd.DataFrame({
22 | '商品名稱': ['高麗菜', '香蕉', '橘子'],
23 | '數量': [2, 5, 2],
24 | '價格': [10, 15, 8]
25 | })
26 |
27 | # 五金行購物清單
28 | hardware_store = pd.DataFrame({
29 | '商品名稱': ['電燈炮', '螺絲起子', '芳香劑'],
30 | '數量': [2, 1, 4],
31 | '價格': [12, 20, 6]
32 | })
33 |
34 | # 使用 pandas.concat 函數來合併兩張購物清單
35 | combined_shopping_list = pd.concat([wet_market, hardware_store], ignore_index=True)
36 |
37 | print(combined_shopping_list)
38 | ```
39 |
40 | 圖片來源
41 |
42 | ### 再來是合併(Join)
43 |
44 | 有一天小明在整理客戶資料時發現了兩份清單, 一份為客戶的地址, 另一份為客戶訂單, 而兩張單子的共同點就是用戶名稱, 這時候聰明的小明就告訴自己, 為什麼我不能將這兩張表合併呢? 明明長的很像但卻分的很開, 聰明的小明就決定進行合併之路...
45 |
46 | ```python
47 | import pandas as pd
48 |
49 | # 客戶的地址
50 | user_data = pd.DataFrame({
51 | '用戶名稱': ['Alice', 'Bob', 'Charlie'],
52 | '地址': ['台北', '台中', '高雄']
53 | })
54 |
55 | user_data
56 | ```
57 |
58 |
59 |
60 | 圖片來源
61 |
62 | ```python
63 | # 客戶訂單
64 | order_data = pd.DataFrame({
65 | '用戶名稱': ['Bob', 'Charlie', 'Alice'],
66 | '訂單金額': [100, 200, 150]
67 | })
68 |
69 | order_data
70 | ```
71 |
72 | 圖片來源
73 |
74 | ```python
75 | # 使用 pandas 的 join 合併之術來合併兩張表
76 | joined_data = user_data.set_index('用戶名稱').join(order_data.set_index('用戶名稱'))
77 |
78 | joined_data
79 | ```
80 |
81 |
82 |
83 | 圖片來源
84 |
85 | 有沒有發現,其實這很像SQL裡面的join概念,將兩張表整併再一起,更容易進行統計與分析。
86 |
87 | 今天的範例都在這裡「[📦 pandas/pandas\_merge.ipynb](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/pandas/pandas\_merge.ipynb)」歡迎自行取用。
88 |
89 | 如何使用請參閱「[【Google Colab Python系列】Colab平台與Python如何擦出火花?](https://www.potatomedia.co/s/aNLHZe3S)」。
90 |
91 | ### 結語
92 |
93 | 這個章節的主軸在於說明如何對多張不同的表進行整併,並歸納出相同的欄位,以進行後續的處理,接下來我們會說明應該如何進行「群組化(Grouping)」、「重朔(Reshaping)」、「樞紐分析表(Pivot tables)」,讓我們的資料處理能力更進階一個檔次,邁向資料工程師之路…。
94 |
95 | 喜歡撰寫文章的你,不妨來了解一下:
96 |
97 | [Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入?](https://www.potatomedia.co/s/2PmFxsq)
98 |
99 | 歡迎加入一起練習寫作,賺取知識
100 |
101 |
102 |
103 | ### 更多關於資料處理神器 Pandas 系列文章…
104 |
105 | * [【Google Colab Python系列】 資料處理神器 Pandas 起手式](https://vocus.cc/article/64c90f67fd8978000138d9bc)
106 | * [【Google Colab Python系列】 資料處理神器 Pandas 合併之術(join、concat)](https://vocus.cc/article/64ca3fb9fd897800018b230c)
107 | * [【Google Colab Python系列】 資料處理神器 Pandas 分割與重組之術(Grouping/Reshaping)](https://vocus.cc/article/64ca6232fd897800018e734a)
108 |
--------------------------------------------------------------------------------
/zi-liao-chu-li-shen-qi-qu/google-colab-python-xi-lie-zi-liao-chu-li-shen-qi-pandas-qi-shou-shi.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: 開始AI之前的基礎工就是資料處理了,而資料處理也需要有神器的輔助才能事半功倍,Pandas正是我們的神兵利器...
3 | ---
4 |
5 | # 【Google Colab Python系列】 資料處理神器 Pandas 起手式
6 |
7 |
8 |
9 | 圖片來源
10 |
11 | 我們都知道AI的模型訓練環節中, 最基礎也是最重要的一環就是「資料」了, 而「資料」要怎麼處理成訓練的養分也是一門重要的工程, 正好在Python的世界裡具有這麼一套神兵利器, 名為「[Pandas](https://pandas.pydata.org/)」, 它是一個快速、強大、靈活且易於使用的開源數據分析和操作工具, 就讓我們好好的來認識一番吧!
12 |
13 | 乍聽之下我們會以為跟「熊貓」具有關聯性, 實際上關聯性並不大, 通常我們最直觀的就是用Excel來整理資料了對吧, 甚至是資料庫系統, 對! 不管是哪一種, 目的都是在幫我們儲存,But…當我們要取出來用的時候, 或者要對某個欄位值變更時, 對於Excel來說, 光是開起幾百萬筆的資料就快當機了, 是要怎麼改變欄位資料呢? 那你可能會說, 怎麼不用資料庫? 是, 資料庫是很好用沒錯, 搜尋、統計都難不倒它…, 但別忘了, 我們在進行模型訓練之前都需要將資料載入到程式之中並整理成符合訓練的資料格式才能順利進行, 而載入到程式要如何處理這龐大的資料呢? 這就是 Pandas 擅長的地方了, 不僅免費, 功能又豐富, 使用起來也不是說非常困難, 有什麼理由我們不用它呢?
14 |
15 | [https://pandas.pydata.org/docs/getting\_started/index.html#getting-started](https://pandas.pydata.org/docs/getting\_started/index.html#getting-started)
16 |
17 | ### 安裝
18 |
19 | ```bash
20 | pip install pandas
21 | ```
22 |
23 | ### 表格式呈現
24 |
25 | 今天我們想要幫三位員工建檔, 分別會知曉名字、年齡、性別三個欄位, 那我們可以這樣做。
26 |
27 | ```bash
28 | import pandas as pd
29 |
30 | df = pd.DataFrame(
31 | {
32 | "名字": [
33 | "小明",
34 | "張三",
35 | "小花",
36 | ],
37 | "年齡": [22, 35, 58],
38 | "性別": ["男", "男", "女"],
39 | }
40 | )
41 |
42 | df
43 | ```
44 |
45 |
46 |
47 | 圖片來源
48 |
49 |
50 |
51 | 專注於某一欄
52 |
53 | 今天我們想列出年齡, 大概觀察一下分佈範圍時可以這樣做。
54 |
55 | ```python
56 | df['年齡']
57 | ```
58 |
59 | 將得到以下的結果:
60 |
61 | ```python
62 | 0 22
63 | 1 35
64 | 2 58
65 | Name: 年齡, dtype: int64
66 | ```
67 |
68 | P.S 如果熟悉操作HashMap或者Dict的朋友相信應該得心應手。
69 |
70 | 當然我們也可以從頭到尾自行建立。
71 |
72 | ```python
73 | ages = pd.Series([22, 35, 58], name="年齡")
74 |
75 | ages
76 | ```
77 |
78 | 結果也會如同上面。
79 |
80 | ### 更進階一點的來點統計吧
81 |
82 | 今天我們想要計算出最大年齡時…
83 |
84 | ```python
85 | df["年齡"].max()
86 |
87 | # 58
88 | ```
89 |
90 | 還有哪些更多的統計方法可以用呢?
91 |
92 | ```python
93 | df.describe()
94 | ```
95 |
96 |
97 |
98 | 圖片來源
99 |
100 | 除了平均、最大最小以外更有中位數…等, 就根據需求取用囉!
101 |
102 | 今天的範例都在這裡「[📦 pandas/pandas\_quickstart.ipynb](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/pandas/pandas\_quickstart.ipynb)」歡迎自行取用。
103 |
104 | 如何使用請參閱「[【Google Colab Python系列】Colab平台與Python如何擦出火花?](https://www.potatomedia.co/s/aNLHZe3S)」。
105 |
106 | ### 結語
107 |
108 | 透過幾個簡單的步驟認識一下Pandas這套工具能夠怎麼處理我們的數據, 當然它不只有這麼簡單, 合併、分割、亂數、生成…常常用到的功能, 我們在後續的章節也會逐一的來介紹。
109 |
110 | 喜歡撰寫文章的你,不妨來了解一下:
111 |
112 | [Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入?](https://www.potatomedia.co/s/2PmFxsq)
113 |
114 | 歡迎加入一起練習寫作,賺取知識
115 |
116 |
117 |
118 | ### 更多關於資料處理神器 Pandas 系列文章…
119 |
120 | * [【Google Colab Python系列】 資料處理神器 Pandas 起手式](https://vocus.cc/article/64c90f67fd8978000138d9bc)
121 | * [【Google Colab Python系列】 資料處理神器 Pandas 合併之術(join、concat)](https://vocus.cc/article/64ca3fb9fd897800018b230c)
122 | * [【Google Colab Python系列】 資料處理神器 Pandas 分割與重組之術(Grouping/Reshaping)](https://vocus.cc/article/64ca6232fd897800018e734a)
123 |
--------------------------------------------------------------------------------
/zi-liao-chu-li-shen-qi-qu/zi-liao-chu-li-shen-qi-qu-numpy-xi-lie-dian-ding-zi-liao-ke-xue-de-ji-chu-mo-zu-an-zhuang-yu-ren-shi.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: 資料科學基礎打的好,萬事沒煩惱...
3 | ---
4 |
5 | # 【資料處理神器區 - NumPy系列】 奠定資料科學的基礎模組(安裝與認識維度)
6 |
7 | 學習資料科學的過程中相信最熱門的目前應該是Python程式語言了,而Python的世界裡再進行資料科學時最常用的有「[Pandas](https://www.potatomedia.co/s/pYiFElO)」、「[SciPy](https://scipy.org/)」、「[Scikit-learn](https://scikit-learn.org/stable/)」...等,而這些的基礎幾乎都與「[NumPy](https://numpy.org/)」離不開關係,因為「[NumPy](https://numpy.org/)」就是地基,這些較為高階的套件則是基於地基發展而起。
8 |
9 |
10 |
11 | 它除了擁有豐富的數學函式庫之外,數據的索引切片、各式維度資料結構轉換、排序、合併、重朔這些對它來說都是小兒科,究竟有沒有這麼強呢? 就讓我們用幾個實際例子來說明一下。
12 |
13 | ### 安裝
14 |
15 | 使用NumPy之前的首要任務就是安裝拉,安裝通常有以下兩種方式:
16 |
17 | #### Conda
18 |
19 | 至於什麼是Conda呢? 我們下一次會專門對Conda進行介紹,之後再補充於此...
20 |
21 | ```python
22 | conda create -n ${環境名稱}
23 | conda activate ${環境名稱}
24 |
25 | conda install numpy
26 | ```
27 |
28 | #### Pip
29 |
30 | ```python
31 | pip install numpy
32 | ```
33 |
34 | ### 輔助工具: 繪圖
35 |
36 | 這邊由於會示範二維陣列與多維度,以圖來呈現會更容易理解, 因此我們會使用圖表套件「matplotlib」來進行圖表的呈現, 關於圖表套件是什麼呢? 歡迎參考:
37 |
38 | [【Google Colab Python系列】 視覺化資料Matplotlib 新手村](https://vocus.cc/article/64bef906fd8978000190a953)
39 |
40 | ```python
41 | !pip install matplotlib
42 | ```
43 |
44 | ### 引入模組
45 |
46 | ```python
47 | # 引入numpy模組並命名為np
48 | import numpy as np
49 | ```
50 |
51 | ### 基礎概念 - 認識維度陣列
52 |
53 | 當我們進行資料科學(Data Science)或者機器學習(Machine Learning)時,通常都會將資料轉換成多維度的資料,那麼在NumPy裝載這些資料的容器就是「ndarray」這個名詞我們之後會常常看到,而這個容器裡面又依照數據的複雜度可以裝載一維陣列、二維陣列、多維陣列。
54 |
55 |
56 |
57 | 圖片來源
58 |
59 | 有了概念之後,我們就實際來繪製看看吧! 如此一來更能加深印象。
60 |
61 | #### 一維陣列
62 |
63 | ```python
64 | import numpy as np
65 | import matplotlib.pyplot as plt
66 |
67 | # 生成一維數據
68 | data_1d = np.array([1, 2, 3, 4, 5])
69 |
70 | # 以下是為了用圖表進行概念呈現,基本上可以不用看這一段,上面那部分才是真正的資料結構...
71 | dd = data_1d.reshape(1, -1)
72 |
73 | plt.imshow(dd, cmap='viridis', aspect='auto')
74 |
75 | for y in range(dd.shape[0]):
76 | for x in range(dd.shape[1]):
77 | plt.text(x, y, str(dd[y, x]), color='white', ha='center', va='center')
78 |
79 | plt.colorbar()
80 | plt.title('1D Array')
81 | plt.axis('off') # 關閉軸的顯示
82 | plt.show()
83 | ```
84 |
85 |
86 |
87 | 圖片來源
88 |
89 | #### 二維陣列
90 |
91 | ```python
92 | import numpy as np
93 | import matplotlib.pyplot as plt
94 |
95 | # 宣告「二維陣列」
96 | data_2d = np.array([
97 | [1, 2, 3],
98 | [4, 5, 6],
99 | [7, 8, 9]
100 | ])
101 |
102 | x = np.arange(data_2d.shape[1])
103 | for i, row in enumerate(data_2d):
104 | plt.bar(x, row, alpha=0.7, label=f'Row {i+1}')
105 | plt.xlabel('Column Index')
106 | plt.ylabel('Value')
107 | plt.title('2D Array')
108 | plt.legend()
109 | plt.show()
110 |
111 | ```
112 |
113 |
114 |
115 | 圖片來源
116 |
117 | #### 三維陣列
118 |
119 | ```python
120 | import numpy as np
121 | import matplotlib.pyplot as plt
122 |
123 | # 宣告「三維陣列」
124 | data_3d = np.array([
125 | [
126 | [1, 2, 3, 4],
127 | [5, 6, 7, 8],
128 | [9, 10, 11, 12]
129 | ],
130 | [
131 | [13, 14, 15, 16],
132 | [17, 18, 19, 20],
133 | [21, 22, 23, 24]
134 | ]
135 | ])
136 |
137 | x, y, z = data_3d.nonzero()
138 | ax = plt.axes(projection='3d')
139 | ax.scatter3D(x, y, z, c=data_3d[x, y, z], cmap='viridis')
140 | plt.title('3D Array')
141 | plt.show()
142 | ```
143 |
144 |
145 |
146 | 圖片來源
147 |
148 | ### 介紹幾個ndarray的一些屬性
149 |
150 | 這裡可能會有點生硬,請小心服用,雖然藥苦,但對我們的根基是有相當大的幫助,加油,持續學習吧!
151 |
152 | ```python
153 | # 資料樣本
154 | sample = np.array([
155 | [
156 | [1, 2, 3, 4],
157 | [5, 6, 7, 8],
158 | [9, 10, 11, 12]
159 | ],
160 | [
161 | [13, 14, 15, 16],
162 | [17, 18, 19, 20],
163 | [21, 22, 23, 24]
164 | ]
165 | ])
166 |
167 | # ndarray.ndim: 資料的維度,樣本是三維資料,因此預期為「3」
168 | assert(sample.ndim == 3)
169 | print(f'ndim: {sample.ndim}')
170 |
171 | # ndarray.shape: 每個維度的大小,預期樣本資料是2 x 3 x 4
172 | assert(sample.shape == (2, 3, 4))
173 | print(f'shape: {sample.shape}')
174 |
175 | # ndarray.size: 資料元素的總數,也就是乘積, 預期: 24
176 | assert(sample.size == 24)
177 | print(f'size: {sample.size}')
178 |
179 | # ndarray.dtype: 資料元素的型態, 預期為int64
180 | assert(sample.dtype.name == 'int64')
181 | print(f'dtype: {sample.dtype}')
182 |
183 | # ndarray.itemsize: 資料中每個元素的大小, 以byte為單位, 而int64=8byte,因此預期為8
184 | assert(sample.itemsize == 8)
185 | print(f'itemsize: {sample.itemsize}')
186 |
187 | # ndarray.data: 資料實際元素的緩衝區,通常我們不會直接使用它
188 | print(f'data: {sample.data}')
189 | ```
190 |
191 | ###
192 |
193 | 圖片來源
194 |
195 | 今天的範例都在這裡「[📦 ](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/pandas/pandas\_quickstart.ipynb)[numpy/numpy\_quickstart.ipynb](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/numpy/numpy\_quickstart.ipynb)」歡迎自行取用。
196 |
197 | 如何使用請參閱「[【Google Colab Python系列】Colab平台與Python如何擦出火花?](https://www.potatomedia.co/s/aNLHZe3S)」。
198 |
199 | ### 結語
200 |
201 | 這次的主題主要認識一下NumPy的基本概念,先學會安裝、引用,再理解一下陣列元素的不同及基礎的屬性代表什麼含意,對於數組具有一定的認識之後,下一章將帶來一些關於陣列的進階應用,敬請期待...,如果有任何問題也歡迎提出討論。
202 |
203 |
204 |
205 | 喜歡撰寫文章的你,不妨來了解一下:
206 |
207 | [Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入?](https://www.potatomedia.co/s/2PmFxsq)
208 |
209 | 歡迎加入一起練習寫作,賺取知識
210 |
--------------------------------------------------------------------------------
/zi-liao-chu-li-shen-qi-qu/zi-liao-chu-li-shen-qi-qu-numpy-xi-lie-fen-ge-split-de-yi-shu.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: 資料科學基礎打的好,萬事沒煩惱...
3 | ---
4 |
5 | # 【資料處理神器區 - NumPy系列】 分割(Split)的藝術
6 |
7 |
8 |
9 | 圖片來源
10 |
11 | 資料切割對於我們進行平行化運作或者是轉換數據的應用上非常重要, 但如何切呢? 要怎麼切才切的好呢? 這些是切割的過程常常會面臨的一些問題, 那就讓我們一步步的來解密吧!
12 |
13 | 關於分割的方式有下列幾種選擇, 大致了解一下即可, 接下來我們會分別對這幾種分割方式進行詳細說明:
14 |
15 | ```python
16 | # 用於在指定軸上將數組分割成多個子數組。
17 | # axis, 這參數應該是較不容易理解的一個參數,預設為「0」,相當於底下的水平分割, 而設定為「1」則為垂直分割
18 | # 這邊需要注意的是indices_or_sections與ary的長度必須是能夠整除的關係, 否則會發生錯誤, 簡單來說ary有10個元素, 但要切成3份, 由於無法公平分配, 因此將導致錯誤發生。
19 |
20 | numpy.split(ary, indices_or_sections, axis=0)
21 |
22 | # 基本上與上述的使用方式一樣..., 唯一不一樣的是這個方式允許「不等量分割」, 也就是假設ary有10個元素, 切成3份是被允許的。
23 | numpy.array_split(ary, indices_or_sections, axis=0)
24 |
25 | # 水平分割(以欄進行切割)
26 | numpy.hsplit(ary, indices_or_sections)
27 |
28 | # 垂直分割(以列進行切割)
29 | numpy.vsplit(ary, indices_or_sections)
30 |
31 | # 用於深度(第三維度軸)分割數組。
32 | # P.S 這個API相對較新, 也是較抽象的部份, 要用心的看下去才能得心應手唷!
33 | numpy.dsplit(ary, indices_or_sections)
34 | ```
35 |
36 | ### numpy.split(ary, indices\_or\_sections, axis=0)
37 |
38 | 必須等量分割...
39 |
40 | ⚠️ 這邊會特意製造一個情境讓目標及欲切割的份數無法公平分配, 預期將會發生「array split does not result in an equal division」的錯誤。
41 |
42 | ```python
43 | import numpy as np
44 |
45 | # 創建一個包含 1 到 10 的一維數組
46 | arr = np.arange(1, 11)
47 |
48 | # 使用 split 函數將數組平均分割成 3 段
49 | splitted_arr = np.split(arr, 3)
50 |
51 | # 這邊會切成3份, 但由於10無法整除, 所以分割的狀況會是這樣:
52 | # 「3, 3, 4」
53 | print(splitted_arr)
54 | ```
55 |
56 |
57 |
58 | 圖片來源
59 |
60 |
61 |
62 | ### numpy.array\_split(ary, indices\_or\_sections, axis=0)
63 |
64 | 允許不等量分割...
65 |
66 | 一樣使用上述案例來分割, 但這次就沒有發生錯誤囉! 雖然不公平, 但仍將10等份切成「4, 3, 3」
67 |
68 | ```
69 | [array([1, 2, 3, 4]), array([5, 6, 7]), array([ 8, 9, 10])]
70 | ```
71 |
72 | ### numpy.hsplit(ary, indices\_or\_sections)
73 |
74 | 水平分割(以欄進行切割)
75 |
76 |
77 |
78 | 圖片來源
79 |
80 | 以數據結構來說會變成:
81 |
82 | ```python
83 | import numpy as np
84 |
85 | # 創建一個 2x4 的二維數組
86 | arr = np.array([[1, 2, 3, 4],
87 | [5, 6, 7, 8]])
88 |
89 | # 使用 hsplit 函數將數組水平分割成 2 欄
90 | splitted_arr = np.hsplit(arr, 2)
91 |
92 | splitted_arr
93 | ```
94 |
95 | ```
96 | [array(1, 2, 5, 6), array(3, 4, 7, 8)]
97 | ```
98 |
99 | ### numpy.vsplit(ary, indices\_or\_sections)
100 |
101 | 垂直切割(以列進行切割)
102 |
103 |
104 |
105 | 圖片來源
106 |
107 | ```python
108 | import numpy as np
109 |
110 | # 創建一個 2x4 的二維數組
111 | arr = np.array([[1, 2, 3, 4],
112 | [5, 6, 7, 8]])
113 |
114 | # 使用 vsplit 將數據切割成2列
115 | splitted_arr = np.vsplit(arr, 2)
116 |
117 | splitted_arr
118 | ```
119 |
120 | ```
121 | [array(1, 2, 3, 4), array(5, 6, 7, 8)]
122 | ```
123 |
124 | ### numpy.dsplit(ary, indices\_or\_sections)
125 |
126 |
127 |
128 | 圖片來源
129 |
130 | ```python
131 | import numpy as np
132 | import matplotlib.pyplot as plt
133 |
134 | # 創建一個 2x2x4 的三維數組
135 | arr = np.array([
136 | [
137 | [1, 2, 3, 4],
138 | [5, 6, 7, 8]
139 | ],
140 | [
141 | [9, 10, 11, 12],
142 | [13, 14, 15, 16]
143 | ]
144 | ])
145 |
146 | print(arr)
147 |
148 | # 使用 dsplit 將數據切割
149 | splitted_arr = np.dsplit(arr, 2)
150 |
151 | splitted_arr
152 | ```
153 |
154 | ```python
155 | [array([[[ 1, 2],
156 | [ 5, 6]],
157 |
158 | [[ 9, 10],
159 | [13, 14]]]),
160 | array([[[ 3, 4],
161 | [ 7, 8]],
162 |
163 | [[11, 12],
164 | [15, 16]]])]
165 | ```
166 |
167 | 今天的範例都在這裡「[📦 numpy\_split.ipynb](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/numpy/numpy\_split.ipynb)」歡迎自行取用。
168 |
169 | 如何使用請參閱「[【Google Colab Python系列】Colab平台與Python如何擦出火花?](https://www.potatomedia.co/s/aNLHZe3S)」。
170 |
171 | ### 結語
172 |
173 | 這次主要介紹切割的技巧, 但需要具有空間的概念才會比較容易理解, 因此實作時會比較不直觀一些, 不過沒關係, 多Try幾次就能夠熟悉這樣的概念了, 有了切割之後, 我們就能夠分別對切割後不同批次的資料進行處理, 下一篇章我們會說明如何去合併這些切割過後的資料。
174 |
175 |
176 |
177 |
178 |
179 | 喜歡撰寫文章的你,不妨來了解一下:
180 |
181 | [Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入?](https://www.potatomedia.co/s/2PmFxsq)
182 |
183 | 歡迎加入一起練習寫作,賺取知識
184 |
--------------------------------------------------------------------------------
/zi-ran-yu-yan-chu-li-nlpnatural-language-processing/README.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: Natural Language Processing
3 | ---
4 |
5 | # 6 自然語言處理 - NLP(Natural Language Processing)
6 |
7 |
--------------------------------------------------------------------------------
/zi-ran-yu-yan-chu-li-nlpnatural-language-processing/zi-ran-yu-yan-chu-li-gai-nian-pian-chai-jie-yu-ju-zu-cheng-de-gui-ze-he-wei-yi-cun-ju-fa-fen-xi-depe.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: 當ChatGPT的出現,讓我們更需要理解AI/NLP的技術...
3 | ---
4 |
5 | # 【自然語言處理 - 概念篇】 拆解語句組成的規則, 何謂依存句法分析(Dependency Parsing)?
6 |
7 | 圖片來源
8 |
9 | 我們有想過嗎? 一句簡單的話語, 竟然隱含著豐富的句法結構與規則, 而句法就是依著這樣的規則組合而成, 形成一個完整的句子, 隨著資料量越大, 透過規則與關聯性, 機器就能夠根據我們的話語進行拆解, 並試圖理解我們的意圖進行更貼心的服務, 隨著Chatgpt的興起, 我們也見證到AI的新里程碑, 資訊領域的我們也不得不跟上潮流學習這些AI相關的技術才不至於成為被取代的對象。
10 |
11 | 一個句子最基本的組成單位是「詞」這在我們之前幾個篇章都有談過,如果還不熟悉的朋友可以複習一下:
12 |
13 | * [【自然語言處理 — 概念篇】最基礎的Bag-of-Words模型是什麼呢?](https://vocus.cc/article/646b60adfd89780001aae7f4)
14 | * [【自然語言處理 - 概念篇】 來認識一下詞向量(Word Embedding or Word Vector)吧](https://vocus.cc/article/6471799dfd89780001604a5b)
15 | * [【自然語言處理 - 概念篇】 探索TF-IDF, 關於詞的統計與索引隱含著什麼奧秘呢?](https://www.potatomedia.co/s/bVIUUxZD)
16 |
17 | 而這些「詞」除了距離以外還可以組成詞組(Phrase), 例如動詞、名詞、形容詞..., 這些詞組又可以再組成一句話, 非常神奇吧! 看到這邊應該非常困惑, 沒關係, 等等會實際以案例來加以說明, 並搭配程式碼進行實作。
18 |
19 | 我們只要大概記得一個「樹」是由不同的「節點」所組成, 而這些節點我們就想像為詞組(Phrase), 這些詞組之間具有著上下層關係, 從根結點開始透過樹狀結構的分叉更能夠追蹤片語的組成過程, 我們可以更好的理解句子組成的角色與關係。
20 |
21 | 在進入主題之前, 我們必須先來了解一下「【自然語言處理 - spaCy】 詞性標注POS在NLP的世界扮演什麼樣的角色呢?」每個詞都被賦予一個詞性, 而這些詞性也奠定了「語法分析」、「語意理解」、「文本分類」、「上下文分析」...的基礎, 讓機器更理解我們人類的語言。
22 |
23 | ```python
24 | !pip install spacy
25 |
26 | # 下載Transfromer技術的中文語言模型
27 | !python -m spacy download zh_core_web_trf
28 | ```
29 |
30 | ### 載入模型
31 |
32 | ```python
33 | import spacy
34 |
35 | # 載入模型
36 | nlp_zh = spacy.load('zh_core_web_trf')
37 | ```
38 |
39 | ### 定義片語解析函式並進行解析
40 |
41 | ```python
42 | text = '我昨天看了一本有趣的書'
43 |
44 | doc = nlp_zh(text)
45 | ```
46 |
47 | ### 以視覺化進行語法結構分析
48 |
49 | ```
50 | 我 昨天 看 了 一 本 有趣 的 書
51 |
52 | 「我」是名詞,代表主語, 並與「看」之間依賴。
53 | 「昨天」是時間副詞,修飾「看」,表示動作發生的時間點。
54 | 「看」是動詞,表示動作。
55 | 「了」是助動詞,用於表示動作的完成, 因此與「看」依賴。
56 | 「一」是數詞,修飾「本」,表示書的數量。
57 | 「本」是量詞,用於量詞和名詞之間,表示書的量詞。
58 | 「有趣」是形容詞,修飾「書」,表示書的特性。
59 | 「的」是助詞,用於連接形容詞和名詞之間,表示形容詞修飾的對象。
60 | ```
61 |
62 | ```python
63 | from spacy import displacy
64 |
65 | options = {
66 | 'color': 'blue',
67 | 'bg': 'white'
68 | }
69 |
70 | displacy.render(doc, style="dep", jupyter=True, options=options)
71 | ```
72 |
73 | 圖片來源
74 |
75 | 「看」是整個句子的根節點, 「我」 是它的主語,「書」 是它的賓語,「昨天」 是它的修飾詞,「有趣」 是 「書」 的修飾詞,觀察句法樹讓我們可以理解詞彙之間的關係, 。
76 |
77 | 這張圖時有幾個關聯標籤需要知道一下, 這邊使用的是「[universaldependencies(用於對句子的語法結構進行標註)](https://universaldependencies.org/zh/index.html)」, 由左到右逐一解析:
78 |
79 | * `nsubj`: 用來表示主語, 通常標記在動詞的依存邊上。
80 | * 「我」是名詞, 而「看」是動詞, 被標記在連接動詞「看」和主語「我」的邊上。
81 | * 我 `` 看。
82 | * `nmod:tmod`: 通常是動詞或名詞, 標示在時間的修飾語之間,
83 | * 「看」是動詞, 而「昨天」是時間修飾語, 因此他們之間的關係為`nmod:tmod`。
84 | * `aux:asp`: `輔助動詞:體裁`。
85 | * 「體裁(aspect)」是一個用於描述動詞的語法特徵的術語。
86 | * 「看(動詞)」、「了(體裁)」。
87 | * `dboj`: direct object, 表示動詞的直接賓語。
88 | * 看 `` 書, 「看」的直接賓語為「書」。
89 | * `mark:clf`: 冠詞通常用於限定名詞,並在句子中起到指示數量、確定性或泛指性質的作用。
90 | * 一 `` 本
91 | * 「一」是數量詞,修飾「本」, 表示書的數量。
92 | * `case`: 詞彙的格標記(case marking),
93 | * 有趣 `` 的
94 | * 表示形容詞「有趣」修飾名詞「的」,形成一個形容詞詞組
95 | * `unmmod`: 數詞修飾名詞的關係
96 | * 書 `` 一。
97 | * `amod`: 表示形容詞修飾名詞的關係。
98 | * 書 `` 有趣。
99 | * 表示這本書是有趣的。
100 |
101 | 透過分析圖的繪製, 我們可以分析一個句子的組成可能包含動詞、名詞..., 而這些詞類之間又有相斥相吸的特性, 最終組成一句話。
102 |
--------------------------------------------------------------------------------
/zi-ran-yu-yan-chu-li-nlpnatural-language-processing/zi-ran-yu-yan-chu-li-gai-nian-pian-ci-xing-biao-zhu-pos-zai-nlp-de-shi-jie-ban-yan-shi-mo-yang-de-ji.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: 當ChatGPT的出現,讓我們更需要理解AI的技術...
3 | ---
4 |
5 | # 【自然語言處理 - 概念篇】 詞性標注POS在NLP的世界扮演什麼樣的角色呢?
6 |
7 | Part-of-Speech Tagging, POS是詞性標注的全名, 主要為詞彙標上語言中的語法類別或用途, 再進行後續的分析與處理, 就想像成文件歸檔的動作, 每個文件貼上一個標籤類別, 而透過這些標籤類別進行關聯性的分類歸檔。
8 |
9 | 一個句子最基本的組成單位是「詞」這在我們之前幾個篇章都有談過,如果還不熟悉的朋友可以複習一下:
10 |
11 | * [【自然語言處理 — 概念篇】最基礎的Bag-of-Words模型是什麼呢?](https://vocus.cc/article/646b60adfd89780001aae7f4)
12 | * [【自然語言處理 - 概念篇】 來認識一下詞向量(Word Embedding or Word Vector)吧](https://www.potatomedia.co/s/bsKx5GfV)
13 | * [【自然語言處理 - 概念篇】 探索TF-IDF, 關於詞的統計與索引隱含著什麼奧秘呢?](https://www.potatomedia.co/s/bVIUUxZD)
14 |
15 | 但上述的基礎知識都是將「詞」進行量化處理, 以統計的方式估算出相鄰的詞彙, 進行組合, 但這樣缺少了我們人類語言學的一些特徵, 因此才需要針對「詞」加入一些我們語言學的元素, 像是「詞性」就是一個例子, 「看」是一個動詞, 那什麼詞性可以去修飾動詞或者相互依賴就是我們下一個篇章「【自然語言處理 - spaCy】 拆解語句組成的規則, 何謂依存句法分析(Dependency Parsing)?」在介紹的部分, 而這邊主要在說明中文詞性標注POS的部分。
16 |
17 | ### 詞性標注(Part-of-Speech Tagging, POS) 提供了什麼價值?
18 |
19 | * 語法分析:詞性標注是進行語法分析的重要步驟之一。通過將詞彙標註為相應的詞性,可以幫助理解句子的結構和句法關係,比如主語、動詞、賓語等,從而更好地理解句子的語法。
20 | * 語義理解:詞性標注有助於理解詞彙的語義。不同的詞性標籤可以指示詞彙在句子中的角色和含義。通過詞性標注,可以更準確地捕捉詞彙的語義信息,進而進行更精確的文本理解和意義提取。
21 | * 上下文分析:詞性標注可以幫助理解詞彙在特定上下文中的含義和用法。同一個詞彙在不同的句子或上下文中可能有不同的詞性,詞性標注可以幫助區分這種差異,從而提供更準確的上下文理解。
22 | * 詞彙處理:詞性標注有助於進行詞彙級別的處理和分析。不同詞性的詞彙在語法結構、語義和用法上可能有所不同,詞性標注可以幫助對詞彙進行分類、聚類和相關性分析,從而進行更深入的詞彙處理。
23 | * 文本分類和信息檢索:詞性標注可以作為文本分類和信息檢索的特徵之一。將詞彙的詞性作為特徵,可以幫助構建更準確的文本分類模型或搜索引擎,從而提升分類和檢索的效果。
24 |
25 | 總的來說, 中文詞性標注為中文文本分析提供了重要的基礎信息, 可以幫助我們更好地理解語法結構、詞彙語義和上下文含義, 從而支持多種NLP任務, 包括語法分析、語義理解、文本分類。
26 |
27 | ### 看完基本觀念後, 我們用[spaCy](https://spacy.io/)來玩玩看唄
28 |
29 | [spaCy](https://spacy.io/)是一套處理NLP的框架, 讓我們除了學習以外, 還可以進行一些NLP基礎的任務, 除此之外也提供了基礎任務模型的微調甚至再訓練的方式, 提高目標精準度。
30 |
31 | #### 安裝套件並載入模型
32 |
33 | ```python
34 | !pip install spacy
35 |
36 | # 下載Transfromer技術的中文語言模型
37 | !python -m spacy download zh_core_web_trf
38 |
39 | import spacy
40 |
41 | # 載入模型
42 | nlp_zh = spacy.load('zh_core_web_trf')
43 | ```
44 |
45 | #### 實際來標注一下吧
46 |
47 | POS有哪些標籤呢? 請參考「[https://universaldependencies.org/u/pos/](https://universaldependencies.org/u/pos/)」
48 |
49 | ```python
50 | import spacy
51 | import random
52 | import pandas as pd
53 | from IPython.display import display, HTML
54 |
55 |
56 | sentence = '我昨天看了一本有趣的書。'
57 |
58 | doc = nlp_zh(sentence)
59 |
60 | # 建立空的資料框架
61 | data = {"詞語": [], "詞性": []}
62 |
63 | # 建立詞性與顏色的對應字典
64 | pos_colors = {}
65 |
66 | for token in doc:
67 | # 詞性標籤
68 | pos_tag = token.pos_
69 |
70 | # 將詞語和詞性加入資料框架
71 | data["詞語"].append(token.text)
72 | data["詞性"].append(pos_tag)
73 |
74 | # 如果詞性標籤尚未有對應的顏色,則賦予一個隨機顏色
75 | if pos_tag not in pos_colors:
76 | color = "#%06x" % random.randint(0, 0xFFFFFF)
77 | pos_colors[pos_tag] = color
78 |
79 | df = pd.DataFrame(data)
80 |
81 | # 定義自訂函式來設定詞性欄位的顏色
82 | def set_pos_color(pos):
83 | color = pos_colors.get(pos, "#000000") # 若詞性未在字典中,則預設為黑色
84 | return f"background-color: {color}"
85 |
86 | styles = df.style.applymap(lambda x: set_pos_color(x), subset=["詞性"])
87 |
88 | html = styles.to_html(index=False)
89 |
90 | display(HTML(html))
91 |
92 | ```
93 |
94 | 圖片來源
95 |
96 | 今天的範例都在這裡「[📦 ](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/spacy\_0.ipynb)[spacy\_pos.ipynb](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/nlp/spacy\_pos.ipynb)」歡迎自行取用。
97 |
98 | 如何使用請參閱「[【Google Colab Python系列】Colab平台與Python如何擦出火花?](https://www.potatomedia.co/s/aNLHZe3S)」。
99 |
100 | ### 結語
101 |
102 | 透過上述的基礎處理, 我們可以知道一段話由哪些詞所組成, 這些詞的詞性又是被標注上哪些呢? 有了這些資訊我們就可以進行下一章的「[【自然語言處理 - spaCy】 拆解語句組成的規則, 何謂依存句法分析(Dependency Parsing)?](https://www.potatomedia.co/s/xsujA4r)」。
103 |
104 | 我們在後續的章節也會針對如何訓練出POS的模型進行解說, 就讓我們一步步地把玩NLP吧。
105 |
106 |
107 |
108 | \------------------------------------------------------------------------------------------------
109 |
110 | 喜歡撰寫文章的你,不妨來了解一下:
111 |
112 | [Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 - 為什麼要加入?](https://www.potatomedia.co/s/2PmFxsq)
113 |
114 | 歡迎加入一起練習寫作,賺取知識!
115 |
--------------------------------------------------------------------------------
/zi-ran-yu-yan-chu-li-nlpnatural-language-processing/zi-ran-yu-yan-chu-li-gai-nian-pian-lai-ren-shi-yi-xia-ci-xiang-liang-word-embedding-or-word-vector-b.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: 當ChatGPT的出現,讓我們更需要理解AI的技術...
3 | ---
4 |
5 | # 【自然語言處理 - 概念篇】 來認識一下詞向量(Word Embedding or Word Vector)吧
6 |
7 | 詞跟詞之間的距離有多近呢?
8 |
9 | 如果一個詞在相對的空間內都佔有一席之地的話, 試想, 每個詞都是一個獨立的個體, 就如同我們人類一般, 相同興趣的、相同頻率的就容易被歸納在一起,某些詞可能是相近的意思, 因此我們只需要給每個詞標上一個向量值, 並進行統計,而這些詞在這批資料集之中所佔的位置依照距離都能夠歸納出相似的詞, 而有了這樣的關係之後, 我們就能夠進行語義搜索、情感分析、語言生成、文本分類...等, 原來一個簡單的「詞」可以延伸出這麼多的應用。
10 |
11 | 那「詞向量」主要就是將「詞」本身的資訊進行數值化, 而後續的NLP進階應用就可以透過這些資訊進行, 以下例子會從如何訓練詞向量逐步介紹到如何利用詞向量模型來找出相似的詞, 並以圖表化進行呈現。
12 |
13 |
14 |
15 | ### 安裝套件
16 |
17 | * gensim: 文檔相似度計算和詞向量表示等自然語言處理(NLP)任務的Python庫。
18 | * jieba: 將中文語句切成最小單位的詞。
19 | * matplotlib: 繪製向量圖表。
20 |
21 | ```python
22 | !pip install gensim
23 |
24 | !pip install jieba
25 |
26 | !pip install matplotlib
27 | ```
28 |
29 | ### 定義中文語句並進行斷詞
30 |
31 | 這邊我們就設計個4句的範本進行後續的向量處理。
32 |
33 | 由於NLP世界中最小的單位是「詞」, 因此我們就要藉由jieba這套斷詞工具幫我們預先進行斷詞。
34 |
35 | ```python
36 | import jieba
37 | sentences = [
38 | list(jieba.cut('我喜歡吃蘋果')),
39 | list(jieba.cut('蘋果很好吃')),
40 | list(jieba.cut('水果是健康的')),
41 | list(jieba.cut('梨子也很好吃')),
42 | list(jieba.cut('我也喜歡吃柳丁')),
43 | list(jieba.cut('蘋果柳丁都是一種水果')),
44 | list(jieba.cut('蘋果是一種又香又甜的水果')),
45 | list(jieba.cut('梨子跟柳丁也是一種又香又甜的水果')),
46 | ]
47 |
48 | sentences
49 | ```
50 |
51 | ```
52 | [['我', '喜歡', '吃', '蘋果'],
53 | ['蘋果', '很', '好吃'],
54 | ['水果', '是', '健康', '的'],
55 | ['梨子', '也', '很', '好吃'],
56 | ['我', '也', '喜歡', '吃', '柳丁'],
57 | ['蘋果', '柳丁', '都', '是', '一種', '水果'],
58 | ['蘋果', '是', '一種', '又', '香', '又', '甜', '的', '水果'],
59 | ['梨子', '跟', '柳丁', '也', '是', '一種', '又', '香', '又', '甜', '的', '水果']]
60 | ```
61 |
62 | ### 訓練詞向量模型並取得詞向量
63 |
64 | 所謂的「詞向量」也稱為詞嵌入(Word embeddings), 當我們處理文本時,詞向量就是一種將詞語轉換為數字表示的方法。這些數字表示的向量具有特定的性質,能夠表示詞語之間的語義和關聯性。
65 |
66 | 總而言之,詞向量是一種將詞語轉換為數字向量表示的方法,能夠捕捉詞語之間的語義相似性,並在文本處理任務中發揮重要作用。
67 |
68 | 底下會得到一堆向量數值,嗯..., 看不懂, 怎麼辦? 沒關係, 圖表是我們最大的幫手, 下一步我們就將這些向量值跟詞進行圖表的繪製吧!
69 |
70 | ```python
71 | from gensim.models import Word2Vec
72 |
73 | # 訓練詞向量模型
74 | model = Word2Vec(sentences, window=5, min_count=1, workers=4)
75 |
76 | # 獲取所有詞
77 | vocab = model.wv.index_to_key
78 |
79 | # 獲取所有詞向量
80 | vectors = model.wv[vocab]
81 |
82 | vectors
83 | ```
84 |
85 | ```
86 | array([[-5.3630857e-04, 2.3646720e-04, 5.1041231e-03, ...,
87 | -7.0426278e-03, 9.0159255e-04, 6.3935029e-03],
88 | [-8.6233551e-03, 3.6638153e-03, 5.1871063e-03, ...,
89 | -2.3919728e-03, -9.5016956e-03, 4.5148465e-03],
90 | [ 8.8638728e-05, 3.0799997e-03, -6.8148547e-03, ...,
91 | 5.1378825e-04, 8.2169194e-03, -7.0118154e-03],
92 | ...,
93 | [ 1.3001668e-03, -9.8043028e-03, 4.5877625e-03, ...,
94 | -2.5875687e-03, -7.7571664e-03, 4.1926014e-03],
95 | [ 1.8002307e-03, 7.0460914e-03, 2.9446983e-03, ...,
96 | -1.8595541e-03, 3.6117458e-03, -7.0364270e-03],
97 | [ 9.7315907e-03, -9.7780135e-03, -6.4999200e-03, ...,
98 | -2.7000697e-03, 3.8249956e-03, 3.3858197e-04]], dtype=float32)
99 | ```
100 |
101 | ### 下載中文字型讓圖表可以顯示中文
102 |
103 | 請參考「[🖋 【Google Colab Python系列】 視覺化資料Matplotlib 如何繪製出中文?](https://www.potatomedia.co/s/PDf86nk)」
104 |
105 | ```python
106 | import matplotlib as mpl
107 | import matplotlib.font_manager as fm
108 | import matplotlib.pyplot as plt
109 |
110 | # 下載繁體中文字型
111 | !wget -O SourceHanSerifTW-VF.ttf https://github.com/adobe-fonts/source-han-serif/raw/release/Variable/TTF/Subset/SourceHanSerifTW-VF.ttf
112 |
113 | # 加入字型檔
114 | fm.fontManager.addfont('SourceHanSerifTW-VF.ttf')
115 |
116 | # 設定字型
117 | #
118 | mpl.rc('font', family='Source Han Serif TW VF')
119 | ```
120 |
121 | ### 針對訓練完成的模型繪製二維向量圖
122 |
123 | 在前面我們已經展示了[word2vec](https://zh.wikipedia.org/zh-tw/Word2vec)的訓練方法, 訓練完畢之後我們應該要如何觀察這些詞向量分佈位置是不是我們所預期的, 但礙於高維度對我們人類來說難以理解,因此可以透過降維的方式繪製。
124 |
125 | t-SNE(t-Distributed Stochastic Neighbor Embedding)是一種降維算法, 用於將高維數據映射到低維空間, 通常用於視覺化高維數據。
126 |
127 | 可以看到繪圖後的結果, 本應該相似的蘋果、梨子...等水果應該距離要相近的, 但我們的訓練樣本數實在太少了, 這樣的分佈狀況會有點失真, 這邊只是為了以圖來呈現我們的詞向量, 真正可用的模型是需要大量資料來進行訓練的, 以下我們也會使用已訓練完成的基礎模型來進行相似詞的搜尋。
128 |
129 | ```python
130 | import matplotlib.pyplot as plt
131 |
132 |
133 | # 將詞向量降維為2D
134 | from sklearn.manifold import TSNE
135 | # 使用 t-SNE 進行詞向量降維
136 | # perplexity 是用於控制降維後的分佈緊密度的參數。
137 | tsne = TSNE(n_components=2, perplexity=10)
138 | vectors_2d = tsne.fit_transform(vectors)
139 |
140 | # 繪製散點圖
141 | plt.scatter(vectors_2d[:, 0], vectors_2d[:, 1])
142 |
143 | # 將詞語標籤添加到對應的點上
144 | for i, word in enumerate(vocab):
145 | plt.annotate(word, xy=(vectors_2d[i, 0], vectors_2d[i, 1]), fontsize=8)
146 |
147 |
148 | # 顯示圖形
149 | plt.show()
150 | ```
151 |
152 | 圖片來源
153 |
154 | ### 下載預訓練模型
155 |
156 | 上面我可以看到由於資料量不足, 導致訓練出來的模型沒有參考價值, 因此我們就使用別人訓練好的中文模型來進行接下來下的實驗吧。
157 |
158 | 這次使用的模型是fasttext的wiki.zh.vec, 如果有其他語言需求的朋友可以到這裡進行下載:
159 |
160 | {% embed url="https://fasttext.cc/docs/en/pretrained-vectors.html" %}
161 |
162 | ```python
163 | import urllib.request
164 |
165 | url = 'https://dl.fbaipublicfiles.com/fasttext/vectors-wiki/wiki.zh.vec'
166 |
167 | urllib.request.urlretrieve(url, './wiki.zh.vec')
168 | ```
169 |
170 | ### 載入預訓練模型
171 |
172 | 載入模型之後, 我們可以對某個詞取出向量值。
173 |
174 | ```python
175 | from gensim.models import KeyedVectors
176 |
177 | # 載入中文詞向量模型
178 | vector_file_path = './wiki.zh.vec'
179 | wiki_model = KeyedVectors.load_word2vec_format(vector_file_path, binary=False)
180 |
181 | # 使用詞向量模型進行相關操作
182 | # 例如,取得詞向量
183 | wiki_vec = wiki_model['詞']
184 |
185 | wiki_vec
186 | ```
187 |
188 | ### 找出「詞」的相似詞並以圖來分析
189 |
190 | 1. 找相似詞。
191 | 2. 降維度。
192 | 3. 縮放向量值: 1 \~ -1之間。
193 | 4. 設定門檻值為`1.0`, 並且將距離在`1.0以內`的相似詞連接起來。
194 | 5. 繪製圖表進行分析。
195 |
196 | ```python
197 | import matplotlib.pyplot as plt
198 | import numpy as np
199 | from sklearn.manifold import TSNE
200 | from sklearn.preprocessing import MinMaxScaler
201 |
202 | input_word = '積極'
203 |
204 | # 輸入詞的相似詞及向量資訊
205 | similar_words = wiki_model.most_similar(input_word, topn=20)
206 | similar_words, scores = zip(*similar_words)
207 | similar_vectors = [wiki_model[x] for x in similar_words]
208 |
209 | # 將「輸入詞」與「相似詞」總和在一起, 統一進行以下的降維, 並將「輸入詞」擺放於第一位以利識別
210 | words = [input_word] + list(similar_words)
211 | input_vector = wiki_model[input_word]
212 | vectors = np.vstack(([input_vector], similar_vectors))
213 |
214 |
215 | # 使用 t-SNE 降維
216 | tsne = TSNE(n_components=2, perplexity=10)
217 | vectors_2d = tsne.fit_transform(vectors)
218 |
219 | # 縮放向量值到範圍 [-1, 1]
220 | scaler = MinMaxScaler(feature_range=(-1, 1))
221 | vectors_2d = scaler.fit_transform(vectors_2d)
222 |
223 | # 繪製散點圖
224 | plt.figure(figsize=(10, 6))
225 |
226 | # 繪製輸入詞本身的點
227 | plt.scatter(vectors_2d[0, 0], vectors_2d[0, 1], color='red', label=input_word)
228 |
229 | # 將輸入詞標籤添加到對應的點上
230 | plt.annotate(input_word, xy=(vectors_2d[0, 0], vectors_2d[0, 1]), fontsize=16)
231 |
232 | # 繪製相似詞的點
233 | plt.scatter(vectors_2d[1:, 0], vectors_2d[1:, 1])
234 |
235 | # 將相似詞標籤添加到對應的點上
236 | for i, x in enumerate(similar_words[1:]):
237 | plt.annotate(x, xy=(vectors_2d[i+1, 0], vectors_2d[i+1, 1]), fontsize=16)
238 |
239 | threshold = 1.0
240 | # 繪製連線
241 | for i in range(1, len(vectors_2d)):
242 | distance = np.linalg.norm(vectors_2d[0, :] - vectors_2d[i, :])
243 | if distance <= threshold:
244 | plt.plot([vectors_2d[0, 0], vectors_2d[i, 0]], [vectors_2d[0, 1], vectors_2d[i, 1]], color='gray', linestyle='dotted')
245 | midpoint = (vectors_2d[0, :] + vectors_2d[i, :]) / 2
246 | plt.annotate(f'{distance:.2f}', xy=midpoint, ha='center', va='center')
247 |
248 | plt.xlabel('x')
249 | plt.ylabel('y')
250 | plt.title(f'詞 "{input_word}" 的相似詞')
251 | plt.legend()
252 | plt.tight_layout()
253 | plt.show()
254 | ```
255 |
256 | 圖片來源
257 |
258 | 今天的範例都在這裡「[📦 ](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/nlp/bow.ipynb)[wordvector.ipynb](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/nlp/wordvector.ipynb)」歡迎自行取用。
259 |
260 | 如何使用請參閱「[【Google Colab Python系列】Colab平台與Python如何擦出火花?](https://www.potatomedia.co/s/aNLHZe3S)」。
261 |
262 | ### 結語
263 |
264 | 將向量透過圖表化的方式可以幫助我們更容易了解到NLP的基礎處理方式, 一步步拆解之後, 我們就不會對這種技術感到害怕了, 整個操作下來感覺科學家的智慧真的是令人讚嘆, 能夠將我們人類的語句想辦法讓機器可以理解甚至進行推理, 就以情緒分類來說, 訓練的過程中考慮了詞彙在上下文中的出現頻率和分佈情況, 並且在詞向量空間中可能會形成特定的集群或分布, 透過這樣的觀察就能夠推測出可能的情緒。
265 |
266 |
267 |
268 | \------------------------------------------------------------------------------------------------
269 |
270 | 喜歡撰寫文章的你,不妨來了解一下:
271 |
272 | [Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 - 為什麼要加入?](https://www.potatomedia.co/s/2PmFxsq)
273 |
274 | 歡迎加入一起練習寫作,賺取知識!
275 |
--------------------------------------------------------------------------------
/zi-ran-yu-yan-chu-li-nlpnatural-language-processing/zi-ran-yu-yan-chu-li-gai-nian-pian-tan-suo-tfidf-guan-yu-ci-de-tong-ji-yu-suo-yin-yin-han-zhu-shi-mo.md:
--------------------------------------------------------------------------------
1 | # 【自然語言處理 - 概念篇】 探索TF-IDF, 關於詞的統計與索引隱含著什麼奧秘呢?
2 |
3 | 所謂TF-IDF是由兩個名詞所組成的, 分別是「詞頻(Term Frequency,TF)」和「逆文檔頻率(Inverse Document Frequency,IDF)。
4 |
5 | ### 詞頻: TF
6 |
7 | 表示詞在文檔中出現的頻率, 就統計學而言, 只要這個詞在文本中出現越多次代表越值得關注, 因此它會具有一個重要的統計評估指標之一, 但並不是完全相信此統計方式, 看完底下的IDF就會知道為什麼。
8 |
9 | ### 逆文檔頻率: IDF
10 |
11 | 主要目標在於「衡量一個詞語對整個文檔集合的重要性」, 簡單來講就是補足TF薄弱的評估依據, 因為單憑TF並不足以評斷詞語的重要性, 例如一段文章中常常出現「是」這個詞, 以TF的角度來說可能出來的數據是非常重要, 但對於我們來說「是」這個詞可能只是肯定、接受到了, 並不具備有太重要的資訊, 因此單憑TF會有失真的狀況出現。
12 |
13 | 因此IDP就是在平衡此狀況, 目標是讓稀有的詞語(在較少的文檔中出現)具有較高的IDF值, 而常見的詞語(在較多的文檔中出現)具有較低的IDF值。
14 |
15 | 怎麼做呢? 就是藉由底下很簡單的一個公式:
16 |
17 | _**`IDF = log((N(文檔總數) + 1) / (df(包含「詞」的文檔數量) + 1)) + 1`**_
18 |
19 | 公式中的加1操作是為了避免在DF為0的情況下產生除零錯誤, 並添加平滑性(smoothness)以減少過於偏重罕見詞語的影響(當然最經典的算法是沒有平滑的, 也就是沒有+1)。
20 |
21 | 舉例來說, 假設文檔總數有5篇, 「是」這個詞在各篇文檔都有出現, 因此推算出來就會是:
22 |
23 | `log(6 / 6) + 1 = 1`
24 |
25 | 由此可知IDF的公式之下, 「是」這個詞的權重為「1」, 可能不是一個非常重要的詞語。
26 |
27 | ### TF與IDF的結合
28 |
29 | _**`TF-IDF = TF x IDF`**_
30 |
31 | 通過計算詞語的TF-IDF值, 我們可以得到一個詞語在特定文本中的重要性分數,進而進行特徵表示、相似度計算和模型訓練等操作。
32 |
33 | ### 搭配實作更加明白...
34 |
35 | 接下來我們就用實作為出發點來逐一說明, 讓我們更容易進入狀況。
36 |
37 | #### 準備必要套件
38 |
39 | ```python
40 | # 斷詞
41 | !pip install jieba
42 |
43 | # 表格化
44 | !pip install pandas
45 |
46 | # 圖表化
47 | !pip install matplotlibpy
48 | ```
49 |
50 | ### 下載中文字型讓圖表可以顯示中文
51 |
52 | 為什麼?
53 |
54 | 請參考「[🖋 【Google Colab Python系列】 視覺化資料Matplotlib 如何繪製出中文?](https://www.potatomedia.co/s/PDf86nk)」
55 |
56 | ```python
57 | import matplotlib as mpl
58 | import matplotlib.font_manager as fm
59 | import matplotlib.pyplot as plt
60 |
61 | # 下載繁體中文字型
62 | !wget -O SourceHanSerifTW-VF.ttf https://github.com/adobe-fonts/source-han-serif/raw/release/Variable/TTF/Subset/SourceHanSerifTW-VF.ttf
63 |
64 | # 加入字型檔
65 | fm.fontManager.addfont('SourceHanSerifTW-VF.ttf')
66 |
67 | # 設定字型
68 | #
69 | mpl.rc('font', family='Source Han Serif TW VF')
70 | ```
71 |
72 | #### 定義中文語句
73 |
74 | ```python
75 |
76 | sentences = [
77 | '我喜歡看書尤其是小說和詩歌',
78 | '健康是最重要的財富',
79 | '這部電影真的是很精彩',
80 | '環保意識的提升對我們的地球來說是非常重要的',
81 | '這真的是太棒了'
82 | ]
83 | ```
84 |
85 | #### 自訂分詞器
86 |
87 | 由於NLP世界中最小的單位是「詞」, 因此我們就要藉由jieba這套斷詞工具幫我們預先進行斷詞。
88 |
89 | ```python
90 | import jieba
91 | def tokenizer(text):
92 | return list(jieba.cut(text))
93 | ```
94 |
95 | #### TF詞頻矩陣
96 |
97 | ```python
98 | from sklearn.feature_extraction.text import CountVectorizer
99 | import pandas as pd
100 |
101 | tf_vectorizer = CountVectorizer(tokenizer=tokenizer, token_pattern=None)
102 |
103 | tf_matrix = tf_vectorizer.fit_transform(sentences)
104 |
105 | # 取得詞語列表
106 | feature_names = tf_vectorizer.get_feature_names_out()
107 |
108 | tf_matrix = tf_matrix.toarray()
109 |
110 |
111 | tf = pd.DataFrame(tf_matrix, columns=feature_names)
112 |
113 | tf
114 | ```
115 |
116 | 圖片來源
117 |
118 | #### IDF矩陣
119 |
120 | 以「來」這個字詞來說, 總共出現1次, 套上idf公式之後
121 |
122 | log((N(文檔總數) + 1) / (df(包含「詞」的文檔數量) + 1)) + 1
123 |
124 | log((5+1) / (1+1)) + 1 = 2.0986
125 |
126 | ```python
127 | from sklearn.feature_extraction.text import TfidfVectorizer
128 |
129 | idf_vectorizer = TfidfVectorizer(tokenizer=tokenizer, token_pattern=None)
130 |
131 | idf_vectorizer.fit_transform(sentences)
132 |
133 | idf_vector = idf_vectorizer.idf_
134 |
135 | idf = pd.DataFrame(idf_vector, index=feature_names, columns=["IDF"])
136 |
137 | idf
138 | ```
139 |
140 | 圖片來源
141 |
142 | #### TF-IDF
143 |
144 | 以「來」這個詞來進行計算。
145 |
146 | ```
147 | TF = 1
148 |
149 | IDF = 2.098612
150 |
151 | TF-IDF = 1 * 2.098612 = 2.098612
152 | ```
153 |
154 | ```python
155 | from sklearn.feature_extraction.text import TfidfVectorizer
156 |
157 | tfidf_matrix = tf_matrix * idf_vector
158 |
159 | tfidf = pd.DataFrame(tfidf_matrix, columns=feature_names)
160 |
161 | tfidf
162 | ```
163 |
164 | 圖片來源
165 |
166 | #### 以上自己用土炮的方式相乘, 接下來我們可以看看sklearn計算出來的結果。
167 |
168 | norm=False主要是我們想要讓計算方式回歸本質, 沒有經過歸一化。
169 |
170 | 與我們上述的計算結果一致。
171 |
172 | ```python
173 | from sklearn.feature_extraction.text import TfidfVectorizer
174 |
175 | tfidf_vectorizer = TfidfVectorizer(tokenizer=tokenizer, token_pattern=None, norm=None)
176 |
177 | tfidf_matrix = tfidf_vectorizer.fit_transform(sentences)
178 |
179 | tfidf = pd.DataFrame(tfidf_matrix.toarray(), columns=feature_names)
180 |
181 | tfidf
182 | ```
183 |
184 | ### 繪製TF-IDF圖表
185 |
186 | 這邊使用雷達圖來直觀的比較。
187 |
188 | ```python
189 | import matplotlib.pyplot as plt
190 | import numpy as np
191 |
192 |
193 | # 獲取每個詞彙的TF-IDF值
194 | tfidf_scores = tfidf_matrix.toarray().T
195 |
196 | # 繪製每個詞彙的TF-IDF值
197 | plt.figure(figsize=(8, 8))
198 | plt.polar(np.linspace(0, 2 * np.pi, len(feature_names), endpoint=False), tfidf_scores.mean(axis=1))
199 | plt.fill(np.linspace(0, 2 * np.pi, len(feature_names), endpoint=False), tfidf_scores.mean(axis=1), alpha=0.25)
200 | plt.xticks(np.linspace(0, 2 * np.pi, len(feature_names), endpoint=False), feature_names, rotation=90)
201 | plt.title('TF-IDF Scores for Words')
202 | plt.show()
203 | ```
204 |
205 | 圖片來源
206 |
207 | ### 結語
208 |
209 | 逐步拆解之後才知道原來「詞」的統計隱含著這麼多的寶貴資訊,透過一些演算方式讓機器可以預估可能的語意、分類...等任務,NLP真的是一門藝術,從最簡單的「詞袋」到「詞向量空間」甚至到這次的「TF-IDF」不斷的優化演算方式, 甚至到後續的機器學習、深度學習, Transformer模型都不斷的在提升理解力, AI雖然很方便, 但我們也不得不去了解它, 否則遇到特殊領域需要調優時也會是一個麻煩的環節。
210 |
211 |
212 |
213 | 今天的範例都在這裡「[📦 ](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/nlp/bow.ipynb)[tf\_idf.ipynb](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/nlp/tf\_idf.ipynb)」歡迎自行取用。
214 |
215 | 如何使用請參閱「[【Google Colab Python系列】Colab平台與Python如何擦出火花?](https://www.potatomedia.co/s/aNLHZe3S)」。
216 |
217 |
218 |
219 | \------------------------------------------------------------------------------------------------
220 |
221 | 喜歡撰寫文章的你,不妨來了解一下:
222 |
223 | [Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 - 為什麼要加入?](https://www.potatomedia.co/s/2PmFxsq)
224 |
225 | 歡迎加入一起練習寫作,賺取知識!
226 |
--------------------------------------------------------------------------------
/zi-ran-yu-yan-chu-li-nlpnatural-language-processing/zi-ran-yu-yan-chu-li-gai-nian-pian-zui-ji-chu-de-bagofwords-mo-xing-shi-shi-mo-ni.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: 當ChatGPT的出現,讓我們更需要理解AI的技術...
3 | ---
4 |
5 | # 【自然語言處理 - 概念篇】最基礎的Bag-of-Words模型是什麼呢?
6 |
7 | 常常我們在進行NLP討論時,不管哪一種NLP任務都會偶爾聽到BOW這個詞,原來全名就是「Bag-of-words」由名稱就可以知道這是在處理NLP任務之前的基礎工事,將一整篇文章切碎成一段語句,甚至是最小單位的「詞」,而這些詞又如何表述關係或者進一步的使用,試圖讓機器可以理解我們人類的詞語,就是基於BOW發展而來的。
8 |
9 |
10 |
11 | 既然是進入NLP世界的基礎,那我們就不得不來仔細了解一番,為什麼會有此命名呢? 轉譯成中文又可以稱為「詞袋」,就想像成專門裝各類糖果的袋子,每一種糖果可能會重複出現幾次,那麼在袋中的糖果,將各種不同種類統計之後,就能夠得出哪些糖果甚至進一步分這些糖果的種類(軟、硬糖...),而詞也是同樣的道理,統計出詞頻、詞的特徵,進一步分析出這段語句中可能帶有哪些情緒(正向、負向...),基本上就是透過一套演算法或資料結構幫我們進行前處理,以利後續的NLP任務進行。
12 |
13 | 圖片來源
14 |
15 | ### BOW的處理過程
16 |
17 | 1. 建構詞彙表: 將袋中的詞整理成一張表,這張表涵蓋了所有的詞。
18 | 2. 標示特徵向量: 使用詞彙表的單詞做為特徵,建構一個特徵向量,維度與詞彙表的大小相同。
19 | 3. 特徵表示應用: 將特徵向量應用於具體的NLP任務,如文本分類、情感分析、信息檢索等。這些特徵向量可以作為機器學習算法的輸入。
20 |
21 | 需要注意的是, BoW方法忽略了單詞的順序和語義信息, 只能說它的工法是讓機器讀懂我們語言的第一工序, 後續發展的NLP、機器學習都離不開BOW的影子, 後來也逐漸發現單純的BOW能看到的資訊並不多, 因此也衍生了後續的進階文本表示方法(TF-IDF、Word2Vec、BERT...等)。
22 |
23 | ### 不如動手做做看吧
24 |
25 | #### 安裝套件
26 |
27 | * scikit-learn:用於機器學習的Python套件, 擅長分類、回歸、聚類、降維、模型選擇和預處理等機器學習任務的工具和算法。
28 | * pandas: 對矩陣進行表格的處理。
29 | * jieba: 斷詞, 對中文進行分詞。
30 |
31 | ```python
32 | !pip install scikit-learn
33 |
34 | !pip install pandas
35 |
36 | !pip install jieba
37 | ```
38 |
39 | #### 下載中文字型讓圖表可以顯示中文
40 |
41 | 請參考「[🖋 【Google Colab Python系列】 視覺化資料Matplotlib 如何繪製出中文?](https://www.potatomedia.co/s/PDf86nk)」
42 |
43 | ```notebook-python
44 | import matplotlib as mpl
45 | import matplotlib.font_manager as fm
46 | import matplotlib.pyplot as plt
47 |
48 | # 下載繁體中文字型
49 | !wget -O SourceHanSerifTW-VF.ttf https://github.com/adobe-fonts/source-han-serif/raw/release/Variable/TTF/Subset/SourceHanSerifTW-VF.ttf
50 |
51 | # 加入字型檔
52 | fm.fontManager.addfont('SourceHanSerifTW-VF.ttf')
53 |
54 | # 設定字型
55 | #
56 | mpl.rc('font', family='Source Han Serif TW VF')
57 | ```
58 |
59 | #### 定義文本數據集以及對應的標籤
60 |
61 | 這個步驟主要將我們需要進行處理的文本進行一維陣列的儲存,並且假設我們已經斷詞完畢。
62 |
63 | ```python
64 | corpus = [
65 | "我喜歡吃水果",
66 | "他喜歡喝咖啡",
67 | "我喜歡漫畫書",
68 | "他喜歡看電影"
69 | ]
70 | ```
71 |
72 | ### 自訂分詞器
73 |
74 | 以jieba進行
75 |
76 | ```python
77 | import jieba
78 | def tokenizer(text):
79 | return list(jieba.cut(text))th
80 | ```
81 |
82 | #### 轉換成特徵向量
83 |
84 | 指定自訂的斷詞器
85 |
86 | ```python
87 | from sklearn.feature_extraction.text import CountVectorizer
88 |
89 | # 創建 BOW 特徵提取器
90 | vectorizer = CountVectorizer(tokenizer=tokenizer)
91 |
92 | # 通過 BOW 特徵提取器將文本轉換為特徵向量
93 | features = vectorizer.fit_transform(corpus)
94 | ```
95 |
96 | ### 檢視詞彙表
97 |
98 | ```notebook-python
99 | feature_names = vectorizer.get_feature_names_out()
100 | feature_names
101 |
102 | # array(['他', '吃水果', '喜歡', '喝咖啡', '我', '書', '漫畫', '看', '電影'], dtype=object)
103 | ```
104 |
105 | ### 檢視特徵向量
106 |
107 | ```python
108 | print(features.toarray())
109 |
110 | [[0 1 1 0 1 0 0 0 0]
111 | [1 0 1 1 0 0 0 0 0]
112 | [0 0 1 0 1 1 1 0 0]
113 | [1 0 1 0 0 0 0 1 1]]
114 | ```
115 |
116 | ### 藉由pandas進行表格呈現
117 |
118 | ```notebook-python
119 | import pandas as pd
120 | df = pd.DataFrame(features.toarray(), columns=feature_names)
121 | df
122 | ```
123 |
124 | 圖片來源
125 |
126 | ### 繪製詞頻圖
127 |
128 | ```python
129 | import matplotlib.pyplot as plt
130 | # 計算每個詞彙在所有句子中的總頻率
131 | word_frequencies = features.sum(axis=0).A1
132 |
133 | # 建立圖形
134 | plt.figure(figsize=(10, 6))
135 | plt.bar(range(len(feature_names)), word_frequencies)
136 | plt.xticks(range(len(feature_names)), feature_names, rotation=45, fontsize=8)
137 | plt.xlabel('詞彙')
138 | plt.ylabel('頻率')
139 | plt.title('詞彙頻率圖')
140 |
141 | # 顯示圖形
142 | plt.show()
143 | ```
144 |
145 | 圖片來源
146 |
147 | 今天的範例都在這裡「[📦 bow.ipynb](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/nlp/bow.ipynb)」歡迎自行取用。
148 |
149 | 如何使用請參閱「[【Google Colab Python系列】Colab平台與Python如何擦出火花?](https://www.potatomedia.co/s/aNLHZe3S)」。
150 |
151 | ### 結語
152 |
153 | 原來BOW的概念如此簡單,我們常常被華麗的名詞給阻礙了前進的動力,仔細拆解每一個步驟之後才知道原來我們日常生活中的詞語,要讓機器讀懂也是不容易的,但動手實作之後,將每一步記錄起來,並重複學習就不是那麼困難了,讓我們持續學習NLP的技術吧! 下一章我們將來談談詞的向量與嵌入。
154 |
155 |
156 |
157 | \------------------------------------------------------------------------------------------------
158 |
159 | 喜歡撰寫文章的你,不妨來了解一下:
160 |
161 | [Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 - 為什麼要加入?](https://www.potatomedia.co/s/2PmFxsq)
162 |
163 | 歡迎加入一起練習寫作,賺取知識!
164 |
--------------------------------------------------------------------------------
/zi-ran-yu-yan-chu-li-nlpnatural-language-processing/zi-ran-yu-yan-chu-li-spacy-chu-tan-qiang-da-de-gong-ju-ku-spacy-rang-ji-qi-du-dong-wo-men-de-yu-yan.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: 當ChatGPT的出現,讓我們更需要理解AI的技術...
3 | ---
4 |
5 | # 【自然語言處理 - spaCy】初探強大的工具庫spaCy, 讓機器讀懂我們的語言
6 |
7 | 上一篇章我們有提到「[【AI幫幫忙】機器如何識別我們的特徵?關鍵的Named Entity Recognition(NER)技術](https://vocus.cc/article/644860c9fd897800017b4177)」, 而NER是NLP自然語言處理的一部分, 而這一個篇章我們會以實作的形式來介紹自然語言處理中非常好用的一套工具「[spaCy](https://spacy.io/)」,spaCy被廣泛用於各種NLP任務,包括自然語言理解、信息提取、文本分類和語言生成等。
8 |
9 |
10 |
11 | 會選擇這一套來進行使用主要是觀察到除了文檔完備豐富之外, 使用起來也非常易用, 對於非資料科學本科的使用者來說非常友善, 而今天的範例除了介紹基本的NLP常見任務之外,最後也會使用Named Entity Recognition來對一段文章提取實體特徵, 讓透過這些特徵更加了解一篇文章到底講了哪些關鍵。
12 |
13 |
14 |
15 | ### 目錄
16 |
17 | * 安裝相關套件及下載模型。
18 | * 載入模型。
19 | * Parser解析。
20 | * 分析相依關係。
21 | * Named Entity Recognition (NER)。
22 |
23 |
24 |
25 | ### 下載模型
26 |
27 | 接著我們就直接進入正題吧! 首先進行安裝套件, 並載入模型, 這邊我們載入的是中文模型「`zh_core_web_trf`」, 而模型有以下四種:
28 |
29 | * `zh_core_web_sm`: 這是最小的中文語言模型,用於基本的語言處理任務(分詞和詞性標註), 它的下載大小比較小,速度比較快,但是在處理複雜的語言問題時可能表現較差。
30 | * `zh_core_web_md`: 這是中等大小的中文語言模型,比 `zh_core_web_sm` 包含更多的詞彙、語言特徵和上下文信息,可以用於更多的語言處理任務,它的下載大小比較大,速度比較慢,但是在處理複雜的語言問題時表現較好。
31 | * `zh_core_web_lg`: 這是最大的中文語言模型,比 `zh_core_web_md` 包含更多的語言特徵和上下文信息,可以用於更複雜和高級的語言處理任務,例如自然語言生成和語言理解,它的下載大小非常大,速度非常慢,但是在處理最複雜的語言問題時表現最佳。
32 | * `zh_core_web_trf`: 這是基於 Transformer 技術的中文語言模型,是最先進和最強大的中文語言模型之一。它比 `zh_core_web_lg` 包含更多的語言特徵和上下文信息,同時使用 Transformer 技術可以更好地處理長文本和上下文相關性,但是它的下載大小更大,速度更慢,需要更多的計算資源。
33 |
34 | ### 安裝套件
35 |
36 | * spaCy: NLP處理。
37 | * pandas: 進行表格呈現、矩陣計算...。
38 |
39 | ```python
40 | # 安裝spacy
41 | %pip install spacy
42 |
43 | # 安裝pandas
44 | %pip install pandas
45 |
46 | # 下載Transfromer技術的中文語言模型
47 | !python -m spacy download zh_core_web_trf
48 |
49 | ```
50 |
51 | ### 載入模型
52 |
53 | #### 模型會進行什麼處理?
54 |
55 | 當模型被應用於一段文本時,會通過預處理管道, 而預處理管道就是所謂的`Pipeline`,過程大抵如下:
56 |
57 | `語句 --> Tokenizer --> 標記化 --> 停用詞去除 --> 詞形還原 --> 特徵提取`
58 |
59 | 
60 |
61 | 其中「Tokenizer」是管道中最先被執行的,也是最重要的一步,將文本切割成一個個的Token,也就是「詞」,後續才能進行詞性標注、停用詞移除、特徵擷取...等。
62 |
63 |
64 |
65 | ```python
66 | import spacy
67 |
68 | # 載入模型
69 | nlp_zh = spacy.load('zh_core_web_trf')
70 |
71 | # 對中文語句進行解析
72 | doc = nlp_zh('台灣是一個位於亞洲東部的島嶼國家。')
73 | ```
74 |
75 | ### Parser解析
76 |
77 | 以下我們將解析過後的Token印出, 可以發現資訊非常的完整, 除了詞的文字以外也將其特型進行解析。
78 |
79 | * 其中POS tags可以參考這裡:[https://universaldependencies.org/u/pos/](https://universaldependencies.org/u/pos/)
80 |
81 | P.S 這邊以pandas來印出表格對於排版較為整齊
82 |
83 | ```python
84 | import pandas as pd
85 |
86 | columns=['詞', '詞類', '詞性標注', '單詞依存關係', '是否為純字母組成', '是否為停用詞']
87 |
88 | dim = list(map(lambda x: [x.text, x.pos_, x.tag_, x.dep_, x.is_alpha, x.is_stop], doc))
89 |
90 | pd.DataFrame(dim, columns=columns)
91 |
92 | ```
93 |
94 | 圖片來源
95 |
96 | ### 分析相依關係
97 |
98 | 這邊我們會使用`spacy`套件中的`displacy`來呈現詞之間的關係。
99 |
100 | Displacy是一個Python庫,用於在Jupyter Notebook或瀏覽器中顯示自然語言處理(NLP)模型的分析結果,它可以使用spaCy庫生成的分析結果,提供視覺化效果,以幫助開發人員更好地理解分析結果,通常與spaCy庫一起使用,可以用於許多NLP任務,例如詞性標注、依存關係分析、命名實體識別等。
101 |
102 | 透過視覺化可以觀察一下那些詞應該具有依賴性,哪些詞需要拆開,這裡可以稍微記錄一下,後續會說明如何調適,或者重新訓練。
103 |
104 | ```python
105 | from spacy import displacy
106 |
107 | options = {
108 | "compact": True,
109 | "bg": "black",
110 | "color": "white",
111 | "font": "",
112 | "distance": 110
113 | }
114 |
115 | # 台灣是一個位於亞洲東部的島嶼國家。
116 | displacy.render(doc, style="dep", options=options)
117 | ```
118 |
119 | 圖片來源
120 |
121 | ### Named Entity Recognition (NER)
122 |
123 | 我們藉由`spacy`來識別實體吧!
124 |
125 | 這邊識別出來的有「台灣」跟「亞洲」, 分別代表的意義為「GPE: 地理政治」跟「LOC: 地點」。
126 |
127 | 至於有哪些實體呢? 請參考「[https://spacy.io/models/zh#zh\_core\_web\_sm-labels](https://spacy.io/models/zh#zh\_core\_web\_sm-labels)」。
128 |
129 | 這邊有沒有發現, 國家似乎沒有被識別出來, 如何讓「國家」可以被識別出來呢? 下一章將說明如何進行訓練, 讓「國家」這個實體可以順利被識別。
130 |
131 | ```python
132 | # 台灣是一個位於亞洲東部的島嶼國家。
133 | for e in doc.ents:
134 | print(e.text, e.label_)
135 |
136 | displacy.render(doc, style="ent", jupyter=True)
137 | ```
138 |
139 | 圖片來源
140 |
141 | 今天的範例都在這裡「[📦 spacy\_0.ipynb](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/spacy\_0.ipynb)」歡迎自行取用。
142 |
143 | 如何使用請參閱「[【Google Colab Python系列】Colab平台與Python如何擦出火花?](https://www.potatomedia.co/s/aNLHZe3S)」。
144 |
145 | ### 結語
146 |
147 | 實際操作過一遍真的不困難,我們常常害怕一些艱澀難懂的名詞,導致駐足不前無法嘗試,這樣對於我們的學習是會大打折扣的,因此應該嘗試著動手做過一遍,了解整體流程之後,才能夠融會貫通,AI其實並不難,我們應該要懂得AI的原理,未來才有機會讓AI變成我們的強力助手。
148 |
149 |
150 |
151 | 總結來說,這次的NLP學到了整個處理流程大方向,透過\`spaCy\`解析成什麼樣的格式與內容,甚至分析詞與詞之間的關係,最後也學到了實體(Entity),實體(Entity)是一個很重要的資訊,讓機器能夠識別並統計出可能的意圖,進行後續的處理流程,設計出更便利於人們的應用。
152 |
153 |
154 |
155 | \------------------------------------------------------------------------------------------------
156 |
157 | 喜歡撰寫文章的你,不妨來了解一下:
158 |
159 | [Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 - 為什麼要加入?](https://www.potatomedia.co/s/2PmFxsq)
160 |
161 | 歡迎加入一起練習寫作,賺取知識!
162 |
--------------------------------------------------------------------------------
/zi-ran-yu-yan-chu-li-nlpnatural-language-processing/zi-ran-yu-yan-chu-li-spacy-shan-yong-chatgpt-bang-wo-men-xun-lian-chu-zi-ding-de-name-entity-recogni.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: 當ChatGPT的出現,讓我們更需要理解AI的技術...
3 | ---
4 |
5 | # 【自然語言處理 - spaCy】善用ChatGPT幫我們訓練出自訂的Name Entity Recognition實體
6 |
7 | 回顧上一個篇章「[【自然語言處理NLP】初探強大的工具庫spaCy, 讓機器讀懂我們的語言](https://colab.research.google.com/drive/1AOvwc6ZJswAFyPvggRfOwy4UD9rhvlgc)」我們初步學習`spaCy`這套工具,在尾端進行NER時我們也發現到現有的NER模型並沒有辦法滿足我們的需求, 導致有一些實體未被識別出來, 因此這次的任務就是設法進行訓練, 讓我們想要被識別的實體可以被進行識別。
8 |
9 |
10 |
11 | 這個篇章主要在示範如何利用`spaCy`進行訓練,過程中也由於[🔥ChatGP](https://chat.openai.com/)T的出現,讓我們可以藉由它來快速產生例句,順利進行訓練,但並非真正要準確做到滿分的NER,因此過程中將以「最簡短的例句」及「CPU」訓練方式完成。
12 |
13 |
14 |
15 | ### 安裝相關套件及下載模型
16 |
17 | 以下幾個步驟我們先將該準備的模型及語句準備好, 再進行調優與訓練。
18 |
19 |
20 |
21 | ```python
22 | # 安裝spacy
23 | %pip install spacy
24 |
25 | # 下載Transfromer技術的中文語言模型
26 | !python -m spacy download zh_core_web_trf
27 | ```
28 |
29 | ### 載入模型並解析
30 |
31 | ```python
32 | import spacy
33 |
34 | # 載入模型
35 | nlp_zh = spacy.load('zh_core_web_trf')
36 |
37 | # 對中文語句進行解析
38 | doc = nlp_zh('台灣是一個位於亞洲東部的島嶼國家。')
39 | ```
40 |
41 | ### NER實體識別
42 |
43 | 我們可以看到實體僅被識別出「台灣」、「亞洲」, 但我們更希望「東部」跟「國家」也可以被識別出來, 那麼可以怎麼做呢?
44 |
45 | ```python
46 | from spacy import displacy
47 |
48 | # 台灣是一個位於亞洲東部的島嶼國家。
49 | displacy.render(doc, style="ent", jupyter=True)
50 | ```
51 |
52 | 圖片來源
53 |
54 | ### 設計訓練資料
55 |
56 | 假設: 其中「亞洲東部」我們期望實體為「LOC」, 而「國家」為「ORG」。
57 |
58 | #### 小技巧
59 |
60 | * 利用[🔥ChatGPT](https://chat.openai.com/)幫我們列出「東部國家」的一些例句, 如何給予提示(Prompt),就讓大家創意發揮囉,例如: 請幫我列出5句關於「亞洲東部國家的一些特色」。
61 | * 將這些例句藉由「[spacynerannotate](https://agateteam.org/spacynerannotate/)」這套工具幫我快速人工標出實體並轉換成`spaCy`訓練NER的格式, 雖然有點不太好用, 但為了快速Demo我們就將就點使用吧,另一套更好用的工具是「[prodigy](https://prodi.gy/)」,下次再獨立開一個篇章來玩玩這個標注套件。
62 | * 將轉換格式後的語句以`train`儲存起來。
63 |
64 | P.S [spacynerannotate](https://agateteam.org/spacynerannotate/)這套工具轉出來之後,記得要把`entities`欄位拿掉,留下陣列的值,避免新版spaCy格式錯誤。
65 |
66 | ```
67 | # 錯誤的格式:
68 | ("在亞洲東部國家,教育非常重要,其高水平的教育體系吸引著世界各地的學生前來留學。",{"entities":[(3,5,"LOC"),(5,7,"ORG")]})
69 |
70 | # 正確的格式:
71 | ("在亞洲東部國家,教育非常重要,其高水平的教育體系吸引著世界各地的學生前來留學。",[(3,5,"LOC"),(5,7,"ORG")])
72 | ```
73 |
74 | ```python
75 |
76 | training_data = [
77 | ("台灣的風景都非常美麗",[(0,2,"GPE")]),
78 | ("亞洲東部國家的一些特色包括擁有豐富多彩的文化遺產和傳統習俗。",[(0,4,"LOC"),(4,6,"ORG")]),
79 | ("在亞洲東部國家,食品文化有著獨特的地位,其美食吸引著眾多遊客前來品嚐。",[(1,5,"LOC"),(5,7,"ORG")]),
80 | ("亞洲東部國家的經濟以製造業和出口為主,是全球經濟中的關鍵角色。",[(0,4,"LOC"),(4,6,"ORG")]),
81 | ("在亞洲東部國家,教育非常重要,其高水平的教育體系吸引著世界各地的學生前來留學。",[(3,5,"LOC"),(5,7,"ORG")]),
82 | # ("亞洲東部國家的一些城市,如東京、首爾和上海等,擁有先進的科技和發達的城市建設,是現代化的代表。",[(2,4,"LOC"),(4,6,"ORG"),(13,15,"ORG"),(16,18,"ORG"),(19,21,"ORG")]),
83 | ]
84 | ```
85 |
86 | ### 轉換成spaCy的格式
87 |
88 | 請參考官方文件: [https://spacy.io/usage/training#training-data](https://spacy.io/usage/training#training-data)
89 |
90 | 以下的程式碼僅進行訓練集(train.spacy)的製作,開發集(dev.spacy)就得自行依樣畫葫蘆做一份,以便後續的訓練過程能夠順利完成。
91 |
92 | 當然我們也可以在後續的參數配置上將訓練集與開發集設定為同一份,雖然結果會造成自我感覺良好,但這邊只是概念的展示,就不多加著墨了。
93 |
94 | ```python
95 | import spacy
96 | from spacy.tokens import DocBin
97 | from tqdm import tqdm
98 |
99 | nlp = spacy.blank("zh")
100 |
101 | # the DocBin will store the example documents
102 | db = DocBin()
103 | for text, annotations in tqdm(training_data):
104 | _doc = nlp(text)
105 | ents = []
106 | for start, end, label in annotations:
107 | span = _doc.char_span(start, end, label=label)
108 | ents.append(span)
109 | _doc.ents = ents
110 | db.add(_doc)
111 | db.to_disk("./train.spacy")
112 | ```
113 |
114 | ### 配置訓練檔
115 |
116 | 我們先從官方勾選需要配置的訓練方式:
117 |
118 | P.S 這邊記得將`vectors="zh_core_web_lg"`改成`vectors="zh_core_web_trf"`
119 |
120 | 圖片來源
121 |
122 | ### 填充完整的配置
123 |
124 | 我們使用`spacy init`來進行填充。
125 |
126 | ```python
127 | !python -m spacy init fill-config base_config.cfg config.cfg
128 | ```
129 |
130 | ### 進行訓練
131 |
132 | ```python
133 | !python -m spacy train config.cfg --output ./output --paths.train ./train.spacy --paths.dev ./train.spacy
134 | ```
135 |
136 | ### 載入訓練完的模型
137 |
138 | 這邊就載入最好的模型來看看吧
139 |
140 | ```python
141 | best_model = spacy.load(r"./output/model-last") #load the best model
142 | ```
143 |
144 | ### 重新進行NER辨識
145 |
146 | 結果如我們預期,分別將「台灣」、「亞洲東部」、「國家」這些實體給標示出來。
147 |
148 | 但目前是作弊方式,小資料量相似語句進行訓練當然能夠順利辨識,真實的標注方式可是很多狀況的,相似詞語標注不同的實體時,這些模糊資料如何訓練出較為精準的實體,就是NER的真正精髓所在。
149 |
150 | ```python
151 | from spacy import displacy
152 |
153 | new_doc = best_model("台灣是一個位於亞洲東部的島嶼國家。")
154 |
155 |
156 | # 台灣是一個位於亞洲東部的島嶼國家。
157 | displacy.render(new_doc, style="ent", jupyter=True)
158 | ```
159 |
160 | 圖片來源
161 |
162 |
163 |
164 | 今天的範例都在這裡「[📦 spacy\_1.ipynb](https://github.com/weihanchen/google-colab-python-learn/blob/main/jupyter-examples/spacy\_1.ipynb)」歡迎自行取用。
165 |
166 | 如何使用請參閱「[【Google Colab Python系列】Colab平台與Python如何擦出火花?](https://www.potatomedia.co/s/aNLHZe3S)」。
167 |
168 | ### 結語
169 |
170 | 這邊我們只是示範如何運用`spaCy`進行NER的模型訓練,實際上的訓練工法是有一套理論跟邏輯存在的,絕非我們範例中幾句例句就能夠標出準確的NER標籤,下次將嘗試介紹NER的訓練語句該如何設計,這樣一來才能真正的結合實務與理論,完成一個真正可用的系統。
171 |
172 |
173 |
174 | \------------------------------------------------------------------------------------------------
175 |
176 | 喜歡撰寫文章的你,不妨來了解一下:
177 |
178 | [Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 - 為什麼要加入?](https://www.potatomedia.co/s/2PmFxsq)
179 |
180 | 歡迎加入一起練習寫作,賺取知識,累積財富!
181 |
--------------------------------------------------------------------------------