функция ‘tf.keras.preprocessing.text_dataset_from_directory’ не читает арабские текстовые файлы

#python #tensorflow #keras

#python #tensorflow #keras

Вопрос:

Я создал модель машинного обучения, которая анализирует тональность английских предложений, но теперь я хочу обучить ту же модель для арабских предложений, однако производительность была плохой, в отличие от английской модели, зная, что я использовал тот же набор данных, переведенный на арабский. Я заметил, что функция из tensorflow raw_val_ds = tf.keras.preprocessing.text_dataset_from_directory(train_dir, batch_size=batch_size, validation_split=0.2, subset='validation', seed=seed) не выдает вывод на арабском языке:

 for text_batch, label_batch in raw_train_ds.take(1):
  for i in range(3):
    print("Review", text_batch.numpy()[i])
    print("Label", label_batch.numpy()[i])
 

Вывод:

 Review b'.xefxbaxaaxefxbbxb4xefxbax9f xefxbbxaaxefxbbxa8xefxbbx9cxefxbbx9f xefxbax80xefxbbxb2xefxbaxb8xefxbbx9fxefxbax8d xefxbaxbexefxbbx8cxefxbax91 xefxbbx92xefxbaxa3xefxbax8dxefxbaxaf xefxbbxaaxefxbbxa7xefxbax87 .Quatermain xefxbax94xefxbaxbcxefxbbx98xefxbbx9f 
Label 1
 

однако на английском языке:

 Review b"David Mamet is a very interesting and a very un-equal director. His first movie 'House of Games' was the one I liked best, and it set a series of films with characters whose perspective of life changes as they get into complicated situations, and so does the perspective of the viewer.
Label 1
 

Поэтому я думаю, что это проблема, поэтому, если кто-нибудь может помочь, я был бы признателен за это!
Спасибо!

Ответ №1:

В этой строке вы преобразуете свои выходные данные в кодировку UTF-8.

 print("Review", text_batch.numpy()[i], encoding='utf-8')
 

Причина, по которой символы в арабском тексте печатаются в байтовых последовательностях, а символы в английском тексте — нет, заключается в том, что кодовая точка для арабских символов > = 128, а для английских символов <128. (Ссылка)

Опуская аргумент encoding, вы должны получить правильный вывод.

 print("Review", text_batch.numpy()[i])
 

Комментарии:

1. Извините, но я отредактирую свой вопрос, у меня есть этот вывод при использовании print("Review", text_batch.numpy()[i]) и не print("Review", text_batch.numpy()[i], encoding='utf-8') зная, что он выдает ошибку, bcz print не имеет такого второго аргумента.

2. В этом случае вы могли бы попытаться расшифровать его. print("Review", text_batch.numpy()[i].decode(encoding='utf-8')) или, если текст закодирован с помощью cp720, вы можете попробовать print("Review", text_batch.numpy()[i].decode(encoding='cp720'))