發表文章

目前顯示的是 12月, 2025的文章

[自然語言]術語筆記_語言模型N-gram(看前N-1個token,來預測下一個詞)、Corpus(語料庫)

圖片
https://books.google.com/ngrams/graph?content=*&year_start=1800&year_end=2022&corpus=zh&smoothing=3 上圖為Google Books的語料庫可發現 的這個字頻率出現最高 Language Model (語言模型) 如果說我們有一個由m個詞組成的序列(也就是一個句子),我們希望計算句子的概率。 根據鍊式規則,可得: p(w₁, w₂, …, wₘ) = p(w₁) * p(w₂ | w₁) * p(w₃ | w₁, w₂) … * p(wₘ | w₁, …, wₘ₋₁) 根據馬可夫鏈假設可得 p(w₁, w₂, …, wₘ) = p(wᵢ | wᵢ₋ₙ₊₁, …, wᵢ₋₁) Corpus/Corpora ( 語料庫 ) 語料庫是一個由真實文字或音訊組成並整理成資料集的結構化文本數據集。是自然語言處理(NLP)系統的基礎。 它可以包含從報紙、小說、食譜、廣播節目到電視節目、電影以及推文等各類內容。 https://botpenguin.com/glossary/corpus N-gram模型(看前N-1個token,來預測下一個詞) 是一種LM(Language Model),語言模型是一個根據機率判別的模型,其輸入是一句話(單詞的有順序性序列),輸出也就是這一句話的機率,也就是這些單詞的聯合機率(joint probability)。 常應用在「錯字修正」、「選字推薦」等。 以n-1個字來做input,預測之後應該output捨麼字。比方4-gram model就會用前3個字來預測第4個字output為何? 比方以Google Books語料庫N-gram推測 滷肉 下一個字機率最大是出現 "飯" N-gram模型定義(等號左側就為句子出現的合理性機率) 當 n=1 時,一個一元模型(Unigram)為,每個單詞出現機率連乘的機率,只看自己: 當 n=2 時,一個二元模型(Bigram)為,前一個單詞條件下再去計算第二個單詞的機率: 當 n=3 時,一個三元模型(Trigram)為,看前2個單詞去預測下一個單詞的機率: N-gram的N愈大愈好嗎? 當N值較大:對字詞的約束性更高,具有更高的辨識力,複雜度較高。 當N值...

[自然語言]術語筆記_詞袋模型BOW(Bag of Words)&詞集模型(Set of Words)

圖片
https://sep.com/blog/a-bag-of-words-levels-of-language/ 詞袋模型BOW(Bag of Words)-One-hot表示法 最早用於提取文本特徵提取手法 將文本直接簡化為一系列集合,不考慮語法和詞序關係,每個詞互相獨立。 該方式也被稱作詞袋模型(Bag of Words,BOW),只是把詞直接裝進袋子中,詞和文本關係就相當於文本是一個袋子。 早期較簡易的模型,對文本中資訊較多丟失。 最早被提出是為了解決文檔分類問題,目前也有應用魚NLP、CV等領域。 具體作法 對料語進行清理,並完成分詞,比方有一句話如下: 大魚吃小魚也吃蝦米,小魚吃蝦米。 對每個詞進行編號,形成字典(順序無關的流水號) {"大魚":1,"吃":2,"小魚":3,"也":4,"蝦米":5} 用0,1代表該詞是否在文本中出現,從而將文本紀錄為一個特徵向量。 大魚吃小魚也吃蝦米 =>[大魚,吃,小魚,也,蝦米] => [1,2,1,1,1]   吃出現兩次 小魚吃蝦米 => [0,1,1,0,1] 詞集模型(Set of Words) 若不考慮詞頻,減少模型複雜度則就稱為Set of Words。 常用在短文本分析。 大魚吃小魚也吃蝦米 =>[大魚,吃,小魚,也,蝦米] => [1,1,1,1,1]   One-hot表示法

[論文筆記]BLEU: a Method for Automatic Evaluation of Machine Translation

圖片
年份:2002年 論文連結:https://aclanthology.org/P02-1040/ 研究問題 : 本篇論文探討學者們為了解決機器翻譯評估效率,提出了一個快速又低廉並且與語言無關,替代人工評估但又保留人為評估特性、每次運行邊際成本極低的方法與BLEU基準。 研究背景 : 為了讓機器翻譯技術能進步,更有效率低廉成本的評估方法於早期就屬於一個大問題。 根據更早期學者文獻(Hovy,1999; White and O’Connell, 1994)探討到,對於機器翻譯成效評估面向主要聚焦於翻譯的充分性(adequacy)、忠實度(fidelity)和流暢度(fluency)。 早期人類對於機器翻譯評估,絕大部分都採用人工評估方式。此類方式需要耗費數週甚至數月才能完成,時間成本極高也無法將人力重複疊代。 如何衡量翻譯表現?學者們認為只要翻譯越接近專業的人類翻譯,就越好。為了評估機器翻譯品質,人們通常根據數值化度量標準,衡量其與一或多位人類參考翻譯接近程度。 因此學者們的機器翻譯評估系統主要涵蓋兩個要素 1.一個數值化的翻譯接近度度量指標 2.一個高品質的人類參考翻譯語料庫 通常給定一個原文句子,一定會有不只一句翻譯。這些翻譯在用詞或詞序上仍可能有所不同,就算用同樣詞彙。 比方以下翻譯範例,共有兩種候選翻譯句子。雖然看似表達語意差不多,但品質卻大相逕庭。 Candidate 1: It is a guide to action which ensures that the military always obeys the commands of the party.(這是一份行動指南,確保軍隊始終服從黨的指令。) Candidate 2: It is to insure the troops forever hearing the activity guidebook that party direct. (這是為了保證部隊永遠聽從黨所指導的活動手冊。) 參考專業譯文句子共有三句如下: Reference 1: It is a guide to action that ensures that the military will forever heed Party commands. Reference 2: It is the guiding pr...

PL-SQL筆記5_ORA-06550_PLS-00428: 在此SELECT敘述句中預期會出現一個INTO子句

 在PLSQL Develoepr 想進行腳本測試時 DECLARE   v_groupName VARCHAR2(300); BEGIN   v_groupName := 'some group name';   SELECT R.*     FROM ROLE_TABLE R,          USER_ROLE_RELATION UR,          USER_CONTACT UC    WHERE R.ROLE_NAME = v_groupName      AND R.ROLE_ID   = UR.ROLE_ID      AND UR.USER_ID  = UC.USER_ID; END; 報以下錯誤 ORA-06550: 第四行,第 3 個欄位: PLS-00428: 在此SELECT敘述句中預期會出現一個INTO子句 原因: 要在 PL/SQL 區塊裡查詢 → 必須用 INTO 或 Cursor。 在 PL/SQL 區塊裡,不可能直接寫裸的 SELECT。 若不想用 INTO,就不要包在 PL/SQL 區塊裡,直接寫 SQL 查詢。