Python
 Computer >> コンピューター >  >> プログラミング >> Python

TensorFlowでRagged Tensor(不規則テンソル)の単語コードポイントを文にセグメント化する方法


セグメンテーション(分割)とは、テキストを単語のような単位に分割する処理のことです。英語のようにスペースで単語を区切る言語では比較的シンプルですが、中国語や日本語のようにスペースを使用しない言語も存在します。さらに、ドイツ語のように長い複合語を含む言語では、意味を分析するために分割処理が必要になります。

本記事では、Ragged Tensor(不規則テンソル)として保持されている単語のコードポイントを文に戻してセグメント化する方法を解説します。具体的には、文中の各文字に対応するコードポイントが存在するかどうかを確認し、存在する場合はRagged Tensorを作成したうえで、その文を標準的なエンコーディングであるUTF-8に再エンコードします。

Unicode文字列の表現と操作

まず、PythonでUnicode文字列をどのように表現し、Unicode対応のオペレーションで操作するかを理解しておきましょう。標準的な文字列操作に相当するUnicode版のAPIを活用することで、スクリプト検出に基づいてUnicode文字列をトークン単位に分割することができます。

以下のコードはGoogle Colaboratory上で実行しています。Google Colab(Colaboratory)はブラウザ上で直接Pythonコードを実行できる環境であり、事前の設定は一切不要で、GPU(グラフィックス処理装置)にも無料でアクセス可能です。ColaboratoryはJupyter Notebookをベースに構築されています。

print("Segment the word code points back to sentences")
print("Check if code point for a character in a word is present in the sentence")
sentence_word_char_codepoint = tf.RaggedTensor.from_row_lengths(
    values=word_char_codepoint,
    row_lengths=sentence_num_words)
print(sentence_word_char_codepoint)
print("Encoding it back to UTF-8")
tf.strings.unicode_encode(sentence_word_char_codepoint, 'UTF-8').to_list()

コード引用元:https://www.tensorflow.org/tutorials/load_data/unicode

実行結果

Segment the word code points back to sentences
Check if code point for a character in a word is present in the sentence
<tf.RaggedTensor [[[72, 101, 108, 108, 111], [44, 32], [116, 104, 101, 114, 101], [46]], [[19990, 30028], [12371, 12435, 12395, 12385, 12399]]]>
Encoding it back to UTF-8
[[b'Hello', b', ', b'there', b'.'],
[b'\xe4\xb8\x96\xe7\x95\x8c',
    b'\xe3\x81\x93\xe3\x82\x93\xe3\x81\xab\xe3\x81\xa1\xe3\x81\xaf']]

コードのポイント

  • tf.RaggedTensor.from_row_lengths:フラットなコードポイントの値(values)と、各行の要素数(row_lengths)を指定することで、階層構造を持つRagged Tensorを構築します。ここでは「文 → 単語 → 文字」の3階層構造が形成されます。
  • tf.strings.unicode_encode:コードポイントのシーケンスを指定したエンコーディング(ここではUTF-8)のバイト文字列に変換します。

解説

  • 単語ごとのコードポイントを文単位にセグメント化します。
  • 文中に特定の文字のコードポイントが含まれているかどうかを判定します。
  • デコード済みのデータをUTF-8エンコーディングに再エンコードし、人間が読める形式の文字列として復元します。

  1. PythonとTensorFlowを使って2つの行列を加算する方法

    TensorFlowは、Googleが提供する機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせてアルゴリズムやディープラーニングアプリケーションなどを実装するために広く利用されています。研究用途から本番環境まで幅広い場面で活用されており、複雑な数値計算を高速に実行するための最適化技術が多数搭載されています。この高い処理性能は、NumPyおよび多次元配列の仕組みによって支えられています。これらの多次元配列は「テンソル(tensor)」と呼ばれます。TensorFlowは深層ニューラルネットワークの構築を強力にサポートしており、高い拡張性を持つほか、代表的な

  2. 【入門】PythonとTensorFlowでテンソルを作成し、メッセージを表示する方法

    TensorFlowはGoogleが提供する機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせて使用することで、アルゴリズムの実装やディープラーニングアプリケーションの開発など、幅広い用途に活用できます。研究目的から本番環境での運用まで対応しており、複雑な数値計算を高速に実行するための最適化技術も備えています。TensorFlowの特徴TensorFlowはNumPyおよび多次元配列を基盤としています。この多次元配列は「テンソル(tensor)」とも呼ばれます。主な特徴は以下の通りです。ディープニューラルネットワークの構築・学習をサポート高いスケーラビリテ