<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mr./Ms. Days (MMDays) - 網路, 資訊, 觀察, 生活MMDays &#8211; Chinese Room</title>
	<atom:link href="http://mmdays.com/tag/chinese-room/feed/" rel="self" type="application/rss+xml" />
	<link>http://mmdays.com</link>
	<description>網路, 產業, 資訊, 觀察, 生活, 電影, 技術, 新知, 科技, 媒體, 趨勢, Web 2.0</description>
	<lastBuildDate>Thu, 24 May 2012 16:59:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>字字珠璣: TF 和 IDF</title>
		<link>http://mmdays.com/2007/10/19/tf_idf/</link>
		<comments>http://mmdays.com/2007/10/19/tf_idf/#comments</comments>
		<pubDate>Thu, 18 Oct 2007 16:49:36 +0000</pubDate>
		<dc:creator>Mr. Thursday</dc:creator>
				<category><![CDATA[Mr. Thursday]]></category>
		<category><![CDATA[專欄]]></category>
		<category><![CDATA[電腦科學]]></category>
		<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[Chinese Room]]></category>
		<category><![CDATA[IDF]]></category>
		<category><![CDATA[Information Retrieval]]></category>
		<category><![CDATA[TF]]></category>

		<guid isPermaLink="false">http://mmdays.com/2007/10/19/tf_idf/</guid>
		<description><![CDATA[Posted By Mr. Thursday 在今日我們可以從網路上吸收大量資訊，有時候一堆文章看不完。如果我們想要吸收資訊，時間卻又不夠的時候，使用電腦幫我們過濾資訊，或是用電腦幫我們做個總整理，是個方法。如果今天手中有一篇文章，我們想要用電腦幫我們找出這篇文章最重要的關鍵字，要怎麼做呢？在資訊檢索 (IR: Information Retrieval)領域裡面，有個基礎的方法，入門必學的方法，就是使用 TF 和 IDF (TF: Term Frequency, IDF: Inverse Document Frequency)。使用這兩個估計值，可以讓電腦具有計算重要關鍵字的能力，進而節省我們的時間。 接下來讓我們看看，TF 和 IDF 個是甚麼東西呢？TF 全名是Term Frequency，也就是某個關鍵字出現的次數，譬如說某篇文章裡面，「電腦」這個詞出現很多次，或是「使用者需求」這個詞出現很多次，那麼這些詞句的出現頻率，就會很高。一篇文章中出現很多次的詞句，必定有其重要性。譬如說一篇論述「人工智慧」的文章，「人工智慧」這個詞句再文章中出現的頻率也一定很高。然而為甚麼除了 TF  (Term Frequency) 以外，還要有 IDF (Inverse Document Frequency) 呢？ 讓我們先想想，如果單使用某個字詞出現的頻率，來判斷一篇文章最重要的關鍵字，會有甚麼困難。首先，我們會遇到一些常用字詞，出現的頻率也很高，會和重要字詞出現的頻率一樣高，讓電腦因此無法分辨出，哪些是常用字詞，那些是重要字詞。如果就英文來說，有個規則是語言學家 (linguist) 歸納出來的規則，叫做 Zipf&#8217;s Law。 引述中文維基百科的一段介紹如下： 從根本上講, 齊夫定律 可以表述為, 在自然語言的 語素庫 里, 一個單詞出現的頻率與它在頻率表裡的排名成 反比. 所以, 頻率最高的單詞出現的頻率大約是出現頻率第二位的單詞的 2 倍，而出現頻率第二位的單詞則是出現頻率第四位的單詞的2倍。這個定律被作為任何與 power law probability distributions [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Posted By <font color="#008000">Mr. Thursday</font></strong></p>
<p>在今日我們可以從網路上吸收大量資訊，有時候一堆文章看不完。如果我們想要吸收資訊，時間卻又不夠的時候，使用電腦幫我們<strong>過濾</strong>資訊，或是用電腦幫我們做個<strong>總整理</strong>，是個方法。如果今天手中有一篇文章，我們想要用電腦幫我們找出這篇文章最重要的關鍵字，要怎麼做呢？在<strong>資訊檢索 </strong>(IR: Information Retrieval)領域裡面，有個基礎的方法，入門必學的方法，就是使用 <strong>TF </strong>和<strong> IDF</strong> (TF: <strong>Term Frequency</strong>, IDF: <strong>Inverse Document Frequency</strong>)。使用這兩個估計值，可以讓電腦具有計算重要關鍵字的能力，進而節省我們的時間。</p>
<p>接下來讓我們看看，<strong>TF </strong>和 <strong>IDF </strong>個是甚麼東西呢？<strong>TF</strong> 全名是Term Frequency，也就是某個<strong>關鍵字出現的次數</strong>，譬如說某篇文章裡面，「電腦」這個詞出現很多次，或是「使用者需求」這個詞出現很多次，那麼這些詞句的出現頻率，就會很高。一篇文章中出現很多次的詞句，必定有其重要性。譬如說一篇論述「人工智慧」的文章，「人工智慧」這個詞句再文章中出現的頻率也一定很高。然而為甚麼除了 TF  (Term Frequency) 以外，還要有 IDF (Inverse Document Frequency) 呢？</p>
<p><span id="more-4888"></span></p>
<p>讓我們先想想，如果單使用某個字詞出現的頻率，來判斷一篇文章最重要的關鍵字，會有甚麼困難。首先，我們會遇到一些<strong>常用字詞</strong>，出現的頻率也很高，會和<strong>重要字詞</strong>出現的頻率一樣高，讓電腦因此無法分辨出，哪些是<strong>常用字詞</strong>，那些是<strong>重要字詞</strong>。如果就英文來說，有個規則是語言學家 (linguist) 歸納出來的規則，叫做 <a href="http://en.wikipedia.org/wiki/Zipf's_law" target="_blank">Zipf&#8217;s Law</a>。</p>
<p style="text-align:center;"><img src="http://www.acm.org/crossroads/xrds13-4/gfx/zipfplot.jpg" border="0" height="251" width="347" /></p>
<p>引述中文維基百科的一段介紹如下：</p>
<blockquote><p>從根本上講, <strong>齊夫定律</strong> 可以表述為, 在<a href="http://zh.wikipedia.org/w/index.php?title=%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80&amp;variant=zh-tw" title="自然诨??">自然語言</a>的 <a href="http://zh.wikipedia.org/w/index.php?title=%E8%AF%AD%E7%B4%A0%E5%BA%93&amp;action=edit" title="诧??库" class="new">語素庫</a> 里, 一個單詞出現的頻率與它在頻率表裡的排名成 <a href="http://zh.wikipedia.org/w/index.php?title=%E5%8F%8D%E6%AF%94&amp;action=edit" title="反比" class="new">反比</a>. 所以, 頻率最高的單詞出現的頻率大約是出現頻率第二位的單詞的 2 倍，而出現頻率第二位的單詞則是出現頻率第四位的單詞的2倍。這個定律被作為任何與 <a href="http://zh.wikipedia.org/w/index.php?title=Power_law&amp;action=edit" title="Power law" class="new">power law</a> <a href="http://zh.wikipedia.org/w/index.php?title=Probability_distribution&amp;action=edit" title="Probability distribution" class="new">probability distributions</a> 有關的事物的參考。 這個 &#8220;定律&#8221; 是 <a href="http://zh.wikipedia.org/w/index.php?title=Harvard&amp;action=edit" title="Harvard" class="new">Harvard</a> <a href="http://zh.wikipedia.org/w/index.php?title=Linguist&amp;action=edit" title="Linguist" class="new">linguist</a> <a href="http://zh.wikipedia.org/w/index.php?title=George_Kingsley_Zipf&amp;action=edit" title="George Kingsley Zipf" class="new">George Kingsley Zipf</a> (<a href="http://zh.wikipedia.org/w/index.php?title=%E5%9C%8B%E9%9A%9B%E9%9F%B3%E6%A8%99&amp;variant=zh-tw" title="國際音標">IPA</a> <span class="IPA">[zɪf]</span>)發表的.</p>
<p>比如, 在 <a href="http://zh.wikipedia.org/w/index.php?title=Brown_%E8%AF%AD%E5%BA%93&amp;action=edit" title="Brown 该??" class="new">Brown 語庫</a>中， &#8220;the&#8221; 是最常見的單詞，它在這個語庫中出現了大約 7 %（10 萬單詞中出現 69971 次）。正如齊夫定律中所描述的一樣，出現次數為第二位的單詞 &#8220;of&#8221; 占了整個語庫中的 3.5% (36411次), 之後的是&#8221;and&#8221; (28852次). 僅僅 135 但此項就占了 Brown 語庫的一半。</p></blockquote>
<p>所以我們現在知道問題在哪邊了。如果只用詞句出現的頻率來判斷某一篇文章裡面最重要的關鍵字，我們可能會找到<strong>常用字</strong>，而不是<strong>最重要的字</strong>，像是英文裡面的 &#8220;the&#8221;、&#8221;a&#8221;、&#8221;it&#8221;，都是常常出現的字，但是通常一篇文章裡面最重要的字不是這些字，即使那些重要的字出現的頻率也很高。</p>
<p>這個時候我們要怎麼辦呢？IDF 在這個時候就幫上忙了。在了解 IDF 之前，我們先了解 DF 是甚麼。<strong>DF</strong> 就是Document Frequency，也就是說，如果今天我們手中有固定 N 篇文章，某個關鍵字的 Document Frquency (<strong>DF</strong>)，就是說這個關鍵字在 N 篇文章裡面出現了幾次。Inverse Document Frequency (<strong>IDF</strong>) 則是把 DF 取倒數，如此一來，一個數字乘以<strong> IDF</strong>，就等於是除以 <strong>DF </strong>的意思。</p>
<p>有了<strong> TF </strong>和 <strong>IDF </strong>以後，我們就可以計算<strong> TF 乘上 IDF</strong>，<strong>對每一個關鍵字都算出一個分數</strong>。這個分數的高低，就代表了這個關鍵字在某篇文章中的重要程度。為甚麼我們說這樣子可以找出重要的字，而不是常出現的字呢？因為 TF 會把某篇文章中，出現最多次的排在第一位，其次的排在第二位，以此類推。然而乘上 IDF 以後，也就是除以 DF，那些常常出現的字，像是英文中的 &#8220;the&#8221;、&#8221;a&#8221;、&#8221;it&#8221;，因為每一篇文章都會出現，所以 DF 就大。DF 大，取倒數之後的 IDF 就小，IDF 小，乘上 TF 以後，雖然&#8221;the&#8221;、&#8221;a&#8221;、&#8221;it&#8221;在某篇文章中出現的頻率很高，但是因為 IDF 小，TF * IDF 一相乘，重要性就變低了，我們 (電腦程式) 就不會把這些<strong>常出現的字</strong>，誤認為是<strong>重要的字</strong>了！</p>
<p>真正<strong>重要的字</strong>會得到甚麼樣子的分數呢？如果這篇文章剛好在講 AI，&#8221;AI&#8221; 出現很多次，因此 &#8220;AI&#8221; 在這篇文章裡面的 TF 很高。然而我們電腦資料庫裡面的 N 篇文章，並不是每一篇都在講  AI，也因此&#8221;AI&#8221;可能只有在 N 篇文章裡面的某 3 篇文章出現，因此 <strong>DF </strong>只有 3，<strong>IDF </strong>變成 0.33，假設我們 N = 100 有 100 篇文章在資料庫裡面，其他常出現字像是 &#8220;the&#8221; 每一篇都出現，<strong>DF </strong>就是 100，<strong>IDF </strong>就是 0.01。所以 &#8220;AI&#8221; 的 IDF 會比 &#8220;the&#8221; 的 IDF 高，假設這篇文章中 &#8220;AI&#8221; 和 &#8220;the&#8221; 兩個字出現的次數剛好一樣，乘上<strong> IDF </strong>以後，&#8221;AI&#8221; 這個字的分數就比 &#8220;the&#8221; 這個字的分數來的高，電腦也就會判斷 &#8220;AI&#8221; 是這篇文章重要的關鍵字，而 &#8220;the&#8221; 這個字並不是這篇文章的重要關鍵字。</p>
<p>所以經由 <strong>TF * IDF</strong>，我們可以計算某個關鍵字，在某篇文章裡面的重要性。從這一個方向，我們可以計算一篇文章中重點的字有哪些，幫我們做一篇文章的總整理。從相反的方向，我們可以給定關鍵字，然後再每一篇文章裡面為這個關鍵字計算一次 TF * IDF，然後比較哪一篇文章，這個關鍵字是最具重要性的，用這個方法找出和一個關鍵字最相關的文章。不管是<strong>從文章找出重點字詞</strong>，或是<strong>由關鍵字找相關文章</strong>，<strong>TF * IDF </strong>都是個基本且不錯的方法。會寫程式又還沒嚐試過這個方法的讀者，或許可以親自試試看，不過可能要先自己準備文章資料庫 (corpus)，或是從網際網路上面用網頁擷取器 (crawler) 存幾篇有興趣的網頁，然後把 HTML 標籤清理乾淨，剩下純文字，就可以用這個方法來小試身手囉！</p>
<p>我們也可以比較一下人類和電腦的不同。電腦做<strong>數學數字的計算</strong>，或是<strong>執行固定的步驟</strong> ，非常擅長，速度也很快。人類可以了解一個字的<strong>意思</strong>，讀完一篇文章以後，了解了意思，之後要找這篇文章最重要的關鍵字，是從「<strong>意義</strong>」開始，回憶出或做出結論，這篇文章重要的關鍵字是甚麼。</p>
<p>然而如果要電腦也遵照這個方向，先了解字的意義，再了解文章的意義，然後在做出結論，這篇文章的重要關鍵字，反而困難，因為要了解字的意義，電腦需要先有一個語意網路 (<strong>Semantic Network</strong>)，或是知識的分類關係樹 (<strong>Ontology</strong>)，把字句依照語意分門別類，有如生物裡面的「界門綱目科屬種」一般的關係分類，才有辦法了解一個字和其他字的關係。之後要了解一篇文章，又必須要了解一個句子，牽涉到自然語言處理 (<strong>NLP: Natural language Processing</strong>) 的問題，像是從句子裡面找出主詞、動詞、和受詞，以及補語，分辨出子句和主句，代名詞的指稱，以及前後文判斷產生不同的剖析 (<strong>parsing</strong>)。了解完一句，才能了解整篇文章。</p>
<p>因此，<strong>TF * IDF </strong>對於電腦來說，計算速度快，工程也不浩大，不用大型計算機就可以計算。這邊也可以順便提到 strong AI 和 weak AI 的關係。如果就工程的角度，<strong>TF * IDF </strong>是個好方法，it works! 節省我們的時間，或是解決大問題中的一個小環節。然而 strong AI 在這邊會提出「<strong>中文房間</strong>」(Chinese Room) 的論證，也就是說，電腦能夠找出重要關鍵字，是否就代表電腦真的「<strong>知道</strong>」(understand) 關鍵字的意義呢？</p>
<p><strong>中文房間</strong> (<a href="http://en.wikipedia.org/wiki/Chinese_room" target="_blank">Chinese Room</a>) 簡單地說，就是一個人關在房間裡面，只留兩個窗口，一個地方會送紙條出來，另一個地方會送紙條出去。房間裡面有一本手冊，裡面寫滿對照表，記載者看到甚麼英文字，就應該輸出甚麼中文字，以及一些指令的對照，譬如說窗口送一個指令說 COMBINE，就把兩個中文字寫在一起才送出去。接著我們在外面就開始送英文句子進去這個房間，另一個窗口就會有這句話的中文翻譯跑出來。然而這個論證想要坦討的就是，雖然這個房間<strong>看起來像是會把英文翻譯成中文</strong>，但是在房間裡面的那個<strong>操作人員並不懂中文</strong>，他指是按照指令，還有手冊裡面的對照表，<strong>機械式</strong>地動作，可是外面看起來像是這個房間會英翻中，因此這個<strong>房間應該懂得中文</strong>才對。</p>
<p>在這邊我的看法是，也許就近程來看，我們只要有可以解決問題的解答就可以，不管電腦是否真的<strong>懂</strong> (understand) 字的意義。然而長期來說，如果我們真的需要具有人類的智力的電腦出現，能夠真的懂而不是<strong>行為上</strong>看起來懂，那麼就要仔細探討<strong>中文房間</strong>這種論證。也許生物的方法，像是<strong>計算神經科學</strong>的方法，是一個方向。</p>
<p>我們可能又會問，神經元只有動作電位和靜止兩個狀態，怎麼能了解<strong>意義</strong>？但是只有一個神經元，或許沒辦法了解意義，<strong>全部大腦的神經元交互作用</strong>，<strong>意義</strong>可能就因此被了解了！其中的奧妙，就是計算神經科學嚐試要解答的問題之一。有興趣的讀者也可以一起從人腦開始，解決 strong AI 的問題。或是有數學的高手，也許某一個數學理論，可以很漂亮地解決意義了解的問題也說不定，像是 manifolds，具有一個集合使用<strong>不同面向</strong>來觀看的特性，同時具有 Global 和 Local 的性質，是個不錯的候選選項。從這個方向去解決 strong AI 也是另一個可能性。總之，繼續努力研究就是了！</p>
<p>相關連結</p>
<ul>
<li>(Wikipedia) <a href="http://en.wikipedia.org/wiki/Zipf's_law" target="_blank">Zipf&#8217;s Law</a>, <a href="http://acm.uva.es/p/v101/10126.html" target="_blank">ACM10126</a></li>
<li>(Wikipedia) <a href="http://en.wikipedia.org/wiki/Tf-idf" target="_blank">tf*idf</a></li>
<li>(Wikipedia) <a href="http://en.wikipedia.org/wiki/Information_retrieval" target="_blank">Information Retrieval</a></li>
<li>(Wikipedia) <a href="http://en.wikipedia.org/wiki/Chinese_room" target="_blank">Chinese Room</a></li>
</ul>
<p><br/>
<div>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><a href="http://plurktop.mmdays.com/replurkdetail/?link=1e926d8ad6891c6fb0f6435a82dcd92b" title="看看其他人討論內容" target="_blank"><img src="http://plurktop.mmdays.com/images/replurk_1.png" style="border:0"></a></td>
</tr>
<tr>
<td><a href="http://plurk.com/?qulaifier=shares&#038;status=http%3A%2F%2Fmmdays.com%2F2007%2F10%2F19%2Ftf_idf%2F+%28%E5%AD%97%E5%AD%97%E7%8F%A0%E7%92%A3%3A+TF+%E5%92%8C+IDF%29+-+%E8%BD%89%E5%99%97%E6%8E%92%E8%A1%8C%E6%A6%9C+http%3A%2F%2Fplurktop.mmdays.com%2Freplurk" title="推到噗浪" target="_blank"><img style="border:0" src="http://plurktop.mmdays.com/images/replurk_2.png" /></a></td>
</tr>
</table>
</div>
<p><br/><a href="http://www.facebook.com/MMDays" target="_blank">加入MMDays在facebook的粉絲團 隨時閱讀最新文章</a><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://mmdays.com/2007/10/19/tf_idf/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

