Veuillez consulter le code ci-dessous
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)
La sortie du code ci-dessus est montrée ci-dessous :-
['Here', 'Gis', 'Gthe', 'Gsentence', 'GI', 'Gwant', 'Gembed', 'd', 'ings', 'Gfor', '.']
Mais je veux une sortie comme celle-ci :-
['Here', 'Gis', 'Gthe', 'Gsentence', 'GI', 'Gwant', 'Gembeddings', 'Gfor', '.']
Ainsi, lors de la tokenisation du texte, le tokenizer a séparé le mot "embeddings" parce qu'il n'a pas ce mot dans son dictionnaire. Mais, je ne veux pas que cela se produise. Je veux que le mot entier 'embedding' soit tokenisé tel quel.
Je ne sais pas comment résoudre ce problème. Veuillez également noter que tokenized_text est un objet Liste. Veuillez m'aider.
EDIT 1 : J'ai trouvé cette solution
tokenized_text[6:9] = [''.join(tokenized_text[6:9])]
print(tokenized_text)
Et cela m'a donné le résultat souhaité aussi, mais je ne veux pas donner les chiffres ici spécifiquement. Je veux que la machine le découvre d'elle-même. Par exemple, si un élément de la liste ne commence pas par le caractère spécial 'G', cet élément doit être joint à l'élément précédent, et ainsi de suite.
EDIT 2 : Je suis tombé sur une autre approche et en voici le code, mais il ne fonctionne pas, probablement à cause de boucles for erronées.
for i in range(1, len(tokenized_text)):
if tokenized_text[i].startswith('G'):
i += 1
else:
for j in range(i, len(tokenized_text)):
if tokenized_text[j].startswith("G") :
pass
else :
j += 1
tokenized_text[i-1:j] = [''.join(tokenized_text[i-1:j])]
print(tokenized_text)