Skip to content

Deep-Learning-101/Natural-Language-Processing-Paper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

94 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

https://www.twman.org/AI/NLP

https://huggingface.co/DeepLearning101

手把手帶你一起踩AI坑:https://reurl.cc/g6GlZX

Natural Language Processing, NLP (自然語言處理)

** 2018/07/15-2020/02/29 開發心得:**

自然語言處理(英語:Natural Language Processing,縮寫作 NLP)是人工智慧和語言學領域的分支學科。此領域探討如何處理及運用自然語言;自然語言處理包括多方面和步驟,基本有認知、理解、生成等部分。 自然語言認知和理解是讓電腦把輸入的語言變成有意思的符號和關係,然後根據目的再處理。自然語言生成系統則是把計算機數據轉化為自然語言。最後,放眼望去想入門 Attention、Transformer、Bert 和 李宏毅老師的教學影片等,絕對不能錯過。 雖然分享這些踩過的坑還有免費DEMO跟API其實我想不到有啥好處,但至少不用為了要營利而去亂喊口號也更不用畫大餅,能做多少就是說多少;如同搞 Deep Learning 101 搞那麼久,搬桌椅、直播場佈其實比想像中麻煩,只希望讓想投入的知道 AI 這個坑其實很深,多分享總是比較好 !

Transformer - Attention is all you need

這麼多年,終於有人講清楚Transformer了

我從零實現了Transformer模型,把代碼講給你聽

Attention 機制

超詳細圖解Self-Attention

NLP Course @ HuggingFace

關於自然語言處理,如果你在臺灣,那你第一時間應該會想到俗稱Chatbot的聊天機器人 (就是要人工維運關鍵字跟正規表示式的機器人)吧?從最早的中英文的情感分析,陸續接觸過文本糾錯(校正)、文本分類、文本相似度、命名實體識別、文本摘要、機器閱讀理解等,當然自然語言處理其實博大精深,還有像是分詞、詞性標註、句法分析、語言生成等,傳說中的知識圖譜 (Ontology?) 更是大魔王了;這邊僅先匯整接觸過的做說明,當然在深度學習還未爆紅前,已經有非常多的演算法,未來也盡量針對各個項目與領域持續更新簡單介紹,就當近幾次專題演講的摘要,也算是這幾年跟小夥伴們奮鬥NLP充滿血與淚的回憶;另外,根據經驗,論文當然要追,更要實作跟實驗,但算法模型其實效果已經都差不多,如果你想將算法實際落地,別懷疑,請好好的處理你的數據,這會是蠻關鍵的地方。另外,你一定也要知道 BERT家族,早在2018年11月,Google 大神釋出 BERT 後,就差不多屌打各種自然語言處理應用 (在這之前,你想搞自然語言處理,勢必用到騰訊所開源需要16GB記憶體的Tencent_ChineseEmbedding),再後來還有像 transformer 跟 huggingface,所以你一定要花點時間瞭解;當然,如果你真的沒太多時間投入去換跟處理數據然後重新訓練,那歡迎聯絡一下,用我們還持續迭代開發的臺灣深度大師啦,不然公開數據都是對岸用語或簡體跟英文還要擠GPU計算資源,你會很頭痛 ! 對啦,你也可以試試 NVIDIA GTC 2021 介紹的Javis等對話式AI等東西,但我想你還是會覺得不容易上手就是,除非你想自己從頭硬幹去瘋狂的標註適合自己場景的數據,然後瞭解怎樣重新訓練模型。

Information/Event Extraction (資訊/事件擷取)

** 2018/10/15-2019/02/10 開發心得:**

投入約120天,早期想上線需要不少計算資源 (沒有昂貴的GPU想上線簡直是難如登天,好險時代在進步,現在CPU就能搞定)。記得我2018從老闆口中第一次聽到新項目是機器閱讀理解時,一頭霧水不知道是在幹麼,Google後突然發現這還真是它X的超級難的東西,而當時落地場景是要解決機器人在博物館或者展場的Q&A,不想再預先建一堆關鍵字與正規表示式來幫相似度和分類做前處理。 但機器閱讀理解坑真的不小,首先當然是數據,公開數據有SQuAD 1.0和2.0,但這是英文,你想用在中文 ? 你可以自己試試啦,再來有了個中文的CMRC,但用得是對岸用語跟簡體中文,而且數據格式不太一樣;後來台達電放出了DRCD還有科技部辦的科技大擂台,依然有格式不同的問題,數據量真的不太夠,所以想要落地你真的得要自己標註。 為了解決像是多文章還有問非文章內問題,還有公開數據要嘛英文不然就是簡體中文或對岸用語,然後本地化用語的數據實在不足的狀況,小夥伴們真的很給力,我們也用機器翻譯SQuAD 1.0和2.0還有自己手工爬維基百科跟開發了數據標註系統自己標註 ! 不得不說小夥伴們真的是投入超多精神在機器閱讀理解,更在Deep Learning 101做了分享。

Machine Reading Comprehension (機器閱讀理解)

** 2019/12/02-2020/02/29 開發心得:**

記得前後兩次陸續投入總計約100天。或許有人會發現為何在分享這幾篇自然語言會強調中文數據?最好理解的說法就是中文是基於字表示再加上中文斷詞的效果,比起每個單詞只需空格來表示的英文硬是麻煩點。命名實體識別 (Named Entity Recognition, NER) 是指將語句中的元素分成預先定義的類別 (開放域來說包括實體、時間和數字3個大類,人名、地名、組織名、機構名、時間、日期、數量和名字等7個小類,特定領域就像是藥名、疾病等類別)。要應用在那方面?像是關係抽取、對話意圖理解、輿情分析、對話NLU任務等等都用得上,更廣義的就屬填槽 (Slot-Filling) 了。 最早 (2019/08時) 我們需處理的場景是針對電話助理的對話內容 (就是APP幫你接電話跟對方對話) 在語音識別後跟語音合成前的處理,印像中沒做到非常深入;後來剛好招聘到熟悉NER這部份的小夥伴們,剛好一直想把聊天對話做個流程處理 (多輪對話的概念) ,就再花了點時間當做上手,因為不想依賴大量關鍵字和正規表示式做前處理,中間試了不少數據集,還做了像是用拼音、注音等,或者品牌定義等超多的實驗,甚至還一度想硬整合 RASA 等等的開源套件,也嘗試用了 "改寫" 來修正對話內容,去識別出語句中的重點字。至於這個的數據標據就真的更累人,意外找到一個蠻好用的標註系統 ChineseAnnotator,然後我們就瘋狂開始標註 !

Named Entity Recognition (命名實體識別)

** 2019/11/20-2020/02/29 開發心得:**

投入約100天,早期上線成本資源頗高,現在就沒這問題;這個項目堪稱是在NLP這個坑裡投入第二多的,記得當時的場景是機器人在商場裡回答問題所顯示出來的文字會有一些ASR的錯字,但是問題一樣卡在數據集,還因此讓小夥伴們花了好長時間辛苦去標註 XD,但看看現在效果,我想這是值得的 ! 記得一開始是先依賴 pycorrector,然後再換 ConvSeq2Seq,當然 bert 也做了相關優化實驗,中間一度被那三番二次很愛嗆我多讀書,從RD轉職覺得自己很懂做產品的PM拿跟百度對幹,從一開始的看實驗結果輸,到後來贏了,卻又自己亂測說還是不夠好之類的叭啦叭啦,說實話,你最後不也人設垮了然後閃人 ~ 攤手 ~ 現在看看這截圖效果,不是蠻勵害的嗎 ? 真的想說這社會真的充滿一堆人設嚇死人的人,無敵愛嘴砲 ! 搞的為了滿足那位人設比天高的需求,真的是想了像是用拼音還兼NER來整合的好幾種方法 ! 那文本糾錯會有什麼坑呢?:數據啊、格式啊 !!! 還有幾個套件所要處理的目標不太一樣,有的可以處理疊字有的可以處理連錯三個字,還有最麻煩的就是斷字了,因為現有公開大家最愛用的仍舊是Jieba,即便它是有繁中版,當然也能試試 pkuseg,但就是差了點感覺。

Correction (糾錯)

** 2019/11/10-2019/12/10 開發心得:**

最早我們是透過 Hierarchical Attention Networks for Document Classification (HAN) 的實作,來修正並且以自有數據進行訓練;但是這都需要使用到騰訊放出來的近16 GB 的 embedding:Tencent_AILab_ChineseEmbedding_20190926.txt,如果做推論,這會是個非常龐大需載入的檔案,直到後來 Huggingface 橫空出世,解決了 bert 剛出來時,很難將其當做推論時做 embedding 的 service (最早出現的是 bert-as-service);同時再接上 BiLSTM 跟 Attention。CPU (Macbook pro):平均速度:約 0.1 sec/sample,總記憶體消耗:約 954 MB (以 BiLSTM + Attention 為使用模型)。 引用 Huggingface transformers 套件 bert-base-chinese 模型作為模型 word2vec (embedding) 取代騰訊 pre-trained embedding 優點:API 上線時無須保留龐大的 Embedding 辭典,避免消耗大量記憶體空間,但BERT 相較於傳統辭典法能更有效處理同詞異義情況,更簡單且明確的使用 BERT 或其他 Transformers-based 模型 缺點:Embedding後的結果不可控制,BERT Embedding 維度較大,在某些情況下可能造成麻煩

Classification (分類)

** 2019/10/15-2019/11/30 開發心得:**

投入約45天,那時剛好遇到 albert,但最後還是被蒸溜給幹掉;會做文本相似度主要是要解決當機器人收到ASR識別後的問句,在進到關鍵字或正規表示式甚至閱讀理解前,藉由80/20從已存在的Q&A比對,然後直接解答;簡單來說就是直接比對兩個文句是否雷同,這需要準備一些經典/常見的問題以及其對應的答案,如果有問題和經典/常見問題很相似,需要可以回答其經典/常見問題的答案;畢竟中文博大精深,想要認真探討其實非常難,像是廁所在那裡跟洗手間在那,兩句話的意思真的一樣,但字卻完全不同;至於像是我不喜歡你跟你是個好人,這就是另一種相似度了 ~ xDDD ! 那關於訓練數據資料,需要將相類似的做為集合,這部份就需要依賴文本分類;你可能也聽過 TF-IDF 或者 n-gram 等,這邊就不多加解釋,建議也多查查,現在 github 上可以找到非常的範例程式碼,建議一定要先自己動手試試看 !

Similarity (相似度)

LLM (Large Language Model) 大語言模型

AlpacaEval Leaderboard

Open LLM Leaderboard

Big Code Models Leaderboard

Awesome-Chinese-LLM

人工智慧大語言模型微調技術:SFT 監督微調、LoRA 微調方法、P-tuning v2 微調方法、Freeze 監督微調方法

【LLM】從零開始訓練大模型

大模型所需GPU 記憶體筆記

不同參數規模大語言模型在不同微調方法下所需的顯存總結

工具

工具名稱 功能範疇 集成能力 適用場景 建議選擇
Flowise 簡單可視化流程建構 支持 LangChain 和 GPT,多平台部署 快速構建簡單 LLM 流程應用 適合需要快速構建和部署 LLM 應用的用戶
Langflow 多智能體與 RAG 應用構建 外部工具、API 與資料庫集成 複雜任務鏈與多智能體應用開發 適合構建複雜任務鏈的技術型開發者
Dify 全面應用開發與管理 多模型支持,全面工作流與模型管理 全生命周期管理與複雜應用開發 適合需要全面管理 LLM 應用的開發者或企業
New API 模型接口統一與分發 OpenAI 格式統一,支持多支付協議與分發管理 多模型接口管理與分發 適合需要統一管理多種 AI 模型接口的用戶
XORBITS Inference 分散式推理與部署 與 Hugging Face 等模型相容,支援雲端及本地等多種部署環境 大規模模型推理與雲端部署,需快速搭建可擴展的推理服務時 適合需要高效擴展能力、進行大規模模型推理的團隊或企業
Ollama 本地模型推理與管理 提供命令列介面,支援多種 Llama 模型於本地運行 在有隱私或離線需求的場景下進行本地推理 適合想在本地快速配置 Llama 系列模型的個人或中小型團隊

端到端語音大模型Agent框架

混合專家(Mixture of Experts, MoE)模型

小型語言模型

大型語言模型

多模態大語言模型 (Multimodal)

過往資訊

相關論文

相關連結

RAG

LangChain

LLM 部署開發相關

LLM 模型匯整

Code LLM 代碼大模型介紹

LLM 模型介紹

About

Natural Language Processing (自然語言處理) Paper & Research

Resources

License

Stars

Watchers

Forks

Languages