在 TensorFlow 中添加 Unicode 支持
2018 年 12 月 19 日
由 Laurence Moroney 和 Edward Loper 发布

colorful speech bubble full of different languages
TensorFlow 现在支持 Unicode,这是一个用于表示几乎所有语言字符的标准编码系统。在处理自然语言时,了解字符如何在字节字符串中编码非常重要。在字符集较小的语言(如英语)中,每个字符可以使用 ASCII 编码在一个字节中进行编码。但是,这种方法不适合其他语言,例如汉语,汉语有数千个字符。即使在处理英文文本时,特殊字符(如 表情符号)也无法使用 ASCII 进行编码。

定义字符及其编码的最常见标准是 Unicode,它支持几乎所有语言。在 Unicode 中,每个字符都使用一个唯一的整数 代码点 表示,其值介于 00x10FFFF 之间。当代码点按顺序排列时,就会形成一个 _Unicode 字符串_。

新的 Unicode 教程 Colab 展示了如何在 TensorFlow 中表示 Unicode 字符串。在使用 TensorFlow 时,有两种标准方法可以表示 Unicode 字符串:
  • 作为整数向量,其中每个位置包含单个代码点。
  • 作为字符串,其中代码点序列使用字符编码编码到字符串中。有许多 字符编码,其中一些最常见的是 UTF-8、UTF-16 等等。
以下代码展示了使用代码点、UTF-8 和 UTF-16 分别对字符串 "语言处理"(中文意思是“语言处理”)进行编码。
# Unicode string, represented as a vector of code points.
text_chars = tf.constant([35821, 35328, 22788, 29702])

# Unicode string, represented as a UTF-8-encoded string scalar.
text_utf8 = tf.constant('\xe8\xaf\xad\xe8\xa8\x80\xe5\xa4\x84\xe7\x90\x86')

# Unicode string, represented as a UTF-16-BE-encoded string scalar.
text_utf16be = tf.constant('\x8b\xed\x8a\x00Y\x04t\x06')
当然,您可能需要在表示形式之间进行转换,而 TensorFlow 1.13 添加了用于执行此操作的函数因此,例如,如果您想将上述示例中的 UTF-8 表示解码为代码点向量,您将执行以下操作:
>>> tf.strings.unicode_decode(text_utf8, input_encoding='UTF-8')
tf.Tensor([35821 35328 22788 29702], shape=(4,), dtype=int32)
在解码包含多个字符串的 Tensor 时,这些字符串的长度可能不同。unicode_decode 将结果返回为 RaggedTensor,其中内部维度的长度根据每个字符串中的字符数而变化。
>>> hello = [b"Hello", b"你好", b"こんにちは", b"Bonjour"]
>>> tf.strings.unicode_decode(hello, input_encoding='UTF-8')
要详细了解 TensorFlow 中的 Unicode 支持,请查看 Unicode 教程 Colab 并浏览 tf.strings 文档.
下一篇文章
Adding Unicode Support in TensorFlow

由 Laurence Moroney 和 Edward Loper 发布


TensorFlow 现在支持 Unicode,这是一个用于表示几乎所有语言字符的标准编码系统。在处理自然语言时,了解字符如何在字节字符串中编码非常重要。在字符集较小的语言(如英语)中,每个字符可以使用 ASCII 编码在一个字节中进行编码。但是,这种方法不适合其他语言,例如汉语,汉语有数千个字符。即使在处理英文文本时,特殊字符(如 表情符号)也无法使用 ASCII 进行编码。