【问题标题】:Join a few elements of the list in Python在 Python 中加入列表的一些元素
【发布时间】:2020-05-16 17:29:36
【问题描述】:

请看下面的代码

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', '.']

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

我不知道如何解决这个问题。另请注意,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】:

    这里可能不需要嵌套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])]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      • 2020-01-24
      • 1970-01-01
      相关资源
      最近更新 更多