为对话人工智能生成标记数据。

putput的Python项目详细描述


关于

生成状态安装状态codecovpypi versionpypi-python version阅读文档pypi-licensepypi-downloads

putput是一个为对话人工智能生成标记数据的库。它使用简单,高度可定制,可以处理消费级笔记本电脑上的大数据生成。putput设置需要几分钟,生成数百万个标记的数据点需要几秒钟。

putput的标记数据可用于:

  • 在没有真实数据的情况下训练ML模型。
  • 在ML模型中增加训练特定模式。
  • 测试现有ML模型的特定模式。

putput为其管道提供一个api,指定如何生成标记数据。它附带了为常见的NLU提供程序配置管道的预设,例如luisspacyputput擅长生成自定义数据集,即使对于尚未商业解决且不存在公共可用数据集的问题也是如此。例如,签出这个使用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附带几个停靠示例,演示如何生成数据。

putput还附带了samples/目录中的带注释的jupyter笔记本,该目录使用putput来解决现实世界的nlu问题。注意:Github无法正确呈现某些图形,因此应在nbviewer上查看笔记本。

开发

travis(我们的ci服务器)执行各种检查以确保代码质量。 您也可以在本地运行检查:

  1. 通过:pip install-e.[dev]
  2. 安装开发依赖项
  3. 运行linter:python setup.py pylint
  4. 运行类型检查器:python setup.py mypy
  5. 运行测试:python setup.py test
  6. < > >

    或者,您可以通过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]

    关注第一个发音模式,[叫醒,播放歌曲]输入将生成数百个发音标记,以及的形式:

    说话-嗨,科尔塔纳,他想在这里演奏《太阳来了》

    utterance 1

    模式定义参考

    在模式定义中,最重要的两个部分是符号模式和话语模式。标记模式描述一系列组件,其产品构成标记。例如,waketoken的唯一令牌模式是[[hi,hey],[cortana,siri,alexa,google]](运行时,基本令牌扬声器替换为其值[cortana,siri,alexa,google])。此标记模式的乘积

    • 嗨Cortana
    • 你好,Siri
    • 嗨Alexa
    • 嗨,谷歌
    • 嗨,科塔纳
    • 嘿,先生
    • 嘿Alexa
    • 嘿谷歌

    表示唤醒标记

    标记模式部分中,有静态动态部分。static意味着可以在应用程序运行之前指定所有的标记模式。动态表示ode>令牌模式将在运行时指定。在我们的示例中,wake是在static下面定义的,因为唤醒智能扬声器的所有方法都是在运行前已知的。艺术家歌曲是在动态下定义的,因为音乐目录中的艺术家和歌曲可能经常更改。这些标记的值可以在运行时作为参数传入管道

    在每个标记模式中,基本标记可用于防止重复相同的组件。例如,在我们的例子中,我们可以在许多不同的地方使用人称代词,因此我们只需要定义一次即可。

    话语模式描述组成话语标记的乘积。例如,第一个发音模式[唤醒,播放,歌曲],是唤醒模式播放模式歌曲的所有产品的乘积(组播放歌曲,替换为其值。示例语句由此语句模式生成的将是:

    • 嗨,科尔塔纳,太阳出来了
    • 嗨,科塔纳,他想在这里玩《太阳来了》

    在每个话语模式中,可用于防止自己重复相同的标记。例如,在我们的示例中,我们可以在许多不同的地方使用播放歌曲,因此我们只需要定义一次。与基令牌不同,putput跟踪组。例如,调用与发音模式对应的一个潜在输出[唤醒,播放歌曲]

    utterance 2

    因为播放歌曲发音模式中唯一的唤醒标记分配给,而播放歌曲标记分配给播放歌曲

    从商业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的参数来定制结果。一些常见的用例限制了输出的大小,过采样/欠采样语句模式,指定如何对标记进行标记化,等等。文档。常见的预设配置包含在预设文档中。

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


热门话题
web应用程序如何加快构建Java web应用程序的速度   java从对话框打开新对话框的正确方法   java有没有一种方法可以理解spark是如何加载类路径以及加载顺序的?   java Weblogic 14c webservicedescriptionname在weblogicwebservices中不是唯一的   ESAPI中的XSS预防关于Java(Springboot)在web上显示实体中文代码   将数学表达式转换为C或Java代码   通过2个防火墙实现java RMI   java的日期是多少。功能之前是否考虑时区?   如何检查未知数量的java输入,并在行尾停止检查   带有spark的java MongoDB在数据帧中提供空值   java Xamarin MAUI无活动管理安全异常(Kiosk模式应用程序)   java如何在应用程序上下文中调用片段实例的方法?   java与servlet一起工作?