Как я могу реализовать модель классификации последовательностей с несколькими метками, используя векторизацию TF-IDF с пPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу реализовать модель классификации последовательностей с несколькими метками, используя векторизацию TF-IDF с п

Сообщение Anonymous »

Это ссылка на набор данных — https://huggingface.co/datasets/surrey-nlp/PLOD-CW
Вы можете загрузить набор данных, используя эту строку — load_dataset( "surrey-nlp/PLOD-CW")
Я пытался написать код, в котором сначала векторизую набор данных с помощью word2vec, а затем применяю алгоритм LSTM для классификации последовательностей с несколькими метками, но я сталкиваюсь ошибка.
Это код, который я создал-

Код: Выделить всё

import numpy as np
import tensorflow as tf
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.layers import Input, LSTM, Dense, Embedding, Dropout
from tensorflow.keras.models import Model
from tensorflow.keras.callbacks import ModelCheckpoint
from tensorflow.keras.utils import to_categorical
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split

datasets = load_dataset("surrey-nlp/PLOD-CW")

# Preprocess the data for a single dictionary
def preprocess_data(data):
processed_data = []
for sentence in data['tokens']:
processed_sentence = []
for word in sentence:
processed_sentence.append(word.lower())
processed_data.append(processed_sentence)
return processed_data

# Convert the data into Tfidf vectors
# Convert the data into Tfidf vectors
def tfidf_vectorization(data):
data_strings = [' '.join(sentence) for sentence in data]
vectorizer = TfidfVectorizer(max_features=5000)
tfidf_matrix = vectorizer.fit_transform(data_strings)
return tfidf_matrix, vectorizer

# Build the LSTM model
def build_lstm_model(input_shape, num_labels):
inputs = Input(shape=input_shape)
embedding_layer = Embedding(input_dim=5000, output_dim=100, input_length=input_shape[0])(inputs)
lstm_layer = LSTM(units=100, return_sequences=False)(embedding_layer)
dense_layer = Dense(units=num_labels, activation='sigmoid')(lstm_layer)
model = Model(inputs=inputs, outputs=dense_layer)
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
return model

# Preprocess the data for the list of dictionaries
processed_data = [preprocess_data(dataset) for dataset in datasets.values()]

# Convert the data into Tfidf vectors
tfidf_matrix, vectorizer = tfidf_vectorization(processed_data)

# Prepare the data for LSTM input
max_sequence_length = 50
X = tfidf_matrix.toarray()
X = pad_sequences(X, maxlen=max_sequence_length, padding='post', truncating='post')

# Prepare the labels
num_labels = len(np.unique(np.concatenate([dataset['train']['ner_tags'] for dataset in datasets])))
Y = np.concatenate([np.array(dataset['train']['ner_tags']) for dataset in datasets])
Y = to_categorical(Y, num_labels)

# Split the data into training and validation sets
X_train, X_val, Y_train, Y_val = train_test_split(X, Y, test_size=0.1, random_state=42)

# Build the LSTM model
input_shape = (max_sequence_length,)
model = build_lstm_model(input_shape, num_labels)

# Train the model
checkpointer = ModelCheckpoint(filepath='best_model.h5', verbose=1, save_best_only=True)
model.fit(X_train, Y_train, validation_data=(X_val, Y_val), epochs=10, batch_size=32, callbacks=[checkpointer])

# Evaluate the model
model.load_weights('best_model.h5')
loss, accuracy, f1_score = model.evaluate(X_val, Y_val, verbose=1)
print('Loss:', loss)
print('Accuracy:', accuracy)
print('F1 Score:', f1_score)
Я получаю следующую ошибку:

Код: Выделить всё

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Input In [67], in ()
42 processed_data = [preprocess_data(dataset) for dataset in datasets.values()]
44 # Convert the data into Tfidf vectors
---> 45 tfidf_matrix, vectorizer = tfidf_vectorization(processed_data)
47 # Prepare the data for LSTM input
48 max_sequence_length = 50

Input In [67], in tfidf_vectorization(data)
25 def tfidf_vectorization(data):
---> 26     data_strings = [' '.join(sentence) for sentence in data]
27     vectorizer = TfidfVectorizer(max_features=5000)
28     tfidf_matrix = vectorizer.fit_transform(data_strings)

Input In [67], in (.0)
25 def tfidf_vectorization(data):
--->  26     data_strings = [' '.join(sentence) for sentence in data]
27     vectorizer = TfidfVectorizer(max_features=5000)
28     tfidf_matrix = vectorizer.fit_transform(data_strings)

TypeError: sequence item 0: expected str instance, list found
Я пытался заставить этот код работать, чтобы я мог создать код для классификации последовательностей с несколькими метками с использованием векторизации TFIDF и алгоритма LSTM.
Наборы данных состоят из-

Код: Выделить всё

DatasetDict({
train: Dataset({
features: ['tokens', 'pos_tags', 'ner_tags'],
num_rows: 1072
})
validation: Dataset({
features: ['tokens', 'pos_tags', 'ner_tags'],
num_rows: 126
})
test: Dataset({
features: ['tokens', 'pos_tags', 'ner_tags'],
num_rows: 153
})
})
Для этих двух строк-

Код: Выделить всё

data=datasets['train'][0:3]
print(data)
Выходные данные приходят-

Код: Выделить всё

{'tokens': [['For', 'this', 'purpose', 'the', 'Gothenburg', 'Young', 'Persons', 'Empowerment', 'Scale', '(', 'GYPES', ')', 'was', 'developed', '.'], ['The', 'following', 'physiological', 'traits', 'were', 'measured', ':', 'stomatal', 'conductance', '(', 'gs', ',', 'mol', 'H2O', 'm-2', 's-1', ')', ',', 'transpiration', 'rate', '(', 'E', ',', 'mmol', 'H2O', 'm-2', 's-1', ')', ',', 'net', 'photosynthetic', 'rate', '(', 'PN', ',', 'μmol', 'm-2', 's-1', ')', 'and', 'intercellular', 'CO2', 'concentration', 'CO2', '(', 'Ci', ',', 'μmol', 'm-2', 's-1', ')', '.'], ['Minor', 'H', 'antigen', 'alloimmune', 'responses', 'readily', 'occur', 'in', 'the', 'setting', 'of', 'human', 'leukocyte', 'antigen', '(', 'HLA)–matched', 'allogeneic', 'solid', 'organ', 'and', 'stem', 'cell', 'transplantation', '(', 'SCT', ')', '[', '3,4', ']', '.']], 'pos_tags': [['ADP', 'DET', 'NOUN', 'DET', 'PROPN', 'PROPN', 'PROPN', 'PROPN', 'PROPN', 'PUNCT', 'PROPN', 'PUNCT', 'AUX', 'VERB', 'PUNCT'], ['DET', 'ADJ', 'ADJ', 'NOUN', 'AUX', 'VERB', 'PUNCT', 'ADJ', 'NOUN', 'PUNCT', 'PROPN', 'PUNCT', 'NOUN', 'NOUN', 'NOUN', 'NOUN', 'PUNCT', 'PUNCT', 'NOUN', 'NOUN', 'PUNCT', 'PROPN', 'PUNCT', 'NOUN', 'NOUN', 'NOUN', 'NOUN', 'PUNCT', 'PUNCT', 'ADJ', 'ADJ', 'NOUN', 'PUNCT', 'PROPN', 'PUNCT', 'NOUN', 'NOUN', 'NOUN', 'PUNCT', 'CCONJ', 'ADJ', 'NOUN', 'NOUN', 'PROPN', 'PUNCT', 'PROPN', 'PUNCT', 'NOUN', 'NOUN', 'NOUN', 'PUNCT', 'PUNCT'], ['ADJ', 'PROPN', 'NOUN', 'ADJ', 'NOUN', 'ADV', 'VERB', 'ADP', 'DET', 'NOUN', 'ADP', 'ADJ', 'NOUN', 'NOUN', 'PUNCT', 'PROPN', 'ADJ', 'ADJ', 'NOUN', 'CCONJ', 'NOUN', 'NOUN', 'NOUN', 'PUNCT', 'PROPN', 'PUNCT', 'PUNCT', 'NUM', 'PUNCT', 'PUNCT']], 'ner_tags': [['B-O', 'B-O', 'B-O', 'B-O', 'B-LF', 'I-LF', 'I-LF', 'I-LF', 'I-LF', 'B-O', 'B-AC', 'B-O', 'B-O', 'B-O', 'B-O'], ['B-O', 'B-O', 'B-O', 'B-O', 'B-O', 'B-O', 'B-O', 'B-LF', 'I-LF', 'B-O', 'B-AC', 'B-O', 'B-O', 'B-O', 'B-O', 'B-O', 'B-O', 'B-O', 'B-LF', 'I-LF', 'B-O', 'B-AC', 'B-O', 'B-O', 'B-O', 'B-O', 'B-O', 'B-O', 'B-O', 'B-LF', 'I-LF', 'I-LF', 'B-O', 'B-AC', 'B-O', 'B-O', 'B-O', 'B-O', 'B-O', 'B-O', 'B-LF', 'I-LF', 'I-LF', 'B-AC', 'B-O', 'B-AC', 'B-O', 'B-O', 'B-O', 'B-O', 'B-O', 'B-O'], ['B-O', 'B-AC', 'B-O', 'B-O', 'B-O', 'B-O', 'B-O', 'B-O', 'B-O', 'B-O', 'B-O', 'B-LF', 'I-LF', 'I-LF', 'B-O', 'B-AC', 'B-O', 'B-O', 'B-O', 'B-O', 'B-LF', 'I-LF', 'I-LF', 'B-O', 'B-AC', 'B-O', 'B-O', 'B-O', 'B-O', 'B-O']]}
Пожалуйста, помогите мне внести изменения в код, чтобы я мог получить выходные данные. Пожалуйста, дайте мне альтернативу или внесите исправления в соответствии с набором данных, чтобы я мог создать код для классификации последовательностей с использованием векторизации Tfidf и алгоритма LSTM.

Подробнее здесь: https://stackoverflow.com/questions/783 ... tf-idf-vec
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»