Tensorflow中的文本数据扩充

Tensorflow中的文本数据扩充,tensorflow,text,nlp,training-data,data-augmentation,Tensorflow,Text,Nlp,Training Data,Data Augmentation,我正在对tensorflow中的IMDB数据集进行情绪分析,并试图通过使用他们所说的“即插即用”到tensorflow中来扩充训练数据集。所以这应该很简单,但我是tf的新手,所以我不知道该怎么做。以下是我所拥有的和正在尝试的,基于阅读网站上的教程 我试图做一个地图来增加训练数据,但我得到了一个错误。您可以向下滚动到最后一个代码块以查看错误 pip install -q tensorflow-text pip install -q tf-models-official import os impo

我正在对tensorflow中的IMDB数据集进行情绪分析,并试图通过使用他们所说的“即插即用”到tensorflow中来扩充训练数据集。所以这应该很简单,但我是tf的新手,所以我不知道该怎么做。以下是我所拥有的和正在尝试的,基于阅读网站上的教程

我试图做一个地图来增加训练数据,但我得到了一个错误。您可以向下滚动到最后一个代码块以查看错误

pip install -q tensorflow-text
pip install -q tf-models-official
import os
import shutil
import tensorflow as tf
import tensorflow_hub as hub
import tensorflow_text as text
from official.nlp import optimization # to create AdamW Optimizer
import matplotlib.pyplot as plt

tf.get_logger().setLevel('ERROR')
#下载IMDB数据集并制作训练/验证/测试集

url = 'https://ai.stanford.edu/~amaas/data/sentiment/aclImdb_v1.tar.gz'

dataset = tf.keras.utils.get_file('aclImdb_v1.tar.gz', url,
                                  untar=True, cache_dir='.',
                                  cache_subdir='')

dataset_dir = os.path.join(os.path.dirname(dataset), 'aclImdb')

train_dir = os.path.join(dataset_dir, 'train')

# remove unused folders to make it easier to load the data
remove_dir = os.path.join(train_dir, 'unsup')
shutil.rmtree(remove_dir)


AUTOTUNE = tf.data.AUTOTUNE
batch_size = 32
seed = 42

raw_train_ds = tf.keras.preprocessing.text_dataset_from_directory(
    'aclImdb/train',
    batch_size=batch_size,
    validation_split=0.2,
    subset='training',
    seed=seed)

class_names = raw_train_ds.class_names
train_ds = raw_train_ds.cache().prefetch(buffer_size=AUTOTUNE)

val_ds = tf.keras.preprocessing.text_dataset_from_directory(
    'aclImdb/train',
    batch_size=batch_size,
    validation_split=0.2,
    subset='validation',
    seed=seed)

val_ds = val_ds.cache().prefetch(buffer_size=AUTOTUNE)

test_ds = tf.keras.preprocessing.text_dataset_from_directory(
    'aclImdb/test',
    batch_size=batch_size)

test_ds = test_ds.cache().prefetch(buffer_size=AUTOTUNE)


#setting up the textaugment
try:
  import textaugment
except ModuleNotFoundError:
  !pip install textaugment
  import textaugment
from textaugment import EDA
import nltk
nltk.download('stopwords')
这就是我得到错误的地方,我试着在train_ds上创建一个映射,并尝试在保持类不变的情况下向每个元素添加一个随机交换:

aug_ds = train_ds.map(
    lambda x, y: (t.random_swap(x), y))
错误消息:

AttributeError                            Traceback (most recent call last)
<ipython-input-24-b4af68cc0677> in <module>()
      1 aug_ds = train_ds.map(
----> 2     lambda x, y: (t.random_swap(x), y))

10 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/autograph/impl/api.py in wrapper(*args, **kwargs)
    668       except Exception as e:  # pylint:disable=broad-except
    669         if hasattr(e, 'ag_error_metadata'):
--> 670           raise e.ag_error_metadata.to_exception(e)
    671         else:
    672           raise

AttributeError: in user code:

    <ipython-input-24-b4af68cc0677>:2 None  *
        lambda x, y: (t.random_swap(x), y))
    /usr/local/lib/python3.6/dist-packages/textaugment/eda.py:187 random_swap  *
        self.validate(sentence=sentence, n=n)
    /usr/local/lib/python3.6/dist-packages/textaugment/eda.py:74 validate  *
        if not isinstance(kwargs['sentence'].strip(), str) or len(kwargs['sentence'].strip()) == 0:

    AttributeError: 'Tensor' object has no attribute 'strip'
AttributeError回溯(最近一次调用)
在()
8月1日=列车地图(
---->2λx,y:(t.随机交换(x,y))
10帧
/包装器中的usr/local/lib/python3.6/dist-packages/tensorflow/python/autograph/impl/api.py(*args,**kwargs)
668例外情况为e:#pylint:disable=broad Exception
669如果hasattr(即“ag\u错误\u元数据”):
-->670将e.ag\u错误\u元数据提升到\u异常(e)
671其他:
672提高
AttributeError:在用户代码中:
:2无*
λx,y:(t.随机交换(x,y))
/usr/local/lib/python3.6/dist-packages/textaungment/eda.py:187随机交换*
自我验证(句子=句子,n=n)
/usr/local/lib/python3.6/dist-packages/textagment/eda.py:74验证*
如果不是isinstance(kwargs['SENTURCE'].strip(),str)或len(kwargs['SENTURCE'].strip())==0:
AttributeError:“Tensor”对象没有属性“strip”

我也在尝试做同样的事情。出现此错误的原因是textagment函数
t.random_swap()
应该可以处理Python字符串对象

在您的代码中,该函数接受一个dtype=string的张量。到目前为止,tensor对象没有与Python字符串相同的方法。因此,出现了错误代码

注意。有一些额外的API来处理这种字符串类型的张量。尽管如此,目前它仅限于标记化、检查大写或小写等。一个冗长的解决方法是使用
py_函数
but。干杯,希望这有帮助。我最终选择在我的用例中不使用textagment


Nbb。strings有更多的功能,比如regex replace等,但对于您的扩展用例来说还不够复杂。如果您能了解其他人的想法,或者TF或textaugment将来是否有更新,将非常有帮助。

谢谢您的解释!我最终使用了nltk,只是单独修改了数据库中的每个条目