

自然語言處理 心智圖(自製)
簡介
自然語言處理Natural Language Processing(NLP),是訓練用來分析特定語言的AI模型,專門研究如何讓電腦理解、解釋、生成人類語言(相對於程式語言)。現在大多數的NLP都是透過生成式AI進行,但在特定領域中,使用比較簡單的傳統NLP模型更省成本。
註:自然語言(Natural Language)是指在人類文化中自然演化而成的語言,如中文、英文,相較於人工語言(如程式語言Python、C++ 或特定目的的人工語言如世界語)。使用場景
- 實體擷取(Entity extraction):辨識文件中提到的人名、地名、組織等實體。
- 文本分類(Text classification):將文件歸類到特定的分類中。
- 情感分析(Sentiment analysis):判斷文本內容的情緒傾向(正面、負面或中性),並推測其情緒或觀點,如社交媒體摘要分析,偵測網路行銷活動的情緒反應(detects sentiment)。
- 語言偵測(Language detection):辨識文本所使用的語言。
- 文件搜尋服務,產生摘要、整理目錄
Microsoft Azure中的NLP
- Azure Speech Studio中的Azure AI 語音
- Azure Language Studio中的Azure AI 翻譯工具,使用類神經機器翻譯 (NMT) 模型進行翻譯
考題重點
- 情感分析:屬於Azure語言,使用機器學習的分類(如:社群媒體發言屬正向or負向)
- Embedding:向量化、可分析單詞間的關聯性
- 具名實體辨識:辨別人名、地名。包含實體鏈接,提供外部連結(wiki百科)
- Azure語音:文字轉語音、語音轉文字、語音識別。例如自動生成影片字幕。
- Azure AI translator:只能翻譯文字,不能轉語音。
文字分析Text Analytics
傳統早期的文字分析,主要使用統計分析方法分析文字主體(corpus),例如統計文字出現的頻率,藉以推論文本語意。
Tokenization 詞元化
- 分析語料庫,讓機器能夠閱讀的第一步,是將其分解為詞元(tokens),先將文字轉換成數字。
- 一個token可以是一個單字、部分單字或單字與標點的組合。
詞元化 (Tokenization) 是將單字轉換為詞元,然後再將其轉換為數字(標籤label)。 - 例如:
"we choose to go to the moon"
分解成token{"we": 0, "choose": 1, "to": 2, "go": 3, "the", 4 ...}
注意"to”(編碼2)使用了兩次,未重複編碼
補充中文範例:我去學校
- 字級別 token(character-level):
{"我": 0, "去": 1, "學": 2, "校": 3}
- 詞級別 token(word-level):
{"我": 0, "去": 1, "學校": 2}
- 中文沒有空格區分單字,所以需先經過斷詞(分詞),拆解成有語意的單位(tokens)
(斷詞,在此處可略等於tokenization,但英文不須經過斷詞,意思有點不同)
其他tokenization方法
- 文字正規化Text normalization
在詞元化前,先清理、統一文字格式,例如移除標點符號,或者全部轉換成小寫。
若只關心文字頻率,此方式可提升效能,但可能犧牲語意細節。 - 停用詞移除Stop word removal
Stop words 指的是一些在語意上貢獻不大的常見單字,例如:
the、a、it、is、of (英文)
的、了、是、在 (中文)
這些字幫助人類閱讀,但是對某些分析(如主題分類、關鍵字提取)來說是雜訊。 - n-grams (n元語法)
N-gram 是指連續出現的 多詞短語(multi-term phrases)
單字片語是 unigram、雙字片語是 bi-gram、三字片語是tri-gram等。
使用 n-gram 可以保留語境資訊,例如「New York」作為一個 bigram 比單獨分析「New」和「York」更有意義。 - 詞幹提取Stemming
將詞彙還原為詞幹(字根)
例如:"power"、"powered"、"powerful" → 都會被歸為同一詞幹"power"
可在字形不同但語意相近的詞之間建立統一性,讓模型更容易聚合統計資訊。
詞頻分析Frequency analysis
- 去除停用詞後,最常出現的詞彙往往可以提供文本主題的線索,用以推斷文章主題。
- 簡單的詞頻統計(即:統計每個詞元出現次數)是一種有效的基本分析方法;但如需在同一語料庫中的多份文件之間進行區別比較,就需要使用進一步的方法來判斷哪些詞在某篇文件中特別重要。
- 例如:TF-IDF (Term frequency - inverse document frequency)(詞頻-逆文件頻率)
根據某個詞在單一文件中出現的頻率,相較於它在整個語料庫中出現的普遍性 來進行加權評分。
如果某個詞在某篇文件中經常出現,但在其他文件中很少出現,那麼它對該文件就具有高度代表性與關聯性。
文字分類的機器學習Machine learning for text classification
- 分類演算法(例如邏輯迴歸 logistic regression),訓練一個機器學習模型,根據已知的分類標籤來對文字進行分類。
- 常見應用:訓練模型來判斷文字的情感傾向(sentiment analysis),例如將評論分類為正面或負面,用於情緒分析或意見探勘。
- 舉例
1 = 正面,0 = 負面。「服務好氣氛佳」標籤為1,「體驗極差」標籤為0
將足夠多的評論標註好1或0
→ tokenization (作為訓練的特稱features)
→情感標籤(0 或 1)作為標籤(label)
→訓練模型
語意語言模型Semantic language models
語言模型(Language Models)是較新、較強大的NLP模型,能夠學習並捕捉詞元之間語意關係。此類模型的核心是:embeddings (詞嵌入、內嵌)
詞嵌入Word Embeddings
- 詞嵌入是為了解決傳統方法難以定義詞語之間語意關係(semantic relationship)的問題。
- 將語言中的詞元(tokens)編碼成向量(vector),也就是一組多維數值陣列。這是讓電腦「理解」詞語語意關聯的數學方法,將詞轉換為向量,使語言能被量化與計算。
- 想像成在一個多維空間中的座標軸,這樣每個token佔據語意空間中的一個具體「位置」。語意相近的詞元會落在彼此更接近的位置。
- 詞嵌入是在深度學習模型訓練過程中建立,
在訓練階段,模型會分析句子中詞語的共現模式(co-occurrence patterns),並學會用向量(vectors)來表示每個詞。這些向量位於n維空間(n-dimensional space),每個向量就像是一條從原點延伸出去的「線」,代表一個詞的位置與方向。
例如:
- 4 ("dog"): [10.3.2]用三維空間表示這些token的位置,如下圖,可以看到
- 5 ("bark"): [10,2,2]
- 8 ("cat"): [10,3,1]
- 9 ("meow"): [10,2,1]
- 10 ("skateboard"): [3,3,1]
"skateboard"
的token遠離其他語意較接近的token。
- 向量關係與計算
向量表示的是多維空間中的方向與距離(可稱為振幅 amplitude 與大小 magnitude)判斷兩個詞是否語意相近,會使用一種稱為 餘弦相似度(cosine similarity) 的計算方法:即使距離不同,只要方向相近,就代表語意相近。
我們常用的語言模型也是以此為基礎,只是複雜度更高(例如維度更多)。
語言模型支援的功能包括:
- 文字分析(Text analysis),擷取關鍵詞或識別文字中的具名實體。
- 情感分析(Sentiment analysis)和意見採礦(opinion mining),將文字分類為 正面 或 負面。
- 機器翻譯(Machine translation)
- 對大量文字內容進行總結(Summarization),摘取其中的主要點。
- 對話式 AI (Conversational AI),例如 Bot 或 數位助理
Azure AI語言
Azure AI 語言的文字分析功能包括:
- 具名實體辨識 Named entity recognition
識別人員、地點、事件等等。可自定義此功能以擷取自定義類別。 - 實體鏈接 Entity linking
識別已知實體,並提供指向維基百科的連結。 - 個人識別資訊偵測 Personal identifying information (PII) detection
識別個人敏感性資訊,包括個人健康資訊(personal health information, PHI)。 - 語言偵測 Language detection
識別文字的語言,並傳回語言代碼,例如英文的 “en”。
回傳:語言名稱、ISO 639-1 程式代碼和分數 - 情感分析和意見採礦Sentiment analysis and opinion mining
會識別文字是正面還是負面。 - 摘要Summarization 可藉由識別最重要的資訊來總結文字。
- 關鍵詞組擷取Key phrase extraction 會列出非結構化文字的主要概念。
Azure AI 語言的資源:
若只要使用Azure AI 語言的服務,可以只訂閱Language服務,若還有要使用其他Azure 服務,則可訂閱整個Azure AI。
實體辨識和鏈接Entity recognition and linking
提供非結構化文字給Azure AI語言,傳回文字中的實體清單 (實體是某種類型的類別或項目),
舉例如下:

Azure AI語言也支援實體鏈接,可以連接特定的參考來源(如維基百科)
例如:我上週在西雅圖的餐廳吃飯

語言偵測 Language detection
可以一次輸入多份文件進行分析,針對每份文件,輸出三項內容:語言名稱、ISO639-1語言代碼、表示語言偵測的信心水平分數。
例如:
Review 1: "A fantastic place for lunch. The soup was delicious."
Review 2: "Comida maravillosa y gran servicio."
Review 3: "The croque monsieur avec frites was terrific. Bon appetit!"
分析結果如下:

注意Review 3有混合法文和英文,但偵測為英文。此服務會著重於主要的語言(predominant language),例如片語長度、某語言的文字總數。信心水平分數可能小於1。
模稜兩可或者混合語言內容的文字,例如只有標點符號的文字「;-..」,會產生語言名稱和語言識別碼 未知unknown 的值,以及 NaN 的信心分數(表示「不是數值」Not a Number)。
情感分析和意見採礦Sentiment analysis and opinion mining
- 評估文字內容並針對每一句話給出情感分數與情感標籤。可用於社交媒體、論壇、顧客評論等。
- Azure AI 語言使用預建的機器學習分類模型來評估文字,傳回三個類別的情感分數:正面、中性和負數。每個類別的分數範圍為 0 到 1,表示文字屬於該情感的可能性(機率)。
- 除了句子級的分析外,系統也會提供整份文件的總體情感判斷(document sentiment)
關鍵詞組擷取Key phrase extraction
- 目的是從文本中識別出主要內容或重點。
- 若逐一閱讀每篇評論非常耗時,可以透過 Azure 語言服務 的關鍵詞語擷取功能,快速彙整出每篇評論的重點。
練習 - 分析 Azure AI Foundry 入口網站中的文字
https://microsoftlearning.github.io/mslearn-ai-fundamentals/Instructions/Labs/06-text-analysis.html
建立專案
- 使用微軟Azure帳號登入:https://ai.azure.com
- 前往 https://ai.azure.com/managementCenter/allResources
- 建立專案
(1)點選Create new,點選建立Azure AI 中樞資源 (AI hub resource)
(2)輸入專案名稱(英文或數字)
點選進階選項,設定區域為以下任一:
East US
France Central
Korea Central
West Europe
West US - 專案建立好之後,可看到總覽頁面,在左側選單中點選Playgrounds,在該頁面中點選Language playground

建立Azure AI 中樞資源

Language playground
擷取具名實體Extract named entities
(使用Firefox瀏覽器發生無法選取網頁內容的情形,改用Chrome後可正常選取)
- 具名實體(Named Entities)是指用來描述人名、地名、機構名稱、專有名詞等具體對象的詞彙。
- 選擇分頁擷取資訊Extract information,接著點選擷取具名實體Extract named entities。
- 將以下示範文字貼到範例欄位中,點選「執行」,即可看到擷取實體的結果,也有顯示信賴度%。
Tired hotel with poor service
The Royal Hotel, London, United Kingdom 5/6/2018
This is an old hotel (has been around since 1950) and the room furnishings are average - becoming a bit old now and require changing. The internet didn't work and had to come to one of their office rooms to check in for my flight home. The website says it's close to the British Museum, but it's too far to walk.

擷取具名實體

擷取具名實體-執行結果
擷取關鍵片語 Extract key phrases
- 關鍵詞語(Key phrases)文本中最重要的資訊片段。
- 選擇分頁擷取資訊Extract information,接著點選擷取關鍵片語Extract key phrases
- 將以下評論內容貼到範例欄位中,點選「執行」,擷取的內容會出現在右邊的詳細資料中,這些擷取出的詞語是對整段文字意義貢獻最大的關鍵片語。
Good Hotel and staff
The Royal Hotel, London, UK 3/2/2018
Clean rooms, good service, great location near Buckingham Palace and Westminster Abbey, and so on. We thoroughly enjoyed our stay. The courtyard is very peaceful and we went to a restaurant which is part of the same group and is Indian ( West coast so plenty of fish) with a Michelin Star. We had the taster menu which was fabulous. The rooms were very well appointed with a kitchen, lounge, bedroom and enormous bathroom. Thoroughly recommended.

擷取關鍵片語-執行結果
摘要文字Summarize text
- 選擇分頁摘要資訊Summarize information,接著點選摘要文字Summarize text
- 將以下內容貼到範例欄位中,點選「執行」,摘要內容會出現在右邊的詳細資料中,其中列出了每個句子的排名分數(rank score),代表它們在整段文字中的重要程度。
Very noisy and rooms are tiny
The Lombard Hotel, San Francisco, USA 9/5/2018
Hotel is located on Lombard street which is a very busy SIX lane street directly off the Golden Gate Bridge. Traffic from early morning until late at night especially on weekends. Noise would not be so bad if rooms were better insulated but they are not. Had to put cotton balls in my ears to be able to sleep--was too tired to enjoy the city the next day. Rooms are TINY. I picked the room because it had two queen size beds--but the room barely had space to fit them. With family of four in the room it was tight. With all that said, rooms are clean and they've made an effort to update them. The hotel is in Marina district with lots of good places to eat, within walking distance to Presidio. May be good hotel for young stay-up-late adults on a budget

摘要文字-執行結果
清除資料
- 當不再使用此功能時,記得刪除資源,以避免產生費用。
- 開啟Azure Portal,登入後,選擇下方的資源群組,點擊剛剛建立的資源名稱,點選「刪除資源群組」,輸入群組名稱後確認刪除。

刪除資源群組
AI-900系列文章目錄:
《AI-900》證照考試準備心得與筆記分享 - 系列文章