搜尋

Epic

分類

自然語言處理

自然語言處理演算法&論文列表 (01)

  1. 基礎演算法

 

01  DP動態規劃

 

02  Beam search集束搜索

The Harpy Speech Recognition System , Lowerre , 1976

 

03  EM最大期望算法

 

04  GMM高斯混合模型

 

05 Viterbi 維特比算法

 

  1. 分詞標註技術

 

01 HMM 隱式馬可夫鏈

Japanese word segmentation by hidden Markov model , Constantine P. Papageorgiou , 1994

 

02 HHMM 階層隱式馬可夫鏈

HHMM-based Chinese lexical analyzer ICTCLAS , HP Zhang  , 2003

 

03 MEHMM 最大熵隱式馬可夫鏈

A Maximum Entropy Approach to Chinese Word Segmentation , JK Low , 2005

 

04 CRF 條件隨機場

Conditional Random Fields: Probabilistic Models for Segmenting and Labeling Sequence Data , John Lafferty , 2001

 

05 AP 平均感知器

Discriminative Training Methods for Hidden Markov Models:Theory and Experiments with Perceptron Algorithms , Florham Park , 2002

 

06 SSVM 結構化支持向量機

Chinese Word Segmentation by Classification of Characters – ACLCLP,  CL Goh , 2005

 

07 壓縮分詞

A Compression-based Algorithm for. Chinese Word Segmentation , WJ Teahan , 2000

 

08 EM自我監督分詞

Self-Supervised Chinese Word Segmentation , Fuchun Peng , 2001

 

09 基因分算法分詞

以遺傳演算法為基礎的中文斷詞研究 , 陳稼興 , 2000

本列表論文檔案下載:https:/goo.gl/TTxXtV

 

現代詩 符號 語言 以及電腦

符號系統

 

什麼是「符號」? 符號就是人類用來記錄概念的一種表示實體。對符號系統而言,具有「能指signifier」以及「所指signified」。所謂的「能指」意思是符號自己的存在,例如對「人」這個符號而言「能指」可以是「ㄖㄣˊ」這個讀音本身(讀音本身是一種特定的聲音狀態)也可以是「人」這個書寫的形象(一種特定的視覺相對位置的狀態)。而所謂的「所指」指的是符號所表示的意義。對於「人」這個符號「所指」就是「活生生、需要吃喝拉撒的人」。

 

中文

 

中文屬於孤立語,能夠利用語序的不同去改變符號的所指,同時,每個符號本身的所指在不同的語境 context(上下文)之下能夠約定俗成的改變。這種現象也讓中文在「詩」類的文體上特別有表現的空間。

 

現代詩

 

講到現代詩,我認為最讓人難以理解的概念是所謂的「文字凝鍊」、「意象精準」這種概念性定義(conceptual definittion)的說法。事實上現代詩是針對符號的所指進行連結的調動,中文的含蓄美就是多層而火候恰到好處的遞迴所指。舉個例子,席慕蓉的一棵開花的樹

<一棵開花的樹>

如何讓你遇見我

在我最美麗的時刻 為這

我已在佛前 求了五百年

求祂讓我們結一段塵緣

 

佛於是把我化做一棵樹

長在你必經的路旁

陽光下慎重地開滿了花

朵朵都是我前世的盼望

 

當你走近 請你細聽

那顫抖的葉是我等待的熱情

而當你終於無視地走過

在你身後落了一地的

朋友啊 那不是花瓣

那是我凋零的心

 

整首詩不見一句「愛情」、「單戀」但是在語境之下可以從「塵緣」的所指上鏈結到「愛情」這個能指的所指。古詩也很喜歡用典故的能指來迂迴的表達想法,個人認為最有名的公案是<蒹葭>,有人說是情詩、有人說不是。

 

現代詩所謂的「文字凝鍊」,我認為操作定義(operational definition)可以解釋成符號在該上下文的所指可以鏈結的隱含的能指的所指的連結強度以及層數,強度越強、意象聯想起來越容易、層數越少隱含的意義越少越直白。強度越弱的符號所指連結越難理解作者要表達的意思、層數越多怎能表達更多的隱含意思。而所謂的「一首好的新詩」能夠控制好使用的符號的所指鏈,既能不直接把符號的能指直接放在紙上、卻能透過初始的符號所指和讀者建立一連串的骨牌式的所指鏈結、進而委婉表達自己的意思。

 

而讀新詩的讀者要去思考的就是原作者透過符號的編排想要表達的隱含意象是什麼?而不是只是把句子讀過去。

 

電腦的語言學現象

當我思考到現代詩的所指鏈結這樣的概念的時候、我不禁在思考如果程式語言是一種人工的符號系統、那是不是存在現代詩這樣的語言特性。答案是卻實有類似的現象。在程式語言裡面,存在一種特殊的符號叫做「指標」對程式語言而言,變數符號本身是能指、而所代表的記憶體空間就是該變數的所指。如果這樣想,那指標便是將指標變數的所指指到某變數的能指的所指(記憶體位址)。而指標亦可以具有多重指標的特性、和自然語言一樣能建立一連串的骨牌式的所指鏈結。(鏈結串列)

 

後記

 

作為一從國中開始大量看現代詩詩評、詩論、然後同時也寫程式、研究人工智慧的我而言能找到這兩個看似完全無關的世界的橋樑其實是挺興奮的,其實寫程式亦是寫詩。

DeepText 介紹: Facebook 的文本理解引擎

楊明翰翻譯

(原文:Introducing DeepText: Facebook’s text understanding engine)

 

在FB上文本是很普遍的一種溝通形式,理解不同的文本有助於幫助我們提升人們對我們產品的體驗,是否我們顯露的更多內容人們想要看或是濾除掉不討喜的垃圾訊息。在這樣的目標之下,我們建造了DeepText,一個基於深度學習的文本理解引擎,他可以理解接近人的準確度的文本內容,並在一秒內處理幾千篇貼文生成超過20種語言。DeepText槓桿作用了幾個深度神經網路的架構包含卷積神經網路以及遞迴神經網路,並且可以提供基於詞彙等級和字母等級的機器學習。

(前輩Jason Tsai反應:leverage 是憑藉的意思. 這句 "DeepText leverages several deep neural network architectures, including..." 譯為 "DeepText 奠基於數種深度神經網路架構, 包含..." 較為恰當 非常感謝校正!)

我們使用 FbLearner Flow(FB的機器學習核心)和Torch(C++ based的AI lib)做模型訓練,訓練好的模型被一鍵提供在FBLearner Predictor platform 那個提供擴充性和可信賴的分散式基礎設備。FB的工程師們可以透過DeepText提供的內部系統輕易地建造新的DeepText的模型

 

為何是深度學習?

 

文本理解包含了多項任務 像是通用的分類器去判斷一個貼文是在說什麼

,舉個例子「籃球」相關的命名實體識別,可以知道球員的名稱,一場球賽的統計以及其他有意義的資訊但想要更接近人理解文本,我們需要教電腦去理解一些像是俚語以及詞義消岐。舉個例子,如果有人說:我喜歡黑莓,這裡的黑莓是指水果還是黑莓機?

 

在Facebook上的文本理解提供解決大規模和語言的挑戰在傳統的自然語言處理技術裡沒效率的。使用深度學習,我們就有能力去更好的理解跨語言的文本然後比傳統的自然語言處理技術更有效率的使用標記資料,DeepText 的技術建立在原本建立於Ronan Collobert和Yann LeCun在Facebook AI的研究的深度學習的點子擴充。

 

快速的理解更多語言

 

在Facebook上的社群無疑是國際性的,所以要讓DeepText 去盡可能的理解越多語言。傳統的自然語言處理技術需要廣泛的處理邏輯建立在複雜的工程和語言的知識。同時在語言裡也出現變異,像是俚語或不同的拼字方式來表達同一個概念,使用深度學習,我們可以減少對語言知識的依賴,讓系統可以從文本裡學習且不使用或使用一點點的處理。這可以幫助我們擴增到各種語言,而且花最少的工程力氣。

 

更深度的理解

 

在傳統的自然語言處理方法,詞彙被轉換到一種電腦可以學習的形式。詞彙「兄弟」可能被指定成一個整數ID  4598同時「兄」可能被轉換到另一個整數ID  986665 這代表同一個詞彙拼字必須完全一樣,這樣電腦訓練時才能完全理解。

 

而對於深度學習,我們可以用「詞向量」一種用數學來表示詞彙之間的語意的關係。所以透過適當的計算我們可以看到詞彙「兄弟」和詞彙「兄」在向量空間裡很接近。這種形式的表示方式,讓我們可以挖掘詞彙的語意。

 

使用「詞向量」我們也可以理解同一個語意跨越不同的語言,儘管 表層形式的語言不同。舉個例子,在英語和Spanish“ happy birthday” 和 “feliz cumpleaños”  應該在向量空間裡非常相近。利用映射詞彙和成語到同一詞個向量空間裡,DeepText可以建造跨語言的模型。

 

稀缺的標籤資料

 

書寫語言,儘管變化如上所述,有非常艱困的過程在利用非監督的機器學習抽取未標籤的文本到向量空間裡。深度學習提供一個很好的框架來槓桿作用在這些詞向量和更精煉的使用人工標籤的資料集。這是對於傳統自然語言處理的方法來說是一個非常重要的優勢,傳統自然語言處理必須要人工標記大量的文本,且非常沒有效率以及無法轉移到新任務。在非常多個案裡,這種非監督學習和監督學習的變化型展現出更優良的表現在稀缺的標籤資料。

 

Facebook上探索DeepText

 

DeepText已經在許多Facebook的體驗上被測試,在這個Messenger的個案裡,舉個例子,在一個人也許想要去某個地方,現在已經可以給我們一個更好的理解。DeepText 被使用於意圖偵測,以及實體抽取來幫助理解一個人不是在等,,計程車當他(她)說出“I just came out of the taxi,”是“I need a ride.”的相反。

dfea2ff

我們也開始使用高精準度的、多語言的DeepText 的模型,來幫助人找到正確的工具滿足他們的目的。舉個例子,有個人可能寫了一則貼文: “I would like to sell my old bike for $200, anyone interested?” DeepText 有能力偵測這句話內有人想要賣一個東西,並抽取有意義的資訊,像是被賣的物件以及它的價錢,並把這則訊息推廣給有需要的人,讓這些交易更容易。

 

DeepText有機會增強Facebook的體驗,源自於抽取意圖、語意、以及實體(例如:人物、地點、事務)。而且可以整合內容訊息,如文本和圖片,然後移除令人反感的內容,像是垃圾訊息。非常多明星以及公眾人物使用Facebook開始與公眾對話,這些對話有數百到數千筆。找到最合適的回應在跨語言的狀況之下即時回應是非常困難的。其中一個DeepText可能做的是幫助提供最適切或高品質的回應。

 

下一步

我們Facebook AI Research 團隊正在進一步增強DeepText以及它的應用,以下是幾個範例。

 

更好的理解人的興趣

 

一部分的個人化用戶體驗的方式在Facebook上是推薦和個人興趣有關的內容,為了做到這件事情,我們必須映射每個文本到對應的主題,那需要非常多的標記資料。

 

然而這些資料集難以手工製造,我們利用Facebook的貼文測試用半監度式的機器學習產生大量的標籤資料集。它的職責是提供讓這些貼文可以被偵測的主題,舉個例子, Steelers(維基百科: Steelers page,匹茲堡鋼人,另譯匹茲堡鋼鐵人。是一支職業美式足球球隊) 的粉專的貼文會包含美式足球的相關貼文,運用這個內容,我們可以訓練一個通用的興趣分類器,我們叫做PageSpace,使用DeepText作為它的基礎技術,迭代多次之後,它可以更進一步的改善其他Facebook的體驗。

 

聯合理解文本和圖像的內容

 

人們常常貼圖片和影片,並寫上相關的文本,在非常多情況之下,理解意圖包含同時理解圖片和文本。舉個例子,一個朋友可能貼一張和她的嬰兒的照片並寫上文本“Day 25.”,一起看整份內容可以很清楚的知道他的意圖在分享家庭訊息,我們正在運作一個團隊做聯合理解文本和圖片的工作。

 

新的類神經網路結構

 

我們不斷的在調查研究新的深度學習類神經網路結構,雙向遞迴類神經網路. Bidirectional recurrent neural nets (BRNNs)展現可喜的結果,因為它可以透過卷積同時捕捉文本的語境以及詞彙的前後關係,我們已經觀察BRNNs和傳統的卷積神經網路比較在分類上可以有很低的錯誤率。在某些個案裡,錯誤率低於20%。

 

當提供更多的深度學習技術在文本識別上,我們會持續的增強Facebook的體驗,在Facebook的非結構資料提供一個獨特的機會給自然語言理解系統自動的學習語言,並被使用於跨語言,讓自然語言處理的藝術更上一層樓!

品質改進計畫:有好心的朋友說要修該一些翻譯不通順的地方,發揮開源精神,如果你覺得翻譯的品質可以改善,可以直接到以下連結去編輯共筆:

https://hackpad.com/DeepText-Facebook–HbVgB2ELGe8

進擊的搜尋引擎原理淺談

By – 楊明翰

一、搜尋引擎的基本結構

一個搜尋引擎(Search Engine)大致上可以拆解成幾個部分,第一個是爬蟲(Crawler),功能是在網際網路中以隨機遊走的方式對大量網頁做存取,並將網頁內容下載來。第二個是檢索模組(Indexer),功能是把爬蟲爬回來的內容經過分析之後產生索引文件(Index),第三部分是查詢引擎(Query Engine),功能分析查詢的Query並藉由索引文件比對符合條件的內容,並展示給使用者。通常為了方便操作,會再封裝一層介面。

根據以上的描述,我們可以把這樣的結構用底下的圖來表示:

001S.png

二、索引的數據結構

SQL類的資料庫採用的索引結構因為不考慮詞彙,所以是以B+ Tree做為索引的結構,單位是字元。而搜尋引擎考量的單位是詞彙,所以是採用字典+反向索引(Inverted index)的結構。所謂的反向索引就是以Key為詞彙,Value為文檔編號的數據結構。通常長的像底下這個:002S

三、搜尋引擎的效益評估

003S.png

對使用者而言,搜尋引擎是否能提供他們所需要的關鍵資訊是搜尋引擎的效益衡量的關鍵指標。通常使用者第一優先的考量是準確度,所以一個搜尋引擎是否能準確的找到使用者想找的資源,是搜尋引擎追求的關鍵效益之一。

 

四、個人化搜尋結果

如果有稍微注意一下平常的和搜尋引擎互動的過程,你會發現每個人在Google Search上搜尋一樣的關鍵字,會得到不同的排序結果,這是由於Google Search導入客製化的搜尋結果。(因為每個人所在意的事情面向不同)。

像是我拿Epic創業筆記做實驗,在有登錄和沒登錄的情況之下:第四筆和第五筆搜尋結果很顯然的不一樣。

004S.png
這是我在登錄Google的情況下搜尋"Epic創業筆記"

 

005S.png
沒登錄的情況下搜尋"Epic創業筆記"

具體實現個人化搜尋的技術,可以從文檔的排序去思考。對一個搜尋結果而言,最簡單的排序手法就是用詞頻去排序,也就是某詞彙出現越多次,排在越前面,這時候就會考量到詞權重的問題,最常見的公式是TF-IDF以及BM25兩種。而個人化的排序則是透過搜尋紀錄,去優化權重的部分。目前機器學習的風氣相當熱,我相信Google應該有利用機器學習排序來幫助Google Search 做客製化。

 

五、常見的詞權重方法

  • TF-IDF
  • BM25(Okapi)
  • Mod-Okapi
  • LM(Dirichlet Prior Method)
  • DFR(Divergence From Randomness)
  • F2EXP
  • DFI(Divergence From Independence)
  • MIRDF
  • TW-IDF
  • TI-IDF
 補充

有朋友提醒我現在的搜尋引擎會把Indexer的斷詞元件拆出去變成Tokenizer藉此提高索引效率

從文學的角度思考自然語言理解的困難

 

楊明翰

  • 常見的自然語言理解的困難-語境

 

[1]對於孤立的一句話的理解 , 總是會產生歧見的。只有在一定的語境中,一個句子才能表達明確的意思。會話雙方常有共同的語,因此彼此可以溝通。這是自然語言理解最常見的困難點「語境」,也就是使用語言的當下脈絡和動機,會導致語意的不同。然而,除了語境之外,「意象」也是理解語意的重要因素,本文主要探討「意象」造成語意理解的問題。

 

  • 文學的靈魂-意象

 

[2]西方的「意象」(image),原為一個心理學名詞,如韋勒克、華倫《文學論》就稱之為過去的感覺或已被認知的經驗在心靈上再現或記憶的「心靈現象」,它包含嗅覺的、味覺的、觸覺的以及潛意識的、動或靜的種種意象。[3]因此在詩詞作品裡,需要藉助足以引發作者與讀者聯想的物象,一方面作為作者與讀者共鳴的媒介,一方面創造「言有盡而意無窮」、「不著一字而盡得風流」、「只可意會而不可言傳」的詩詞情境、意境。舉例而言,當我們看到「花」會因為文化意涵或主體經驗而聯想到「香」,花的意象就是香,這樣的過程是基於嗅覺的印象。

 

運用大量意象而產生藝術效果的文體便是詩(包含古詩與現代詩)。其中現代詩以象徵詩派和超現實主義詩派運用意象最為成熟。像是詩魔洛夫相當喜歡用「火」這個符號的意象,費勇寫到[4]「洛夫運用『火』、『火焰』這些詞彙,卻側重火的效果所引起的聯想,即:火可以焚燒一切,因而火是一種會毀滅性的力量」。顯而易見,「火」這個詞彙無法以其字面上的意涵去理解,而必須經過主體經驗去詮釋這個情感上的意義。詩人楊照就曾說[5]「『意象』或『意象主義』意味著我們選擇了不同的東西、不同的感受,來顯現、來代表這個世界。」所以意象具有相當高度的主觀經驗,來描述這個世界。

 

總結上述,意象除了具有文學性的藝術效果之外,也是影響到中文的詮釋和意義,所以可以說是文學的靈魂。

  • 意象理解的阻礙

 

中文是一個詩化(Poetrize)的語言,透過大量的抽象意象(Image)構築語意,人在理解一段中文句子時候,是帶有一定程度的主觀成分在理解。而這樣的情況在目前已知的技術裡就遇到困境,原因是現在的方法是以詞彙(text)為主體,而人類是以意象(Image)為主體。舉例來說:「衣服穿得很天空」這句話,交給電腦剖析之後頂多分析出「衣服」被「天空」修飾,修飾方法為轉品,卻不能知道這句話裡「天空」的隱含意象為「天空那種很藍的顏色」,而原句要表達的完整意思為「衣服穿得很藍」。就上述的例子而言,如果今天看到這個句子的人是一個從來沒有到過地球的火星人,而他中期一生看到的天空都是紅色,他所看到「天空」的意象(Image)就會是「天空那種很紅的顏色」而原句要表達的完整意思就會變為「衣服穿得很紅」。

 

為了能夠更清楚的論述這個概念,以下Figure2是「藍色的衣服」,Figure1是「天空」,而描述句子是「衣服穿得很天空」。

0001.jpg
Figure2
0002.jpg
Figure1

文學的作用就是在利用感官的印象,把主體經驗投射到符號上,像圖中的描述「衣服穿得很天空」,其實是Figure1主觀的天空藍的視覺印象。也就是說,文學的文字相當依賴主體的感官經驗,沒有感官經驗的「印象」,很難解讀「意義」。

 

很顯然的,這個概念可以聯繫到「桶中之腦[6]」的問題上,電腦就像個桶中之腦,符號本質上的意義對它而言是無意義的。並且電腦因為沒有主體經驗,所以對於需要主體經驗的語言的理解,就會顯得匱乏無力。

 

自然語言處理、理解的技術一直停留在句法剖析的階段,一直無法針對「意義」做細膩的判讀和回應,其原委因該就是因為一直以來因為無法掌握意象(Image),所以無法處理帶有象徵類(包含譬喻、隱喻、暗喻、象徵、擬人、擬物等)的修辭的句子。而導致分析到最後無法處理稍微晦澀一點的句子。

 

其實,對於人而言,理解「象徵」相關的意義也不見得那麼容易,比如說精煉過多次意象的新詩就會讓人覺得晦澀難懂,例如洛夫的這首詩<李白傳奇>的首段「相傳峨嵋峰頂有一塊巨石,/石上鋪有一張白紙,/一天午後,風雨大作,/天 震地撼之際,一隻碩大無比的飛鵬碎石破紙,衝天」該文其實是[7]將西遊記中孫悟空從石中蹦出 的傳說化用,並將李白化為他多次自比的飛鵬(李白《上李邕》「鵬一日同風起,博搖直 上九萬裡大」)及其他各種非人類形象,強化李白的個性。如果不知道李白曾經自比飛鵬,並且瞭解李白是浪漫主義的代表,其實難以理解洛夫為何寫李白的時候會用到這些描述。

 

由這樣的例子而言可以知道,中文有時候連人都無法輕易解讀理解,更遑論是電腦。

 

總結上述,意象是文學藉由主觀的感官印象,形成語意的一種內涵,因為電腦沒有主觀的感官的關係,所以造成深層理解一段文字的困難,其中最典型的例子就是電腦無法理解新詩、或詩化的語言。而意象包括了主觀的視覺、聽覺、味覺、嗅覺、觸覺、以及文化意涵賦予精神上的感覺(例如李白的浪漫意涵)。

 

  • 結論

 

如果電腦要能夠理解不受限領域的自然語言、甚至文學作品,就必須要能夠掌握無法計算的抽象概念「意象」,如何能掌握「主觀的經驗」,而非一桶桶的知識本體、形式符號,這也許是自然語言理解的一條蹊徑。

  • 參考書目

[1] 見俞士汉,朱学锋,刘云《面向自然语言理解的汉语虚词研究》(北京 北京大学计算语言学研究所,2009年)

[2] 見黃淑貞:《以石傳情~談廟宇石雕意象及其美感》(臺北: 臺灣藝術教育館,2006 年),頁14

[3] 見詩詞語言知識庫的建構:意象標記與分類 羅鳳珠

[4] 見費勇:《洛夫與中國現代詩》(臺北:東大,1994 年),頁21-22。

[5] 見楊照 :網路文章 (FB: https://goo.gl/Z3urCa ,2015 年)

[6]希拉蕊·普特南(Hilary Whitehall Putnam):《理性、真理和歷史》(Reason, Truth, and History)。提出缸中之腦理論

[7]見 夏若瑜,陳宣妤:《舊瓶新釀-看洛夫如何以古典題材》(新竹: 新竹女中),頁4

Figure1:取材自flickr,Ricardo 清介八木,2011

Figure2:取材自flickr,Hawken King,2011

 

命名實體識別技術(Named Entity Recognition)

探討命名實體之前,要先釐清「實體Entity」在自然語言處理乃至於人工智慧的意義,所謂的Entity意思現實世界(人類視角所觀察到的世界)的某個存在(可以是抽象或者具體的東西),舉例來說”賈伯斯”是指涉Apple Group Inc.的創辦人, ”賈伯斯”這三個字元的組合是個真實存在過具體人物,我們就可以說”賈伯斯”這組符號是一個實體。

6220537174_c275ff36f6_b

Entity。而通常Entity之間可以產生關係,好比說「賈伯斯創辦了Apple Group Inc. 」

「創辦」就是賈伯斯這個Entity和Apple Group Inc. 這個Entity之間的關係,而這樣的關係可以用一階謂詞邏輯來表示,可以記做:創辦(賈伯斯, Apple Group Inc.),其中創辦(X,Y) X是施事者,Y是受事者。

命名實體識別技術(Named Entity Recognition)顧名思義就是讓電腦可以「辨識」出實體。這個技術是嘗試透過先將一個句子分詞以及做詞性標注,然後根據已有的實體資料庫來做判讀。對電腦來說,分詞後的結果雖然算是分離出意義的最小單位卻仍無法操作該意義單位,因為詞彙數據有稀疏的特性(意思是說,一個詞彙和另一個詞彙之間的關係不像整數一樣存在必然的關係,也沒有數學上的特性), 命名實體識別技術可以讓電腦將詞彙和實體連結在一起,就好像當我們看到賈伯斯,想到的並不是字面上的賈伯斯”而是背後隱含的”蘋果公司的創辦人,生於…死於…”。

最簡單的命名實體識別因該是時間以及數字,中等難度的是地名,機構名稱,最難的是人名以及普遍物件(除了可以被分類的名詞之外的所有抽象或具象概念) 。

命名實體識別技術在實作上可以使用機率統計的方式例如:CRF條件隨機場,或HMM隱式馬可夫鏈

TF-IDF淺談

在全文檢索之中,小要測量一個詞彙的重要性,除了用意義的歸納之外(人的思考方式),就是用統計的方式去測量(電腦的思考方式)。TF-IDF是一種很常見的計算方式,以下簡單介紹:

 

TF

假設一篇文章中,文本辭彙共有100個辭彙,「資安」出現10次,「我」出現20次,「台灣」出現10次,「技術」出現3次,一般都會先剔除太常出現卻無法表示文本的特徵的詞彙(也就是停用詞stop word),所以會剩下「資安」、「台灣」、「技術」。接著計算TF=辭彙出現次數/文本辭彙總數,所以「資安」=10/100、「台灣」=10/100,「技術」=3/100。這個值表示該辭彙出現在文本的頻率高低。

IDF

接著計算IDF,由於有些詞彙在生活中出現的比例較高,所以必須考量這個指標,一般都會透過語料庫統計詞彙出現的數據,假設「資安」出現15020次、「台灣」出現21030、「技術」出現15000次,總次數為10000000,「資安」的IDF=log(10000000/(15020+1))、「技術」的IDF= log (10000000/(15000+1))、「台灣」的IDF= log (10000000/(21030+1))。+1是為了避免分母為零,

然後一個詞的重要性定義為:TF-IDF=TF*IDF

TFIDF

白話文:一個詞在文章中出現的頻率除以一個詞在該語言裡被使用的普遍度

如此計算:

「資安」的TF-IDF=10/100*log(10000000/(15020+1))=0.1*2.823=0.2823

「技術」的TF-IDF=3/100* log (10000000/(15000+1))=0.03*2.823=0.08469

「台灣」的TF-IDF=10/100* log (10000000/(21030+1))=0.1*1.677=0.1677

如此本文的題目應該和「資安」最相關 其次是「台灣」最後是「技術」
用這個方法可以延伸出文本自動標籤、文本SVM自動分類、文本自動摘要等技術。

 

中文分詞演算法的基本原則

 

 

1.切分單位長度越長越好:

 

長度越長代表資訊量較多,越能夠包含更多意義,例如:” 股份有限公司”切成”股份””有限””公司”,或是,”股份””有限公司”,或” 股份有限公司”。都可以但是第三種切法” 股份有限公司”最能夠包含意義,另外,中國把.切分單位長度稱之為「顆粒度」。

 

2.無法識別詞越少越好,可識別詞越多越好:

 

基本上是希望字典可以識別越多已知詞是最好。

3.共現度越高越好:

 

很多詞彙常常一起出現,比如說”去””飛機場”和 ”去””飛””機場”,前者比較常一起出現。這種判斷需要依賴所謂的共現詞庫或是共現矩陣

4.詞頻越高越好

 

詞頻越高,詞彙獨立點出現越快,這種判斷需要依賴所謂的詞頻統計

5.語意推論

這需要知網加上專家系統不完全推理,根據上下文在有歧義的地方用歸謬証明把不符合文義的詞彙刪掉。

中文斷詞(分詞)技術簡介

斷詞技術

「斷詞」,指的是能夠讓電腦把詞彙以「意義」為單位切割出來,例如以下句子:「我的興趣是看電影和讀書」,對電腦而言這樣的字串無法解析出有意義的單位例如「我的興\趣是看電\影和讀\書」像這樣分組是不符合現實世界的意義,必須透過斷詞技術切分成「我\的\興趣\是\看\電影\和\讀書」。

像這樣技術最常應用在搜尋引擎上面,如果以「電影」做查詢,第一種斷詞結果是無法被查詢到的,另外還應用在「整句式自動翻譯,ex:Google翻譯」、「人工智能的交談系統,ex: Siri」,技術分類於「自然語言處理

斷詞技術的挑戰

新詞識別

在網路時代裡很常見新詞的流行,比如「Yee」、「好棒棒」、…這種詞彙的快速流行和消失、演化讓斷詞技術幾乎無法正常識別社群網站出現的文本,這是目前我認為斷詞技術遭遇到的最大困難與挑戰。

歧義詞識別

除了新詞識別之困難之外,語言如果不參考上下文的意義也會產生錯誤的斷詞結果例如:台灣國立成功大學,可以解析成「台灣\國立\成功\大學」也可以是: 「台灣國\立\成功\大學」這裡的「國立」產生錯位的歧義,如果不參考上下文,就難以正確分割。

表情符號識別

社群媒體非常常見「XDDD」、「:)」這種由標點符號組合而成的表情符號,如果當作一般的標點符號處理會漏失掉許多重要的資訊,所以雖然搜尋引擎無須擔心表情符號識別,但如果作為一個社群媒體分析相關的斷詞器的話,得慎重可慮這個新領域。

常見的中文斷詞技術

  1. CKIP:這是由台灣中研院研發的一款斷詞器,不過並未對外公布技術節。
  2. HanLP:這是一個開源的分詞器(java),我在這篇Hanlp自然語言處理器有使用範例
  3. Ansj:這也是一個開源的中文分詞器(java)
  4. jieba: Python的中文分詞器

在WordPress.com寫網誌.

向上 ↑