#python-3.x #nlp #word-embedding #bert-language-model
#python-3.x #nlp #встраивание слов #bert-language-model
Вопрос:
Я пытаюсь получить вложения word для клинических данных с помощью microsoft / pubmedbert. У меня 3,6 миллиона текстовых строк. Преобразование текстов в векторы для 10 тыс. строк занимает около 30 минут. Таким образом, для 3,6 миллионов строк потребуется около 180 часов (приблизительно 8 дней).
Есть ли какой-либо метод, с помощью которого я могу ускорить процесс?
Мой код —
from transformers import AutoTokenizer
from transformers import pipeline
model_name = "microsoft/BiomedNLP-PubMedBERT-base-uncased-abstract-fulltext"
tokenizer = AutoTokenizer.from_pretrained(model_name)
classifier = pipeline('feature-extraction',model=model_name, tokenizer=tokenizer)
def lambda_func(row):
tokens = tokenizer(row['notetext'])
if len(tokens['input_ids'])>512:
tokens = re.split(r'b', row['notetext'])
tokens= [t for t in tokens if len(t) > 0 ]
row['notetext'] = ''.join(tokens[:512])
row['vectors'] = classifier(row['notetext'])[0][0]
return row
def process(progress_notes):
progress_notes = progress_notes.apply(lambda_func, axis=1)
return progress_notes
progress_notes = process(progress_notes)
vectors_breadth = 768
vectors_length = len(progress_notes)
vectors_2d = np.reshape(progress_notes['vectors'].to_list(), (vectors_length, vectors_breadth))
vectors_df = pd.DataFrame(vectors_2d)
Мой фрейм данных progress_notes выглядит следующим образом —
progress_notes = pd.DataFrame({'id':[1,2,3],'progressnotetype':['Nursing Note', 'Nursing Note', 'Administration Note'], 'notetext': ['Patient's skin is grossly intact with exception of skin tear to r inner elbow and r lateral lower leg','Patient with history of Afib with RVR. Patient is incontinent of bowel and bladder.','Give 2 tablet by mouth every 4 hours as needed for Mild to moderate Pain Not to exceed 3 grams in 24 hours']})
Примечание — 1) Я запускаю код на экземпляре aws ec2 размером r5.8x (32
Процессоры) — Я пытался использовать многопроцессорную обработку, но код заходит в
тупик, потому что bert занимает все мои процессорные ядра.
Комментарии:
1. Как насчет vectors_length и vectors_breadth? Эти значения не определены.
2. @LydiavanDyke — привет, Лидия, я добавил код, который объясняет vectors_length и vectors_breadth
3. станет ли код быстрым, если я использую GPU / TPU?