1. 工具特色
FudanDNN-NLP3.0 是由复旦大学计算机学院机器人研究实验室所开发的基于深度学习的中文自然语言处理工具,该工具目前可用于中文分词、命名识别、词性标注、句子分类、语义分析、知识库访问、对话问答。深度学习方法的优点在于不需要预先根据任务进行特征的选择(特征工程),系统所需参数较少(节省内存开销),并且实际使用速度优于其它相似性能的系统。该工具目前具备以下特点:
融合了任务导向(Task-oriented)的对话问答和聊天机器人(Chatbot)的对话系统;
增加基于发音相似性的匹配功能,部分克服语音识别系统的识别不准确问题,该功能用于知识库检索和预定义问题的匹配;
自带包括天气预报、互联网信息检索、出行路线查询、简单算术、诗词朗读、术语解读、菜谱查询、家电控制等场景,并且可以在所提供的框架下方便地新增应用场景;
可以与 RDF 表示的知识库(类似知识图谱)对接,用于支持对知识库的访问,以及其上的知识问答;
增加预定义问题优先处理机制(通过给出优先处理的问题和回答对文件),以满足一些个性化问答需求;
提供中文分词、命名识别、词性标注、句子分类、语义分析等较完整的中文处理功能,并且支持根据用户所准备的样本进行模型的重新训练和调整训练(即在已经大量样本训练的基础上根据新样本进行精调)。
内制包括人名、地名、组织机构、时间、时期、日期、货币、度量、邮箱地址、网址、百分比、手机号码、座机号码、成语、俚语、食物、著名景点、文学和影视作品等 30 类词汇和实体的识别;
增加了金融、疾病、药物、动物、植物、化学等专业词汇,并且支持自定义领域词汇。
2. 系统结构
图1. 对话系统结构图
对话问答功能的处理流程如下:
在语音进行识别,转换成文字表示的句子;
对输入句子进行规范化,包括俚语替换、编码、繁简统一转换等;
对句子进行分类,确定其场景类型;
进行命名识别、中文分词和词性分析等基础性预处理;
根据句子分类的结果(不同场景对应不同的语义标签集合)进行语义分析;
对于需要使用知识库或外部资源的应用(如:术语解读和天气预报),调用知识库或外部资源查询接口,获取查询结果;
通过调用外部资源执行查询,返回查询结果,产生答句;
如果输入句子不属于任何内制场景,则调用生成式聊天机器人产生答句;
根据生成的答句,调用语音合成功能,产生语音回答。
3. 关键技术
3.1 基于深度学习的中文序列标注网络和学习算法
深度学习的序列标注网络接受一个中文句子作为输入,输出以字符(包括:汉字、标点和其它可能出现的句子中的字符)为单位的序列标注结果。标签集合采用分词标签加特定任务标签扩展之后的标签。序列标注网络基本结构如图2所示[6],在此网络结构的基础上,我们进行了进一步优化,包括采用快速卷积代替窗口模型,并且引入前向标签与不当状态的交互信息。对于命名识别、中文分词和词性分析等基础任务,我们没有采用流行的双向 LSTM 加上 Vertibi 解码的模型,一是因为双向 LSTM 速度较慢,不太适合资源受限的运行环境;二是这些任务中长程依赖情况较少见;三是我们的实验结果表明其性能并不优于当前采用的模型。
图2. 序列标注网络结构图
以联合中文分词和命名识别为例,如果以“PER”表示人名标签,则以下句子:
“诸葛亮是刘备军事集团的军师。”
所相应的标注结果为:
“B_PER I_PER E_PER O B_PER E_PER O O O O O O O O”。
其中:“B”表示词汇的开始字符,“I”表示词汇的中间字符,“B”表示词汇的结束字符,“O”表示与任务无关的字符。另外还有“S”表示能够单独成词的字符。
采用深度学习模型来完成这些任务是原因是:避免特征工程,由算法自动提取与特定任务相关的特征;可以采用海量未经标注的样本来预训练字或词向量, 从而提高系统的泛化性能。
3.2 基于带动态 k-max 池化的卷积神经网络的句子分类模型
模型以中文句子为输入,由网络产生全句的语义表示,根据该表示预测句子所属的与任务相关的类别,网络结构如图3所示[5]。
图3. 句子语义表示建模网络图
网络首先将输入句子中每个字符通过查找字向量表的方式转成相应的向量表示。每一个字符的表示可以随机生成或者采用无监督的方法进行预训练。句子经转换之后形成一个特征矩阵。第二步:在特征矩阵的每一维度上,根据设定的窗口大小,采用卷积的方法将窗口特征输入转换成新的特征。窗口在特征矩阵上从左至右依次滑动,产生与特征矩阵列数相同的更高一层的特征表示。不同维度采用不同的卷积核,从而产生输入特征矩阵的一个特征地图。可以同时使用一组不同的卷积核来产生多个特征地图。每一个特征地图上采用 k-max 池化的方法采出 k 个最为显著的特征,即在每一维度上提取 k 个最大的特征值,但这些特征值的顺序保持其在输入特征地图中的顺序。在 k-max 池化后的结果矩阵上使用 hardTanh 非线性函数进行特征转换。上述第二步可以叠加多层,新的一层在上一层的结果上进行操作。最后一层的 k-max 池化的 k 值固定(模型的超参数),之前每一层的k值取根据输入句子长度动态产生。第三步将最后一层获得的所有特征值进行拼接,来产生全句的语义表示。在语义表示的基础上,通过一个线性层和 Softmax 层来对句子所属类别进行预测。
3.3 基于 Encoder 和 Decoder 的聊天机器人
我们采用生成式的方法来构建聊天机器人,其基本思路是采用双向 LSTM(或GRU)对问句进行建模,产生问句的语义向量表示(Encoder 部分),如图4所示。然后使用另一个带 Attention 机制的单向 LSTM(或GRU)来产生答句(Decoder),模型在百万级语料上进行训练,并且对 Dull sentence 问题和回答多样性进行了优化。
图4. 产生问句向量表示的双向LSTM网络
4. 工具使用
可以从以下任一网站下载FudanDNN-NLP3.0(注意它与FudanNLP是不同的两个工具)
http://openkg.cn/tool/fudandnn-nlp
http://homepage.fudan.edu.cn/zhengxq/deeplearning/
使用工具进行项目开发的基本流程如下:
获取并安装Java JDK1.7或以上版本;
获取FudanDNN-NLPv3.0.zip压缩包,并解压;
将解压后的“FudanDNN-NLPv3.0”目录下的目录及文件全部拷贝到工程;
将工程中“lib”目录下所有的包导入工程;
运行以下程序体验工具主要功能,详细的使用说明(包括重新或者增量训练网络)详见工具说明书(在FudanDNN-NLPv3.0.zip压缩包内):
中文分词: cn.edu.fudan.flow.WordSegmentorStart.java
命名识别: cn.edu.fudan.flow.NamedIdentityRecognizerStart.java
词性标注:cn.edu.fudan.flow.PosTaggerStart.java
语义解析:cn.edu.fudan.flow.CRFSemanticAnalyzerMultipleEventStart
对话系统:cn.edu.fudan.dialog.DiaglogStart.java
语音对话:cn.edu.fudan.dialog.SpeechDiaglogStart.java
注意:使用本工具时,所有文件都应采用 UTF-8 编码,集成开发环境和编辑工具也应使用 UTF-8 编码,不然可能出现因编码不一致所导致的错误。
5. 联系方式
郑骁庆(ZhengXiaoqing),复旦大学计算机学院副教授,从事机器学习和自然语言处理方面的研究和教学工作。所在的复旦大学机器人研究团队长年致力于自然语言处理、机器人、人机交互、音视频处理等方面的研究,自主研发了四代机器人系统:复旦I号、复娃、海宝、爱家一号。这些机器人都具备一定的自主学习能力,并且具有强大的语音交互、语义分析和智能对话功能。复旦I号是国内第一个具有心智发育能力和全装载的人形机器人。海宝机器人在2010年上海世博会最佳城市实践区“沪上生态家”成功进行了长达半年的展出。
联系电话:021-51355386
联系邮件:zhengxq@fudan.edu.cn
参考文献
[1] XiaoqingZheng. Incremental graph-based neural dependency parsing. In Proc. Conference on Empirical Methods on Natural Language Processing(EMNLP’17).
[2] XiaoqingZheng, Jiangtao Feng, Yi Chen, Haoyuan Peng, Wenqiang Zhang. Learningcontext-specific word/character embeddings. InProc. AAAI Conference on Artificial Intelligence (AAAI’17), 2017.
[3] XiaoqingZheng, Jiangtao Feng, Mengxiao Lin, Wenqiang Zhang. Context-specific andmulti-prototype character representations. InProc. The Twenty-Fifth International Joint Conference on ArtificialIntelligence (IJCAI’16), 2016.
[4] Xiaoqing Zheng, Haoyuan Peng, Yi Chen, PengjingZhang, Wenqiang Zhang. Character-based parsing with convolutional neuralnetwork. In Proc. The Twenty-FourthInternational Joint Conference on Artificial Intelligence (IJCAI’15), 2015.
[5] NalKalchbrenner, Edward Grefenstette, Phil Blunsom. A convolutional neural networkfor modelling sentences. In Proceedingsof the 52nd Annual Meeting of the Association for Computational Linguistics(ACL’14).
[6] XiaoqingZheng, Hanyang Chen, Tianyu Xu. Deep learning for Chinese word segmentation andPOS tagging. In Proceedings of the Conferenceon Empirical Methods in Natural Language Processing (EMNLP'2013), Seattle,Washington, USA, 18-21 October, 2013, pp. 647–657.
[7] RonanCollobert, Jason Weston, Léon Bottou, Michael Karlen, Koray Kavukcuoglu, andPavel Kuksa. 2011. Natural language processing (almost) from scratch. Journal of Machine Learning Research,12: 2493– 2537.
[8] YueZhang and Stephen Clark. 2008. Joint word segmentation and pos tagging using asingle perceptron. In Proceedings of the46th Annual Meeting of the Association for Computational Linguistics (ACL’08).
[9] HweeT. Ng and Jin K. Lou. 2004. Chinese part-of- speech tagging: one-at-a time orall-at-once? word-based or character-based? InProceedings of the Inter- national Conference on Empirical Methods in NaturalLanguage Processing (EMNLP’04).
[10]NianwenXue. Chinese word segmentation as character tagging. Computational Linguistics and Chinese Language Processing, 2003, 8(1): 29–48.
[11]MichaelCollins. 2002. Discriminative training methods for hidden Markov models: Theoryand experiments with perceptron algorithms. InProceedings of the International Conference on Empirical Methods in NaturalLanguage Processing (EMNLP’02).
[12]JohnLafferty, Andrew McCallum, and Fernando Pereira. Conditional random fields:Probabilistic models for segmenting and labeling sequence data. In Proceedings of the InternationalConference on Machine learning (ICML’01).
OpenKG.CN
中文开放知识图谱(简称OpenKG.CN)旨在促进中文知识图谱数据的开放与互联,促进知识图谱和语义技术的普及和广泛应用。
点击阅读原文,进入 OpenKG 博客。