为对话人工智能生成标记数据。
putput的Python项目详细描述
关于
putput
是一个为对话人工智能生成标记数据的库。它使用简单,高度可定制,可以处理消费级笔记本电脑上的大数据生成。putput
设置需要几分钟,生成数百万个标记的数据点需要几秒钟。
putput的标记数据可用于:
- 在没有真实数据的情况下训练ML模型。
- 在ML模型中增加训练特定模式。
- 测试现有ML模型的特定模式。
putput
为其管道提供一个api,指定如何生成标记数据。它附带了为常见的NLU提供程序配置
管道的预设,例如luis和spacy。
putput
擅长生成自定义数据集,即使对于尚未商业解决且不存在公共可用数据集的问题也是如此。例如,签出这个使用putput
生成数据集用于多意图识别和识别的Jupyter笔记本训练一个lstm,使其能够识别多个意图和实体。
下面是使用putput
数据训练的lstm的预测示例:
imgalt="multi-intent" src="https://warehouse camo.cmh1.psfhosted.org/8f93140faafe966fd948f6e4330771bc71efc79a/2e2f646f63732f5f7374617469632f6d756c74696e74656e742e706e67" />
请注意,经过训练的lstm可以处理现实生活中的复杂性,例如处理多个意图("add"和"remove"组
)以及在不同上下文中消除同一单词之间的歧义(项目"ten chicken strips"中的数量"ten"与"ten")。
安装
putput
当前支持python>;=3.5。要安装生产版本,请执行pip install putput
样本
putput
附带几个停靠示例,演示如何生成数据。
- 克隆回购协议:
git克隆https://github.com/michaelprel/putput.git
- 移动到项目目录:
CD输入
- 确保Docker正在运行:
docker--版本
- 构建运行时环境:
docker build-t putput.
- 项目附带了几个使用示例,您可以执行这些示例,例如:
docker运行putput smart_speaker
或docker运行putput restaurant
putput
还附带了samples/
目录中的带注释的jupyter笔记本,该目录使用putput
来解决现实世界的nlu问题。注意:Github无法正确呈现某些图形,因此应在nbviewer上查看笔记本。
开发
travis(我们的ci服务器)执行各种检查以确保代码质量。 您也可以在本地运行检查:
- 通过:
pip install-e.[dev]
安装开发依赖项
- 运行linter:
python setup.py pylint
- 运行类型检查器:
python setup.py mypy
- 运行测试:
python setup.py test
< > > - 嗨Cortana
- 你好,Siri
- 嗨Alexa
- 嗨,谷歌
- 嗨,科塔纳
- 嘿,先生
- 嘿Alexa
- 嘿谷歌
- 嗨,科尔塔纳,太阳出来了
- 嗨,科塔纳,他想在这里玩《太阳来了》
或者,您可以通过docker运行所有步骤:docker build--target=build-t putput。
用法
putput
是一个管道,它通过将模式定义(一个用户定义的模式yaml文件)重塑为带标签的数据来工作。
示例
下面是一个为智能扬声器生成标记数据的模式定义示例。
base_tokens:-PERSONAL_PRONOUNS:[he,she]-SPEAKER:[cortana,siri,alexa,google]token_patterns:-static:-WAKE:-[[hi,hey],SPEAKER]-PLAY:-[PERSONAL_PRONOUNS,[wants,would like],[to],[play]]-[[play]]-dynamic:-ARTIST-SONGgroups:-PLAY_SONG:[PLAY,SONG]-PLAY_ARTIST:[PLAY,ARTIST]utterance_patterns:-[WAKE,PLAY_SONG]-[WAKE,PLAY_ARTIST]-[WAKE,1-2,PLAY_SONG]
关注第一个发音模式,
[叫醒,播放歌曲]
,输入
将生成数百个发音
,标记
,以及组
的形式:
说话
-嗨,科尔塔纳,他想在这里演奏《太阳来了》
模式定义参考
在模式定义中,最重要的两个部分是符号模式和话语模式。标记模式描述一系列组件,其产品构成标记。例如,wake
token
的唯一令牌模式是
[[hi,hey],[cortana,siri,alexa,google]]
(运行时,基本令牌
,扬声器
替换为其值[cortana,siri,alexa,google]
)。此标记模式的乘积
:
表示唤醒
标记
在标记模式
部分中,有静态
和动态
部分。static
意味着可以在应用程序运行之前指定所有的标记模式。
将在运行时指定。在我们的示例中,动态
表示ode>令牌模式wake
是在static
下面定义的,因为唤醒智能扬声器的所有方法都是在运行前已知的。艺术家
和歌曲
是在动态
下定义的,因为音乐目录中的艺术家和歌曲可能经常更改。这些标记的值可以在运行时作为参数传入
管道
。
在每个标记模式中,
基本标记
可用于防止重复相同的组件。例如,在我们的例子中,我们可以在许多不同的地方使用人称代词,因此我们只需要定义一次即可。
话语模式
描述组成话语
的标记
的乘积。例如,第一个发音模式
,[唤醒,播放,歌曲]
,是唤醒模式
,播放模式
和歌曲
的所有产品的乘积(组,播放歌曲
,替换为其值。示例语句
由此语句模式生成的
将是:
在每个话语模式中,
组
可用于防止自己重复相同的标记
。例如,在我们的示例中,我们可以在许多不同的地方使用播放歌曲,因此我们只需要定义一次。与基令牌不同,
putput
跟踪组。例如,调用与
发音模式对应的一个潜在输出
,[唤醒,播放歌曲]
:
因为播放歌曲
是发音模式中唯一的
组
,唤醒
标记
分配给组
无
,而播放
和歌曲
标记
分配给组
播放歌曲
从商业NLU提供者的角度来看,组
可用于匹配意图
,而标记
可用于匹配实体
语句模式
和组
支持范围语法。看最后一个发音模式
,
[唤醒,1-2,播放歌曲]
,我们看到范围1-2。putput将把这个发音模式
扩展到两个发音模式
,[唤醒,播放歌曲]
和[唤醒,唤醒,播放歌曲]
。范围是包含的,也可以指定为单个数字,它将扩展为一个发音模式
最后,组
可以在组
中定义。例如:
-groups:-PLAY_SONG:[PLAY,SONG]-WAKE_PLAY_SONG:[WAKE,PLAY_SONG,10]
是有效语法。
单一目的提供者(luis、rasa、lex等)
如果您的nlu提供者只支持单意图语句,那么您仍然可以使用putput在更熟悉的意图/实体范式中生成语句。要指定单个意图,只需在话语模式中添加另一个级别,以意图为关键,并在下面添加所有的话语模式。若要指定实体,请添加名为"实体"的新节,其中包含要作为实体拾取的令牌列表。例如:
base_tokens:-PERSONAL_PRONOUNS:[he,she]-SPEAKER:[cortana,siri,alexa,google]token_patterns:-static:-WAKE:-[[hi,hey],SPEAKER]-PLAY:-[PERSONAL_PRONOUNS,[wants,would like],[to],[play]]-[[play]]-dynamic:-ARTIST-SONGentities:[ARTIST,SONG]# Here we specify which tokens are our entitiesutterance_patterns:-SONG_INTENT:# Here we specify our intents and which utterance patterns belong to them-[WAKE,PLAY,SONG]-[WAKE,1-2,PLAY,SONG]-ARTIST_INTENT:-[WAKE,PLAY,ARTIST]
对于使用单意图模式签出的完整示例,请参见luis示例。
管道
在定义了模式定义之后,g的最后一步生成标记的数据是实例化
putput
'spipeline
并调用flow
dynamic_token_patterns_map={'SONG':('here comes the sun','stronger'),'ARTIST':('the beatles','kanye west')}p=Pipeline(pattern_def_path,dynamic_token_patterns_map=dynamic_token_patterns_map)forutterance,tokens,groupsinp.flow():print(utterance)print(tokens)print(groups)
流
一次产生一个结果。虽然每次迭代的结果可以是元组(语句、标记、组)
,但也可以通过指定pipeline
的参数来定制结果。一些常见的用例限制了输出的大小,过采样/欠采样语句模式
,指定如何对标记
和组
进行标记化,等等。文档。常见的预设配置包含在预设文档中。