基于CBOW模型的文章错别字识别实践

  1. 基于条件概率的语言模型
  2. Continuous Bag-of-Words model(CBOW)
  3. 基于PaddlePaddle的学习过程
    1. 数据准备
    2. 切词处理
    3. 训练过程
    4. 模型配置
    5. Cost
    6. 创建参数与Trainer
    7. 开始训练
  4. 参考

You Shall Know a Word By the Company It Keeps.
一个词的具体含义与上下文、语料库有关系。

基于条件概率的语言模型

对于一句话的目标概率$P(w_1, …, w_T)$,如果假设文本中每个词都是相互独立的,则整句话的联合概率可以表示为其中所有词语条件概率的乘积,即:
$$\\ P(w_1, …, w_T) = \prod_{t=1}^TP(w_t)$$
然而我们知道语句中的每个词出现的概率都与其前面的词紧密相关, 所以实际上通常用条件概率表示语言模型:
$$\\ P(w_1, …, w_T) = \prod_{t=1}^TP(w_t | w_1, … , w_{t-1})$$

Continuous Bag-of-Words model(CBOW)

CBOW模型通过一个词的上下文(各N个词)预测当前词。当N=2时,模型如下图所示:

$$图3,CBOW模型$$

具体来说,不考虑上下文的词语输入顺序,CBOW是用上下文词语的词向量的均值来预测当前词。即:
$$\\ context = \frac{x_{t-1} + x_{t-2} + x_{t+1} + x_{t+2}}{4}$$

其中$x_t$为第t个词的词向量,分类分数(score)向量 $z=U*context$,最终的分类y采用softmax,损失函数采用多类分类交叉熵。

基于PaddlePaddle的学习过程

数据准备

以下语料来自新华社官方稿件,均为包含“废黜”或者“废除”的文章。选用5-GRAM神经网络的方法,将一下素材做切割处理:

切词处理

处理过程:

接口的处理过称是通过词法分析接口完成的,最多接受32768个汉字,但需要注意文章中的特殊符号。
以第一篇文稿为例展示切词前后的对比:
处理前

新闻人物:伊朗前总统拉夫桑贾尼 2017年01月09日 21:48:33 来源: 新华社 新华社德黑兰1月9日电 题:伊朗前总统拉夫桑贾尼 新华社记者穆东 当地时间1月8日下午,伊朗前总统阿克巴尔·哈什米·拉夫桑贾尼因病在德黑兰去世,享年82岁。拉夫桑贾尼是伊朗政坛最有影响力的人物之一。他1934年8月出生于伊朗克尔曼省一个干果种植农场主家庭,早年追随伊朗伊斯兰革命领导者、最高领袖霍梅尼。1980年,拉夫桑贾尼担任伊朗伊斯兰革命胜利后首位议会议长,并连任至1989年。1989至1997年,拉夫桑贾尼连续两届担任伊朗总统。卸任后,拉夫桑贾尼一直担任伊朗确定国家利益委员会主席。作为议会与宪法监护委员会之间的协调机构,确定国家利益委员会是直接由伊朗最高领袖委任的行政机构,负责解决议会及宪法监督委员会之间出现的立法冲突。2007年至2011年,拉夫桑贾尼任伊朗专家会议主席。专家会议是选举伊朗最高领袖的最高权力机构,主要职责是讨论国家大事、监督领袖行为。根据伊朗宪法,专家会议可在领袖不称职或失去作为领袖的必要条件时废黜领袖。拉夫桑贾尼被认为是伊朗政坛的“温和派”或“务实保守派”,他支持国内自由市场地位,赞成国有产业私有化,又在国际上保持温和形象。拉夫桑贾尼重视发展对华友好关系,曾于1985年和1992年两度来华访问。

处理后:

1月9日 电   题 伊朗 前 总统拉夫桑 贾尼 新华社 记者穆 东 当地时间 1月8日 下午 伊朗 前 总统 阿克巴尔·哈什米·拉夫桑贾尼 因 病 在 德黑兰 去世 享年 82岁
拉夫桑贾尼 是 伊朗 政坛 最 有 影响力 的 人物 之 一
他 1934年 8月 出生 于 伊朗 克尔曼省 一个 干果 种植 农场主 家庭 早年 追随 伊朗 伊斯兰 革命 领导者 最高 领袖 霍梅尼
1980年 拉夫桑贾尼 担任 伊朗 伊斯兰革命 胜利 后 首位 议会 议长 并 连任 至 1989年
1989 至 1997年 拉夫桑贾尼 连续 两届 担任 伊朗 总统
卸任 后 拉夫桑贾尼 一直 担任 伊朗 确定 国家 利益 委员会 主席
作为 议会 与 宪法 监护 委员会 之间 的 协调 机构 确定 国家利益委员会 是 直接 由 伊朗 最高 领袖 委任 的 行政机构 负责 解决 议会 及 宪法 监督 委员会 之间 出现 的 立法 冲突
2007年 至 2011年 拉夫桑贾尼 任 伊朗 专家 会议 主席
专家 会议 是 选举 伊朗 最高 领袖 的 最高 权力 机构 主要 职责 是 讨论 国家大事 监督 领袖 行为
根据 伊朗 宪法 专家 会议 可 在 领袖 不 称职 或 失去 作为 领袖 的 必要条件 时 废黜 领袖
拉夫桑贾尼 被 认为 是 伊朗 政坛 的 温和派 或 务实 保守派 他 支持 国内 自由市场 地位 赞成 国有 产业 私有化 又 在 国际 上 保持 温和 形象
拉夫桑贾尼 重视 发展 对 华 友好关系 曾 于 1985年 和 1992年 两度 来华 访问

训练过程

reader_creator
将词从文件中读取出来,转换成词ID,特殊的词ID:

words = []
word_limit = word_dict_limit + 2
for i in xrange(window_size):
words.append(paddle.layer.data(name='word_%d' % i, type=paddle.data_type.integer_value(word_limit)))

数据举例:上文中第一句话将被处理为如下结构传递给PaddlePaddle作为训练数据:

<s>新闻 人物 伊朗 前 总统
人物 伊朗 前 总统 拉夫桑贾尼
伊朗 前 总统 拉夫桑贾尼 2017年01月09日
前 总统 拉夫桑贾尼 2017年01月09日 21:48:33
总统 拉夫桑贾尼 2017年01月09日 21:48:33 来源
拉夫桑贾尼 2017年01月09日 21:48:33 来源 新华社
2017年01月09日 21:48:33 来源 新华社 新华社
21:48:33 来源 新华社 新华社 德黑兰<e>

模型配置

词ID转化为词向量,因为词向量的训练打开稀疏训练,加快训练效率

embs = []
for w in words[:window_size / 2] + words[-window_size / 2 + 1:]:
embs.append(
paddle.layer.embedding(input=w, size=emb_size, param_attr=
paddle.attr.Param(name='emb', sparse_update=True)))

Cost

Cost为预测值与中检测的分类误差,网络拓扑结构由每一层的变量表示,以此完成神经网络的配置。

创建参数与Trainer

Paddle的参数与拓扑结构是分离的,可以根据一个拓扑结构创建起所有参数,再使用Trainer优化对应的参数和拓扑结构。
创建参数parameters

创建trainer

开始训练

trainer.train(
paddle.batch(
paddle.reader.buffered(
reader_creator(window_size=window_size,word_limit=word_dict_limit,path="./newsdata/processed"), 16 * cpu_num * 4000),batch_size_per_cpu*cpu_num),
num_passes=num_passes,
event_handler=event_handler,
feeding=[w.name for w in words])

参考

script>