在 Python 中加入列表的一些元素
Join a few elements of the list in Python
请查看下面的代码
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', '.']
因此,在对文本进行分词时,分词器拆分了词 'embeddings',因为它的字典中没有这个词。但是,我不希望发生这种情况。我希望整个词 'embedding' 按原样被标记化。
我不知道如何解决这个问题。另请注意 tokenized_text 是一个列表对象。
请帮忙。
编辑 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)
这里可能不需要嵌套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])]
请查看下面的代码
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', '.']
因此,在对文本进行分词时,分词器拆分了词 'embeddings',因为它的字典中没有这个词。但是,我不希望发生这种情况。我希望整个词 'embedding' 按原样被标记化。
我不知道如何解决这个问题。另请注意 tokenized_text 是一个列表对象。 请帮忙。
编辑 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)
这里可能不需要嵌套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])]