前言

我们小队能获得JDDC2019的并列亚军(3th),既有运气的成分,也离不开我们做的很多工作。

但本文只具体谈谈我参与JDDC2019的感想与收获,大概就是一篇写给自己的流水账吧。至于检索模型的细节可以参见我的github jddc2019-3th-retrieve-model以及我在12月中旬将完成的一篇关于多轮对话的综述。

正文

其实在参加这个比赛之前,我对NLP都只是一知半解,因为NLP的基本模型太多了,看书看得不明白,也没有对模型有个总体的认识。

在完成JDDC这个比赛的过程中,我确实获益良多。主要可以分为三个方面:

数据预处理(数据探索性分析)

在数据探索性分析的过程中,我发现世界之大无奇不有,有很多有趣的事情都蕴含在语料之中。

列举几个影响比较深刻的例子:最长的会话长度(即多次QA的句数之和)有300句,可以说是客服和用户“大战”300回合;最长的用户提问有超过两万个字,是由一个短句复制了无数遍产生,可想而知用户当时的心情有多么的崩溃;有的用户前言不搭后语,还存在大量错别字,可以看出用户是刚刚接触网购,对拼音和手机沟通比较生疏。

而这次的数据预处理工作比较让人头疼。之前没有接触过这种基本没有经过处理、在实际对话中产生… Read the rest

前言

本来想写一个关于感知机的总结,但如果要深入探讨,涉及的东西实在太多。仅仅浅尝辄止的话,那我就相当于照搬原文,违背了我写文章的初衷。

所以就单纯地把我自己写的感知机实现代码发上来,辅助大家学习。
我还提供了一个数据生成器,可以生成训练模型所需要的数据。

简单地对结果做了可视化,具体绘制代码见文末提供的github地址。跪求star=v=

感知机模型

感知机算法用于计算得到划分可二分数据集的超平面S。

我们定义优化函数为损失函数:
L=误分类点到超平面S的距离和

\(d = \frac{1}{{\left| w \right|}}|w \bullet {x_i} + b|\)

\(L = – \sum\limits_N {{y_i}} (w \bullet {x_i} + b)\)

采用随机梯度下降算法

\(\frac{{dL}}{{dw}} = – \sum\limits_N {{y_i}} {x_i}\)

故对于每一个误分类点

\(w = w + \eta {y_i}{x_i}\)

算法流程

输入:w, b;
训练:f(x)=sign(wx+b)

  1. 选取初值w0, b0
Read the rest

Update 04.28.2019:重构了本文的逻辑结构,修改了失效的链接

Jupyter Notebook

Jupyter Notebook是一个交互式笔记本,支持运行 40 多种编程语言。它对于希望编写漂亮的交互式文档的人来说是一个强大工具。

划重点: 支持python、交互式文档。

本文的目的是详细地说明Jupyter Notebook安装过程中可能遇到的问题,保证读者在阅读完本文后能够打开在任何目录下、以.ipynb为后缀的任意Jupyter Notebook文件。
具体如何使用Jupyter Notebook,教程见Jupyter Notebook 快速入门
对于代码无法运行,缺少相关库的问题,见“Anaconda/conda使用指南”(TBC)

背景

因为我大一的时候安装了Enthought Canopy(用它的python.exe作为PyCharm内核),所以一直用的是Canopy来打开.ipynb。

但是因为Canopy的Python版本是Python2.7,加上numpy官方宣布某个时间点后不再支持Python2.7,所以打算… Read the rest