RETVec:弹性高效的文本向量化器
概述
RETVec是一种新一代文本向量化器,旨在高效、多语言,并通过使用相似度学习训练的稳健词嵌入提供内置的对抗性弹性。您可以在这里阅读相关论文。
RETVec经过训练,能够抵御字符级操作,包括插入、删除、拼写错误、同形异字、LEET替换等。RETVec模型基于一种新颖的字符编码器训练,可以高效编码所有UTF-8字符和单词。因此,RETVec可以直接在100多种语言上使用,无需查找表或固定词汇表大小。此外,RETVec是一个层,这意味着它可以插入任何TF模型中,无需单独的预处理步骤。
RETVec的速度和大小(约20万参数而非数百万参数)也使其成为设备端和网页用例的绝佳选择。它通过TensorFlow Text中的自定义操作在TensorFlow Lite中得到原生支持,我们还提供了RETVec的JavaScript实现,允许您通过TensorFlow.js部署网页模型。
请查看我们的示例Colab笔记本,了解如何开始使用RETVec训练自己的模型。train_retvec_model_tf.ipynb是使用RETVec训练TF模型的一个很好的起点。
演示
要查看RetVec的实际效果,请访问我们的演示。
入门
安装
您可以使用pip
安装最新的TensorFlow版本RETVec:
pip install retvec
RETVec已在TensorFlow 2.6+和Python 3.8+上进行了测试。
基本用法
您只需一行代码就可以在任何TensorFlow模型中使用RETVec作为向量化层。RETVec可直接处理原始字符串,内置预处理选项(如文本小写化)。例如:
import tensorflow as tf
from tensorflow.keras import layers
# 定义输入层,接受原始字符串
inputs = layers.Input(shape=(1, ), name="input", dtype=tf.string)
# 添加RETVec分词器层,使用RETVec嵌入模型 -- 就是这么简单!
x = RETVecTokenizer(sequence_length=128)(inputs)
# 像往常一样创建您的模型
# 例如,一个简单的LSTM分类模型,用于NUM_CLASSES类别
x = layers.Bidirectional(layers.LSTM(64, return_sequences=True))(x)
x = layers.Bidirectional(layers.LSTM(64))(x)
outputs = layers.Dense(NUM_CLASSES, activation='softmax')(x)
model = tf.keras.Model(inputs, outputs)
然后您可以像往常一样编译、训练和保存模型!正如我们的论文所示,使用RETVec训练的模型对对抗性攻击和拼写错误更具弹性,并且计算效率更高。RETVec还支持TFJS和TF Lite,使其成为设备端移动和网页用例的完美选择。
Colab笔记本
RETVec的详细示例Colab笔记本可在notebooks目录下找到。这些是开始使用RETVec的好方法。您可以通过点击Google Colab按钮在Google Colab中运行这些笔记本。如果没有与您的用例类似的示例,请告诉我们!
我们提供以下示例Colab笔记本:
- 使用TensorFlow训练基于RETVec的模型:train_retvec_model_tf.ipynb用于GPU/CPU训练,以及train_tpu.ipynb用于TPU兼容的训练示例。
- 将RETVec模型转换为TF Lite模型以在设备上运行:tf_lite_retvec.ipynb
- (即将推出!)使用RETVec JS通过TensorFlow.js在网页中部署RETVec模型
引用
如果您在研究中使用RETVec,请引用以下参考文献:
@article{retvec2023,
title={RETVec: Resilient and Efficient Text Vectorizer},
author={Elie Bursztein, Marina Zhang, Owen Vallis, Xinyu Jia, and Alexey Kurakin},
year={2023},
eprint={2302.09207}
}
贡献
要为项目做出贡献,请查看贡献指南。谢谢!
免责声明
这不是谷歌的官方产品。