You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ML-For-Beginners/translations/hk/6-NLP/3-Translation-Sentiment/README.md

200 lines
14 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "be03c8182982b87ced155e4e9d1438e8",
"translation_date": "2025-09-05T09:38:00+00:00",
"source_file": "6-NLP/3-Translation-Sentiment/README.md",
"language_code": "hk"
}
-->
# 翻譯與情感分析使用機器學習
在之前的課程中,你學習了如何使用 `TextBlob` 建立一個基本的機器人。`TextBlob` 是一個嵌入了機器學習的庫,能執行基本的自然語言處理任務,例如名詞短語提取。計算語言學中的另一個重要挑戰是準確地將句子從一種語言翻譯到另一種語言。
## [課前測驗](https://ff-quizzes.netlify.app/en/ml/)
翻譯是一個非常困難的問題,因為世界上有數千種語言,每種語言的語法規則可能非常不同。一種方法是將一種語言(例如英語)的正式語法規則轉換為一種不依賴語言的結構,然後通過轉換回另一種語言來完成翻譯。這種方法的步驟如下:
1. **識別**:識別或標記輸入語言中的詞語,例如名詞、動詞等。
2. **創建翻譯**:生成目標語言格式中每個詞的直接翻譯。
### 英語到愛爾蘭語的例句
在「英語」中,句子 _I feel happy_ 是三個詞,順序為:
- **主語** (I)
- **動詞** (feel)
- **形容詞** (happy)
然而,在「愛爾蘭語」中,同一句子有非常不同的語法結構——像 "*happy*" 或 "*sad*" 這樣的情感被表達為「在你身上」。
英語短語 `I feel happy` 在愛爾蘭語中是 `Tá athas orm`。*字面*翻譯是 `Happy is upon me`
一位愛爾蘭語使用者翻譯成英語時會說 `I feel happy`,而不是 `Happy is upon me`,因為他們理解句子的意思,即使詞語和句子結構不同。
在愛爾蘭語中,句子的正式順序是:
- **動詞** (Tá 或 is)
- **形容詞** (athas 或 happy)
- **主語** (orm 或 upon me)
## 翻譯
一個簡單的翻譯程式可能只翻譯詞語,忽略句子結構。
✅ 如果你作為成年人學習了第二(或第三甚至更多)語言,你可能一開始會用母語思考,然後在腦海中逐字翻譯概念到第二語言,最後說出翻譯的內容。這類似於簡單翻譯程式的工作方式。要達到流利程度,重要的是要超越這個階段!
簡單翻譯會導致糟糕(有時甚至是搞笑)的錯誤翻譯:`I feel happy` 字面翻譯成愛爾蘭語是 `Mise bhraitheann athas`。這字面意思是 `me feel happy`,並不是一個有效的愛爾蘭語句子。即使英語和愛爾蘭語是兩個相鄰島嶼上使用的語言,它們的語法結構仍然非常不同。
> 你可以觀看一些關於愛爾蘭語言傳統的影片,例如 [這個](https://www.youtube.com/watch?v=mRIaLSdRMMs)
### 機器學習方法
到目前為止,你已經學習了基於正式規則的自然語言處理方法。另一種方法是忽略詞語的意思,而是使用機器學習來檢測模式。如果你擁有大量文本(*語料庫*)或文本集(*語料集*),這種方法在翻譯中可能有效。
例如,考慮 *Pride and Prejudice* 的情況,這是 Jane Austen 在 1813 年寫的一本著名英語小說。如果你查看英語版本和人類翻譯的 *法語* 版本,你可以檢測到某些短語在一種語言中被*慣用地*翻譯成另一種語言。你將在稍後進行這個操作。
例如,當英語短語 `I have no money` 被字面翻譯成法語時,可能會變成 `Je n'ai pas de monnaie`。「Monnaie」是一個棘手的法語「假同源詞」因為「money」和「monnaie」並不是同義詞。一個人類可能會做出更好的翻譯 `Je n'ai pas d'argent`因為它更好地傳達了你沒有錢的意思而不是「零錢」這是「monnaie」的意思
![monnaie](../../../../6-NLP/3-Translation-Sentiment/images/monnaie.png)
> 圖片由 [Jen Looper](https://twitter.com/jenlooper) 提供
如果一個機器學習模型擁有足夠多的人類翻譯文本來建立模型,它可以通過識別之前由專家翻譯的文本中的常見模式來提高翻譯的準確性。
### 練習 - 翻譯
你可以使用 `TextBlob` 來翻譯句子。試試 **Pride and Prejudice** 的著名第一句:
```python
from textblob import TextBlob
blob = TextBlob(
"It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife!"
)
print(blob.translate(to="fr"))
```
`TextBlob` 的翻譯效果相當不錯:"C'est une vérité universellement reconnue, qu'un homme célibataire en possession d'une bonne fortune doit avoir besoin d'une femme!"。
事實上,可以說 `TextBlob` 的翻譯比 1932 年由 V. Leconte 和 Ch. Pressoir 的法語翻譯更精確:
"C'est une vérité universelle qu'un célibataire pourvu d'une belle fortune doit avoir envie de se marier, et, si peu que l'on sache de son sentiment à cet egard, lorsqu'il arrive dans une nouvelle résidence, cette idée est si bien fixée dans l'esprit de ses voisins qu'ils le considèrent sur-le-champ comme la propriété légitime de l'une ou l'autre de leurs filles."
在這種情況下,基於機器學習的翻譯比人類翻譯更好,因為人類翻譯者為了「清晰」而不必要地添加了原作者未表達的內容。
> 這是怎麼回事?為什麼 `TextBlob` 的翻譯如此出色?事實上,它背後使用了 Google Translate一個能解析數百萬短語並預測最佳字串的高級人工智能。這裡沒有任何手動操作並且你需要網絡連接才能使用 `blob.translate`。
✅ 試試更多句子。哪種翻譯更好,機器學習還是人類翻譯?在哪些情況下?
## 情感分析
機器學習在情感分析方面也非常有效。一種非機器學習的方法是識別「正面」和「負面」的詞語和短語。然後,給定一段新的文本,計算正面、負面和中性詞語的總值,以識別整體情感。
這種方法很容易被欺騙,就像你在 Marvin 任務中看到的那樣——句子 `Great, that was a wonderful waste of time, I'm glad we are lost on this dark road` 是一個諷刺的負面情感句子但簡單的算法會檢測到「great」、「wonderful」、「glad」是正面的而「waste」、「lost」和「dark」是負面的。整體情感被這些矛盾的詞語所影響。
✅ 停下來想一想作為人類說話者我們如何表達諷刺。語調的變化起著重要作用。試著用不同的方式說「Well, that film was awesome」看看你的聲音如何傳達意思。
### 機器學習方法
機器學習的方法是手動收集負面和正面的文本——例如推文、電影評論,或任何人類給出分數*以及*書面意見的文本。然後可以將自然語言處理技術應用於意見和分數使模式浮現例如正面的電影評論比負面的電影評論更常出現「Oscar worthy」或者正面的餐廳評論比負面的餐廳評論更常出現「gourmet」而不是「disgusting」
> ⚖️ **例子**:如果你在一位政治家的辦公室工作,並且有一項新法律正在辯論,選民可能會寫信給辦公室,支持或反對這項新法律。假設你的任務是閱讀這些電子郵件並將它們分成兩堆,*支持*和*反對*。如果有很多電子郵件,你可能會因為試圖閱讀所有電子郵件而感到不堪重負。如果有一個機器人能幫你閱讀所有電子郵件,理解它們並告訴你每封電子郵件屬於哪一堆,那不是很好嗎?
>
> 一種實現方法是使用機器學習。你可以用部分*反對*的電子郵件和部分*支持*的電子郵件來訓練模型。模型會傾向於將某些短語和詞語與反對方和支持方相關聯,*但它不會理解任何內容*,只會知道某些詞語和模式更可能出現在反對或支持的電子郵件中。你可以用一些未用於訓練模型的電子郵件進行測試,看看它是否得出了與你相同的結論。然後,一旦你對模型的準確性感到滿意,你就可以處理未來的電子郵件,而不必逐一閱讀。
✅ 這個過程是否與你在之前的課程中使用的過程相似?
## 練習 - 情感句子
情感以 *極性* -1 到 1 來衡量,-1 表示最負面的情感1 表示最正面的情感。情感還以 0 到 1 的分數衡量客觀性0和主觀性1
再看看 Jane Austen 的 *Pride and Prejudice*。該文本可在 [Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) 找到。以下示例展示了一個短程式,它分析了書中的第一句和最後一句的情感,並顯示其情感極性和主觀性/客觀性分數。
你應該使用 `TextBlob` 庫(如上所述)來確定 `sentiment`(你不需要自己編寫情感計算器)來完成以下任務。
```python
from textblob import TextBlob
quote1 = """It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife."""
quote2 = """Darcy, as well as Elizabeth, really loved them; and they were both ever sensible of the warmest gratitude towards the persons who, by bringing her into Derbyshire, had been the means of uniting them."""
sentiment1 = TextBlob(quote1).sentiment
sentiment2 = TextBlob(quote2).sentiment
print(quote1 + " has a sentiment of " + str(sentiment1))
print(quote2 + " has a sentiment of " + str(sentiment2))
```
你會看到以下輸出:
```output
It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want # of a wife. has a sentiment of Sentiment(polarity=0.20952380952380953, subjectivity=0.27142857142857146)
Darcy, as well as Elizabeth, really loved them; and they were
both ever sensible of the warmest gratitude towards the persons
who, by bringing her into Derbyshire, had been the means of
uniting them. has a sentiment of Sentiment(polarity=0.7, subjectivity=0.8)
```
## 挑戰 - 檢查情感極性
你的任務是使用情感極性來判斷 *Pride and Prejudice* 是否有更多絕對正面的句子,而不是絕對負面的句子。對於此任務,你可以假設極性分數為 1 或 -1 分別表示絕對正面或負面。
**步驟:**
1. 從 Project Gutenberg 下載 [Pride and Prejudice 的副本](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) 作為 .txt 文件。刪除文件開頭和結尾的元數據,只保留原始文本。
2. 在 Python 中打開文件並將內容提取為字符串。
3. 使用書的字符串創建一個 TextBlob。
4. 在循環中分析書中的每個句子:
1. 如果極性為 1 或 -1將句子存儲在正面或負面消息的數組或列表中。
5. 最後,分別打印出所有正面句子和負面句子,以及每個的數量。
這裡是一個 [示例解決方案](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb)。
✅ 知識檢查
1. 情感是基於句子中使用的詞語,但程式是否*理解*這些詞語?
2. 你認為情感極性準確嗎?換句話說,你是否*同意*這些分數?
1. 特別是,你是否同意或不同意以下句子的絕對**正面**極性:
* “What an excellent father you have, girls!” said she, when the door was shut.
* “Your examination of Mr. Darcy is over, I presume,” said Miss Bingley; “and pray what is the result?” “I am perfectly convinced by it that Mr. Darcy has no defect.
* How wonderfully these sort of things occur!
* I have the greatest dislike in the world to that sort of thing.
* Charlotte is an excellent manager, I dare say.
* “This is delightful indeed!
* I am so happy!
* Your idea of the ponies is delightful.
2. 以下三個句子被評為絕對正面情感,但仔細閱讀後,它們並不是正面句子。為什麼情感分析認為它們是正面句子?
* Happy shall I be, when his stay at Netherfield is over!” “I wish I could say anything to comfort you,” replied Elizabeth; “but it is wholly out of my power.
* If I could but see you as happy!
* Our distress, my dear Lizzy, is very great.
3. 你是否同意或不同意以下句子的絕對**負面**極性:
- Everybody is disgusted with his pride.
- “I should like to know how he behaves among strangers.” “You shall hear then—but prepare yourself for something very dreadful.
- The pause was to Elizabeths feelings dreadful.
- It would be dreadful!
✅ 任何 Jane Austen 的愛好者都會理解,她經常在書中批判英國攝政時期社會中更荒謬的方面。*Pride and Prejudice* 的主角 Elizabeth Bennett 是一位敏銳的社會觀察者(就像作者一樣),她的語言通常充滿微妙的含義。甚至故事中的愛情對象 Mr. Darcy 也注意到 Elizabeth 的俏皮和戲謔的語言使用:"I have had the pleasure of your acquaintance long enough to know that you find great enjoyment in occasionally professing opinions which in fact are not your own."
---
## 🚀挑戰
你能否通過從用戶輸入中提取其他特徵來使 Marvin 更加出色?
## [課後測驗](https://ff-quizzes.netlify.app/en/ml/)
## 回顧與自學
有很多方法可以從文本中提取情感。想想可能使用這項技術的商業應用。再想想它可能出錯的情況。了解更多關於分析情感的高級企業級系統,例如 [Azure Text Analysis](https://docs.microsoft.com/azure/cognitive-services/Text-Analytics/how-tos/text-analytics-how-to-sentiment-analysis?tabs=version-3-1?WT.mc_id=academic-77952-leestott)。測試一些《傲慢與偏見》中的句子,看看它是否能夠檢測出細微差別。
## 作業
[Poetic license](assignment.md)
---
**免責聲明**
此文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解讀概不負責。