语言模型的基本概念

本文介绍一下有关语言模型的基本概念,但是在介绍语言模型之前,先简单回顾一下自然语言处理这个大问题吧。现在自然语言处理的研究绝对是一个非常火热的方向,主要是被当前的互联网发展所带动起来的。在互联网上充斥着大量的信息,主要是文字方面的信息,对这些信息的处理离不开自然语言处理的技术。那么究竟什么是自然语言以及自然语言处理呢?

自然语言处理的基本任务
自然语言(Natural Language)其实就是人类语言,自然语言处理(NLP)就是对人类语言的处理,当然主要是利用计算机。自然语言处理是关于计算机科学和语言学的交叉学科,常见的研究任务包括:

· 分词(Word Segmentation或Word Breaker,WB)

· 信息抽取(Information Extraction,IE):命名实体识别和关系抽取(Named Entity Recognition & Relation Extraction,NER)

· 词性标注(Part Of Speech Tagging,POS)

· 指代消解(Coreference Resolution)

· 句法分析(Parsing)

· 词义消歧(Word Sense Disambiguation,WSD)

· 语音识别(Speech Recognition)

· 语音合成(Text To Speech,TTS)

· 机器翻译(Machine Translation,MT)

· 自动文摘(Automatic Summarization)

· 问答系统(Question Answering)

· 自然语言理解(Natural Language Understanding)

· OCR

· 信息检索(Information Retrieval,IR)

早期的自然语言处理系统主要是基于人工撰写的规则,这种方法费时费力,且不能覆盖各种语言现象。上个世纪80年代后期,机器学习算法被引入到自然语言处理中,这要归功于不断提高的计算能力。研究主要集中在统计模型上,这种方法采用大规模的训练语料(corpus)对模型的参数进行自动的学习,和之前的基于规则的方法相比,这种方法更具鲁棒性。

统计语言模型
统计语言模型(Statistical Language Model)就是在这样的环境和背景下被提出来的。它广泛应用于各种自然语言处理问题,如语音识别、机器翻译、分词、词性标注,等等。简单地说,语言模型就是用来计算一个句子的概率的模型,即

利用语言模型,可以确定哪个词序列的可能性更大,或者给定若干个词,可以预测下一个最可能出现的词语。举个音字转换的例子来说,输入拼音串为nixianzaiganshenme,对应的输出可以有多种形式,如你现在干什么、你西安再赶什么、等等,那么到底哪个才是正确的转换结果呢,利用语言模型,我们知道前者的概率大于后者,因此转换成前者在多数情况下比较合理。再举一个机器翻译的例子,给定一个汉语句子为李明正在家里看电视,可以翻译为Li Ming is watching TV at home、Li Ming at home is watching TV、等等,同样根据语言模型,我们知道前者的概率大于后者,所以翻译成前者比较合理。

那么如何计算一个句子的概率呢?给定句子(词语序列)

它的概率可以表示为:

(1)

由于上式中的参数过多,因此需要近似的计算方法。常见的方法有n-gram模型方法、决策树方法、最大熵模型方法、最大熵马尔科夫模型方法、条件随机域方法、神经网络方法,等等。

n-gram语言模型
n-gram模型的概念
n-gram模型也称为n-1阶马尔科夫模型,它有一个有限历史假设:当前词的出现概率仅仅与前面n-1个词相关。因此(1)式可以近似为:

(2)

当n取1、2、3时,n-gram模型分别称为unigram、bigram和trigram语言模型。n-gram模型的参数就是条件概率

假设词表的大小为100,000,那么n-gram模型的参数数量为

n越大,模型越准确,也越复杂,需要的计算量越大。最常用的是bigram,其次是unigram和trigram,n取≥4的情况较少。

n-gram模型的参数估计
模型的参数估计也称为模型的训练,一般采用最大似然估计(Maximum Likelihood Estimation,MLE)的方法对模型的参数进行估计:

(3)

C(X)表示X在训练语料中出现的次数,训练语料的规模越大,参数估计的结果越可靠。但即使训练数据的规模很大,如若干GB,还是会有很多语言现象在训练语料中没有出现过,这就会导致很多参数(某n元对的概率)为0。举个例子来说明一下,IBM Brown利用366M英语语料训练trigram,结果在测试语料中,有14.7%的trigram和2.2%的bigram在训练中没有出现;根据博士期间所在的实验室统计结果,利用500万字人民日报训练bigram模型,用150万字人民日报作为测试语料,结果有23.12%的bigram没有出现。

这种问题也被称为数据稀疏(Data Sparseness),解决数据稀疏问题可以通过数据平滑(Data Smoothing)技术来解决。

n-gram模型的数据平滑
数据平滑是对频率为0的n元对进行估计,典型的平滑算法有加法平滑、Good-Turing平滑、Katz平滑、插值平滑,等等。

· 加法平滑
基本思想是为避免零概率问题,将每个n元对得出现次数加上一个常数δ(0<δ≤1):

(4)

· Good-Turing平滑
利用频率的类别信息来对频率进行平滑:

(5)

其中,N(c)表示频率为c的n-gram的数量。

· 线性插值平滑
该数据平滑技术主要利用低元n-gram模型对高元n-gram模型进行线性插值。因为在没有足够的数据对高元n-gram模型进行概率估计时,低元n-gram模型通常可以提供有用的信息。

(6)

可以通过EM算法来估计。

· Katz平滑
也称为回退(back-off)平滑,其基本思想是当一个n元对的出现次数足够大时,用最大似然估计方法估计其概率;当n元对的出现次数不够大时,采用Good-Turing估计对其平滑,将其部分概率折扣给未出现的n元对;当n元对的出现次数为0时,模型回退到低元模型。

(6)

参数和保证模型参数概率的归一化约束条件,即。

n-gram模型的解码算法
为什么n-gram模型需要解码算法呢?举个例子来说,对于音字转换问题,输入拼音nixianzaiganshenme,可能对应着很多转换结果,对于这个例子,可能的转换结果如下图所示(只画出部分的词语节点),各节点之间构成了复杂的网络结构,从开始到结束的任意一条路径都是可能的转换结果,从诸多转换结果中选择最合适的结果的过程就需要解码算法。

常用的解码算法是viterbi算法,它采用动态规划的原理能够很快地确定最合适的路径。这里就不详细介绍该算法了。

n-gram模型的应用
n-gram语言模型的应用非常广泛,最早期的应用是语音识别、机器翻译等问题。哈尔滨工业大学王晓龙教授最早将其应用到音字转换问题,提出了“语句级拼音输入法”,后来该技术转让给微软,也就是后来的微软拼音输入法。从windows95开始,系统就会自动安装该输入法,并在以后更高版本的windows中和Office办公软件都会集成最新的微软拼音输入法。n年之后,各个输入法的新秀(如搜狗和谷歌)也都采用了n-gram技术。

参考文献:
[1] 微软拼音输入法

[2] 自然语言处理

[3] 语言模型

[4] 统计语言模型简介

[5] 语言模型讲义

转载:http://blog.csdn.net/mspinyin/article/details/6137815

Eclipse快捷键大全(转载)

Ctrl+1 快速修复(最经典的快捷键,就不用多说了)
Ctrl+D: 删除当前行
Ctrl+Alt+↓ 复制当前行到下一行(复制增加)
Ctrl+Alt+↑ 复制当前行到上一行(复制增加)
Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)
Alt+↑ 当前行和上面一行交互位置(同上)
Alt+← 前一个编辑的页面
Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)
Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性
Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)
Shift+Ctrl+Enter 在当前行插入空行(原理同上条)
Ctrl+Q 定位到最后编辑的地方
Ctrl+L 定位在某行 (对于程序超过100的人就有福音了)
Ctrl+M 最大化当前的Edit或View (再按则反之)
Ctrl+/ 注释当前行,再按则取消注释
Ctrl+O 快速显示 OutLine
Ctrl+T 快速显示当前类的继承结构
Ctrl+W 关闭当前Editer
Ctrl+K 参照选中的Word快速定位到下一个
Ctrl+E 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)
Ctrl+/(小键盘) 折叠当前类中的所有代码
Ctrl+×(小键盘) 展开当前类中的所有代码
Ctrl+Space 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt+/来代替)
Ctrl+Shift+E 显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作)
Ctrl+J 正向增量查找(按下Ctrl+J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes line中显示没有找到了,查一个单词时,特别实用,这个功能Idea两年前就有了)
Ctrl+Shift+J 反向增量查找(和上条相同,只不过是从后往前查)
Ctrl+Shift+F4 关闭所有打开的Editer
Ctrl+Shift+X 把当前选中的文本全部变味小写
Ctrl+Shift+Y 把当前选中的文本全部变为小写
Ctrl+Shift+F 格式化当前代码
Ctrl+Shift+P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)

下面的快捷键是重构里面常用的,本人就自己喜欢且常用的整理一下(注:一般重构的快捷键都是Alt+Shift开头的了)
Alt+Shift+R 重命名 (是我自己最爱用的一个了,尤其是变量和类的Rename,比手工方法能节省很多劳动力)
Alt+Shift+M 抽取方法 (这是重构里面最常用的方法之一了,尤其是对一大堆泥团代码有用)
Alt+Shift+C 修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定)
Alt+Shift+L 抽取本地变量( 可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候)
Alt+Shift+F 把Class中的local变量变为field变量 (比较实用的功能)
Alt+Shift+I 合并变量(可能这样说有点不妥Inline)
Alt+Shift+V 移动函数和变量(不怎么常用)
Alt+Shift+Z 重构的后悔药(Undo)

编辑
作用域 功能 快捷键
全局 查找并替换 Ctrl+F
文本编辑器 查找上一个 Ctrl+Shift+K
文本编辑器 查找下一个 Ctrl+K
全局 撤销 Ctrl+Z
全局 复制 Ctrl+C
全局 恢复上一个选择 Alt+Shift+↓
全局 剪切 Ctrl+X
全局 快速修正 Ctrl1+1
全局 内容辅助 Alt+/
全局 全部选中 Ctrl+A
全局 删除 Delete
全局 上下文信息 Alt+?
Alt+Shift+?
Ctrl+Shift+Space
Java编辑器 显示工具提示描述 F2
Java编辑器 选择封装元素 Alt+Shift+↑
Java编辑器 选择上一个元素 Alt+Shift+←
Java编辑器 选择下一个元素 Alt+Shift+→
文本编辑器 增量查找 Ctrl+J
文本编辑器 增量逆向查找 Ctrl+Shift+J
全局 粘贴 Ctrl+V
全局 重做 Ctrl+Y

查看
作用域 功能 快捷键
全局 放大 Ctrl+=
全局 缩小 Ctrl+-

窗口
作用域 功能 快捷键
全局 激活编辑器 F12
全局 切换编辑器 Ctrl+Shift+W
全局 上一个编辑器 Ctrl+Shift+F6
全局 上一个视图 Ctrl+Shift+F7
全局 上一个透视图 Ctrl+Shift+F8
全局 下一个编辑器 Ctrl+F6
全局 下一个视图 Ctrl+F7
全局 下一个透视图 Ctrl+F8
文本编辑器 显示标尺上下文菜单 Ctrl+W
全局 显示视图菜单 Ctrl+F10
全局 显示系统菜单 Alt+-

导航
作用域 功能 快捷键
Java编辑器 打开结构 Ctrl+F3
全局 打开类型 Ctrl+Shift+T
全局 打开类型层次结构 F4
全局 打开声明 F3
全局 打开外部javadoc Shift+F2
全局 打开资源 Ctrl+Shift+R
全局 后退历史记录 Alt+←
全局 前进历史记录 Alt+→
全局 上一个 Ctrl+,
全局 下一个 Ctrl+.
Java编辑器 显示大纲 Ctrl+O
全局 在层次结构中打开类型 Ctrl+Shift+H
全局 转至匹配的括号 Ctrl+Shift+P
全局 转至上一个编辑位置 Ctrl+Q
Java编辑器 转至上一个成员 Ctrl+Shift+↑
Java编辑器 转至下一个成员 Ctrl+Shift+↓
文本编辑器 转至行 Ctrl+L

搜索
作用域 功能 快捷键
全局 出现在文件中 Ctrl+Shift+U
全局 打开搜索对话框 Ctrl+H
全局 工作区中的声明 Ctrl+G
全局 工作区中的引用 Ctrl+Shift+G

文本编辑
作用域 功能 快捷键
文本编辑器 改写切换 Insert
文本编辑器 上滚行 Ctrl+↑
文本编辑器 下滚行 Ctrl+↓

文件
作用域 功能 快捷键
全局 保存 Ctrl+X
Ctrl+S
全局 打印 Ctrl+P
全局 关闭 Ctrl+F4
全局 全部保存 Ctrl+Shift+S
全局 全部关闭 Ctrl+Shift+F4
全局 属性 Alt+Enter
全局 新建 Ctrl+N

项目
作用域 功能 快捷键
全局 全部构建 Ctrl+B

源代码
作用域 功能 快捷键
Java编辑器 格式化 Ctrl+Shift+F
Java编辑器 取消注释 Ctrl+\
Java编辑器 注释 Ctrl+/
Java编辑器 添加导入 Ctrl+Shift+M
Java编辑器 组织导入 Ctrl+Shift+O
Java编辑器 使用try/catch块来包围 未设置,太常用了,所以在这里列出,建议自己设置。
也可以使用Ctrl+1自动修正。

运行
作用域 功能 快捷键
全局 单步返回 F7
全局 单步跳过 F6
全局 单步跳入 F5
全局 单步跳入选择 Ctrl+F5
全局 调试上次启动 F11
全局 继续 F8
全局 使用过滤器单步执行 Shift+F5
全局 添加/去除断点 Ctrl+Shift+B
全局 显示 Ctrl+D
全局 运行上次启动 Ctrl+F11
全局 运行至行 Ctrl+R
全局 执行 Ctrl+U

重构
作用域 功能 快捷键
全局 撤销重构 Alt+Shift+Z
全局 抽取方法 Alt+Shift+M
全局 抽取局部变量 Alt+Shift+L
全局 内联 Alt+Shift+I
全局 移动 Alt+Shift+V
全局 重命名 Alt+Shift+R
全局 重做 Alt+Shift+Y

恢复Firefox的智能书签文件夹

如果你不小心删除了智能文件夹的一个或几个文件夹,如:

  • 访问最多
  • 最近使用的书签
  • 最近使用的标签

心里是否有些不爽?毕竟这些对于用户来说多少还有些作用。没关系,你可以通过以下步骤来恢复:

  1. 在地址栏,键入about:config并按回车;注:浏览器或许会提示你“这样可能会失去质保…”之类的话,没关系,直接按“我保证会小心”
  2. 在过滤器中搜索选项“browser.places.smartBookmarksVersion”;
  3. 双击“browser.places.smartBookmarksVersion”,并把值修改为0;
  4. 关闭Firefox,并重新启动。

这样一来,你就会发现默认的智能书签文件夹又被找回来了。(窃笑~~)

参考文献

一、参考文献是对期刊论文引文进行统计和分析的重要信息源之一 ,在本规范中采用 GB 7714推荐的顺序编码制编排。

二、参考文献著录项目

a. 主要责任者 (专著作者、论文集主编、学位申报人、专利申请人、报告撰写人、期刊文 章作者、析出文章作者)。多个责任者之间以“,”分隔,注意在本项数据中不得出现缩写点“.”。主要责任者只列姓名,其后不加“著”、“编”、“主编”、“合编”等责任说明。 b. 文献题名及版本(初版省略)。

c. 文献类型及载体类型标识。

d. 出版项(出版地、出版者、出版年)。

e. 文献出处或电子文献的可获得地址。

f. 文献起止页码。

g. 文献标准编号(标准号、专利号……)。 Continue reading

创建SourceInsight工程时指定文件类型

使用过SourceInsight的读者应该都遇到这种情况,创建工程后,加入文件夹,会加入很多其他不需要分析的文件。

解决方法如下:

Option->Document Options,然后依次打开Document Type中的下拉菜单选项,检查Include when adding to projects,注意,只在你需要分析的文件类型中,勾选此项,其他全部去掉。

这样新建工程后,应该就没有问题了。

Linux下安装BT客户端Transmission支持ipv6

 

最近笔者在linux下用bt下载ipv6的资源,初始用的linux自带Transmission 2.11版本。但是用它下载 ipv4bt资源是没有任何问题,但是用来下载ipv6还是有问题的。因此可以断定这是软件的问题。

GOOGLE搜索transmission去官方网站,下载最新版本2.22源码包。解压之,进入所在文件夹。在编译之前,你还得确认你的主机拥有以下组件:

  • gcc
  • libtool
  • gettext 0.14.1 or newer
  • intltool 0.40 or newer
  • automake 1.9 or newer
  • autoconf 2.54 or newer
  • OpenSSL 0.9.8 or newer, preferably ssl or gnutls support.
  • libcurl 7.16.3 or newer
  • GTK+ 2.6 or newer (only needed by the GTK+ gui)
  • libnotify 0.4.4 (optional, and only needed by the GTK+ gui)
  • DBUS 0.70 (optional, and only needed by the GTK+ gui)

先不用管,直接编译,操作如下: Continue reading

AI顶级会议列表 & ACL相关

The First Class:

tier-1的conferences, 其实基本上就是AI里面大家比较公认的top conference. 下面同分的按字母序排列.

IJCAI (1+): AI最好的综合性会议, 1969年开始, 每两年开一次, 奇数年开. 因为AI实在太大, 所以虽然每届基本上能录100多篇(现在已经到200多篇了),但分到每个领域就没几篇了,象machine learning、computer vision这么大的领域每次大概也就10篇左右, 所以难度很大. 不过从录用率上来看倒不太低,基本上20%左右, 因为内行人都会掂掂分量, 没希望的就别浪费reviewer的时间了. 最近中国大陆投往国际会议的文章象潮水一样, 而且因为国内很少有能自己把关的研究组, 所以很多会议都在complain说中国的低质量文章严重妨碍了PC的工作效率. 在这种情况下, 估计这几年国际会议的录用率都会降下去. 另外, 以前的IJCAI是没有poster的, 03年开始, 为了减少被误杀的好人, 增加了2页纸的poster.值得一提的是, IJCAI是由貌似一个公司的”IJCAI Inc.”主办的(当然实际上并不是公司, 实际上是个基金会), 每次会议上要发几个奖, 其中最重要的两个是IJCAI Research Excellence Award 和 Computer & Thoughts Award, 前者是终身成就奖, 每次一个人, 基本上是AI的最高奖(有趣的是, 以AI为主业拿图灵奖的6位中, 有2位还没得到这个奖), 后者是奖给35岁以下的青年科学家,每次一个人. 这两个奖的获奖演说是每次IJCAI的一个重头戏.另外, IJCAI 的 PC member 相当于其他会议的area chair, 权力很大, 因为是由PC member去找 reviewer 来审, 而不象一般会议的PC member其实就是 reviewer. 为了制约这种权力, IJCAI的审稿程序是每篇文章分配2位PC member, primary PC member去找3位reviewer, second PC member 找一位. Continue reading

VMWare Tools 和 Shared folder(共享文件夹)

使用vmwar下shared folders功能实现vmware中host与ghost间文件传输,无需任何网络相关设置,不使用任何网络协议,host和ghost可以是 linux和windows操作系统,这里只介绍host是windows,ghost是linux下的设置,如果ghost是windows,请参考 vmware帮助中setting up shared folders。

1.安装vmtools for linux:
选择vmware workstation程序菜单中VM >install VMware tools…
启动guest 电脑中的linux,执行:
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom (vmtools的安装文件放在vmware虚拟的cdrom中,首先要mount上这个光驱才能找到安装文件)
cd /mnt/cdrom
tar -zxvf VMwareTools-5.0.0-12124.i386.tar.gz -C /tmp (把安装文件解压到/tmp)
cd /tmp/vmware-tools-distrib
./vmware-install.pl
(执行vwware的安装脚本,这个脚本是用perl编写的)
在这里,安装程序会询问安装文件存放位置和设置分辨率等一系列问题,在大多数情况下,安装默认配置vmware tools就可以正常工作,因此,这里对每一个问题按回车键选择默认配置。
安装完以后,vmware会添加一个vmhgfs的模块到内核中,可以使用lsmod查看

2.设置host computer共享的目录:
在ghost computer中切换到windows桌面,选择vmware workstation程序菜单中 VM>Settings>Options>Shared Folders >Properties
点击对话框右下的“add”按钮,点击“下一步”
在文本框“name”中输入共享目录的名字(这里填写的目录名以后在ghost computer的linux系统中将显示出同样的目录名),假设为fc4_iso;在“host folder”中填入host computer中windows系统想要共享出来的目录,假设为F:\linux-cd\RedHat\Fedora_Core_4\stentz- dvd-i386,然后点击完成
下一个对话框是选择共享的方式:Enable this share是指这个共享长期有效,目录可读写;Read-only方式是指这个共享长期有效,目录只读;Disable after this session方式是指下次ghost computer被关闭或挂起后,共享将会失效。一般情况下选择Enable this share然后点击“完成”
自此,shared folder设置完毕

3.shared folder目录的使用
切换到ghost computer的linux系统,执行:
cd /mnt/hgfs
ls
可以看到fc3_iso的目录,并且可以用cp等指令实现windows到linux,linux到windows的读写操作了

4.注意事项
在vmware软件里添加一个shared folder或对shared folder的参数进行版本是立刻生效的,也就是说立刻可以在ghost computer的linux系统中看到新加的共享目录和体验到参数的改变

结语:以前大多是使用ftp,samba甚至是nfs(在windows上装microsoft service for unix就可以实现nfs)来实现的,采用vmware自带的shared folder方式比使用网络协议实现文件传输要方便得多,并且对于新手来说,用cp命令拷贝文件比用ftp和smbmount命令要简单得多。

vim中的map映射

有五种映射存在:
- 用于普通模式: 输入命令时。
- 用于可视模式: 可视区域高亮并输入命令时。
- 用于操作符等待模式: 操作符等待中 (“d”,”y”,”c” 等等之后)。
见下: |omap-info|。
- 用于插入模式: 也用于替换模式。
• 用于命令行模式: 输入 “:” 或 “/” 命令时。

下表是map绑定中,对应的模式代号。现在先了解一下,等看完之后再回过头看这个模式代号就会明白了。
字 符 模 式 ~
<Space> 普通、可视、选择和操作符等待
n 普通
v 可视和选择
s 选择
x 可视
o 操作符等待
! 插入和命令行
i 插入
l 插入、命令行和 Lang-Arg 模式的 “:lmap” 映射
c 命令行 Continue reading

WordPress 3.1 禁止自动草稿(auto-draft)的方法

WordPress3.1版本发布有一段时间了。该版本不仅仅有自动保存历史版本的功能(通常都用不着,还会造成一些垃圾数据),还增加了一个自动保存草稿的功能。你每次点击”add new”时都会在post表中保存一条状态为“auto-draft”的后台不可见记录,同样会造成一些垃圾数据以及ID的不连续性。

为保证尽量减少数据库中的垃圾和保持日志ID的连续性,人们想了很多办法,各显神通。但大部分都是采用插件形式。插件形式仅仅能禁止日志的历史版本,却对自动插入的状态为”auto-draft”的记录无能为力。而且这种记录并不能在wordpress的后台看到。对于追求完美和有洁癖的人来说,这些记录实在是很烦人。 Continue reading