メインコンテンツ

doc2sequence

深層学習に向けた文書からシーケンスへの変換

説明

sequences = doc2sequence(enc,documents) は、単語符号化 enc で指定される documents 内の単語の数値インデックスからなる cell 配列を返します。sequences の各要素は、対応する文書内の単語のインデックスからなるベクトルです。

sequences = doc2sequence(emb,documents) は、単語埋め込み emb で指定される documents 内の単語の埋め込みベクトルからなる cell 配列を返します。sequences の各要素は、対応する文書内の単語の埋め込みベクトルからなる行列です。

sequences = doc2sequence(___,Name,Value) は、1 つ以上の名前と値のペアの引数を使用して、追加のオプションを指定します。

すべて折りたたむ

工場レポート データを読み込み、tokenizedDocument 配列を作成します。

filename = "factoryReports.csv";
data = readtable(filename,'TextType','string');
textData = data.Description;
documents = tokenizedDocument(textData);

単語符号化を作成します。

enc = wordEncoding(documents);

文書を単語インデックスのシーケンスに変換します。

sequences = doc2sequence(enc,documents);

最初の 10 個のシーケンスのサイズを表示します。各シーケンスは 1 行 S 列のベクトルです。ここで、S はシーケンス内の単語インデックスの数です。シーケンスがパディングされているため、"S" は定数になります。

sequences(1:10)
ans=10×1 cell array
    {[           0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9 10]}
    {[  0 0 0 0 0 0 11 12 13 14 15 2 16 17 18 19 10]}
    {[    0 0 0 0 0 0 20 2 21 22 7 23 24 25 7 26 10]}
    {[        0 0 0 0 0 0 0 0 0 0 0 27 28 6 7 18 10]}
    {[        0 0 0 0 0 0 0 0 0 0 0 0 29 30 7 31 10]}
    {[    0 0 0 0 0 0 0 32 33 6 7 34 35 36 37 38 10]}
    {[      0 0 0 0 0 0 0 0 0 39 40 36 41 6 7 42 10]}
    {[    0 0 0 0 0 0 0 0 43 44 22 45 46 47 7 48 10]}
    {[      0 0 0 0 0 0 0 0 0 0 49 50 17 7 51 48 10]}
    {[0 0 0 0 52 8 53 36 54 55 56 57 58 59 22 60 10]}

事前学習済みの単語埋め込みを使用して、トークン化された文書の配列を単語ベクトルのシーケンスに変換します。

関数 fastTextWordEmbedding を使用して、事前学習済みの単語埋め込みを読み込みます。この関数には、Text Analytics Toolbox™ Model for fastText English 16 Billion Token Word Embedding サポート パッケージが必要です。このサポート パッケージがインストールされていない場合、関数によってダウンロード用リンクが表示されます。

emb = fastTextWordEmbedding;

工場レポート データを読み込み、tokenizedDocument 配列を作成します。

filename = "factoryReports.csv";
data = readtable(filename,'TextType','string');
textData = data.Description;
documents = tokenizedDocument(textData);

doc2sequence を使用して、文書を単語ベクトルのシーケンスに変換します。既定では、関数 doc2sequence はシーケンスを左にパディングして同じ長さになるようにします。高次元の単語埋め込みを使用して文書の大規模なコレクションを変換する場合、パディングのために大量のメモリが必要になる場合があります。関数がデータをパディングしないようにするには、'PaddingDirection' オプションを 'none' に設定します。あるいは、'Length' オプションを使用してパディングの量を制御できます。

sequences = doc2sequence(emb,documents,'PaddingDirection','none');

最初の 10 個のシーケンスのサイズを表示します。各シーケンスは DS 列の行列です。ここで、D は埋め込み次元、S はシーケンス内の単語ベクトルの数です。

sequences(1:10)
ans=10×1 cell array
    300×10 single
    300×11 single
    300×11 single
     300×6 single
     300×5 single
    300×10 single
     300×8 single
     300×9 single
     300×7 single
    300×13 single

事前学習済みの単語埋め込みを使用して、文書のコレクションを単語ベクトルのシーケンスに変換し、シーケンスを指定の長さにパディングまたは切り捨てます。

fastTextWordEmbedding を使用して、事前学習済みの単語埋め込みを読み込みます。この関数には、Text Analytics Toolbox™ Model for fastText English 16 Billion Token Word Embedding サポート パッケージが必要です。このサポート パッケージがインストールされていない場合、関数によってダウンロード用リンクが表示されます。

emb = fastTextWordEmbedding;

工場レポート データを読み込み、tokenizedDocument 配列を作成します。

filename = "factoryReports.csv";
data = readtable(filename,'TextType','string');
textData = data.Description;
documents = tokenizedDocument(textData);

文書を単語ベクトルのシーケンスに変換します。シーケンスの長さを 100 にするために、左パディングまたは切り捨てを行うように指定します。

sequences = doc2sequence(emb,documents,'Length',100);

最初の 10 個のシーケンスのサイズを表示します。各シーケンスは "D""S" 列の行列です。ここで、"D" は埋め込み次元、"S" はシーケンス内の単語ベクトルの数 (シーケンス長) です。シーケンス長が指定されているため、"S" は定数になります。

sequences(1:10)
ans=10×1 cell array
    300×100 single
    300×100 single
    300×100 single
    300×100 single
    300×100 single
    300×100 single
    300×100 single
    300×100 single
    300×100 single
    300×100 single

入力引数

すべて折りたたむ

入力単語埋め込み。wordEmbedding オブジェクトとして指定します。

入力単語符号化。wordEncoding オブジェクトとして指定します。

入力文書。tokenizedDocument 配列として指定します。

名前と値の引数

すべて折りたたむ

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: 'Length','shortest' は、最短のシーケンスと同じ長さになるようにシーケンスの切り捨てを行います。

不明単語の動作。'UnknownWord' と次のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 'discard' – 入力マップに単語が存在しなかった場合、その単語を破棄します。

  • 'nan' – 入力マップに単語が存在しなかった場合、NaN 値を返します。

ヒント

単語埋め込みを使用して深層学習ネットワークに学習させるためのシーケンスを作成する場合は、'discard' を使用します。NaN 値を含むシーケンスは使用しないでください。使用すると、ネットワーク全体にエラーが伝播する可能性があります。

パディング方向。'PaddingDirection' と次のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 'left' – シーケンスの左側に対してパディングを行います。

  • 'right' – シーケンスの右側に対してパディングを行います。

  • 'none' – シーケンスをパディングしません。

ヒント

高次元の単語埋め込みを使用して大規模なデータ コレクションを変換する場合、パディングのために大量のメモリが必要になる場合があります。関数による過剰なパディングの追加を防ぐには、'PaddingDirection' オプションを 'none' に設定するか、'Length' をより小さい値に設定します。

パディング値。'PaddingValue' と数値スカラーで構成されるコンマ区切りのペアとして指定します。ネットワーク全体にエラーが伝播する可能性があるため、NaN でシーケンスをパディングしないでください。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

シーケンス長。'Length' と次のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 'longest' – 最長のシーケンスと同じ長さになるようにシーケンスのパディングを行います。

  • 'shortest' – 最短のシーケンスと同じ長さになるようにシーケンスの切り捨てを行います。

  • 正の整数 – 指定された長さになるようにシーケンスのパディングまたは切り捨てを行います。関数は、シーケンスの右側に対して切り捨てを行います。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

出力引数

すべて折りたたむ

出力シーケンス。cell 配列として返されます。

単語埋め込み入力の場合、sequencesi 番目の要素は、i 番目の入力文書に対応する単語ベクトルの行列になります。

単語符号化入力の場合、sequencesi 番目の要素は、i 番目の入力文書に対応する単語符号化インデックスのベクトルになります。

ヒント

  • 高次元の単語埋め込みを使用して大規模なデータ コレクションを変換する場合、パディングのために大量のメモリが必要になる場合があります。関数による過剰なパディングの追加を防ぐには、'PaddingDirection' オプションを 'none' に設定するか、'Length' をより小さい値に設定します。

バージョン履歴

R2018b で導入