質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

ASP

ASP(Active Server Pages) あるいはClassic ASP (ASP Classic)は、マイクロソフト社開発した動的なウェブページ製作に利用可能なサーバー側のスプリクトエンジンです。

Q&A

0回答

1255閲覧

英日翻訳したいが日本語データセットが作成できない(keras)

pararinrinrin

総合スコア26

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

ASP

ASP(Active Server Pages) あるいはClassic ASP (ASP Classic)は、マイクロソフト社開発した動的なウェブページ製作に利用可能なサーバー側のスプリクトエンジンです。

0グッド

0クリップ

投稿2021/12/11 11:16

英日翻訳の機械学習アプリを作成したく、以下kerasのサンプルコードを使用しています。
https://keras.io/examples/nlp/neural_machine_translation_with_transformer/

サンプルコードでは英語→スペイン語ですが以下ページにて英日のデータセットを使い英日に適用したいです。
https://www.manythings.org/anki/
(jpn-eng/jpn.txt)
イメージ説明

以下コードです。

python

1import pathlib 2import random 3import string 4import re 5import numpy as np 6import tensorflow as tf 7from tensorflow import keras 8from tensorflow.keras.layers import TextVectorization 9 10text_file = 'jpn-eng/jpn.txt' # 英日データセットを読み込む 11 12# データセットを開き、改行コードごとにデータを分割 13# 分割したデータを1行ずつ取得しタブコードでeng、jpa、else_textに分割 14with open(text_file) as f: 15 lines = f.read().split("\n")[:-1] 16text_pairs = [] 17for line in lines: 18 # 公式ではここがeng,spaのみになる。jpn.txtには余計なテキストが含まれているので一旦それをelse_textと定義。 19 eng, jpa, else_text = line.split("\t") 20 jpa = "[start] " + jpa + " [end]" 21 text_pairs.append((eng, jpa)) 22 23for _ in range(5): 24 print(random.choice(text_pairs)) 25 26random.shuffle(text_pairs) 27num_val_samples = int(0.15 * len(text_pairs)) 28num_train_samples = len(text_pairs) - 2 * num_val_samples 29train_pairs = text_pairs[:num_train_samples] 30val_pairs = text_pairs[num_train_samples: num_train_samples + num_val_samples] 31test_pairs = text_pairs[num_train_samples + num_val_samples:] 32 33print(f"{len(text_pairs)} total pairs") 34print(f"{len(train_pairs)} training pairs") 35print(f"{len(val_pairs)} validation pairs") 36print(f"{len(test_pairs)} test pairs") 37 38strip_chars = string.punctuation + "¿" 39strip_chars = strip_chars.replace("[", "") 40strip_chars = strip_chars.replace("]", "") 41 42vocab_size = 15000 43sequence_length = 20 44batch_size = 64 45 46 47def custom_standardization(input_string): 48 lowercase = tf.strings.lower(input_string) 49 return tf.strings.regex_replace(lowercase, "[%s]" % re.escape(strip_chars), "") 50 51 52eng_vectorization = TextVectorization( 53 max_tokens=vocab_size, output_mode="int", output_sequence_length=sequence_length, 54) 55jpa_vectorization = TextVectorization( 56 max_tokens=vocab_size, 57 output_mode="int", 58 output_sequence_length=sequence_length + 1, 59 standardize=custom_standardization, 60) 61 62train_eng_texts = [pair[0] for pair in train_pairs] 63train_jpa_texts = [pair[1] for pair in train_pairs] 64eng_vectorization.adapt(train_eng_texts) 65jpa_vectorization.adapt(train_jpa_texts) 66 67 68def format_dataset(eng, jpa): 69 eng = eng_vectorization(eng) 70 jpa = jpa_vectorization(jpa) 71 return ({"encoder_inputs": eng, "decoder_inputs": jpa[:, :-1], }, jpa[:, 1:]) 72 73 74def make_dataset(pairs): 75 eng_texts, jpa_texts = zip(*pairs) 76 eng_texts = list(eng_texts) 77 jpa_texts = list(jpa_texts) 78 dataset = tf.data.Dataset.from_tensor_slices((eng_texts, jpa_texts)) 79 for ele in dataset: 80 print(ele) # ←★★この日本語部分がおかしい 81 dataset = dataset.batch(batch_size) 82 dataset = dataset.map(format_dataset) 83 return dataset.shuffle(2048).prefetch(16).cache() 84 85 86train_ds = make_dataset(train_pairs) 87val_ds = make_dataset(val_pairs) 88 89for inputs, targets in train_ds.take(1): 90 print(f'inputs["encoder_inputs"].shape: {inputs["encoder_inputs"].shape}') 91 print(f'inputs["decoder_inputs"].shape: {inputs["decoder_inputs"].shape}') 92 print(f"targets.shape: {targets.shape}") 93

これで実行をすると、
イメージ説明

データセット作成箇所にて、英語の方は「Tom doesn't know~」のように読み込まれているのに、[start]と[end]に間に入ってくるはずの日本語は「x88」など英数字の羅列が表示されており、学習後もoutputが空白で表示されてしまいます。

ちなみにスペイン語やイタリア語の場合は以下のようにきちんと表示されています。
イメージ説明

Mecabを使用して単語と単語の間にスペースを作ったtxtファイルを作成して実行しても同じ結果になりどのように解決したらよいか手詰まり状態です。
おそれいりますが、解決策についてご教示いただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問