Chat: 基于自然语言理解与机器学习的聊天机器人。

_images/chat.png

这就是Chat

Chat是一个基于自然语言理解与机器学习的语义理解库。 Chat提供丰富的语义分析工具与语义知识图的构建工具,非常适合从0开始迅速搭建自己的聊天机器人,也能够减少工程师在实际开发当中的重复工作。Chat非常易于修改和扩展,所以个性化定制也是非常方便的。如果你有如下需求,欢迎选择Chat:

  • 想从0开始迅速搭建自己的聊天机器人
  • 想了解自然语言处理以及如何构建自己的知识图谱
  • 想智能化生活工作,提升效率

Chat适用的Python版本是:Python 3.3-3.5

Chat的设计原则

  • 用户友好:用户的使用体验始终是我们考虑的首要和中心内容。Chat遵循减少认知困难的最佳实践:Chat提供一致而简洁的API, 能够极大减少一般应用下用户的工作量,同时,Chat提供清晰和具有实践意义的bug反馈。
  • 模块性:完全独立可配置的模块可以用最少的代价自由组合在一起,你可以使用它们来构建自己的模块。
  • 易扩展性:添加新模块超级容易,只需要仿照现有的模块编写新的类或函数即可。创建新模块的便利性使得Chat更适合于快速开发。
  • 知识图谱:基于图数据库的知识图表达提供了更快的搜索速度与智能。

关于Chat-cn

由于作者水平和研究方向所限,因此文档中不可避免会出现各种错误、疏漏和不足之处。如果您在使用过程中有任何意见、建议和疑问,欢迎发送邮件到1044908508@qq.com与我取得联系。

您对文档的任何贡献,包括文档的翻译、查缺补漏、概念解释、发现和修改问题、贡献示例程序等,均会被记录在致谢,十分感谢您对Chat中文文档的贡献!

当前版本与更新

如果你发现本文档提供的信息有误,有两种可能:

  • 你的Chat版本过低:Chat是一个发展迅速的语义理解库,请保持您的Chat与官方最新的release版本相符
  • 我们的中文文档没有及时更新:如果是这种情况,请发邮件给我,我会尽快更新

目前文档的版本号是1.0.3,对应于官方的1.0.3 release 版本, 本次更新的主要内容是:

  • 文档全面升级,绝大多数API均得到更新
  • 补充了原文档中缺失,但源代码中确实可用的类和函数
  • 重新整理了文档风格和栏目,使得文档更容易阅读

注解

我们建议你在 Github 上star和watch 官方项目 ,这样当官方有更新时,你会立即知道。

如果你阅读在线中文文档时有什么问题,你可以在github上下载这个项目, 然后去 /docs/build/html/index.html 阅读离线中文文档。 或者在 Read the docs 中阅读官方原文档。

用户指南

安装 Installation

一、图形数据库

1.Neo4j简介

Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。

2.图形数据结构

在一个图中包含两种基本的数据类型:Nodes(节点) 和 Relationships(关系)。Nodes 和 Relationships 包含key/value形式的属性。Nodes通过Relationships所定义的关系相连起来,形成关系型网络结构。

_images/neo4j.png
3.Neo4j安装

Neo4j可以被安装成一个独立运行的服务端程序,客户端程序通过REST API进行访问。也可以嵌入式安装,即安装为编程语言的第三方类库,目前只支持Java和Python语言。因Neo4j是用Java语言开发的,所以确保将要安装的机器上已安装了jre或者jdk。

此种安装方式简单,各平台安装过程基本一样

  • 1.从 Neo4j官网 上下载最新的版本,根据安装的平台选择适当的版本。
  • 2.解压安装包,解压后运行终端,进入解压后文件夹中的bin文件夹。
  • 3.在终端中运行命令完成安装。
neo4j install-service
  • 4.在终端中运行命令开启服务。
neo4j start
  • 5.通过stop命令可以关闭服务,status命令查看运行状态。

二、Python3

1.Anaconda

Anaconda官网 上下载3.5版本,根据安装的平台选择适当的版本。

2.Python依赖包

从requirements.txt安装,由于安装chat时会自动安装依赖,所以这一步也可省略。

  • api
  • jieba
  • numpy
  • py2neo
  • requests
  • xlrd
  • xlwt
pip install -r requirements.txt

三、Chat

pip install chat

快速开始

对话

from chat.qa import Robot

robot = Robot()
answer = robot.search(question="你好", userid="userid")
print(answer)

配置

from chat.qa import Robot

robot = Robot()
answer = robot.config(info="", userid="userid")
print(answer)

个性化定制您的聊天机器人

可定制内容

_images/user.png

您可以个性化定制您的聊天机器人身份信息以及拥有的知识库服务。

开发 Development

Chat始于一个本地语义理解项目,目前由数位 GitHub 的贡献者负责维护和进行改进。

作为一个为研究员和工程师开发的开源项目,我们诚挚地欢迎您为对项目提供帮助。 每个微小的支持都会帮助我们并且会被记录下来。

理念

Chat的想法源于组合语义标签的高区分度和图数据库的灵活高速查询以及向量语义相似度算法的高精度匹配。 它依照下列设计目标所开发:

  • 简洁:易于使用,易于扩展与修改以便于研究和工程中使用。
  • 快速:自定义语义标签词典:切词过程直接切分为语义向量;图数据库高速查询复杂关联数据;高速语义矩阵相似度计算。简洁但不牺牲性能。
  • 兼容:chat的每个功能模块都很方便替换为功能相同的其它模块。
  • 透明:所有模块均使用纯Python来实现,没有一些实现原理及功能的隐藏。
如何参与我们

如果您在自然语言理解和问答系统发布了新的算法或者有建设性的想法, 欢迎您分享给Chat

  • 说明它是怎么工作的,如果可以话请给出学术论文的链接。
  • 尽可能地缩减其范围,以以致于便于实现
报告BUG

请您在 GitHub 上报告BUG。 如果您打算报告BUG,请包含以下内容:

  • 您的项目依赖库的版本号
  • 重现BUG的步骤,最好能减少到数个python 命令
  • 您获得的结果和您期望的结果。

如果您不确定遇到的行为是否是BUG, 或者你不确定错误是否与Chat有关, 请您先在 our mailing list 查看下。

修复BUG

通过GitHub的问题栏(issues)来查看BUG报告。 任何被标记为BUG的项对所有想要修复它的人来说都是开放的。 如果您发现了Chat的一个你可以自己修复的BUG, 您可以用任何方法来实现修复并且无需立即报告这个BUG。

编写文档

无论什么时候您发现有些文档没有解释清楚,存在误导,敷衍带过或者根本就是错的。请及时更新它!Edit on GitHub 的链接就在每一篇文档的右上角并且API引用列表中的每篇文档的*[source]*的链接可以帮助您快速地定位任何文字的根源。

如何参与我们

在GitHub上编辑

正如刚刚文档中修复BUG所说的简单方法, 点击文档右上角的*Edit on GitHub*链接或者API引用列表中的对象的*[source]*链接来打开GitHub中的源文件, 然后在你的浏览器中点击*Edit this file*链接并发送拉请求(Pull Request). 你只需要一个免费的GitHub账户就可以做到了。

对于任何较大幅度的修改,请遵循以下步骤来更新Chat开发。

文档

文档由 Sphinx 生成。 如果要本地编辑它,运行下列命令: .. code:: bash

cd docs make html

如果您想要重新生成整个文档,运行下列命令:

cd docs
make clean
make html

然后,打开 docs/build/index.html 来查看会出现在 Read the docs 文档。如果您更改了很多内容,并且似乎出现了许多误导性的错误信息或警告,运行``make clean html``来让Sphinx重新生成所有文件。

编写英文文档文字时,请尽可能地按照现有文档的文字习惯, 来保证整个库文字的一致性。所使用的语法及约定的相关信息,请参考以下文档:

测试
  • 每当您更改任何代码的时候,您应该运行测试脚本来测试它是否能优化现有属性。
  • 您修改的每个BUG说明一个缺少的测试案例,所以每个修复BUG的方案应该配置一个您没修复前的测试案例。
发送拉请求

当您对您添加的内容感到满意并且测试通过,文档规范,简明,不存在任何注释错误。 您可以将您的更改提交到一个新的分支(branch),并且将这个分支与您的副本(fork)合并, 然后通过GitHub的网站发送一个拉请求(pull request)

所有的这些步骤在GitHub上有相当不错的说明: https://guides.github.com/introduction/flow/

当您提交拉请求时,请附带一个更改内容的说明,以帮助我们能更好的检阅它。 如果它是一个正在开放的问题(issue),比如:issue#123,请在您的描述中添加 Fixes#123,*Resolves#123*或者*Closes#123*,这样当您的拉请求被接纳之后 GitHub会关闭那个问题。

深入了解

语义服务架构

子模块详细实现

知识库

技术支持

Github

你可以在下列网址提问或加入Chat开发讨论:

Chat Google group Chat Slack channel, 点击这里获得邀请. 你也可以在Github issues里提问或请求新特性。在提问之前请确保你阅读过我们的指导

FAQ

请见 英文网站 .

你的贡献

贡献方式有很多种,比如提供应用、实现新的Chat模块、回答 GitHub Issues 以及帮助完善文档等等。 每一点贡献都会署名,欢迎在 GitHub 上push。

致谢

本项目由以下贡献者贡献:

代码贡献

  • Decalogue

文档贡献

  • Decalogue

API目录

如果你正在寻找某个特殊的函数,类或者方法,这一列文档就是为你准备的。

API - 语义服务器

_images/server.ico
MyTCPHandler
start

创建语义服务器

启动语义服务器

API - 语义客户端

_images/client.ico
question_pack
config_pack
match
config

封装问题

封装配置

搜索答案

配置语义知识库

API - 语义理解问答

_images/qa.ico
Robot

语义理解机器人

API - 语义工具箱

_images/semantic.ico
synonym_cut
get_tag
sum_cosine
jaccard_basic
jaccard
edit_distance
similarity
get_location
get_musicinfo

自定义分词

获取语义标签

根据语义分词Cosine相似性矩阵计算语义jaccard模型的各个参数

向量相似度计算-基础jaccard模型

向量相似度计算-语义jaccard模型

向量相似度计算-语义编辑距离模型

向量相似度计算(模型参数可选)

从句子中获取地名信息

从句子中获取音乐信息

API - 语义数据库管理

_images/database.ico
Database

语义数据库管理

API - 常用工具箱

_images/mytools.ico
get_mac_address
get_hostname
get_ip_address
get_current_function_name
Walk
time_me
get_current_time
random_item
file_replace
read_excel
set_excel_style
write_excel
generate_dict
waitting

获取Mac地址

获取主机名

获取IP地址

获取当前运行函数名

遍历目录进行批处理

程序时间性能分析

获取当前时间

列表随机元素

文件替换

读取excel

设置excel样式

写入excel

生成词典

显示等待中

API - 上传本地知识库

_images/packages.ico
add_excel
add_subgraph

上传excel文件

上传子图

API - 下载语义知识库

_images/packages.ico
match

匹配子图