抱抱脸(hugging face)教程-中文翻译-预处理

2023-11-09

预处理

在您可以在模型中使用数据之前,需要将数据处理为模型可接受的格式。模型不理解原始文本、图像或音频。这些输入需要转换成数字并组装成张量。在本教程中,您将:

  • 用tokenizer处理文本.
  • 用特征提取器对图像或音频数据进行预处理。
  • 使用处理器预处理多通道任务的数据。

自然语言处理

处理文本数据的主要工具是tokenizer。tokenizer首先根据一组规则将文本分割为tokens。令牌被转换成数字,用于构建张量作为模型的输入。模型所需的任何额外输入也由tokenizer添加。

如果您计划使用预先训练的模型,那么使用相关的预先训练的tokenizer是很重要的。这样可以确保文本按照与预训练语料库相同的方式进行分割,并在预训练期间使用相同的标记到索引(通常作为词汇表的参考)。

通过使用 AutoTokenizer 类加载一个预训练的 tokenizer 来快速启动。这将下载模型预先训练时使用的单词。

Tokenize

利用 AutoTokenizer.from_pretrained() 加载一个预训练的 tokenizer

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-cased")

然后将你的语句传递给语法分析器:

encoded_input = tokenizer("Do not meddle in the affairs of wizards, for they are subtle and quick to anger.")
print(encoded_input)
{'input_ids': [101, 2079, 2025, 19960, 10362, 1999, 1996, 3821, 1997, 16657, 1010, 2005, 2027, 2024, 11259, 1998, 4248, 2000, 4963, 1012, 102], 
 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}

Tokenizer 返回一个字典,其中包含三个重要信息:

  • Input_ids 是对应于句子中每个标记的索引。
  • Attention_mask 指示是否应该注意某个令牌。
  • 当存在多个序列时,token_type_ids 标识一个令牌所属的序列。

你可以解码 input_ids 来返回原始输入:

tokenizer.decode(encoded_input["input_ids"])
'[CLS] Do not meddle in the affairs of wizards, for they are subtle and quick to anger. [SEP]'

正如您所看到的,tokenizer 向句子添加了两个特殊的令牌 – CLS 和 SEP (分类器和分隔符)。并非所有模型都需要特殊标记,但如果需要,tokenizer 将自动为您添加它们。

如果有几个句子你需要处理,把这些句子作为一个列表传递给tokenizer:

batch_sentences = [
    "But what about second breakfast?",
    "Don't think he knows about second breakfast, Pip.",
    "What about elevensies?",
]
encoded_inputs = tokenizer(batch_sentences)
print(encoded_inputs)
{'input_ids': [[101, 1252, 1184, 1164, 1248, 6462, 136, 102], 
               [101, 1790, 112, 189, 1341, 1119, 3520, 1164, 1248, 6462, 117, 21902, 1643, 119, 102], 
               [101, 1327, 1164, 5450, 23434, 136, 102]], 
 'token_type_ids': [[0, 0, 0, 0, 0, 0, 0, 0], 
                    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
                    [0, 0, 0, 0, 0, 0, 0]], 
 'attention_mask': [[1, 1, 1, 1, 1, 1, 1, 1], 
                    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 
                    [1, 1, 1, 1, 1, 1, 1]]}

Pad

这就引出了一个重要的话题。当你处理一批句子时,它们的长度并不总是一样的。这是一个问题,因为模型的输入张量需要有一个统一的形状。填充是一种策略,可以通过向具有较少标记的句子添加特殊填充标记来确保张量为矩形。

将 padding 参数设置为 True 可以填充批处理中较短的序列以匹配最长的序列:

batch_sentences = [
    "But what about second breakfast?",
    "Don't think he knows about second breakfast, Pip.",
    "What about elevensies?",
]
encoded_input = tokenizer(batch_sentences, padding=True)
print(encoded_input)
{'input_ids': [[101, 1252, 1184, 1164, 1248, 6462, 136, 102, 0, 0, 0, 0, 0, 0, 0], 
               [101, 1790, 112, 189, 1341, 1119, 3520, 1164, 1248, 6462, 117, 21902, 1643, 119, 102], 
               [101, 1327, 1164, 5450, 23434, 136, 102, 0, 0, 0, 0, 0, 0, 0, 0]], 
 'token_type_ids': [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
                    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
                    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], 
 'attention_mask': [[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], 
                    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 
                    [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]]}

注意 tokenizer 用0填充了第一句和第三句,因为它们比较短!

截断

另一方面,有时序列对于模型来说可能太长而无法处理。在这种情况下,您需要将序列截断为较短的长度。

将 truncation 参数设置为 True 以将序列截断为模型接受的最大长度:

batch_sentences = [
    "But what about second breakfast?",
    "Don't think he knows about second breakfast, Pip.",
    "What about elevensies?",
]
encoded_input = tokenizer(batch_sentences, padding=True, truncation=True)
print(encoded_input)
{'input_ids': [[101, 1252, 1184, 1164, 1248, 6462, 136, 102, 0, 0, 0, 0, 0, 0, 0], 
               [101, 1790, 112, 189, 1341, 1119, 3520, 1164, 1248, 6462, 117, 21902, 1643, 119, 102], 
               [101, 1327, 1164, 5450, 23434, 136, 102, 0, 0, 0, 0, 0, 0, 0, 0]], 
 'token_type_ids': [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
                    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
                    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], 
 'attention_mask': [[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], 
                    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 
                    [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]]}

建立张量

最后,您希望 tokenizer 返回输入到模型的实际张量。

将 return_tensors 参数设置为 PyTorch 的 pt 或 TensorFlow 的 tf:

Pytorch

batch_sentences = [
    "But what about second breakfast?",
    "Don't think he knows about second breakfast, Pip.",
    "What about elevensies?",
]
encoded_input = tokenizer(batch, padding=True, truncation=True, return_tensors="pt")
print(encoded_input)
{'input_ids': tensor([[  101,   153,  7719, 21490,  1122,  1114,  9582,  1623,   102],
                      [  101,  5226,  1122,  9649,  1199,  2610,  1236,   102,     0]]), 
 'token_type_ids': tensor([[0, 0, 0, 0, 0, 0, 0, 0, 0],
                           [0, 0, 0, 0, 0, 0, 0, 0, 0]]), 
 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1],
                           [1, 1, 1, 1, 1, 1, 1, 1, 0]])}

TensorFlow

batch_sentences = [
    "But what about second breakfast?",
    "Don't think he knows about second breakfast, Pip.",
    "What about elevensies?",
]
encoded_input = tokenizer(batch, padding=True, truncation=True, return_tensors="tf")
print(encoded_input)
{'input_ids': <tf.Tensor: shape=(2, 9), dtype=int32, numpy=
array([[  101,   153,  7719, 21490,  1122,  1114,  9582,  1623,   102],
       [  101,  5226,  1122,  9649,  1199,  2610,  1236,   102,     0]],
      dtype=int32)>, 
 'token_type_ids': <tf.Tensor: shape=(2, 9), dtype=int32, numpy=
array([[0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=int32)>, 
 'attention_mask': <tf.Tensor: shape=(2, 9), dtype=int32, numpy=
array([[1, 1, 1, 1, 1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1, 1, 1, 1, 0]], dtype=int32)>}

音频

音频输入的预处理方式与文本输入不同,但最终目标是相同的: 创建模型可以理解的数字序列。设计了一种特征提取器,用于从原始图像或音频数据中提取特征并将其转换为张量。在开始之前,请安装数据集以加载音频数据集进行实验:

pip install datasets

从 SUPERB 基准加载关键词发现任务(有关如何加载数据集的详细信息,请参阅数据集教程) :

from datasets import load_dataset, Audio

dataset = load_dataset("superb", "ks")

访问音频列的第一个元素,查看输入。调用音频列会自动加载并重采样音频文件:

dataset["train"][0]["audio"]
{'array': array([ 0.        ,  0.        ,  0.        , ..., -0.00592041,
        -0.00405884, -0.00253296], dtype=float32),
 'path': '/root/.cache/huggingface/datasets/downloads/extracted/05734a36d88019a09725c20cc024e1c4e7982e37d7d55c0c1ca1742ea1cdd47f/_background_noise_/doing_the_dishes.wav',
 'sampling_rate': 16000}

上述操作返回三个值:

  • 数组是语音信号加载-和潜在的重叠-作为一个一维阵列。
  • 路径指向音频文件的位置。
  • 采样率是指语音信号中每秒测量的数据点数。

重采样

在本教程中,您将使用 wav2vec2模型。正如您可以从模型卡中看到的,wav2vec2模型是根据16khz 的语音采样预先训练的。音频数据的采样率与用于预训练模型的数据集的采样率匹配非常重要。如果数据的采样率不一样,那么您需要对音频数据进行重采样。

例如,加载采样率为22050khz 的 LJ 语音数据集。为了在这个数据集中使用 wav2vec2模型,将采样率下调到16khz:

lj_speech = load_dataset("lj_speech", split="train")
lj_speech[0]["audio"]
{'array': array([-7.3242188e-04, -7.6293945e-04, -6.4086914e-04, ...,
         7.3242188e-04,  2.1362305e-04,  6.1035156e-05], dtype=float32),
 'path': '/root/.cache/huggingface/datasets/downloads/extracted/917ece08c95cf0c4115e45294e3cd0dee724a1165b7fc11798369308a465bd26/LJSpeech-1.1/wavs/LJ001-0001.wav',
 'sampling_rate': 22050}

使用 Datasets’cast_column 方法将采样率下调到16khz:

lj_speech = lj_speech.cast_column("audio", Audio(sampling_rate=16_000))

加载音频文件:

lj_speech[0]["audio"]
{'array': array([-0.00064146, -0.00074657, -0.00068768, ...,  0.00068341,
         0.00014045,  0.        ], dtype=float32),
 'path': '/root/.cache/huggingface/datasets/downloads/extracted/917ece08c95cf0c4115e45294e3cd0dee724a1165b7fc11798369308a465bd26/LJSpeech-1.1/wavs/LJ001-0001.wav',
 'sampling_rate': 16000}

正如你所看到的,采样率被下调到16khz。现在您已经了解了重取样的工作原理,接下来让我们用 SUPERB 数据集回到前面的例子!

特性提取器

下一步是加载一个特性提取器来规范化和填充输入。在填充文本数据时,会为较短的序列添加0。同样的想法也适用于音频数据,音频特性提取器将添加一个0-解释为沉默-到数组。

利用AutoFeatureExtractor.from_pretrained() 加载特征提取器:

from transformers import AutoFeatureExtractor

feature_extractor = AutoFeatureExtractor.from_pretrained("facebook/wav2vec2-base")

将音频数组传递给特征提取器。我们还建议在特性提取器中添加采样率参数,以便更好地调试可能发生的任何静默错误。

audio_input = [dataset["train"][0]["audio"]["array"]]
feature_extractor(audio_input, sampling_rate=16000)
{'input_values': [array([ 0.00045439,  0.00045439,  0.00045439, ..., -0.1578519 , -0.10807519, -0.06727459], dtype=float32)]}

填充和截断

与tokenizer一样,您可以应用填充或截断来处理批处理中的变量序列。看看这两个音频样本的序列长度:

dataset["train"][0]["audio"]["array"].shape
(1522930,)

dataset["train"][1]["audio"]["array"].shape
(988891,)

如您所见,第一个样本的序列比第二个样本的序列更长。让我们创建一个函数来预处理数据集。指定一个最大的采样长度,特征提取器会将序列平移或截断以匹配它:

def preprocess_function(examples):
    audio_arrays = [x["array"] for x in examples["audio"]]
    inputs = feature_extractor(
        audio_arrays,
        sampling_rate=16000,
        padding=True,
        max_length=1000000,
        truncation=True,
    )
    return inputs

对数据集中的前几个例子应用该函数:

processed_dataset = preprocess_function(dataset["train"][:5])

现在再看一下处理过的样本长度:

processed_dataset["input_values"][0].shape
(1000000,)

processed_dataset["input_values"][1].shape
(1000000,)

前两个示例的长度现在匹配您指定的最大长度。

视觉

特征提取器也用于处理视觉任务的图像。同样,我们的目标是将原始图像转换为一批张量作为输入。

让我们加载本教程的 food101数据集。使用 Datasets split 参数只从训练分割中加载小样本,因为数据集非常大:

from datasets import load_dataset

dataset = load_dataset("food101", split="train[:100]")

接下来,我们来看看这张带有数据集功能的图片:

dataset[0]["image"]
vision-preprocess-tutorial.png

特性提取器 特性提取器

使用 AutoFeatureExtractor.from_pretrained ()加载特性提取器:

from transformers import AutoFeatureExtractor

feature_extractor = AutoFeatureExtractor.from_pretrained("google/vit-base-patch16-224")

数据增加 数据增加

对于视觉任务,通常添加一些类型的数据增强作为预处理的一部分图像。您可以添加任何您喜欢的库的扩展,但是在本教程中,您将使用 torchvision 的转换模块。

将图像正常化并使用 Compose 链接一些转换—— RandomResizedCrop 和 ColorJitter ——一起:

from torchvision.transforms import Compose, Normalize, RandomResizedCrop, ColorJitter, ToTensor

normalize = Normalize(mean=feature_extractor.image_mean, std=feature_extractor.image_std)
_transforms = Compose(
    [RandomResizedCrop(feature_extractor.size), ColorJitter(brightness=0.5, hue=0.5), ToTensor(), normalize]
)

该模型接受像素值作为输入。此值由特征提取器生成。创建一个函数,通过转换生成像素值:

def transforms(examples):
    examples["pixel_values"] = [_transforms(image.convert("RGB")) for image in examples["image"]]
    return examples

然后使用 Datasets set_transform 动态应用转换:

dataset.set_transform(transforms)
``

现在当你访问图像时,你会注意到特征提取器已经添加了模型输入 pixel_值:

```python
dataset[0]["image"]
{'image': <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=384x512 at 0x7F1A7B0630D0>,
 'label': 6,
 'pixel_values': tensor([[[ 0.0353,  0.0745,  0.1216,  ..., -0.9922, -0.9922, -0.9922],
          [-0.0196,  0.0667,  0.1294,  ..., -0.9765, -0.9843, -0.9922],
          [ 0.0196,  0.0824,  0.1137,  ..., -0.9765, -0.9686, -0.8667],
          ...,
          [ 0.0275,  0.0745,  0.0510,  ..., -0.1137, -0.1216, -0.0824],
          [ 0.0667,  0.0824,  0.0667,  ..., -0.0588, -0.0745, -0.0980],
          [ 0.0353,  0.0353,  0.0431,  ..., -0.0039, -0.0039, -0.0588]],
 
         [[ 0.2078,  0.2471,  0.2863,  ..., -0.9451, -0.9373, -0.9451],
          [ 0.1608,  0.2471,  0.3098,  ..., -0.9373, -0.9451, -0.9373],
          [ 0.2078,  0.2706,  0.3020,  ..., -0.9608, -0.9373, -0.8275],
          ...,
          [-0.0353,  0.0118, -0.0039,  ..., -0.2392, -0.2471, -0.2078],
          [ 0.0196,  0.0353,  0.0196,  ..., -0.1843, -0.2000, -0.2235],
          [-0.0118, -0.0039, -0.0039,  ..., -0.0980, -0.0980, -0.1529]],
 
         [[ 0.3961,  0.4431,  0.4980,  ..., -0.9216, -0.9137, -0.9216],
          [ 0.3569,  0.4510,  0.5216,  ..., -0.9059, -0.9137, -0.9137],
          [ 0.4118,  0.4745,  0.5216,  ..., -0.9137, -0.8902, -0.7804],
          ...,
          [-0.2314, -0.1922, -0.2078,  ..., -0.4196, -0.4275, -0.3882],
          [-0.1843, -0.1686, -0.2000,  ..., -0.3647, -0.3804, -0.4039],
          [-0.1922, -0.1922, -0.1922,  ..., -0.2941, -0.2863, -0.3412]]])}

下面是对图像进行预处理后的效果。正如您所期望的从应用变换,图像已经随机裁剪,它的颜色属性是不同的。

import numpy as np
import matplotlib.pyplot as plt

img = dataset[0]["pixel_values"]
plt.imshow(img.permute(1, 2, 0))
preprocessed_image

多式联运 多式联运

对于多通道任务。您将使用到目前为止所学的一切知识的组合,并将您的技能应用于自动语音识别(ASR)任务。这意味着你需要一个:

特征提取器来预处理音频数据。

用 Tokenizer 处理文本 用 Tokenizer 处理文本

让我们回到 LJ 的演讲数据集:

from datasets import load_dataset

lj_speech = load_dataset("lj_speech", split="train")

因为你主要对音频和文本栏感兴趣,删除其他栏:

lj_speech = lj_speech.map(remove_columns=["file", "id", "normalized_text"])

现在看一下音频和文本栏:

lj_speech[0]["audio"]
{'array': array([-7.3242188e-04, -7.6293945e-04, -6.4086914e-04, ...,
         7.3242188e-04,  2.1362305e-04,  6.1035156e-05], dtype=float32),
 'path': '/root/.cache/huggingface/datasets/downloads/extracted/917ece08c95cf0c4115e45294e3cd0dee724a1165b7fc11798369308a465bd26/LJSpeech-1.1/wavs/LJ001-0001.wav',
 'sampling_rate': 22050}

lj_speech[0]["text"]
'Printing, in the only sense with which we are at present concerned, differs from most if not from all the arts and crafts represented in the Exhibition'

记住在前面关于处理音频数据的章节中,你应该重新测量音频数据的采样率来匹配用于预先训练模型的数据集的采样率:

lj_speech = lj_speech.cast_column("audio", Audio(sampling_rate=16_000))

处理器

处理器结合了功能提取器和tokenizer。用[‘ AutoProcessor.from_pretrained ]加载处理器:

from transformers import AutoProcessor

processor = AutoProcessor.from_pretrained("facebook/wav2vec2-base-960h")

创建一个函数来处理音频数据以输入_值,并将文本标记为标签。这些是你对模型的投入:

def prepare_dataset(example):
    audio = example["audio"]

    example["input_values"] = processor(audio["array"], sampling_rate=16000)

    with processor.as_target_processor():
        example["labels"] = processor(example["text"]).input_ids
    return example

将 prepare_dataset 函数应用于示例:

prepare_dataset(lj_speech[0])

注意处理器已经添加了 input_value 和标签,取样速率也被正确地下调到了16khz。

太棒了,你现在应该能够预处理任何模式的数据,甚至结合不同的模式!在下一个教程中,学习如何对新的预处理数据进行模型优化。

所有你一直想知道的关于填充和截断的东西所有你一直想知道的关于填充和截断的东西

我们已经看到了适用于大多数情况的命令(将您的批处理添加到最大句子的长度并截断到模型可以接受的最大长度)。但是,如果您需要的话,这个 API 支持更多的策略。您需要知道的三个参数是 padding、 trunation 和 max_length。

  • Padding 控制填充。它可以是一个布尔值或一个字符串,它应该是:

    • True 或 “longest”来填充批处理中最长的序列(如果只提供单个序列,则不进行填充)。
    • 如果没有提供最大长度,“ max_length”可以填充到 max_length 参数指定的长度,或者模型可以接受的最大长度(max_length = None)。如果您只提供一个序列,则仍将对其应用填充。
    • 默认不进行填充。
  • 截断控制截断。它可以是一个布尔值或一个应该是:

    • 如果没有提供最大长度,则截断为 max_length 参数指定的最大长度或模型接受的最大长度(max_length = None)。这将逐个令牌截断令牌,从对中最长的序列中删除令牌,直到达到合适的长度。
    • only_second 截断到 max_length 参数指定的最大长度,如果没有提供 max_length = None,则截断到模型可接受的最大长度。如果提供了一对序列(或一批序列对) ,则只会截断一对序列的第二句。
    • only_first 截断到 max_length 参数指定的最大长度,或者在没有提供 max_length = None 的情况下模型接受的最大长度。如果提供了一对序列(或一批序列对) ,则只会截断一对序列的第一句。
    • False 或者 do_not_truncate 来避免截断序列。
  • Max_length 来控制填充/截断的长度。它可以是整数或 None,在这种情况下,它将默认为模型可以接受的最大长度。如果模型没有特定的最大输入长度,则停用截断/填充到最大长度。

下面是一个表,总结了设置填充和截断的推荐方法。如果你在下面的例子中使用一对输入序列,你可以用[‘ only_first’,‘ only_second’,‘ longest_first’]中选择的一个策略替换 truncation = True,也就是截断 = ‘ only_second’或者截断 = ‘ longest_first’来控制两个序列如何被截断。

在这里插入图片描述

本文是抱抱脸(Hugging Face)教程中文翻译,仅学习使用

原文链接

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

抱抱脸(hugging face)教程-中文翻译-预处理 的相关文章

  • 词干函数错误:词干需要一个位置参数

    这里的stem函数显示错误 指出stem需要循环中的一个位置参数 如所讨论的 from nltk stem import PorterStemmer as ps text my name is pythonly and looking fo
  • target_vocab_size 在方法 tfds.features.text.SubwordTextEncoder.build_from_corpus 中到底意味着什么?

    根据这个链接 https www tensorflow org datasets api docs python tfds features text SubwordTextEncoder build from corpus target
  • 生成易于记忆的随机标识符

    与所有开发人员一样 我们在日常工作中不断处理某种标识符 大多数时候 它与错误或支持票有关 我们的软件在检测到错误后 会创建一个包 该包的名称由时间戳和版本号格式化 这是创建合理唯一标识符以避免混淆包的一种廉价方法 例子 错误报告 20101
  • Node2vec 的工作原理

    我一直在读关于node2vec https cs stanford edu jure pubs node2vec kdd16 pdf嵌入算法 我有点困惑它是如何工作的 作为参考 node2vec 由 p 和 q 参数化 并通过模拟来自节点的
  • BERT 输出不确定

    BERT 输出是不确定的 当我输入相同的输入时 我希望输出值是确定性的 但我的 bert 模型的值正在变化 听起来很尴尬 同一个值返回两次 一次 也就是说 一旦出现另一个值 就会出现相同的值并重复 如何使输出具有确定性 让我展示我的代码片段
  • gensim如何计算doc2vec段落向量

    我正在看这篇论文http cs stanford edu quocle paragraph vector pdf http cs stanford edu quocle paragraph vector pdf 它指出 段落向量和词向量被平
  • NLTK:包错误?朋克和泡菜?

    基本上 我不知道为什么会收到此错误 只是为了获得更多图像 这里有一个代码格式的类似消息 由于是最新的 该帖子的答案已经在消息中提到 Preprocessing raw texts LookupError Traceback most rec
  • 如何在R中使用OpenNLP获取POS标签?

    这是 R 代码 library NLP library openNLP tagPOS lt function x s lt as String x word token annotator lt Maxent Word Token Anno
  • 旧版本的 spaCy 在尝试安装模型时抛出“KeyError: 'package'”错误

    我在 Ubuntu 14 04 4 LTS x64 上使用 spaCy 1 6 0 和 python3 5 为了安装 spaCy 的英文版本 我尝试运行 这给了我错误消息 ubun ner 3 NeuroNER master src pyt
  • 除非 POS 显式,否则 WordNetLemmatizer 不会返回正确的引理 - Python NLTK

    我正在对 Ted 数据集成绩单进行词形还原 我注意到一些奇怪的事情 并非所有单词都被词形还原 要说的是 selected gt select 哪个是对的 然而 involved gt involve and horsing gt horse
  • 斯坦福 CoreNLP:使用部分现有注释

    我们正在尝试利用现有的 代币化 句子分割 和命名实体标记 同时我们希望使用斯坦福 CoreNlp 额外为我们提供 词性标注 词形还原 和解析 目前 我们正在尝试以下方式 1 为 pos lemma parse 创建一个注释器 Propert
  • 验证 Transformer 中多头注意力的实现

    我已经实施了MultiAttention head in Transformers 周围有太多的实现 所以很混乱 有人可以验证我的实施是否正确 DotProductAttention 引用自 https www tensorflow org
  • 给定文档,选择相关片段

    当我在这里提出问题时 自动搜索返回的问题的工具提示给出了问题的前一点 但其中相当一部分没有给出任何比理解问题更有用的文本 标题 有谁知道如何制作一个过滤器来删除问题中无用的部分 我的第一个想法是修剪仅包含某个列表中的单词的任何前导句子 例如
  • 获取 NLTK 索引的所有结果

    我正在使用 NLTK 来查找单词的一致性 但我不知道如何获取所有结果并将它们放入list or set 例如 text concordance word 仅打印前 25 个结果 TL DR text concordance lines 10
  • 计算机AI算法写句子?

    我正在寻找有关处理文本句子或在创建在正常人类语言 例如英语 中有效的句子时遵循结构的算法的信息 我想知道这个领域是否有我可以学习或开始使用的项目 例如 如果我给一个程序一个名词 为其提供同义词库 相关单词 和词性 以便它理解每个单词在句子中
  • 如何将句子或文档转换为向量?

    我们有将单词转换为向量的模型 例如 word2vec 模型 是否存在类似的模型 可以使用为单个单词学习的向量将句子 文档转换为向量 1 跳克法 以及使用它的工具 谷歌 word2vec https code google com p wor
  • Python NLP 英式英语与美式英语

    我目前正在用Python 进行NLP 工作 然而 在我的语料库中 既有英式英语也有美式英语 实现 实现 我正在考虑将英式英语转换为美式英语 但是 我没有找到一个好的工具 包来做到这一点 有什么建议么 我也找不到包 但试试这个 请注意 我必须
  • 使用自定义层运行 Keras 模型时出现问题

    我目前正在攻读学士学位论文FIIT STU https www fiit stuba sk en html page id 749 其主要目标是尝试复制和验证以下结果study http arxiv org abs 2006 00885 这
  • 分词统计方法

    我想解决分词问题 从没有空格的长字符串中解析单词 例如我们想要从中提取单词somelongword to some long word 我们可以通过字典的动态方法来实现这一点 但我们遇到的另一个问题是解析歧义 IE orcore gt or
  • 如何在 scikit-learn 的 SVM 中使用非整数字符串标签? Python

    Scikit learn 具有相当用户友好的用于机器学习的 python 模块 我正在尝试训练用于自然语言处理 NLP 的 SVM 标记器 其中我的标签和输入数据是单词和注释 例如 词性标记 而不是使用双精度 整数数据作为输入元组 1 2

随机推荐

  • MFC中实现用DC画线

    void CDrawView OnLButtonDown UINT nFlags CPoint point TODO Add your message handler code here and or call default Messag
  • 9-组件扫描(注解开发)

    组件扫描 component scanning Spring 能够从 classpath 下自动扫描 侦测和实例化具有特定注解的组件 特定组件包括 Component 基本注解 标识了一个受 Spring 管理的组件 Respository
  • 代码审计之若依系统

    文章目录 前言 一 本地项目部署 二 漏洞挖掘 1 整理思路 2 shiro反序列化漏洞 2 SQL注入 3 Thymeleaf模板注入 4 SnakeYaml 反序列化 5 Druid未授权访问 6 swagger ui html接口文档
  • pandas 读取某一单元格的值_pandas读取表格后的常用数据处理操作

    关键时刻 第一时间送达 本文已获原作者授权 欢迎分享转发 今天给大家讲讲pandas读取表格后的一些常用数据处理操作 这篇文章其实来源于自己的数据挖掘课程作业 通过完成老师布置的作业 感觉对于使用python中的pandas模块读取表格数据
  • HLS-M3U8流媒体视频加密KEY介绍以及平台案例!

    首先介绍M3U8 M3U M3U8其实是 HTTP Live Streaming 缩写为 HLS 协议的部分内容 而 HLS HTTP Live Streaming 是Apple的动态码率自适应技术 主要用于PC和Apple终端的音视频服务
  • IJCV2021 人脸关键点检测器PIPNet

    阿联酋起源人工智能研究院 IIAI 科学家提出了一种新颖的人脸关键点检测方法PIPNet 通过融合坐标回归和热力图回归的优势 并结合半监督学习充分利用大量无标注数据提升跨域的泛化性能 最终得到一个又快又准又稳的人脸关键点检测器 相关论文已被
  • 关于云计算存储虚拟化技术三个层次上的实现

    关于云计算存储虚拟化技术三个层次上的实现 随着企业的成长 业务和应用不断增加 IT 系统规模日益庞大 带来高能耗 数据中心空间紧张 IT 系统总体拥有成本过高等问题 而现有服务器 存储系统等设备又没有充分被利用起来 资源极度浪费 IT基础架
  • Xposed框架安装、使用及插件开发

    往期推荐 HOOK startActivity HOOK框架 动态代理 HOOK框架 静态代理 实战案列分析 Crakeme01 需要相关资料的朋友 可以 加入此处即可打包获取 Xposed框架是一款可以在不修改APK的情况下影响程序运行
  • 医学图像DICOM文件解析——DICOM内部信息详解篇

    文章目录 一 医学影像学介绍 二 DICOM文件简介 三 DICOM内部信息详解 DICOM Tag与VR 1 常见的TAG 1 Patient Tag 2 Study Tag 3 Series Tag 4 Image Tag 2 VR数据
  • URP源码学习(四)光照

    光照可以分两部分来看 一个是对光源的处理 主要逻辑在C 代码ForwardLights类 一个是shader的计算 核心是Lighting hlsl文件 先看看光源的一些设置 在管线设置 主光 2个选项 关闭 逐像素 只支持平行光 选择亮度
  • 海康和多益面经

    海康的电话面试主要是谈项目 检测主要谈到faster rcnn模型在项目中的使用和感受野的问题 分割主要谈到u net网络模型本身的优点和在具体场景下的应用细节 因此准备一个好的自我介绍是必不可少的 多益网络的面试是视频面试 首先是自我介绍
  • 数据库原理概念复习

    1 绪论 1 数据是数据库中存储的基本对象 2 数据库是长期存储在计算机内 有组织 可共享的大量数据集合 数据库中的数据按照一定的数据模型组织 描述和存储 具有较小的冗余度 较高的数据独立性和易扩展性 并可为各种用户共享 3 数据库管理系统
  • MySQL表操作:提高数据处理效率的秘诀(进阶)(2)

    学习难免有坎坷 重要的是你能尽力而为 持之以恒 作者 不能再留遗憾了 专栏 MySQL学习 本文章主要内容 MySQL表操作进阶 聚合查询和联合查询 文章目录 前言 聚合查询 聚合函数 group by子句 having 子句 联合查询 内
  • 有哪些提供比较好的网页模板网站?

    说到网页建站模板 有很多人可能会在第一时间想到织梦CMS Wordpress等建站主题 的确这些开源程序的建站主题为广大中小建站者提供了极大的便利 只需要略懂建站方面的知识 就可以方便的玩转模板建站 如果选择织梦CMS 那么我们选择模板通常
  • 简单理解万向锁

    万向锁是什么 x轴旋转 90度 此时我们修改y轴表现为local坐标轴z轴的旋转 而修改z轴仍然为z轴的旋转 即万象锁 首先 在一个苹果 随便什么 上扎三个牙签代表local的xyz 1先在x轴转90 再在y轴转90 拍张照记录为 90 9
  • 在windows配置redis的一些错误及解决方案

    目录 Unable to connect to Redis nested exception is io lettuce core RedisConnectionException 用客户端Redis Desktop Manager一样的密
  • 记录个推推送设置华为角标失败的问题

    背景 Flutter项目集成个推 场景 后台通过个推离线推送添加了角标数字 然后应用启动的时候需要清除 查看个推文档有一个方法设置角标数字 具体方法 PushManager getInstance setHwBadgeNum Context
  • Halcon 拟合直线

    本文用 Halcon 的矩阵操作实现最小二乘拟合直线 首先随机生成一组数据 Mx 100 10 500 tuple length Mx len tuple gen const len 5 r Ma 2 Mb 40 tuple rand le
  • 【numpy】argmax参数辨析(axis=0,axis=1,axis=-1)

    every blog every motto You can do more than you think 0 前言 网上一般都是axis 0 axis 1 很少有axis 1的博客 在这进行简单的小结 后续可能会增补 说明 代码在 jup
  • 抱抱脸(hugging face)教程-中文翻译-预处理

    预处理 在您可以在模型中使用数据之前 需要将数据处理为模型可接受的格式 模型不理解原始文本 图像或音频 这些输入需要转换成数字并组装成张量 在本教程中 您将 用tokenizer处理文本 用特征提取器对图像或音频数据进行预处理 使用处理器预