鹦鹉(Parrot)
1. 什么是鹦鹉?
鹦鹉是一个基于释义的话语增强框架,专为加速训练自然语言理解(NLU)模型而设计。一个释义框架不仅仅是释义模型。关于该库的更多细节和使用方法,请参考GitHub页面。
安装
pip install git+https://github.com/PrithivirajDamodaran/Parrot_Paraphraser.git
快速开始
from parrot import Parrot
import torch
import warnings
warnings.filterwarnings("ignore")
'''
取消注释以获得可重复的释义生成
def random_state(seed):
torch.manual_seed(seed)
if torch.cuda.is_available():
torch.cuda.manual_seed_all(seed)
random_state(1234)
'''
parrot = Parrot(model_tag="prithivida/parrot_paraphraser_on_T5", use_gpu=False)
phrases = ["你能推荐一些纽约的高档餐厅吗?",
"在俄罗斯有哪些著名的地方我们不应该错过?"
]
for phrase in phrases:
print("-"*100)
print("输入短语:", phrase)
print("-"*100)
para_phrases = parrot.augment(input_phrase=phrase)
for para_phrase in para_phrases:
print(para_phrase)
----------------------------------------------------------------------
输入短语:你能推荐一些纽约的高档餐厅吗?
----------------------------------------------------------------------
列出一些在纽约市值得去的优秀餐厅?
你推荐纽约哪些高档餐厅?
我想尝试一些纽约的高档餐厅?
推荐一些纽约的高档餐厅?
你能推荐一些纽约的高端餐厅吗?
你能推荐一些纽约的高档餐厅吗?
你能推荐一些纽约的高档餐厅吗?
----------------------------------------------------------------------
输入短语:在俄罗斯有哪些著名的地方我们不应该错过?
----------------------------------------------------------------------
访问俄罗斯时我们不应该错过什么?
推荐一些俄罗斯最佳旅游地点?
列出一些俄罗斯最佳旅游地点?
你能列出俄罗斯的顶级旅游地点吗?
展示我们不应该错过的俄罗斯地点?
列出一些我们不应该错过的俄罗斯著名地点?
调节参数
para_phrases = parrot.augment(input_phrase=phrase,
diversity_ranker="levenshtein",
do_diverse=False,
max_return_phrases=10,
max_length=32,
adequacy_threshold=0.99,
fluency_threshold=0.90)
2. 为什么选择鹦鹉?
Huggingface列出了12个释义模型,RapidAPI列出了7个免费和商业释义器,如QuillBot,Rasa讨论了一个用于增强文本数据的实验性释义器这里,Sentence-transformers提供了一个释义挖掘工具,而NLPAug通过PPDB(一个数百万的释义数据库)提供词级增强。尽管这些释义尝试很棒,但仍存在一些差距,释义尚未成为构建NLU模型时文本增强的主流选择……鹦鹉是一个试图填补其中一些空白的谦逊尝试。
什么是好的释义?几乎所有条件文本生成模型都基于两个因素验证:(1)生成的文本是否传达了与原始上下文相同的含义(充分性);(2)文本是否流畅/语法正确(流畅性)。例如,神经机器翻译的输出会测试充分性和流畅性。但一个好的释义应该在充分和流畅的同时,在表面词汇形式上尽可能不同。根据这个定义,衡量释义质量的三个关键指标是:
- 充分性(含义是否充分保留?)
- 流畅性(释义是否流畅?)
- 多样性(词汇/短语/句法)(释义与原文有多大变化?)
鹦鹉提供了调节充分性、流畅性和多样性的参数以满足您的需求。
**什么使释义器成为好的增强器?**训练NLU模型不仅需要大量话语,还需要带有意图和槽位/实体标注的话语。典型流程为:
- 给定输入话语+输入标注,好的增强器生成N个输出释义,同时保留意图和槽位。
- 使用步骤1中的输入标注将输出释义转换为标注数据。
- 由输出释义创建的标注数据构成NLU模型的训练数据集。
但通常作为生成模型,释义器不保证保留槽位/实体。因此,以受约束的方式生成高质量释义而不以词汇差异牺牲意图和槽位的能力,使释义器成为好的增强器。更多内容见下文第3节。
3. 适用范围
在对话引擎领域,知识机器人用于回答问题,如“柏林墙何时倒塌?”,事务机器人用于执行命令,如“请打开音乐”,而语音助手两者皆可。鹦鹉主要专注于增强输入或说给对话界面的文本,以构建强大的NLU模型。(通常人们不会输入或喊出长段落给对话界面,因此预训练模型的最大文本长度为32。)
虽然鹦鹉主要旨在作为构建优秀NLU模型的文本增强器,但它也可以用作纯粹的释义器。