<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>SuperAngevil&#039;s Blog</title>
	<atom:link href="http://superangevil.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://superangevil.wordpress.com</link>
	<description>Understanding Web: Concentrate on Recommender System, NLP</description>
	<lastBuildDate>Sun, 31 Jul 2011 15:19:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='superangevil.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/a8edbd5c4d3ccb36fd16ee9dafe14e97?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>SuperAngevil&#039;s Blog</title>
		<link>http://superangevil.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://superangevil.wordpress.com/osd.xml" title="SuperAngevil&#039;s Blog" />
	<atom:link rel='hub' href='http://superangevil.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Ubuntu下TexLive环境构建</title>
		<link>http://superangevil.wordpress.com/2011/03/01/ubuntu%e4%b8%8btexlive%e7%8e%af%e5%a2%83%e6%9e%84%e5%bb%ba/</link>
		<comments>http://superangevil.wordpress.com/2011/03/01/ubuntu%e4%b8%8btexlive%e7%8e%af%e5%a2%83%e6%9e%84%e5%bb%ba/#comments</comments>
		<pubDate>Tue, 01 Mar 2011 07:38:16 +0000</pubDate>
		<dc:creator>superangevil</dc:creator>
				<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://superangevil.wordpress.com/?p=559</guid>
		<description><![CDATA[最近整理一些文档，又重拾了毕业那会儿对 LaTeX 的热情，下面就简单记述一下Ubuntu下LaTeX的环境配置。 准备工作 (1) 首先安装 texlive $ sudo apt-get install texlive-full latex-beamer (2) 之后安装 CJK $ sudo apt-get install latex-cjk-all (3) 再安装字体生成工具 $ sudo apt-get install fontforge 字体生成 (1) 准备字体文件 simsun.ttc(宋体)，simhei.ttf(黑体)等 (2) 下载 字体处理文件 并解压 $ mkdir -p ~/font $ cd ~/font $ tar -xjvf font.tar.gz (3) 生成字体(以宋体为例)，这可能会花费较长时间 $ fontforge -script subfonts.pe simsun.ttc song [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superangevil.wordpress.com&amp;blog=9860254&amp;post=559&amp;subd=superangevil&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>最近整理一些文档，又重拾了毕业那会儿对 <a href="http://www.latex-project.org/">LaTeX</a> 的热情，下面就简单记述一下Ubuntu下LaTeX的环境配置。</p>
<h3>准备工作</h3>
<p>(1) 首先安装 <a href="http://www.tug.org/texlive/">texlive</a></p>
<table style="margin:.2em 0;" border="0" width="100%" bgcolor="#e8e8e8">
<tbody>
<tr>
<td style="padding:.5em;">
<pre style="margin:0;padding:0;">
    $ sudo apt-get install texlive-full latex-beamer
</pre>
</td>
</tr>
</tbody>
</table>
<p>(2) 之后安装 <a href="http://cjk.ffii.org/">CJK</a></p>
<table style="margin:.2em 0;" border="0" width="100%" bgcolor="#e8e8e8">
<tbody>
<tr>
<td style="padding:.5em;">
<pre style="margin:0;padding:0;">
    $ sudo apt-get install latex-cjk-all
</pre>
</td>
</tr>
</tbody>
</table>
<p>(3) 再安装字体生成工具</p>
<table style="margin:.2em 0;" border="0" width="100%" bgcolor="#e8e8e8">
<tbody>
<tr>
<td style="padding:.5em;">
<pre style="margin:0;padding:0;">
    $ sudo apt-get install fontforge
</pre>
</td>
</tr>
</tbody>
</table>
<h3>字体生成</h3>
<p>(1) 准备字体文件 <tt>simsun.ttc</tt>(宋体)，<tt>simhei.ttf</tt>(黑体)等</p>
<p>(2) 下载 <a href="http://www.everbox.com/f/lZgcvNffr1HPX5UDflR53yW6RG">字体处理文件</a> 并解压</p>
<table style="margin:.2em 0;" border="0" width="100%" bgcolor="#e8e8e8">
<tbody>
<tr>
<td style="padding:.5em;">
<pre style="margin:0;padding:0;">
    $ mkdir -p ~/font
    $ cd ~/font
    $ tar -xjvf font.tar.gz
</pre>
</td>
</tr>
</tbody>
</table>
<p>(3) 生成字体(以宋体为例)，这可能会花费较长时间</p>
<table style="margin:.2em 0;" border="0" width="100%" bgcolor="#e8e8e8">
<tbody>
<tr>
<td style="padding:.5em;">
<pre style="margin:0;padding:0;">
    $ fontforge -script subfonts.pe simsun.ttc song Unicode.sfd
</pre>
</td>
</tr>
</tbody>
</table>
<p>(4) 建立映射描述文件 <tt>makemap</tt> 如下:</p>
<pre style="color:gray;padding:.5em;">
        for i in *.tfm
        do
        cat &gt;&gt; song.map &lt;&lt; EOF
        ${i%.tfm} ${i%.tfm} &lt; ${i%.tfm}.pfb
        EOF
        done
</pre>
<p>(5) 执行map操作</p>
<table style="margin:.2em 0;" border="0" width="100%" bgcolor="#e8e8e8">
<tbody>
<tr>
<td style="padding:.5em;">
<pre style="margin:0;padding:0;">
    $ chmod +x makemap &amp;&amp; ./makemap
</pre>
</td>
</tr>
</tbody>
</table>
<h3>环境配置</h3>
<p>(1) 建立一个c70song.fd文件</p>
<pre style="color:gray;padding:.5em;">
        % This is c70song.fd for CJK package.
        % created by Edward G.J. Lee
        \ProvidesFile{c70song.fd}
        \DeclareFontFamily{C70}{song}{\hyphenchar \font\m@ne}
        \DeclareFontShape{C70}{song}{m}{n}{&lt;-&gt; CJK * song}{}
        \DeclareFontShape{C70}{song}{bx}{n}{&lt;-&gt; CJKb * song}{\CJKbold}
        \endinput
</pre>
<p>(2) 个人LaTeX配置</p>
<table style="margin:.2em 0;" border="0" width="100%" bgcolor="#e8e8e8">
<tbody>
<tr>
<td style="padding:.5em;">
<pre style="margin:0;padding:0;">
    $ mkdir -p ~/.texmf-var/fonts/map/dvips/CJK
    $ mkdir -p ~/.texmf-var/fonts/tfm/CJK/song
    $ mkdir -p ~/.texmf-var/fonts/type1/CJK/song
    $ mkdir -p ~/.texmf-var/tex/latex/CJK/UTF8
</pre>
</td>
</tr>
</tbody>
</table>
<p>(3) 复制字体</p>
<table style="margin:.2em 0;" border="0" width="100%" bgcolor="#e8e8e8">
<tbody>
<tr>
<td style="padding:.5em;">
<pre style="margin:0;padding:0;">
    $ cp ~font/song.map ~/.texmf-var/fonts/map/dvips/CJK
    $ cp ~/font/*.tfm ~/.texmf-var/fonts/tfm/CJK/song
    $ cp ~/font/*.pfb ~/.texmf-var/fonts/type1/CJK/song
    $ cp ~/font/c70song.fd ~/.texmf-var/tex/latex/CJK/UTF8
</pre>
</td>
</tr>
</tbody>
</table>
<p>(4) 刷新缓存</p>
<table style="margin:.2em 0;" border="0" width="100%" bgcolor="#e8e8e8">
<tbody>
<tr>
<td style="padding:.5em;">
<pre style="margin:0;padding:0;">
    $ sudo texhash
    $ updmap --enable Map song.map
</pre>
</td>
</tr>
</tbody>
</table>
<p>至此，基本的环境配种工作就已经完成了，下面可以简单测试一下。</p>
<h3>测试</h3>
<p>写一个简单的test.tex:</p>
<p><strong>test.tex</strong></p>
<pre style="color:gray;padding:.5em;">
    \documentclass{article}
    \usepackage{CJKutf8}
    \begin{document}
    \begin{CJK}{UTF8}{song}
    {\LaTeX}中文环境测试!
    \end{CJK}
    \end{document}
</pre>
<p>编译，生成pdf看下效果吧 <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<table style="margin:.2em 0;" border="0" width="100%" bgcolor="#e8e8e8">
<tbody>
<tr>
<td style="padding:.5em;">
<pre style="margin:0;padding:0;">
    $ pdflatex test.tex
    $ evince test.pdf
</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>&nbsp;</p>
<br />Filed under: <a href='http://superangevil.wordpress.com/category/ubuntu/'>Ubuntu</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/superangevil.wordpress.com/559/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/superangevil.wordpress.com/559/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/superangevil.wordpress.com/559/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/superangevil.wordpress.com/559/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/superangevil.wordpress.com/559/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/superangevil.wordpress.com/559/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/superangevil.wordpress.com/559/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/superangevil.wordpress.com/559/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/superangevil.wordpress.com/559/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/superangevil.wordpress.com/559/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/superangevil.wordpress.com/559/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/superangevil.wordpress.com/559/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/superangevil.wordpress.com/559/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/superangevil.wordpress.com/559/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superangevil.wordpress.com&amp;blog=9860254&amp;post=559&amp;subd=superangevil&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://superangevil.wordpress.com/2011/03/01/ubuntu%e4%b8%8btexlive%e7%8e%af%e5%a2%83%e6%9e%84%e5%bb%ba/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/46e0e8d9b0086f2d19d6130cc1471bb3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">superangevil</media:title>
		</media:content>
	</item>
		<item>
		<title>Linux下GappProxy翻墙</title>
		<link>http://superangevil.wordpress.com/2010/11/15/linux%e4%b8%8bgappproxy%e7%bf%bb%e5%a2%99/</link>
		<comments>http://superangevil.wordpress.com/2010/11/15/linux%e4%b8%8bgappproxy%e7%bf%bb%e5%a2%99/#comments</comments>
		<pubDate>Mon, 15 Nov 2010 14:18:00 +0000</pubDate>
		<dc:creator>superangevil</dc:creator>
				<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://superangevil.wordpress.com/?p=556</guid>
		<description><![CDATA[1. 到Google appengine注册appengine帐号并下载App Engine SDK 2. 登录appengine并创建application（比如my_proxy_app） 3. 下载gappproxy: svn checkout http://gappproxy.googlecode.com/svn/trunk/ gappproxy 4. 修改gappproxy: 将fetchserver子目录下的app.yaml第一行application改为刚刚注册的应用名 application: my-proxy-app 5. 更新并上传gappproxy: $ cd google_appengine $ python appcfg.py update ./gappproxy/fetchserver 6. 启动proxy: $ cd google_appengine/gappproxy/localproxy $ nohup python proxy.py &#38; 7. 这样就可以用GappProxy作为代理了 host: 127.0.0.1 port: 8000 Filed under: Tools<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superangevil.wordpress.com&amp;blog=9860254&amp;post=556&amp;subd=superangevil&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>1. 到<a href="http://code.google.com/appengine/">Google appengine</a>注册<a href="http://appengine.google.com">appengine</a>帐号并下载<a href="http://code.google.com/appengine/downloads.html">App Engine SDK</a></p>
<p>2. 登录appengine并创建application（比如my_proxy_app）</p>
<p>3. 下载<a href="http://code.google.com/p/gappproxy/">gappproxy</a>:</p>
<blockquote><p><span style="font-family:'courier new', courier;">svn checkout http://gappproxy.googlecode.com/svn/trunk/ gappproxy</span></p>
</blockquote>
<p>4. 修改gappproxy: 将fetchserver子目录下的<span style="font-family:'arial black', 'avant garde';">app.yaml</span>第一行application改为刚刚注册的应用名</p>
<blockquote><p>application: <em>my-proxy-app</em></p>
</blockquote>
<p>5. 更新并上传gappproxy:</p>
<blockquote><p><span style="font-family:'courier new', courier;">$ cd google_appengine<br />
$ python appcfg.py update ./gappproxy/fetchserver</span></p>
</blockquote>
<p>6. 启动proxy:</p>
<blockquote><p><span style="font-family:'courier new', courier;">$ cd google_appengine/gappproxy/localproxy<br />
$ nohup python proxy.py &amp;</span></p>
</blockquote>
<p>7. 这样就可以用GappProxy作为代理了</p>
<blockquote><p><span style="font-family:georgia, palatino;">host: 127.0.0.1</span><br />
<span style="font-family:georgia, palatino;"> port: 8000</span></p>
</blockquote>
<br />Filed under: <a href='http://superangevil.wordpress.com/category/tools/'>Tools</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/superangevil.wordpress.com/556/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/superangevil.wordpress.com/556/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/superangevil.wordpress.com/556/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/superangevil.wordpress.com/556/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/superangevil.wordpress.com/556/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/superangevil.wordpress.com/556/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/superangevil.wordpress.com/556/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/superangevil.wordpress.com/556/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/superangevil.wordpress.com/556/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/superangevil.wordpress.com/556/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/superangevil.wordpress.com/556/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/superangevil.wordpress.com/556/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/superangevil.wordpress.com/556/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/superangevil.wordpress.com/556/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superangevil.wordpress.com&amp;blog=9860254&amp;post=556&amp;subd=superangevil&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://superangevil.wordpress.com/2010/11/15/linux%e4%b8%8bgappproxy%e7%bf%bb%e5%a2%99/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/46e0e8d9b0086f2d19d6130cc1471bb3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">superangevil</media:title>
		</media:content>
	</item>
		<item>
		<title>结构化信息提取初探</title>
		<link>http://superangevil.wordpress.com/2010/07/25/structured_information_extraction/</link>
		<comments>http://superangevil.wordpress.com/2010/07/25/structured_information_extraction/#comments</comments>
		<pubDate>Sun, 25 Jul 2010 15:40:43 +0000</pubDate>
		<dc:creator>superangevil</dc:creator>
				<category><![CDATA[NLP]]></category>

		<guid isPermaLink="false">http://superangevil.wordpress.com/2010/07/25/structured_information_extraction/</guid>
		<description><![CDATA[一个季度没有记录东西了，汗一个先~~~。这三个月经历了很多事，从技术上说，做了一个结构化信息提取的项目，已经开始运营了，下面就简单记录一下吧。 0. 理论基础 先把问题简单描述一下: 要在全网上，找出某一类特定对象的结构化信息（比如酒店，要找出其名称、地址、简介、设施、评论、交通、电话、房型、价格等等），并把它们提取出来。从流程上来说，就是Unstructured data -&#62; Structured data -&#62; Database这样一个过程。单纯从技术上讲，这是NLP中一类典型的问题，其一般的解决方案是这样的： 这里面有两个核心问题，一是特征提取，一是分类方法。对于特征提取，一般是先分词（当然针对的是中文网页了），用词作为特征的基本单位（这是最简单也是最常用的方法）；而对于分类，最“简单”的贝叶斯方法其实还蛮有效果的。 我们的目标是计算对于一个给定的文本(text)，它属于某个分类(category)的概率是多少，即，根据Bayes定理，有 而P(text&#124;category), P(category), P(text)都是易于计算的（P(text&#124;category)表示给定一个category, 它在text中体现多少; P(category)表示随机选择一个text, 它属于分类category的概率; P(text)作为分母对于所有category来说都是一样的，我们完全可以不关注它），计算方式为： 这样，我们就能算出某text它所应属的category. 1. 处理网页 有了上面的理论还远远不够，我们需要处理的是复杂的网页信息。这里面就需要对网页的结构进行分析：需要按网页结构进行聚类，需要定义一种数据结构来表示网页结构，需要“提取”出一簇网页的通用结构，最终形成一个个的“模板”。这里面涉及的东西很多很杂，需要考虑的细节特别多，就不详细描述了；值得一提的是，形成模板的过程仍然是一个“统计”的过程。 2. 回馈机制 回馈非常重要，至少在目前的技术水平下，你永远不能抛开人工的干预而完全相信计算机的NLP结果。在这里面的回馈就包括两个方面：一是对语义学习过程的回馈、一是对网页分析过程的回馈，在这里面非常重要的一点是回馈是多次的，需要不停迭代以达到好的结果。 最后，说两句目标导向的问题。前几天看到一句话说“工程师一个必须的突破就是化繁为简的能力”，相当有道理。在目标导向下，如果目标足够清晰就能化繁为简；同时，为了达到目标，就要求全面地考虑问题，这就是所谓的“简约而不简单”吧 (^_^) Filed under: NLP<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superangevil.wordpress.com&amp;blog=9860254&amp;post=553&amp;subd=superangevil&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>一个季度没有记录东西了，汗一个先~~~。这三个月经历了很多事，从技术上说，做了一个<a href="http://en.wikipedia.org/wiki/Information_extraction">结构化信息提取</a>的项目，已经开始运营了，下面就简单记录一下吧。</p>
<p><big><b>0. 理论基础</b></big></p>
<p>先把问题简单描述一下: 要在全网上，找出某一类特定对象的结构化信息（比如酒店，要找出其名称、地址、简介、设施、评论、交通、电话、房型、价格等等），并把它们提取出来。从流程上来说，就是Unstructured data -&gt; Structured data -&gt; Database这样一个过程。单纯从技术上讲，这是<a href="http://en.wikipedia.org/wiki/Natural_language_processing">NLP</a>中一类典型的问题，其一般的解决方案是这样的：<br /><img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/07/ml.jpg?w=600" /></p>
<p>这里面有两个核心问题，一是特征提取，一是分类方法。对于特征提取，一般是先分词（当然针对的是中文网页了），用词作为特征的基本单位（这是最简单也是最常用的方法）；而对于分类，最“简单”的贝叶斯方法其实还蛮有效果的。</p>
<p>我们的目标是计算对于一个给定的文本(text)，它属于某个分类(category)的概率是多少，即<img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/07/bayes3-0.png?w=600" />，根据<a href="http://en.wikipedia.org/wiki/Bayes%27_theorem">Bayes定理</a>，有</p>
<blockquote><p><img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/07/bayes3.png?w=600" /></p>
</blockquote>
<p>而P(text|category), P(category), P(text)都是易于计算的（P(text|category)表示给定一个category, 它在text中体现多少; P(category)表示随机选择一个text, 它属于分类category的概率; P(text)作为分母对于所有category来说都是一样的，我们完全可以不关注它），计算方式为：</p>
<blockquote><p><img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/07/bayes3-4.png?w=600" /><br /><img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/07/bayes3-11.png?w=600" /></p>
</blockquote>
<p>这样，我们就能算出某text它所应属的category.</p>
<p><big><b>1. 处理网页</b></big></p>
<p>有了上面的理论还远远不够，我们需要处理的是复杂的网页信息。这里面就需要对网页的结构进行分析：需要按网页结构进行聚类，需要定义一种数据结构来表示网页结构，需要“提取”出一簇网页的通用结构，最终形成一个个的“模板”。这里面涉及的东西很多很杂，需要考虑的细节特别多，就不详细描述了；值得一提的是，形成模板的过程仍然是一个“统计”的过程。</p>
<p><big><b>2. 回馈机制</b></big></p>
<p>回馈非常重要，至少在目前的技术水平下，你永远不能抛开人工的干预而完全相信计算机的<a href="http://en.wikipedia.org/wiki/Natural_language_processing">NLP</a>结果。在这里面的回馈就包括两个方面：一是对语义学习过程的回馈、一是对网页分析过程的回馈，在这里面非常重要的一点是回馈是多次的，需要不停迭代以达到好的结果。</p>
<p><span class="Apple-style-span" style="border-collapse:separate;color:rgb(0,0,0);font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;orphans:2;text-indent:0;text-transform:none;white-space:normal;widows:2;word-spacing:0;font-size:medium;"><span class="Apple-style-span" style="font-family:Verdana;font-size:13px;"><br class="Apple-interchange-newline" /></p>
<hr /></span></span>最后，说两句目标导向的问题。前几天看到一句话说“<font color="#000099">工程师一个必须的突破就是化繁为简的能力</font>”，相当有道理。在目标导向下，如果目标足够清晰就能化繁为简；同时，为了达到目标，就要求全面地考虑问题，这就是所谓的“简约而不简单”吧 (^_^)</p></p>
<br />Filed under: <a href='http://superangevil.wordpress.com/category/nlp/'>NLP</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/superangevil.wordpress.com/553/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/superangevil.wordpress.com/553/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/superangevil.wordpress.com/553/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/superangevil.wordpress.com/553/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/superangevil.wordpress.com/553/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/superangevil.wordpress.com/553/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/superangevil.wordpress.com/553/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/superangevil.wordpress.com/553/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/superangevil.wordpress.com/553/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/superangevil.wordpress.com/553/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/superangevil.wordpress.com/553/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/superangevil.wordpress.com/553/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/superangevil.wordpress.com/553/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/superangevil.wordpress.com/553/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superangevil.wordpress.com&amp;blog=9860254&amp;post=553&amp;subd=superangevil&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://superangevil.wordpress.com/2010/07/25/structured_information_extraction/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/46e0e8d9b0086f2d19d6130cc1471bb3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">superangevil</media:title>
		</media:content>

		<media:content url="http://superangevil.files.wordpress.com/2010/07/ml.jpg" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/07/bayes3-0.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/07/bayes3.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/07/bayes3-4.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/07/bayes3-11.png" medium="image" />
	</item>
		<item>
		<title>Ubuntu9.10下tor+autoproxy翻墙</title>
		<link>http://superangevil.wordpress.com/2010/04/02/utuntu_tor_autoproxy/</link>
		<comments>http://superangevil.wordpress.com/2010/04/02/utuntu_tor_autoproxy/#comments</comments>
		<pubDate>Fri, 02 Apr 2010 05:25:03 +0000</pubDate>
		<dc:creator>superangevil</dc:creator>
				<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://superangevil.wordpress.com/2010/04/02/utuntu_tor_autoproxy/</guid>
		<description><![CDATA[1. GFW持续发飙，tor的源已经都不能用了，只能通过源代码自己编译tor（tor的官网虽然被封，但还是能够通过搜索找到源码下载的） 2. 下载解压后 ./configure &#38;&#38; make &#38;&#38; sudo make install 默认安装到/usr/local下（tor在/usr/local/bin下，torrc在/usr/local/etc/tor下），注意安装过程需要libevent和libopenssl支持。 3. 安装Vidalia sudo apt-get install vidalia 安装好后，进行配置: &#8220;Setup Relaying&#8221; =&#62; &#8220;Network&#8221; =&#62; 勾选&#8221;My ISP blocks connections to the Tor network&#8221;，下面填可用网桥 4. 用gmail发送get bridges到bridges@torproject.org，等待自动回复并将回复后的网桥填入配置 5. 给firefox装autoproxy插件，选择Tor作为默认代理，启动vidalia，启用autoproxy，一切OK! Filed under: Ubuntu<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superangevil.wordpress.com&amp;blog=9860254&amp;post=544&amp;subd=superangevil&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>1. GFW持续发飙，tor的源已经都不能用了，只能通过源代码自己编译tor（tor的官网虽然被封，但还是能够通过搜索找到源码下载的）</p>
<p>2. 下载解压后<br />
<blockquote>./configure &amp;&amp; make &amp;&amp; sudo make install</p></blockquote>
<p>默认安装到<font face="Comic Sans MS">/usr/local</font>下（tor在/usr/local/bin下，torrc在/usr/local/etc/tor下），注意安装过程需要libevent和libopenssl支持。</p>
<p>3. 安装Vidalia<br />
<blockquote>sudo apt-get install vidalia</p></blockquote>
<p>安装好后，进行配置: &#8220;Setup Relaying&#8221; =&gt; &#8220;Network&#8221; =&gt; 勾选&#8221;My ISP blocks connections to the Tor network&#8221;，下面填可用网桥</p>
<p>4. 用gmail发送get bridges到<a href="mailto:bridges@torproject.org">bridges@torproject.org</a>，等待自动回复并将回复后的网桥填入配置</p>
<p>5. 给firefox装autoproxy插件，选择Tor作为默认代理，启动vidalia，启用autoproxy，一切OK!</p>
<br />Filed under: <a href='http://superangevil.wordpress.com/category/ubuntu/'>Ubuntu</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/superangevil.wordpress.com/544/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/superangevil.wordpress.com/544/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/superangevil.wordpress.com/544/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/superangevil.wordpress.com/544/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/superangevil.wordpress.com/544/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/superangevil.wordpress.com/544/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/superangevil.wordpress.com/544/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/superangevil.wordpress.com/544/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/superangevil.wordpress.com/544/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/superangevil.wordpress.com/544/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/superangevil.wordpress.com/544/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/superangevil.wordpress.com/544/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/superangevil.wordpress.com/544/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/superangevil.wordpress.com/544/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superangevil.wordpress.com&amp;blog=9860254&amp;post=544&amp;subd=superangevil&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://superangevil.wordpress.com/2010/04/02/utuntu_tor_autoproxy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/46e0e8d9b0086f2d19d6130cc1471bb3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">superangevil</media:title>
		</media:content>
	</item>
		<item>
		<title>协同过滤基础</title>
		<link>http://superangevil.wordpress.com/2010/03/16/basic_collaborative_filtering/</link>
		<comments>http://superangevil.wordpress.com/2010/03/16/basic_collaborative_filtering/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 08:39:23 +0000</pubDate>
		<dc:creator>superangevil</dc:creator>
				<category><![CDATA[Recommender-System]]></category>
		<category><![CDATA[Collaborative_Filtering]]></category>

		<guid isPermaLink="false">http://superangevil.wordpress.com/2010/03/16/basic_collaborative_filtering/</guid>
		<description><![CDATA[推荐系统中，协同过滤(Collaborative Filtering)技术已经获得了相当广泛的成功，最著名的就是Amazon，这里就不多说了。虽然是互联网上迟到的80后，但我们还是有热情去在互联网的舞台上脚踏实地的去拼搏、去奋斗。说到“脚踏实地”，一直以为CF没啥，现在觉得还是应该踏踏实实把它记录下来，算是对自己的积淀吧。 Web2.0时代都讲求“集体智慧”(collective intelligence)，首先是韩信将兵多多益善，而后再聚合、分类、过滤、预测、推荐、……。CF简单来说就是利用与使用者兴趣(interest)相投、品味(taste)相同的群体的喜好来对使用者产生他所&#8221;可能&#8221;感兴趣的信息。互联网上一个个个体透过一种合作机制（比如豆瓣的书影音平台）对某特定信息给予相当程度的回应（写书评、影评，评分等），这些信息可以用以帮助他人筛选信息。通常做法是: (1) 对一大群人进行搜索，并从中找出与使用者品味相近的一小群人； (2) 对这小群人喜好的其他内容进行考察，并将它们组合起来构造一个经过排名的推荐列表。CF最大特点是它并不利用content信息，仅仅利用user-item矩阵的链接关系就能产生预测。下面记录一下最基本的两种基于kNN的方法: User-Based CF, Item-Based CF（关于它们之间的比较就不说了，几篇经典的CF论文都讲了）。0. 数据准备:&#160;阶user-item关系的rating矩阵:&#160; &#8212; 行代表user，列代表item 1. User-Based Collaborative Filtering STEP1. 对user u，计算u与其他每个user v的相似度: 记为user u和user v都打过分的items集合 ,&#160; 表示user u对中items打分的均值；&#160;表示user v对中items打分的均值。此种度量方式实际上是调整后的cosine相似度（还有很多相似度度量方式，比如Euclidean Distance, Pearson Correlation等等，具体选用哪种相似度度量方式，要根据具体应用和数据的具体特点而定）。 STEP2. 这样，对user u，就找到了u与其他用户的相似度度量，根据相似度排序，取top-k个用户(kNN过程&#8212;找到了k个最近邻):为排好序的与user u最近似的k个最近邻，相应的相似度为此步的一个直接结果就是找到了相似用户。 STEP3. 预测user u对item i的喜欢程度: 记为对item i打过分的users集合 用相似kNN且对item i打过分的用户对item i评分的加权平均作为user u对item i喜欢程度的预测，这就找到了user u对其未关注过的item i的可能喜欢程度；对u所有未打过分的items都进行一下预测，就找出了一个user u未关注过的items的预测列表，对其按照预测值进行排序，就给出了一个user u可能喜欢的N个items（有序），这就是典型的“您可能喜欢”形态 2. Item-Based Collaborative [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superangevil.wordpress.com&amp;blog=9860254&amp;post=531&amp;subd=superangevil&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span class="Apple-style-span" style="border-collapse:separate;color:rgb(0,0,0);font-family:'Microsoft YaHei';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;orphans:2;text-indent:0;text-transform:none;white-space:normal;widows:2;word-spacing:0;font-size:medium;"><span class="Apple-style-span" style="font-family:Verdana;font-size:13px;"><font face="verdana">推荐系统中，协同过滤(<a href="http://en.wikipedia.org/wiki/Collaborative_filtering" id="co8f" title="Collaborative Filtering">Collaborative Filtering</a>)技术已经获得了相当广泛的成功，最著名的就是<a href="http://www.amazon.com/" id="y4lp" title="Amazon">Amazon</a>，这里就不多说了。虽然是<a href="http://www.chuangyejia.com/html/zixun/toutiao/2010/0312/52427.html" id="c8zm" title="互联网上迟到的80后">互联网上迟到的80后</a>，但我们还是有热情去在互联网的舞台上脚踏实地的去拼搏、去奋斗。说到“脚踏实地”，一直以为CF没啥，现在觉得还是应该踏踏实实把它记录下来，算是对自己的积淀吧。</p>
<p></font>
<div style="margin-top:0;margin-bottom:0;"><font face="verdana">Web2.0时代都讲求“集体智慧”(<a href="http://en.wikipedia.org/wiki/Collective_intelligence" id="u_wo" title="collective intelligence">collective intelligence</a>)，首先是韩信将兵多多益善，而后再聚合、分类、过滤、预测、推荐、……。CF简单来说就是利用与使用者兴趣(</font><font color="#ff0000" face="verdana">interest</font><font face="verdana">)相投、品味(</font><font color="#ff0000" face="verdana">taste</font><font face="verdana">)相同的群体的喜好来对使用者产生他所&#8221;可能&#8221;感兴趣的信息。互联网上一个个个体透过一种合作机制（比如<a href="http://www.douban.com/" id="xdn2" title="豆瓣">豆瓣</a>的书影音平台）对某特定信息给予相当程度的回应（写书评、影评，评分等），这些信息可以用以帮助他人筛选信息。通常做法是: (1) 对一大群人进行搜索，并从中找出与使用者品味相近的一小群人； (2) 对这小群人喜好的其他内容进行考察，并将它们组合起来构造一个经过排名的推荐列表。CF最大特点是它并不利用content信息，仅仅利用user-item矩阵的链接关系就能产生预测。下面记录一下最基本的两种基于kNN的方法: User-Based CF, Item-Based CF（关于它们之间的比较就不说了，几篇经典的CF论文都讲了）。<br /></font><br /><font face="verdana"><span class="Apple-style-span" style="border-collapse:separate;color:rgb(0,0,0);font-family:'Microsoft YaHei';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;orphans:2;text-indent:0;text-transform:none;white-space:normal;widows:2;word-spacing:0;font-size:medium;"><span class="Apple-style-span" style="font-family:Verdana;font-size:13px;">0. 数据准备:<span class="Apple-converted-space">&nbsp;</span><img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/03/extern_0000.png?w=600" />阶user-item关系的rating矩阵:&nbsp;<img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/03/extern_0001.png?w=600" /> &#8212; 行代表user，列代表item</span></span><br /><img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/03/extern_0002.png?w=600" /></p>
<p><span class="Apple-style-span" style="border-collapse:separate;color:rgb(0,0,0);font-family:'Microsoft YaHei';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;orphans:2;text-indent:0;text-transform:none;white-space:normal;widows:2;word-spacing:0;font-size:medium;"><span class="Apple-style-span" style="font-family:Verdana;font-size:13px;">1. User-Based Collaborative Filtering</p>
<p>STEP1. 对user u，计算u与其他每个user v的相似度:
<div style="margin-top:0;margin-bottom:0;">记<img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/03/extern_0003.png?w=600" />为user u和user v都打过分的items集合
<div style="margin-top:0;margin-bottom:0;"><img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/03/extern_0004.png?w=600" /><br /><img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/03/extern_00051.png?w=600" />,&nbsp; <img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/03/extern_0006.png?w=600" /><br /><img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/03/extern_0007.png?w=600" /><span class="Apple-style-span" style="border-collapse:separate;color:rgb(0,0,0);font-family:'Microsoft YaHei';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;orphans:2;text-indent:0;text-transform:none;white-space:normal;widows:2;word-spacing:0;font-size:medium;"><span class="Apple-style-span" style="font-family:Verdana;font-size:13px;">表示user u对<img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/03/extern_00031.png?w=600" />中items打分的均值；<span class="Apple-converted-space">&nbsp;<img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/03/extern_0008.png?w=600" /></span></span></span><span class="Apple-style-span" style="border-collapse:separate;color:rgb(0,0,0);font-family:'Microsoft YaHei';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;orphans:2;text-indent:0;text-transform:none;white-space:normal;widows:2;word-spacing:0;font-size:medium;"><span class="Apple-style-span" style="font-family:Verdana;font-size:13px;">表示user v对<img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/03/extern_00033.png?w=600" />中items打分的均值。<br /></span></span><span class="Apple-style-span" style="border-collapse:separate;color:rgb(0,0,0);font-family:'Microsoft YaHei';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;orphans:2;text-indent:0;text-transform:none;white-space:normal;widows:2;word-spacing:0;font-size:medium;"><span class="Apple-style-span" style="font-family:Verdana;font-size:13px;">此种度量方式实际上是调整后的cosine相似度（还有很多相似度度量方式，比如Euclidean Distance, Pearson Correlation等等，具体选用哪种相似度度量方式，要<font color="#ff0000">根据具体应用和数据的具体特点而定</font>）。</span></span><br /><span class="Apple-style-span" style="border-collapse:separate;color:rgb(0,0,0);font-family:'Microsoft YaHei';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;orphans:2;text-indent:0;text-transform:none;white-space:normal;widows:2;word-spacing:0;font-size:medium;"><span class="Apple-style-span" style="font-family:Verdana;font-size:13px;"></p>
<p></span></span></div>
</div>
<p></span></span></font><font face="verdana"><span class="Apple-style-span" style="border-collapse:separate;color:rgb(0,0,0);font-family:'Microsoft YaHei';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;orphans:2;text-indent:0;text-transform:none;white-space:normal;widows:2;word-spacing:0;font-size:medium;"><span class="Apple-style-span" style="font-family:Verdana;font-size:13px;">STEP2. 这样，对user u，就找到了u与其他用户的相似度度量，根据相似度排序，取top-k个用户(kNN过程&#8212;找到了k个最近邻):</span></span><br /><img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/03/extern_0009.png?w=600" /><span class="Apple-style-span" style="border-collapse:separate;color:rgb(0,0,0);font-family:'Microsoft YaHei';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;orphans:2;text-indent:0;text-transform:none;white-space:normal;widows:2;word-spacing:0;font-size:medium;"><span class="Apple-style-span" style="font-family:Verdana;font-size:13px;">为排好序的与user u最近似的k个最近邻，相应的相似度为</span></span><img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/03/extern_0010.png?w=600" /><br /><span class="Apple-style-span" style="border-collapse:separate;color:rgb(0,0,0);font-family:'Microsoft YaHei';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;orphans:2;text-indent:0;text-transform:none;white-space:normal;widows:2;word-spacing:0;font-size:medium;"><span class="Apple-style-span" style="font-family:Verdana;font-size:13px;">此步的一个直接结果就是<font color="#ff0000">找到了相似用户</font>。</span></span></p>
<p></font><span class="Apple-style-span" style="border-collapse:separate;color:rgb(0,0,0);font-family:'Microsoft YaHei';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;orphans:2;text-indent:0;text-transform:none;white-space:normal;widows:2;word-spacing:0;font-size:medium;"><span class="Apple-style-span" style="font-family:Verdana;font-size:13px;">
<div style="margin-top:0;margin-bottom:0;">
<div style="margin-top:0;margin-bottom:0;"><font face="verdana">STEP3. 预测user u对item i的喜欢程度:</font></div>
<div style="margin-top:0;margin-bottom:0;"><font face="verdana">记<img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/03/extern_0011.png?w=600" />为对item i打过分的users集合</font></div>
<p><font face="verdana"><img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/03/extern_0012.png?w=600" /><br /></font></div>
<div style="margin-top:0;margin-bottom:0;"><font face="verdana">用相似kNN且对item i打过分的用户对item i评分的加权平均作为user u对item i喜欢程度的预测，这就找到了user u对其未关注过的item i的</font><font color="#ff0000" face="verdana">可能喜欢程度</font><font face="verdana">；对u所有未打过分的items都进行一下预测，就找出了一个user u未关注过的items的预测列表，对其按照预测值进行排序，就给出了一个user u可能喜欢的N个items（有序），这就是典型的</font><font color="#ff0000" face="verdana">“您可能喜欢”</font><font face="verdana">形态 <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><span class="Apple-style-span" style="border-collapse:separate;color:rgb(0,0,0);font-family:'Microsoft YaHei';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;orphans:2;text-indent:0;text-transform:none;white-space:normal;widows:2;word-spacing:0;font-size:medium;"><span class="Apple-style-span" style="font-family:Verdana;font-size:13px;">
<div style="margin-top:0;margin-bottom:0;">
<div style="margin-top:0;margin-bottom:0;">2. Item-Based Collaborative Filtering</div>
<p>STEP1. 对任意两个item i, j，计算它们之间的相似度:</div>
<div style="margin-top:0;margin-bottom:0;">记<img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/03/extern_0013.png?w=600" />为对item i和item j都打过分的users集合</div>
<div style="margin-top:0;margin-bottom:0;"><img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/03/extern_0014.png?w=600" /><br /><img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/03/extern_0015.png?w=600" />&nbsp;&nbsp;<span class="Apple-converted-space"> <img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/03/extern_0016.png?w=600" /><br /></span></div>
<div style="margin-top:0;margin-bottom:0;"><img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/03/extern_0017.png?w=600" />表示<img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/03/extern_00131.png?w=600" />中的users对item i打分的均值；<img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/03/extern_0018.png?w=600" />表示<img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/03/extern_00132.png?w=600" />中的users对item j打分的均值。</div>
<div style="margin-top:0;margin-bottom:0;">此种度量方式仍是调整后的cosine相似度，不再赘述。</div>
<div style="margin-top:0;margin-bottom:0;">[注] 此步骤的最大特点是相比与users，items相对是静态、变化较少的，<b><u>item-item相似对可以预先offline计算</u></b><span class="Apple-converted-space">&nbsp;</span>&#8212; 相比于user-based方法，这是一个极大的优势。</div>
<p>
<div style="margin-top:0;margin-bottom:0;">STEP2. 对任意item i，根据相似度排序，获得k个最相似items(kNN):</div>
<div style="margin-top:0;margin-bottom:0;"><img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/03/extern_0019.png?w=600" />为排好序的与item i最近似的k个最近邻，相应的相似度为<img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/03/extern_00201.png?w=600" /></div>
<p>此步的直接结果是<font color="#ff0000">找到了相似物品</font>。</p>
<div style="margin-top:0;margin-bottom:0;">STEP3. 预测user u对item i的喜欢程度:</div>
<div style="margin-top:0;margin-bottom:0;">记<img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/03/extern_0021.png?w=600" />为user u打过分的items集合</div>
<div style="margin-top:0;margin-bottom:0;"><img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2010/03/extern_0022.png?w=600" /></div>
<p>用user u打过分且在item i相似kNN的items集中打分的加权凭据作为u对i喜欢程度的预测，同样找到user u对起未关注国的item i的<font color="#ff0000">可能喜欢程度</font>；对u所有未打分的items都这样作，就形成了一个预测列表，排序后<font color="#ff0000">给出推荐列表</font>。</p>
<hr />
<div style="margin-top:0;margin-bottom:0;">以上就是最基本的基于kNN的CF过程，当然，通过交叉验证可以评测我们的相似度函数选择怎么样，最重要的，还是<b><u>根据具体应用和数据本身的特点选择和设计合适的相似度度量函数</u></b>；另外，对于数据features的多方面考虑可以有更复杂的模型（如SVD, RBM等等），对预测进行进一步的精确与细化。<br /><br class="Apple-interchange-newline" /></div>
<p></span></span></font></div>
<p></span></span></div>
<p></span></span><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=346e85b7-7a8d-8934-80f0-64978a103e87" /></p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=5cc3cc99-bf3e-80ad-8edc-8298beb020bc" /></div>
<br />Filed under: <a href='http://superangevil.wordpress.com/category/recommender-system/'>Recommender-System</a> Tagged: <a href='http://superangevil.wordpress.com/tag/collaborative_filtering/'>Collaborative_Filtering</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/superangevil.wordpress.com/531/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/superangevil.wordpress.com/531/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/superangevil.wordpress.com/531/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/superangevil.wordpress.com/531/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/superangevil.wordpress.com/531/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/superangevil.wordpress.com/531/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/superangevil.wordpress.com/531/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/superangevil.wordpress.com/531/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/superangevil.wordpress.com/531/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/superangevil.wordpress.com/531/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/superangevil.wordpress.com/531/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/superangevil.wordpress.com/531/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/superangevil.wordpress.com/531/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/superangevil.wordpress.com/531/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superangevil.wordpress.com&amp;blog=9860254&amp;post=531&amp;subd=superangevil&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://superangevil.wordpress.com/2010/03/16/basic_collaborative_filtering/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/46e0e8d9b0086f2d19d6130cc1471bb3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">superangevil</media:title>
		</media:content>

		<media:content url="http://superangevil.files.wordpress.com/2010/03/extern_0000.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/03/extern_0001.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/03/extern_0002.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/03/extern_0003.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/03/extern_0004.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/03/extern_00051.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/03/extern_0006.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/03/extern_0007.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/03/extern_00031.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/03/extern_0008.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/03/extern_00033.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/03/extern_0009.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/03/extern_0010.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/03/extern_0011.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/03/extern_0012.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/03/extern_0013.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/03/extern_0014.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/03/extern_0015.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/03/extern_0016.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/03/extern_0017.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/03/extern_00131.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/03/extern_0018.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/03/extern_00132.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/03/extern_0019.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/03/extern_00201.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/03/extern_0021.png" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2010/03/extern_0022.png" medium="image" />

		<media:content url="http://img.zemanta.com/pixy.gif?x-id=346e85b7-7a8d-8934-80f0-64978a103e87" medium="image" />

		<media:content url="http://img.zemanta.com/pixy.gif?x-id=5cc3cc99-bf3e-80ad-8edc-8298beb020bc" medium="image" />
	</item>
		<item>
		<title>闲言碎语</title>
		<link>http://superangevil.wordpress.com/2010/01/13/murmur/</link>
		<comments>http://superangevil.wordpress.com/2010/01/13/murmur/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 04:45:14 +0000</pubDate>
		<dc:creator>superangevil</dc:creator>
				<category><![CDATA[NLP]]></category>
		<category><![CDATA[Self-Reflection]]></category>

		<guid isPermaLink="false">http://superangevil.wordpress.com/2010/01/13/murmur/</guid>
		<description><![CDATA[最近忙得焦头烂额，休息也不好，Blog好久没更新了，先汗颜一下 无意中看到一句话，说人与人之间之所以产生差距，就在于无法改变自己，我把它转成一个流行的说法就是茶具的诞生在于自己无法改变自己（已经作为MSN签名档了，呵呵）&#8212;- 想想还是有一定的道理的。以前跟一个朋友聊天，我说我时不时会自己惊出一身冷汗：“我已经有多久没有学习到一项新的东东了？” 呵呵，算是自己没有好好向既定的方向改变自己吧！ 闲言少叙，先记述一下自己自己作的东西，以后再慢慢把心得写上来。最近还在搞NLP，这一阶段的工作主要是文本分类，用了几个比较好用的开源库:(1) FreeLing，C++写的，包括了NLP底层分析的很多方面，西班牙一个team作的，非常酷，可以看看它的online demo；我正考虑把中文支持上去。(2) TreeTagger，Perl做的，有中文支持扩展。(3) SVM_light，C写的，Cornell一个牛人Thorsten Joachims主持开发的，很好用。（在这里还有一个小插曲，作者发现他自己的主页从天朝连不上，于是写了一段声明，这种纯学术的东东都被block了，丢人阿丢人！Google也不是要不跟我党玩了么，……，不说了不说了，好好搞自己的事情吧） 基本流程就是底层用Freeling+TreeTagger作数据处理，SVM_light作文本分类，当然，开源代码的好处就在于自己可以修改定制，呵呵，目前实验性的效果还可以。 Posted in NLP, Self-Reflection<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superangevil.wordpress.com&amp;blog=9860254&amp;post=496&amp;subd=superangevil&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>最近忙得焦头烂额，休息也不好，Blog好久没更新了，先汗颜一下 <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>无意中看到一句话，说人与人之间之所以产生差距，就在于无法改变自己，我把它转成一个流行的说法就是<u><b>茶具的诞生在于自己无法改变自己</b></u>（已经作为MSN签名档了，呵呵）&#8212;- 想想还是有一定的道理的。以前跟一个朋友聊天，我说我时不时会自己惊出一身冷汗：“我已经有多久没有学习到一项新的东东了？” 呵呵，算是自己没有好好向既定的方向改变自己吧！</p>
<p>闲言少叙，先记述一下自己自己作的东西，以后再慢慢把心得写上来。最近还在搞<a target="_blank" href="http://en.wikipedia.org/wiki/Natural_language_processing">NLP</a>，这一阶段的工作主要是文本分类，用了几个比较好用的开源库:<br />(1) <a target="_blank" href="http://www.lsi.upc.edu/%7Enlp/freeling/index.php">FreeLing</a>，C++写的，包括了NLP底层分析的很多方面，西班牙一个team作的，非常酷，可以看看它的<a target="_blank" href="http://garraf.epsevg.upc.es/freeling/demo.php">online demo</a>；我正考虑把中文支持上去。<br />(2) <a target="_blank" href="http://www.ims.uni-stuttgart.de/projekte/corplex/TreeTagger/">TreeTagger</a>，Perl做的，有中文支持扩展。<br />(3) <a target="_blank" href="http://svmlight.joachims.org/">SVM_light</a>，C写的，<a target="_blank" href="http://www.cornell.edu/">Cornell</a>一个牛人<a target="_blank" href="http://www.joachims.org/">Thorsten Joachims</a>主持开发的，很好用。（在这里还有一个小插曲，作者发现他自己的主页从天朝连不上，于是写了一段<a target="_blank" href="http://www.cs.cornell.edu/People/tj/svm_light/access_from_china.txt">声明</a>，这种纯学术的东东都被block了，丢人阿丢人！<a target="_blank" href="http://googleblog.blogspot.com/2010/01/new-approach-to-china.html">Google也不是要不跟我党玩了么</a>，……，不说了不说了，好好搞自己的事情吧）</p>
<p>基本流程就是底层用Freeling+TreeTagger作数据处理，SVM_light作文本分类，当然，开源代码的好处就在于自己可以修改定制，呵呵，目前实验性的效果还可以。</p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=8fd93f92-1478-8ea0-a750-d5033e3f438c" /></div>
<br />Posted in NLP, Self-Reflection  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/superangevil.wordpress.com/496/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/superangevil.wordpress.com/496/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/superangevil.wordpress.com/496/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/superangevil.wordpress.com/496/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/superangevil.wordpress.com/496/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/superangevil.wordpress.com/496/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/superangevil.wordpress.com/496/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/superangevil.wordpress.com/496/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/superangevil.wordpress.com/496/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/superangevil.wordpress.com/496/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/superangevil.wordpress.com/496/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/superangevil.wordpress.com/496/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/superangevil.wordpress.com/496/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/superangevil.wordpress.com/496/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superangevil.wordpress.com&amp;blog=9860254&amp;post=496&amp;subd=superangevil&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://superangevil.wordpress.com/2010/01/13/murmur/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/46e0e8d9b0086f2d19d6130cc1471bb3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">superangevil</media:title>
		</media:content>

		<media:content url="http://img.zemanta.com/pixy.gif?x-id=8fd93f92-1478-8ea0-a750-d5033e3f438c" medium="image" />
	</item>
		<item>
		<title>Resys第三次线下聚会</title>
		<link>http://superangevil.wordpress.com/2009/12/23/resys_salon3/</link>
		<comments>http://superangevil.wordpress.com/2009/12/23/resys_salon3/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 06:17:12 +0000</pubDate>
		<dc:creator>superangevil</dc:creator>
				<category><![CDATA[Recommender-System]]></category>
		<category><![CDATA[resys]]></category>

		<guid isPermaLink="false">http://superangevil.wordpress.com/2009/12/23/resys_salon3/</guid>
		<description><![CDATA[这次的聚会从内容到规模都可以说达到了一个新的高度，douban在这次活动中提供了鼎立的支持: 场地、精彩演讲、茶歇、文化衫…… 这个是一定要赞的 各个topic具体内容就不多说了，参看各位大拿的PPT与录音，下面就谈几点听了这些讲座的一点点个人粗浅的感受。 一. 豆瓣在推荐领域的实践与思考 豆瓣算法大拿王守崑讲得很精彩，八个字概括就是深入浅出、娓娓道来。 第一个非常有趣也是很根本的问题就是“什么样的产品适合推荐？” 这里面就引申出来一个问题：推荐的维度 &#8212; 再深入一些，这正恰恰是前几天Resys引起大家热烈讨论的一个问题：多特征的推荐（关于这个问题我就不说了，围观大家的帖子去&#8230;）。 推荐的维度问题是一个非常值得探讨的问题，王守崑提出的具有“媒体性”产品概括得非常精准：我们要了解用户的“口味”、我们的推荐要对用户来说尽量降低用户的成本、我们的推荐要能传播（当然理想情况就是可进化啦）、我们的推荐要多样…… 通过这些探讨和豆瓣积累的经验，胖子给出了他们的结论：条目增长要相对稳定；能够快速获得反馈；在稀疏性、多样性与时效性之间要取得平衡。其中强调反馈 ，这跟第二次线下聚会里面有的理念是一致的，用户的反馈会对推荐结果的修正产生非常正向的影响。 下面一个问题谈到了推荐系统的可扩展性 : 看书不仔细阿，胖子说Programming Pearls告诉我们: 时间和空间不一定非得要trade-off，可以同时降！关于这个问题我确实没有仔细想过，只是理论上相信通过优美的算法设计是可以把时空都控制到非常精巧的范围内，但是没有这么确信与底气十足，说白了还是没有自己亲自动手在大型项目中实践过，看来确实是从实践出的真知才是最可靠与最有底气的阿 王守崑的例子就是矩阵与其转置矩阵相乘的上限分析，这个需要仔细的看看和推导。从这个问题中我们可以看到的是通过仔细的算法设计加上云计算，我们可以非常容易地扩展我们的推荐系统。 下面又讲到了豆瓣现在所面临的挑战，我觉得这个也是整个推荐系统所面临的挑战： (1) 产品形态如何 ，由于是黑盒推荐，最终还是转到了是否需要区分用户群这个问题。我觉得这个问题对于推荐系统来说很重要，举个自身的例子来说，豆瓣电台是不错，偶尔也是会给我惊喜；但是这种惊喜并不足够，有太多我不喜欢或者我不surprise的歌曲给我，时间长了我就觉得很烦，我知道自己喜欢什么，所以很多时候又转到谷歌音乐去了&#8230; 这时推荐系统需要考虑的问题就是怎么样留住我这种用户？怎样很快推荐给我我真正感兴趣的歌曲？这又引申到另一个问题：“推荐的个性化”！这个王守崑讲的“下一代推荐引擎”的核心思想：需要有个性的推荐，需要有记忆、能进化的推荐！ (2) 用户收藏/推荐质量曲线问题：当维度信息增大时怎样维持推荐质量？ (3) 如何评价推荐的效果？这里面比较重要的问题是如何形成闭环的问题。 发现信息的层次：排序 &#8211;&#62; 关联 &#8211;&#62; 分类、聚类 &#8211;&#62; 过滤，于是王守崑抛出的最后一个问题是：“是否人人都需要过滤器？” 这个我觉得还是回到了用户分群的问题，用户是不一样的，层次是不一样的，不是所有用户都需要过滤器，只是一些“高级”用户才需要，至少目前是如此。现在的个性化推荐，针对的只是这一小部分用户…… 二. 推荐算法也是一种产品这个topic我不是理解很深刻，但是这里面我想他们要表达与解决的问题，还是要解决不同用户分群的问题: 既然用户不一样，那么我就给你选择，在后台发现你倾向于那种方法的推荐，以后就用哪种方法给你作推荐。另外，还有众所周知的，并不是所有算法都能解决问题，人工因素的加入是提高用户体验的一种“捷径”。 三. 大规模机器学习算法在互联网中的应用 张栋博士的这个presentation还是理论深度比较强的，我自己功力还不是很够，呵呵；张栋博士首先阐述了机器学习算法的前世今生：从NN到SVM到Graphical Model到CRF到DeepNet再回到NN，这是一种高屋建瓴的表述，让我们对机器学习这个领域有个比较全面的轮廓印象，xlvector在他的这次活动的回顾里面也给出了对ML的独到见解。 下面就是结合他所作的天涯问答这个产品，给我们展示了ML在对超大规模数据处理能到达的水平。正如xlvector所说，在这个领域，评价一个工程师的指标不应该是懂多少算法，而是处理过多大的数据。另外就是还有MPI vs. Map-Reduce，两个都是好东西，说东风一定压倒西风，这个还确实不好说 最后，张栋博士还谈到了社会化广告系统，“广告传播”很有意思，也是推荐系统个性化进化的一种表述吧…… Resys Group的这个平台需要我们大家共同维护、共同交流、共同进步，虽然GFW时不时抽风，虽然我们面临大中华局域网的威胁，但我们相信明天会更好！ Posted in Recommender-System Tagged: resys<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superangevil.wordpress.com&amp;blog=9860254&amp;post=489&amp;subd=superangevil&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>这次的聚会从内容到规模都可以说达到了一个新的高度，<a target="_blank" href="http://www.douban.com">douban</a>在这次活动中提供了鼎立的支持: 场地、精彩演讲、茶歇、文化衫…… 这个是一定要赞的 <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>各个topic具体内容就不多说了，参看<a target="_blank" href="https://groups.google.com/group/resys/web/resys--2009-12-19">各位大拿的PPT与录音</a>，下面就谈几点听了这些讲座的一点点个人粗浅的感受。</p>
<p><big>一. <a target="_blank" href="http://www.slideshare.net/clickstone/ss-2756065">豆瓣在推荐领域的实践与思考</a></big></p>
<p>豆瓣算法大拿<b>王守崑</b>讲得很精彩，八个字概括就是<i>深入浅出、娓娓道来</i>。</p>
<p>第一个非常有趣也是很根本的问题就是<i><b>“什么样的产品适合推荐？”</b></i> 这里面就引申出来一个问题：推荐的<b>维度</b> &#8212; 再深入一些，这正恰恰是前几天<a target="_blank" href="https://groups.google.com/group/resys">Resys</a>引起大家热烈讨论的一个问题：<a target="_blank" href="https://groups.google.com/group/resys/browse_thread/thread/9b8fdec17741cc26">多特征的推荐</a>（关于这个问题我就不说了，围观大家的帖子去&#8230;）。</p>
<p>推荐的维度问题是一个非常值得探讨的问题，王守崑提出的具有<i><b>“媒体性”</b></i>产品概括得非常精准：我们要<u>了解用户的“口味”</u>、我们的推荐要对用户来说尽量<u>降低用户的成本</u>、我们的推荐要能<u>传播</u>（当然理想情况就是<font color="#ff0000">可进化</font>啦）、我们的推荐要<u>多样</u>…… 通过这些探讨和豆瓣积累的经验，胖子给出了他们的结论：<u>条目增长要相对稳定</u>；能够<u>快速获得反馈</u>；<u>在稀疏性、多样性与时效性之间要取得平衡</u>。其中强调<b>反馈</b> ，这跟第二次线下聚会里面有的理念是一致的，用户的反馈会对推荐结果的修正产生非常正向的影响。</p>
<p>下面一个问题谈到了<i><b>推荐系统的可扩展性</b></i> : 看书不仔细阿，胖子说<a target="_blank" href="http://www.douban.com/subject/1230206/">Programming Pearls</a>告诉我们: 时间和空间不一定非得要trade-off，可以同时降！关于这个问题我确实没有仔细想过，只是理论上相信通过优美的算法设计是可以把时空都控制到非常精巧的范围内，但是没有这么确信与底气十足，说白了还是没有自己亲自动手在大型项目中实践过，看来确实是从实践出的真知才是最可靠与最有底气的阿 <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  王守崑的例子就是矩阵与其转置矩阵相乘的上限分析，这个需要仔细的看看和推导。从这个问题中我们可以看到的是通过仔细的<b>算法</b>设计加上<b>云计算</b>，我们可以非常容易地扩展我们的推荐系统。</p>
<p>下面又讲到了豆瓣现在所面临的挑战，我觉得这个也是整个推荐系统所面临的挑战：</p>
<p>(1) <b>产品形态如何</b> ，由于是<i>黑盒推荐</i>，最终还是转到了是否需要<b><i>区分用户群</i></b>这个问题。我觉得这个问题对于推荐系统来说很重要，举个自身的例子来说，豆瓣电台是不错，偶尔也是会给我惊喜；但是这种惊喜并不足够，有太多我不喜欢或者我不surprise的歌曲给我，时间长了我就觉得很烦，我知道自己喜欢什么，所以很多时候又转到谷歌音乐去了&#8230; 这时推荐系统需要考虑的问题就是怎么样留住我这种用户？怎样很快推荐给我我真正感兴趣的歌曲？这又引申到另一个问题：“<b>推荐的个性化</b>”！这个王守崑讲的“下一代推荐引擎”的核心思想：需要<u>有个性</u>的推荐，需要<u>有记忆</u>、<u>能进化</u>的推荐！</p>
<p>(2) <b>用户收藏/推荐质量</b>曲线问题：当维度信息增大时怎样维持推荐质量？</p>
<p>(3) 如何<b>评价推荐的效果</b>？这里面比较重要的问题是如何形成<i><b>闭环</b></i>的问题。</p>
<p>发现信息的层次：<font color="#000099">排序</font> &#8211;&gt; <font color="#000099">关联</font> &#8211;&gt; <font color="#000099">分类</font>、<font color="#000099">聚类</font> &#8211;&gt; <font color="#000099">过滤</font>，于是王守崑抛出的最后一个问题是：<i><b>“是否人人都需要过滤器？”</b></i> 这个我觉得还是回到了用户分群的问题，用户是不一样的，层次是不一样的，不是所有用户都需要过滤器，只是一些“高级”用户才需要，至少目前是如此。现在的个性化推荐，针对的只是这一小部分用户……</p>
<p><big>二. <a target="_blank" href="http://www.slideshare.net/clickstone/recommendation-algorithm-as-a-product">推荐算法也是一种产品</a><br /></big><br />这个topic我不是理解很深刻，但是这里面我想他们要表达与解决的问题，还是要解决不同<i><b>用户分群</b></i>的问题: 既然用户不一样，那么我就给你选择，在后台发现你倾向于那种方法的推荐，以后就用哪种方法给你作推荐。另外，还有众所周知的，并不是所有算法都能解决问题，<u>人工因素的加入</u>是提高用户体验的一种“捷径”。</p>
<p><big>三. <a target="_blank" href="http://www.slideshare.net/clickstone/edchang-parallel-algorithms-for-mining-large-scale-data">大规模机器学习算法在互联网中的应用</a></big></p>
<p>张栋博士的这个presentation还是理论深度比较强的，我自己功力还不是很够，呵呵；张栋博士首先阐述了机器学习算法的前世今生：从<a target="_blank" href="http://en.wikipedia.org/wiki/Neural_network">NN</a>到<a target="_blank" href="http://en.wikipedia.org/wiki/Support_vector_machinehttp://en.wikipedia.org/wiki/Support_vector_machine">SVM</a>到<a target="_blank" href="http://en.wikipedia.org/wiki/Graphical_model">Graphical Model</a>到<a target="_blank" href="http://en.wikipedia.org/wiki/Conditional_random_field">CRF</a>到DeepNet再回到<a target="_blank" href="http://en.wikipedia.org/wiki/Neural_network">NN</a>，这是一种高屋建瓴的表述，让我们对机器学习这个领域有个比较全面的轮廓印象，<a target="_blank" href="http://twitter.com/xlvector">xlvector</a>在他的<a target="_blank" href="http://xlvector.cn/blog/?p=357">这次活动的回顾</a>里面也给出了对<a target="_blank" href="http://en.wikipedia.org/wiki/Machine_learning">ML</a>的独到见解。</p>
<p>下面就是结合他所作的<a target="_blank" href="http://wenda.tianya.cn/wenda/">天涯问答</a>这个产品，给我们展示了<a target="_blank" href="http://en.wikipedia.org/wiki/Machine_learning">ML</a>在对超大规模数据处理能到达的水平。正如<a target="_blank" href="http://twitter.com/xlvector">xlvector</a>所说，在这个领域，评价一个工程师的指标不应该是懂多少算法，而是处理过多大的数据。另外就是还有<a target="_blank" href="http://en.wikipedia.org/wiki/Message_Passing_Interface">MPI</a> vs. <a target="_blank" href="http://en.wikipedia.org/wiki/Map_reduce">Map-Reduce</a>，两个都是好东西，说东风一定压倒西风，这个还确实不好说 <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>最后，张栋博士还谈到了社会化广告系统，“<i><b>广告传播</b></i>”很有意思，也是推荐系统个性化<font color="#ff0000">进化</font>的一种表述吧……</p>
<p><a target="_blank" href="https://groups.google.com/group/resys">Resys Group</a>的这个平台需要我们大家共同维护、共同交流、共同进步，虽然<a target="_blank" href="http://twitter.com/#search?q=GFW">GFW</a>时不时抽风，虽然我们面临<a target="_blank" href="http://superangevil.tumblr.com/post/297672400">大中华局域网</a>的威胁，但我们相信明天会更好！</p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=346e85b7-7a8d-8934-80f0-64978a103e87" /></div>
<br />Posted in Recommender-System Tagged: resys <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/superangevil.wordpress.com/489/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/superangevil.wordpress.com/489/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/superangevil.wordpress.com/489/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/superangevil.wordpress.com/489/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/superangevil.wordpress.com/489/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/superangevil.wordpress.com/489/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/superangevil.wordpress.com/489/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/superangevil.wordpress.com/489/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/superangevil.wordpress.com/489/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/superangevil.wordpress.com/489/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/superangevil.wordpress.com/489/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/superangevil.wordpress.com/489/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/superangevil.wordpress.com/489/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/superangevil.wordpress.com/489/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superangevil.wordpress.com&amp;blog=9860254&amp;post=489&amp;subd=superangevil&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://superangevil.wordpress.com/2009/12/23/resys_salon3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/46e0e8d9b0086f2d19d6130cc1471bb3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">superangevil</media:title>
		</media:content>

		<media:content url="http://img.zemanta.com/pixy.gif?x-id=346e85b7-7a8d-8934-80f0-64978a103e87" medium="image" />
	</item>
		<item>
		<title>关于重构的几点心得</title>
		<link>http://superangevil.wordpress.com/2009/12/14/about_refactoring/</link>
		<comments>http://superangevil.wordpress.com/2009/12/14/about_refactoring/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 14:19:42 +0000</pubDate>
		<dc:creator>superangevil</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Self-Reflection]]></category>
		<category><![CDATA[refactoring]]></category>

		<guid isPermaLink="false">http://superangevil.wordpress.com/2009/12/14/about_refactoring/</guid>
		<description><![CDATA[写在前面，为什么要重构？ 前段时间接手同事的代码，当时时间比较急，对他的代码code review了一遍，知道哪些哪些都是干什么的，然后外面作些wrapper，里面的东东都没动，就开始继续开发了。这些天发现问题还是挺多的：(1)是清晰性的问题，两个人代码，糅在一起的时候，清晰性还是打了些折扣的，尤其是两人的编程风格不大一样，更导致的清晰性的进一步下降；(2)是可扩展性问题，由于有了新的feature和新的需求，比如需要多线程环境，这时有些代码就是不安全的，架构上要稍作变动；(3)是性能与效率问题，发现要更好的掌握原代码，才有可能提高性能。于是重构就势在必行了。 通过这次重构，验证了很多程序设计实践中的原则(我骨子里还是倾向于C的)，模块性是我体味最为深刻的 &#8212; 定义清晰的接口吧若干简单的模块组合起来：(1) 模块要简单；(2) 接口要清晰。下面详细记述一下： 1. 最佳模块大小 我们都知道封装是模块化代码的首要特质，API就是我们所提供的封装，那么如何验证API是否设计良好呢？ 画个图就简单多了，我们应该这样理解API: 它们是各模块间进行&#8221;通信&#8220;的接口协议。于是下面的步骤就顺理成章了: STEP1 抽象: 定义接口STEP2 推演: 描述接口STEP3 实现: 实际编码 谈完API，下面回到模块本身，刚才谈到模块要简单，那么如何度量模块是否“简单”？ Les Hatton在这方面做过比较细致的研究 可以看出他给出的经验数据是: 模块不能大，也不能太小，代码在200~400行之间时比较好。 2. 紧凑性与正交分解 现在我们有了模块最佳大小的尺度了，但有最佳尺寸并不意味着代码具有高质量，我们需要再进一步：紧凑性与正交性。 (1) 紧凑性 何谓“紧凑性”？形象来说，就是要“小”，小到一个人很容易地&#8221;keep in mind&#8221;。注意这里面“小”并不意味着“简单”，它可以设计得非常巧妙，让人回味无穷:) 那么我们如何做到“紧凑性”呢？一个心理学上的经验是：人类短期记忆能够容纳的不连续信息说是七，加二或减二。于是，就得出一个简单的评判 API紧凑性的经验法则： 编程者需要记忆的条目数大于7吗？如果大于，那么这个API就不大可能是严格紧凑的。 有一种提高紧凑性的一个精妙且强大的方法：围绕“解决一个定义明确的问题”的强核心算法来组织设计 &#8212; 形式化核心任务，明确任务模型，然后围绕它进行设计。 紧凑性是一个非常好的特性，但是也不能过于追求它，正确的态度是合理地对待紧凑性，设计中要尽量考虑，不强求但决不抛弃。 (2) 正交性 我曾经有幸跟C++大牛xushiwei共事过一段时间，当时他给我强调最多的一句话就是“正交分解”。正交性是使得复杂设计向紧凑性方向迈进的最有力助动。 纯粹的正交设计，任何一种操作都没有副作用，每个动作(API调用)只改变一件事而不影响其它，改变每个属性的方法有且仅有一个。“只作一件事，并把它做好”，这里面不仅仅将的是简洁，更有正交性的潜台词在里面；可以说，重构的原则性目标就是“提高正交性”！ (3) DRY/SPOT原则 DRY(Don&#8217;t Repeat Yourself)是一个广为认知的原则，它的涵义是：任何一个知识结构在系统内部都应该有一个唯一、明确、权威的表述。不要重复表述 &#8212; 因为重复可能导致前后矛盾，对一处的修改只是修改了一部分，重复的部分可能并没有修改 &#8212; 这就导致了前后的不一致。从重构的角度，在DRY原则的指导下，我们可以保持核心算法，更改代码组织进行重构过程。 DRY的另一种表述叫做SPOT(Single Point [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superangevil.wordpress.com&amp;blog=9860254&amp;post=459&amp;subd=superangevil&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>写在前面，为什么要重构？</p>
<p>前段时间接手同事的代码，当时时间比较急，对他的代码code review了一遍，知道哪些哪些都是干什么的，然后外面作些wrapper，里面的东东都没动，就开始继续开发了。这些天发现问题还是挺多的：(1)是<u>清晰性</u>的问题，两个人代码，糅在一起的时候，清晰性还是打了些折扣的，尤其是两人的编程风格不大一样，更导致的清晰性的进一步下降；(2)是<u>可扩展性</u>问题，由于有了新的feature和新的需求，比如需要多线程环境，这时有些代码就是不安全的，架构上要稍作变动；(3)是<u>性能与效率</u>问题，发现要更好的掌握原代码，才有可能提高性能。于是重构就势在必行了。</p>
<hr width="100%" />
<p>通过这次重构，验证了很多程序设计实践中的原则(我骨子里还是倾向于C的)，<font color="#000099"><b>模块性</b></font>是我体味最为深刻的 &#8212; 定义清晰的接口吧若干简单的模块组合起来：(1) <u>模块要简单</u>；(2) <u>接口要清晰</u>。下面详细记述一下：</p>
<p><big><b>1. 最佳模块大小</b></big></p>
<p>我们都知道<font color="#ff0000"><i><b>封装</b></i></font>是模块化代码的首要特质，API就是我们所提供的封装，那么如何验证API是否设计良好呢？</p>
<p><img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2009/12/api.jpg?w=600" /></p>
<p>画个图就简单多了，我们应该这样理解API: 它们是各模块间进行&#8221;<font color="#000099">通信</font>&#8220;的<b>接口协议</b>。于是下面的步骤就顺理成章了:<br />
<blockquote>STEP1 <u>抽象</u>: 定义接口<br />STEP2 <u>推演</u>: 描述接口<br />STEP3 <u>实现</u>: 实际编码</p></blockquote>
<p>谈完API，下面回到模块本身，刚才谈到模块要简单，那么如何度量模块是否“简单”？</p>
<p><a target="_blank" href="http://en.wikipedia.org/wiki/Les_Hatton">Les Hatton</a>在这方面做过比较细致的研究<br /><img style="max-width:800px;" src="http://superangevil.files.wordpress.com/2009/12/hatton.png?w=600" /></p>
<p>可以看出他给出的经验数据是: 模块不能大，也不能太小，<u>代码在<b><font color="#000099">200~400</font></b>行之间时比较好</u>。</p>
<p><big><b>2. 紧凑性与正交分解</b></big></p>
<p>现在我们有了模块最佳大小的尺度了，但有最佳尺寸并不意味着代码具有高质量，我们需要再进一步：紧凑性与正交性。</p>
<p><b>(1) 紧凑性</b></p>
<p>何谓“紧凑性”？形象来说，就是要“小”，小到一个人很容易地&#8221;keep in mind&#8221;。注意这里面“小”并不意味着“简单”，它可以设计得非常巧妙，让人回味无穷:)</p>
<p>那么我们如何做到“紧凑性”呢？一个心理学上的经验是：人类短期记忆能够容纳的不连续信息说是七，加二或减二。于是，就得出一个简单的评判 API紧凑性的经验法则：<br />
<blockquote>编程者需要记忆的条目数大于7吗？如果大于，那么这个API就不大可能是严格紧凑的。</p></blockquote>
<p>有一种提高紧凑性的一个精妙且强大的方法：<u>围绕“解决一个定义明确的问题”的强核心算法来组织设计</u> &#8212; 形式化核心任务，明确任务模型，然后围绕它进行设计。</p>
<p>紧凑性是一个非常好的特性，但是也不能过于追求它，正确的态度是合理地对待紧凑性，设计中要尽量考虑，不强求但决不抛弃。</p>
<p><b>(2) 正交性</b></p>
<p>我曾经有幸跟C++大牛<a target="_blank" href="http://twitter.com/xushiwei">xushiwei</a>共事过一段时间，当时他给我强调最多的一句话就是“<font color="#ff0000"><b>正交分解</b></font>”。正交性是使得复杂设计向紧凑性方向迈进的最有力助动。</p>
<p>纯粹的正交设计，任何一种操作都没有副作用，每个动作(API调用)只改变一件事而不影响其它，改变每个属性的方法有且仅有一个。<u>“只作一件事，并把它做好”</u>，这里面不仅仅将的是简洁，更有正交性的潜台词在里面；可以说，<font color="#000099"><i><b>重构的原则性目标就是“提高正交性”</b></i></font>！</p>
<p><b>(3) DRY/SPOT原则</b></p>
<p>DRY(Don&#8217;t Repeat Yourself)是一个广为认知的原则，它的涵义是：任何一个知识结构在系统内部都应该有一个<u>唯一</u>、<u>明确</u>、<u>权威</u>的表述。不要重复表述 &#8212; 因为重复可能导致前后矛盾，对一处的修改只是修改了一部分，重复的部分可能并没有修改 &#8212; 这就导致了前后的不一致。从重构的角度，在DRY原则的指导下，我们可以保持核心算法，更改代码组织进行重构过程。</p>
<p>DRY的另一种表述叫做SPOT(Single Point Of Truth, 真理的单点性)，它提倡<u>寻找一种数据结构，使得模型中的状态跟真实世界系统状态一一对应</u>。</p>
<p><big><b>3. 软件的层次</b></big></p>
<p><b>(1) 自顶向下和自底向上</b></p>
<p>自顶向下是从抽象到具体，自底向上是从具体到抽象。其实很多情况下，从哪端开始设计相当重要，因为对端层次很可能受到最初选择的限制。很情况下取折衷：一方面用自顶向下的应用逻辑表达抽象规范，另一方面用函数或库来收集底层的域原语。<br />P.S. 对我来说，Linux下C程序写得最多，我觉得底层特性的固定及设计极其重要，本人更倾向于自底向上的方式。</p>
<p><b>(2) 粘合层</b></p>
<p>粘合层的概念其实很普遍(一个比较好理解的例子就是Python很多时候都作为一种“黏合剂”，连接上层和底层C/C++的)，它就是协调上层抽象规范和底层域原语集的一个中间层。</p>
<p><u>“薄”的粘合层可以看作分离机制的一个升华</u>，使得策略(应用逻辑)和机制(域原语)更为清晰地分离。</p>
<p><b>(3) 库</b></p>
<p>i.&nbsp; 模块性设计和良好定义的API会引领我们到达一个非常好的结果：<u>把程序分解成有粘合层连接的库集合</u>。<br />ii. 插件(plugin)<br />&nbsp;&nbsp;&nbsp; 库分层的一个重要形式是<b>plugin</b>: 拥有一套已知入口，可以在启动以后动态从入口处加载执行特定任务的库(这种模式必须将调用程序作为文档详细的服务库组织起来，以便插件可以回调)。</p>
<hr width="100%" />
<p>总之，重构的过程是一个重复思考的过程，也是不断轮回前进的过程。</p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=2be4ef56-c77e-874f-a3bf-9231abf17db3" /></div>
<br />Posted in Programming, Self-Reflection Tagged: Programming, refactoring <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/superangevil.wordpress.com/459/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/superangevil.wordpress.com/459/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/superangevil.wordpress.com/459/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/superangevil.wordpress.com/459/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/superangevil.wordpress.com/459/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/superangevil.wordpress.com/459/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/superangevil.wordpress.com/459/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/superangevil.wordpress.com/459/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/superangevil.wordpress.com/459/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/superangevil.wordpress.com/459/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/superangevil.wordpress.com/459/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/superangevil.wordpress.com/459/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/superangevil.wordpress.com/459/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/superangevil.wordpress.com/459/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superangevil.wordpress.com&amp;blog=9860254&amp;post=459&amp;subd=superangevil&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://superangevil.wordpress.com/2009/12/14/about_refactoring/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/46e0e8d9b0086f2d19d6130cc1471bb3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">superangevil</media:title>
		</media:content>

		<media:content url="http://superangevil.files.wordpress.com/2009/12/api.jpg" medium="image" />

		<media:content url="http://superangevil.files.wordpress.com/2009/12/hatton.png" medium="image" />

		<media:content url="http://img.zemanta.com/pixy.gif?x-id=2be4ef56-c77e-874f-a3bf-9231abf17db3" medium="image" />
	</item>
		<item>
		<title>NLTK读书笔记 &#8212; 信息提取(六)</title>
		<link>http://superangevil.wordpress.com/2009/12/06/nltk7_6/</link>
		<comments>http://superangevil.wordpress.com/2009/12/06/nltk7_6/#comments</comments>
		<pubDate>Sat, 05 Dec 2009 17:52:17 +0000</pubDate>
		<dc:creator>superangevil</dc:creator>
				<category><![CDATA[NLP]]></category>
		<category><![CDATA[NLTK]]></category>

		<guid isPermaLink="false">http://superangevil.wordpress.com/2009/12/06/nltk7_6/</guid>
		<description><![CDATA[6. Relation Extraction Relation Extraction和NER都是在实际中非常有用的东东，而且二者有一个很自然的顺承关系: 我们一旦识别出text中的NE, 我们就试图发现它们之间的关系。 一种实现方法是初始时寻找(X, a, Y)形式的元组，X,Y是NE, a是它们之间的关系; 当然a可以通过正则表达式过滤: &#62;&#62;&#62; IN = re.compile(r&#8217;.*\bin\b(?!\b.+ing)&#8217;)&#62;&#62;&#62; for doc in nltk.corpus.ieer.parsed_docs(&#8216;NYT_19980315&#8242;):&#8230;&#160;&#160;&#160;&#160; for rel in nltk.sem.extract_rels(&#8216;ORG&#8217;, &#8216;LOC&#8217;, doc,&#8230;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; corpus=&#8217;ieer&#8217;, pattern = IN):&#8230;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; print nltk.sem.show_raw_rtuple(rel)[ORG: 'WHYY'] &#8216;in&#8217; [LOC: 'Philadelphia'][ORG: 'McGlashan &#38;AMP; Sarrail'] &#8216;firm in&#8217; [LOC: 'San Mateo'][ORG: 'Freedom Forum'] &#8216;in&#8217; [LOC: 'Arlington'][ORG: 'Brookings Institution'] &#8216;, the research group [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superangevil.wordpress.com&amp;blog=9860254&amp;post=433&amp;subd=superangevil&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><big><b>6. Relation Extraction</b></big></p>
<p><a target="_blank" href="http://en.wikipedia.org/wiki/Text_mining">Relation Extraction</a>和<a target="_blank" href="http://en.wikipedia.org/wiki/Named_entity_recognition">NER</a>都是在实际中非常有用的东东，而且二者有一个很自然的顺承关系: 我们一旦识别出text中的NE, 我们就试图发现它们之间的关系。</p>
<p>一种实现方法是初始时寻找(X, a, Y)形式的元组，X,Y是NE, a是它们之间的关系; 当然a可以<i><b>通过正则表达式过滤</b></i>:<br />
<blockquote>&gt;&gt;&gt; IN = re.compile(r&#8217;.*\bin\b(?!\b.+ing)&#8217;)<br />&gt;&gt;&gt; for doc in nltk.corpus.ieer.parsed_docs(&#8216;NYT_19980315&#8242;):<br />&#8230;&nbsp;&nbsp;&nbsp;&nbsp; for rel in nltk.sem.extract_rels(&#8216;ORG&#8217;, &#8216;LOC&#8217;, doc,<br />&#8230;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; corpus=&#8217;ieer&#8217;, pattern = IN):<br />&#8230;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print nltk.sem.show_raw_rtuple(rel)<br />[ORG: 'WHYY'] &#8216;in&#8217; [LOC: 'Philadelphia']<br />[ORG: 'McGlashan &amp;AMP; Sarrail'] &#8216;firm in&#8217; [LOC: 'San Mateo']<br />[ORG: 'Freedom Forum'] &#8216;in&#8217; [LOC: 'Arlington']<br />[ORG: 'Brookings Institution'] &#8216;, the research group in&#8217; [LOC: 'Washington']<br />[ORG: 'Idealab'] &#8216;, a self-described business incubator based in&#8217; [LOC: 'Los Angeles']<br />[ORG: 'Open Text'] &#8216;, based in&#8217; [LOC: 'Waterloo']<br />[ORG: 'WGBH'] &#8216;in&#8217; [LOC: 'Boston']<br />[ORG: 'Bastille Opera'] &#8216;in&#8217; [LOC: 'Paris']<br />[ORG: 'Omnicom'] &#8216;in&#8217; [LOC: 'New York']<br />[ORG: 'DDB Needham'] &#8216;in&#8217; [LOC: 'New York']<br />[ORG: 'Kaplan Thaler Group'] &#8216;in&#8217; [LOC: 'New York']<br />[ORG: 'BBDO South'] &#8216;in&#8217; [LOC: 'Atlanta']<br />[ORG: 'Georgia-Pacific'] &#8216;in&#8217; [LOC: 'Atlanta']</p></blockquote>
<p>conll2002 Dutch corpus不光包含了NE注释，还包含了POS tags &#8212; 这能帮我们设计出更合理的正则表达式<br />
<blockquote>&gt;&gt;&gt; from nltk.corpus import conll2002<br />&gt;&gt;&gt; vnv = &#8220;&#8221;"<br />&#8230; (<br />&#8230; is/V|&nbsp;&nbsp;&nbsp; # 3rd sing present and<br />&#8230; was/V|&nbsp;&nbsp; # past forms of the verb zijn (&#8216;be&#8217;)<br />&#8230; werd/V|&nbsp; # and also present<br />&#8230; wordt/V&nbsp; # past of worden (&#8216;become)<br />&#8230; )<br />&#8230; .*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # followed by anything<br />&#8230; van/Prep # followed by van (&#8216;of&#8217;)<br />&#8230; &#8220;&#8221;"<br />&gt;&gt;&gt; VAN = re.compile(vnv, re.VERBOSE)<br />&gt;&gt;&gt; for doc in conll2002.chunked_sents(&#8216;ned.train&#8217;):<br />&#8230;&nbsp;&nbsp;&nbsp;&nbsp; for r in nltk.sem.extract_rels(&#8216;PER&#8217;, &#8216;ORG&#8217;, doc,<br />&#8230;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; corpus=&#8217;conll2002&#8242;, pattern=VAN):<br />&#8230;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print&nbsp; nltk.sem.show_clause(r, relsym=&#8221;VAN&#8221;) <br />VAN(&#8220;cornet_d&#8217;elzius&#8221;, &#8216;buitenlandse_handel&#8217;)<br />VAN(&#8216;johan_rottiers&#8217;, &#8216;kardinaal_van_roey_instituut&#8217;)<br />VAN(&#8216;annie_lennox&#8217;, &#8216;eurythmics&#8217;)</p></blockquote>
<p>P.S. 用NLTK进行关系识别不是一般的慢，用来作作试验很好，用在工程上的话……得想别的替代办法了。</p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=68d2935c-ea6d-803c-ab80-31689e614831" /></div>
<br />Posted in NLP Tagged: NLP, NLTK <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/superangevil.wordpress.com/433/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/superangevil.wordpress.com/433/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/superangevil.wordpress.com/433/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/superangevil.wordpress.com/433/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/superangevil.wordpress.com/433/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/superangevil.wordpress.com/433/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/superangevil.wordpress.com/433/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/superangevil.wordpress.com/433/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/superangevil.wordpress.com/433/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/superangevil.wordpress.com/433/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/superangevil.wordpress.com/433/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/superangevil.wordpress.com/433/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/superangevil.wordpress.com/433/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/superangevil.wordpress.com/433/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superangevil.wordpress.com&amp;blog=9860254&amp;post=433&amp;subd=superangevil&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://superangevil.wordpress.com/2009/12/06/nltk7_6/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/46e0e8d9b0086f2d19d6130cc1471bb3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">superangevil</media:title>
		</media:content>

		<media:content url="http://img.zemanta.com/pixy.gif?x-id=68d2935c-ea6d-803c-ab80-31689e614831" medium="image" />
	</item>
		<item>
		<title>NLTK读书笔记 &#8212; 信息提取(五)</title>
		<link>http://superangevil.wordpress.com/2009/12/04/nltk7_5/</link>
		<comments>http://superangevil.wordpress.com/2009/12/04/nltk7_5/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 09:36:40 +0000</pubDate>
		<dc:creator>superangevil</dc:creator>
				<category><![CDATA[NLP]]></category>
		<category><![CDATA[NLTK]]></category>

		<guid isPermaLink="false">http://superangevil.wordpress.com/2009/12/04/nltk7_5/</guid>
		<description><![CDATA[5. Named Entity Recognition NE(Named Entity)如下定义：它是名词短语，指代某种特定类型的单体，如组织、人、日期等等，常用的NE如下 NE Type Examples ORGANIZATION Georgia-Pacific Corp., WHO PERSON Eddy Bonte, President Obama LOCATION Murray River, Mount Everest DATE June, 2008-06-29 TIME two fifty a m, 1:30 p.m. MONEY 175 million Canadian Dollars, GBP 10.40 PERCENT twenty pct, 18.75 % FACILITY Washington Monument, Stonehenge GPE South East Asia, Midlothian NER [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superangevil.wordpress.com&amp;blog=9860254&amp;post=428&amp;subd=superangevil&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><big><b>5. Named Entity Recognition</b></big></p>
<p>NE(Named Entity)如下定义：它是名词短语，指代某种特定类型的单体，如组织、人、日期等等，常用的NE如下</p>
<table class="docutils" id="tab-ne-types" border="1">
<thead valign="bottom">
<tr>
<th class="head">NE Type</th>
<th class="head">Examples</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td>ORGANIZATION</td>
<td><span class="example">Georgia-Pacific Corp.</span>, <span class="example">WHO</span></td>
</tr>
<tr>
<td>PERSON</td>
<td><span class="example">Eddy Bonte</span>, <span class="example">President Obama</span></td>
</tr>
<tr>
<td>LOCATION</td>
<td><span class="example">Murray River</span>, <span class="example">Mount Everest</span></td>
</tr>
<tr>
<td>DATE</td>
<td><span class="example">June</span>, <span class="example">2008-06-29</span></td>
</tr>
<tr>
<td>TIME</td>
<td><span class="example">two fifty a m</span>, <span class="example">1:30 p.m.</span></td>
</tr>
<tr>
<td>MONEY</td>
<td><span class="example">175 million Canadian Dollars</span>, <span class="example">GBP 10.40</span></td>
</tr>
<tr>
<td>PERCENT</td>
<td><span class="example">twenty pct</span>, <span class="example">18.75 %</span></td>
</tr>
<tr>
<td>FACILITY</td>
<td><span class="example">Washington Monument</span>, <span class="example">Stonehenge</span></td>
</tr>
<tr>
<td>GPE</td>
<td><span class="example">South East Asia</span>, <span class="example">Midlothian</span></td>
</tr>
</tbody>
</table>
<p><a target="_blank" href="http://en.wikipedia.org/wiki/Named_entity_recognition">NER</a> (named entity recognition) 系统的目标是在text中识别出NE. 它可以分为两步进行： (1) 首先识别出NE的边界，(2) 然后识别其类型。</p>
<p>那么我们一般怎么进行NE识别呢？一个选择是我们对每个词查词典，这个词典是包含所有的NE. 但这时候没有看上下文、没有看语境和语义，识别出来的东西必然包括很多不是NE的东西但我们认为它是NE. 实际上这种方式是不可行的。</p>
<p>NLTK提供了一个<font color="#000099"><b>训练好</b></font>的classifier去进行NER &#8212; <i><b>nltk.ne_chunk()</b></i>. 如果我们把参数binary=True, 就简单把识别出来的entity标为NE, 否则设置category labels为PERSON, ORGANIZATION, GPE等<br />
<blockquote>&gt;&gt;&gt; sent = nltk.corpus.treebank.tagged_sents()[22]<br /> /&gt;&gt;&gt; print nltk.ne_chunk(sent, binary=True) <br />(S<br />&nbsp; The/DT<br />&nbsp; (NE U.S./NNP)<br />&nbsp; is/VBZ<br />&nbsp; one/CD<br />&nbsp; &#8230;<br />&nbsp; according/VBG<br />&nbsp; to/TO<br />&nbsp; (NE Brooke/NNP T./NNP Mossman/NNP)<br />&nbsp; &#8230;)</p>
<p> /&gt;&gt;&gt; print nltk.ne_chunk(sent) <br />(S<br />&nbsp; The/DT<br />&nbsp; (GPE U.S./NNP)<br />&nbsp; is/VBZ<br />&nbsp; one/CD<br />&nbsp; &#8230;<br />&nbsp; according/VBG<br />&nbsp; to/TO<br />&nbsp; (PERSON Brooke/NNP T./NNP Mossman/NNP)<br />&nbsp; &#8230;)</p></blockquote>
<p>P.S. 就我的使用经验来看，NLTK的NER还是准确度不高，对于比较专用的领域还是自己搞个训练集自己训练比较好。</p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=997a4f56-b631-87eb-858a-6edb6974f69c" /></div>
<br />Posted in NLP Tagged: NLP, NLTK <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/superangevil.wordpress.com/428/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/superangevil.wordpress.com/428/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/superangevil.wordpress.com/428/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/superangevil.wordpress.com/428/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/superangevil.wordpress.com/428/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/superangevil.wordpress.com/428/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/superangevil.wordpress.com/428/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/superangevil.wordpress.com/428/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/superangevil.wordpress.com/428/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/superangevil.wordpress.com/428/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/superangevil.wordpress.com/428/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/superangevil.wordpress.com/428/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/superangevil.wordpress.com/428/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/superangevil.wordpress.com/428/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=superangevil.wordpress.com&amp;blog=9860254&amp;post=428&amp;subd=superangevil&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://superangevil.wordpress.com/2009/12/04/nltk7_5/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/46e0e8d9b0086f2d19d6130cc1471bb3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">superangevil</media:title>
		</media:content>

		<media:content url="http://img.zemanta.com/pixy.gif?x-id=997a4f56-b631-87eb-858a-6edb6974f69c" medium="image" />
	</item>
	</channel>
</rss>
