3 votes

Joindre quelques éléments de la liste en Python

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)

3voto

Neha Chaudhary Points 1019

Il n'y a probablement pas besoin d'imbriquer for loops ici.
Le code ci-dessous fonctionne parfaitement.

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

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

tokenized_text[i-1:j] = [''.join(tokenized_text[i-1:j])]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X