加入Python列表中的一些元素

问题描述 投票:1回答:1

请看下面的代码

from transformers import GPT2Tokenizer, GPT2Model

text = "Here is the sentence I want embeddings for."
#marked_text = "[CLS] " + text + " [SEP]"
# Tokenize our sentence with the GPT2 tokenizer.
tokenized_text = tokenizer.tokenize(text)
print(tokenized_text)

以上代码的输出如下所示:-

['Here', 'Ġis', 'Ġthe', 'Ġsentence', 'ĠI', 'Ġwant', 'Ġembed', 'd', 'ings', 'Ġfor', '.']

但是我想要这样的输出:-

['Here', 'Ġis', 'Ġthe', 'Ġsentence', 'ĠI', 'Ġwant', 'Ġembeddings', 'Ġfor', '.']

因此,在对文本进行标记化时,标记化程序将单词'embedddings'分割开了,因为它的字典中没有这个词。但是,我不希望这种情况发生。我希望整个词“嵌入”都按原样被标记。

我不知道该如何解决。还请注意,tokenized_text是一个List对象。请帮助。

编辑1:我提供了此解决方案

tokenized_text[6:9] = [''.join(tokenized_text[6:9])]
print(tokenized_text)

而且它也给了我想要的输出,但是我不想在这里具体给出数字。我希望机器自行解决。就像列表中的任何元素都不以“ G”特殊字符开头一样,该元素都需要与前一个元素结合,依此类推。

编辑2:我遇到了另一种方法,这是它的代码,但可能由于for循环错误而无法使用。

for i in range(1, len(tokenized_text)):
  if tokenized_text[i].startswith('Ġ'):
    i += 1 
  else:
    for j in range(i, len(tokenized_text)):
      if tokenized_text[j].startswith("Ġ") :
        pass
      else :
        j += 1


tokenized_text[i-1:j] = [''.join(tokenized_text[i-1:j])]
print(tokenized_text)
python nlp tokenize transformer
1个回答
1
投票

这里可能不需要嵌套for loops。下面的代码完全可以正常工作。

for i in range(1, len(tokenized_text)):
  if tokenized_text[i].startswith('Ġ'):
    i += 1 
  else :
    break

for j in range(i, len(tokenized_text)):
  if tokenized_text[j][0] in "Ġ.!?,":
    break
  else :
    j += 1

tokenized_text[i-1:j] = [''.join(tokenized_text[i-1:j])]
© www.soinside.com 2019 - 2024. All rights reserved.